当前位置: 首页 > 科技观察

干货:机器人开源操作系统ROS

时间:2023-03-17 00:57:28 科技观察

攻略:前不久,John给大家介绍了物联网开源操作系统,想必大家还记忆犹新。今天给大家介绍一个机器人领域的开源操作系统:ROS。ROS,英文全称RobotOperatingSystem,即机器人操作系统。它的目标是为机器人软件开发人员提供一个灵活的框架,其中包括一系列工具、库和约定。同时,ROS还可以为异构计算机集群提供类似于操作系统的中间件。总结一下,如下图所示:ROS=Architecture+Tools+Functions+Ecosystem。服务ROS提供标准的操作系统服务,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递、软件包管理等。ROS基于图架构,使得不同节点的进程可以接收、发布和聚合各种信息(如感知、控制、状态、规划等)。LayeredROS可以分为两层:下层是操作系统层(如上所述),上层是开发者贡献的定位映射、动作规划、感知、模拟等不同功能的软件包。生态系统ROS生态系统的软件可分为三组:独立于开发语言和平台的工具,用于构建和分发基于ROS的软件。ROS客户端库的实现,例如roscpp、rospy、roslisp。包含使用一个或多个ROS客户端库的相关应用程序代码的包。ROS客户端库主要包括C++、Python、LISP等开发语言。因为它依赖于大量的开源软件,所以可以在类Unix系统上使用。对于这些客户端库,UbuntuLinux是完全支持的,而FedoraLinux、MacOSX、MicrosoftWindows等其他系统具有“实验性”(不是很完整)支持。此外,这些客户端库得到开发人员社区的支持。第三类软件包通常是开发者自己开发的。使用的功能和应用包括:硬件驱动、机器人模块、数据类型、规划、感知、实时定位和地图构建、仿真工具和其他算法。所有与许可无关的工具和主要客户端库(C++、Python、LISP)均在BSD开源许可协议下发布。这些开源软件可免费用于商业和研究目的。其他软件包,例如由开发人员自己开发的软件包,根据其他开源许可证获得许可,例如Apache2.0、GPL、MIT甚至专利许可证。用户可以自行判断软件包是否有符合自己需求的license。分布式和模块化ROS在设计上尽可能体现分布式和模块化。用户可以根据自己的需要或多或少地定制和使用ROS。ROS的模块化允许你选择哪些部分需要ROS,哪些部分可以自己实现。ROS也因其分布式特性,培养了一个共享软件包的大型用户社区。它使开发者能够在ROS核心系统的基础上增加很多新的功能。社区在过去的几年里,ROS已经成为一个在全球范围内拥有大量用户的大型社区。此前,很多用户来自实验室,但现在越来越多的商业用户也加入进来,尤其是在工业和服务机器人领域。ROS社区非常活跃。据统计,ROS社区拥有超过1500个邮件列表参与者,3300个用户合作开发wiki文档,5700个用户在社区提问和回答ROS相关问题,共有22000多个wiki包,每天超过30个。问答网站有超过13,000个问题,回答率为70%。CooperativeROS旨在简化跨不同机器人平台创建机器人软件的任务的复杂性。事实上,创建一个健壮的通用机器人软件并不是那么简单。从机器人的角度来看,即使是对人类来说微不足道的问题也会根据任务或环境变得非常复杂。因此,依靠单一的个人、实验室或机构来独立处理这些任务是不胜任的。因此,ROS是鼓励协作机器人软件的发展。ROS就是让擅长不同技术领域的开发团队进行合作,互相学习专长,共同应对机器人需要面对的复杂任务。ROS为大多数机器人项目提供了很多价值,也代表了世界顶级机器人的协同发展趋势。ROS的核心价值之一是共享通用组件。如果你觉得ROS有用,你也可以加入ROS社区。核心组件ROS的核心组件主要分为三个部分:通信基础设施、机器人专用函数库和工具。***、通信基础设施ROS,在底层提供消息传递接口和进程间通信,起到中间件的作用。ROS中间件提供了这些功能:发布和订阅匿名消息传递消息记录和回放远程过程调用请求和响应分布式参数系统消息传输通信系统,一般来说,是实现一个新的机器人系统的第一个需求。ROS内置经过良好测试的消息系统,通过匿名发布和订阅机制管理分布式节点之间的通信,从而节省开发者的开发时间。此外,使用消息传输系统还有一个重要的好处,就是可以让开发者清楚地实现系统节点之间的接口,有利于提高封装性和代码复用性。这些消息接口结构将在消息接口描述语言中定义。消息记录和回放由于Pub/Sub系统是匿名和异步的,因此无需更改任何代码即可轻松检索和回放数据。例如,您有一个从传感器读取数据的任务A。你正在开发TaskB,它处理TaskA产生的数据。ROS可以很方便的将TaskA发布的数据记录到一个文件中,然后在一定时间后从文件中重新发布数据。这种抽象的消息传输机制使任务B无法知道数据的来源(来自任务A或日志文件)。这是一个非常强大的设计模式,可以显着降低开发成本并提高系统的灵活性和模块化。远程过程调用异步发布/订阅消息机制可以满足机器的大部分通信需求。但是,在某些特殊情况下,您将需要进程之间的同步请求/响应。ROS使用“服务”来提供此功能。与另一个特性“Subject”类似,数据通过服务调用在进程间传递。服务调用以相同的简单消息接口描述语言定义。分布式参数系统ROS中间件为任务提供了一种通过参数服务器(通过网络API访问的多变量共享字典)共享配置信息的方法。该系统允许您轻松更改任务的配置,甚至允许任务更改其他任务的配置。二、除了核心中间件,ROS还提供了通用机器人库,具有以下功能:机器人标准消息定义机器人几何库机器人描述语言可抢占远程过程调用诊断姿势评估定位绘图导航标准机器人消息经过多年的社区发展讨论开发,最终实现了标准的消息格式,涵盖了绝大多数机器人案例。这些消息定义了一些几何概念,例如:姿势、变换、向量;一些用于传感器,例如:照相机、惯性测量单元和激光器;一些用于导航数据,例如:范围、路径和地图,以及许多其他概念。在应用程序中,使用这些标准消息,开发人员可以使他们的代码与ROS生态系统的其他部分无缝接口,例如开发工具或函数库。许多机器人项目中的一个共同挑战是让机器人的不同部分相互协调。例如,如果你想结合相机数据和雷达数据,你必须知道传感器的位置并且有一个共同的参照系,特别是对于具有许多运动部件的类人机器人。在ROS中,我们使用tf(变换)库解决这个问题,它跟踪机器人系统每个部分的位置。考虑到效率的tf库用于管理协调机器人的转换数据,超过100个自由度,更新速率为数百赫兹。tf库可以定义静态变换,例如固定在移动底座上的相机;和动态转换,例如机械臂的关节。您可以在系统中的任意两个坐标系之间转换传感器数据。tf库可以处理这样的情况:信息生产者和消费者分布在网络中的不同位置,或者信息以不同的速率更新。机器人描述语言ROS还可以解决另一个通用的机器人问题,即如何用机器可以理解的方式来描述机器人。ROS提供了一系列用于机器人描述和建模的工具,使其可以被ROS系统的其余部分读取,包括:tf、robot_state_publisher、rviz。ROS中描述机器人的格式为URDF(UnifiedRobotDescriptionFormat),可以使用XML文档来描述机器人的物理属性,如肢体长度、轮子大小、传感器位置、各部分的视觉外观等。机器人。以这种方式定义后,您可以使用tf库以及模拟器和运动规划器轻松地在3D空间中完美呈现机器人。抢占式远程过程调用主题(匿名发布/订阅)和服务(远程过程调用),可以覆盖机器人中的大部分通信情况。但是,有时需要发起全局搜索行为,并检测其进度,并能够实现抢占,完成时得到通知。ROS有一个专为这个用例设计的动作库。动作库,就像服务一样,除了它们还可以报告进度并获得最终反馈。它们可以被调用者抢占。你可以让机器人根据导航到达指定位置,在到达过程中监控它的进度,让它在途中停下来或重新规划路径,成功或失败后得到通知。动作库是一个非常强大的概念,它渗透到整个ROS生态系统中。DiagnoseROS提供了一种生成、收集和统计机器人诊断信息的标准方法。它可以让开发人员轻松了解机器人的状态,并决定如何处理出现的问题。姿态评估、定位和导航此外,ROS还提供了一些更强大的功能,可以帮助您启动机器人项目。这些ROS包可以解决姿态估计、地图定位、构建地图和移动导航等基本问题。三、工具ROS最大的特点之一是工具,它支持内省、调试、绘图和系统状态可视化。发布/订阅机制可以让你自发地反省数据在系统中的流动,更容易理解和调试系统中出现的问题。ROS工具利用这种内省以及一系列图形和命令行工具来简化开发和调试。命令行工具ROS可以在没有图形界面的情况下使用。所有核心功能和内省工具都可以通过超过45个命令行工具访问。这些命令可以启动组节点、内省主题、服务和动作、记录和回放数据等许多情况。如果您更喜欢使用图形工具,rviz和rqt提供了类似的功能。rvizrivz可能是最好的ROS工具,它为许多传感器数据类型和URDF描述的机器人的3D可视化提供通用功能。rviz可以可视化许多消息类型,例如雷达扫描、3D点云、相机图像。它还可以使用tf库在您选择的坐标系中显示所有传感器数据,以及渲染机器人。在同一个应用程序中可视化所有数据,使开发人员能够快速了解??机器人所看到的内容,从而使他们能够区分由未对准的传感器或未对准的机器人模型引起的问题。rqtrqt是一款基于QT框架的机器人图形界面开发工具。您可以创建自定义界面来为选项卡、多画面和其他布局编写和配置广泛的内置rqt插件库。您还可以通过编写自己的rqt插件来引入新的接口。rqt_graph插件提供ROS系统的内省和可视化,显示节点和它们之间的连接,让您调试和了解正在运行的系统及其组成。rqt_plot插件允许您随时间监控编码器、电压或数字。rqt_plot插件允许您选择最适合您需求的绘图后端(例如matplotlib、Qwt、pyqtgraph)。rqt_topic和rqt_publisher插件可用于主题和监控。前者允许您监视和反省系统内发布的任何主题。后者允许您将自己的消息发布到任何主题,有助于对该系统进行专门的实验。对于数据的记录和回放,ROS使用“数据包”格式。可以使用rqt_bag插件以图形方式创建和访问包文件。插件可以将数据记录到包中,从包中选择要播放的特定主题,以及可视化包内容,包括随时间显示图片和绘制值。EpilogueROS,刚过9岁生日。该机器人开源操作系统在机器人感知、物体识别、人脸识别、手势识别、运动、运动理解、结构与运动、立体视觉、控制、规划等多个领域都有相关应用。John衷心希望这款机器人的介绍对大家有所帮助,同时也希望听到大家的宝贵意见,共同探讨。