ROS简介及其系统框架

2022-04-19 17:07:36 浏览数 (1)

随着机器人软件复杂度和规模不断的提升,机器人软件的开发越来越困难,并且代码重用度也因机器人硬件平台的不同而降低;除此之外,完整的机器人软件架构还需要大量的集成工作。虽然许多机器人研究机构已开发出用于管理和开发机器人软件的工具,但基本都是针对于特定的应用,而且因闭源也从另一方面增加了开发的成本。为了面对上述挑战,机器人操作系统ROS(RobotOperating System)应运而生。

ROS起源于2007年斯坦福大学人工智能实验室与WillowGarage公司的个人机器人项目,其后被Willow Garage公司开源和发展,目前由OSRF(Open Source Robotics Foundation, Inc)公司维护。它是一个开源的面向机器人软件开发的灵活框架,是一系列开发工具和开发库的集合体,同时,作为一种类似于传统操作系统的元操作系统(Meta-Operating System)还提供了硬件抽象、设备驱动、信息传递等诸多功能。

ROS将提高代码复用作为主要设计目标,由于具有点对点设计、多编程语言支持、快速测试及分布式计算等方面的优秀特点,在过去的几年迅速发展,在2016年韩国首尔举行的ROS大会上,ROS的下载使用数量已接近900万;其次由于其活跃的社区,ROS应用的数量也在大幅增长(如下图所示)。

图1 ROS应用每年提交的变化趋势

目前越来越多的机器人厂商都已使用ROS,其中占工业市场份额最大的机器人四大家族也都有基于ROS开发的产品。并且当前无人驾驶的兴起,也必将促进ROS的进一步发展,像宝马、博世等世界知名整车厂及零部件供应商,也都将其作为开发无人驾驶汽车的重要工具。

2 ROS在无人驾驶上的应用

ROS的系统框架由文件系统级、计算图级和社区级三个层级构成。

(1)文件系统级:与操作系统相类似,在计算机硬盘上,ROS的文件也是以一种特定的形式组织。在这一层级,我们将看到ROS的文件(即ROS源代码)是如何在计算机硬盘上组织的。它主要包括功能包集、功能包、功能包集和功能包的manifest文件、消息和服务描述文件等。

图3 ROS文件系统级结构图

其中功能包是ROS软件最基础的单元,其一般包括进程(即节点)、库、配置文件等,一般用于实现某个模块的功能,如进行激光雷达数据采集和处理的功能包;当不同功能的功能包集成在一起实现某个完整功能时即构成功能包集,如ROS的Moveit功能包集可实现机械臂运动规划应用的设计和开发;功能包集的Manifests(package.xml)文件则主要用于描述所包含功能包的名字及他们之间的依赖关系等;而功能包的Manifests(package.xml)文件则主要用于描述功能包运行所依赖的库、开发者等信息。

(2)计算图级:它主要阐述了ROS是如何进行通信和计算的。ROS中不同应用模块的计算和通讯是通过称为节点的进程网络完成的,当ROS运行时,系统中的任何节点都可访问该网络,并与其他节点进程进行信息交互,从而获取其他节点发布的信息,同时也将自身数据发布到该网络。计算图级主要概念包括节点管理器(Master)、ROS节点(Node)、参数服务器(Parameterserver)、主题(Topics)、消息(Message)、服务(Service)和消息记录包(Bags)。

图3 ROS计算图级

(1)节点管理器(Master):主要用于节点的注册和查找,当ROSMaster没有运行时,节点将不能查找其他节点,从而进行信息交换和调用服务。

(2)节点(Node):即为进行计算的进程,一个节点就是一个应用程序,如控制电机转速的节点、进行路径规划的节点等。由于ROS模块化的设计理念,可使一个基于ROS的复杂系统最终由很多节点构成。

(3)消息(Message):消息是由某种特定数据类型构成的数据结构。

(4)主题(Topics):节点之间信息的传送是通过主题发布和订阅的形式,它是实现节点通讯的一种桥梁,上述四者之间的关系如下图所示。

图4 ROS基于主题发布/订阅的通讯

(5)参数服务器(Parameter Server):参数服务器是ROSMaster的一部分,它能使用关键词将所需存储的数据保存起来,通过使用参数能在运行时配置节点或改变节点任务。

(6)服务(Service):在许多机器人应用中,主题发布与订阅的单向通讯模式是无法满足所有需求的,还需请求/响应这种交互模式,从而使其更加适用于分布式计算。服务是实现ROS节点通讯又一种机制,其形式如下图所示:

5 ROS中请求与响应示意图

(7)消息记录包(Bags):用于保存消息、主题、服务和其他ROS数据的一种文件。其可用于调试,及仿真结束后数据的回放和可视化。

ROS节点除了上面所述的两种通讯机制,还可通过Actionlib功能包实现客户端(Client)与服务器端(Server)的另一种通讯方式,该方式与第二种相比增加了数据反馈回传功能,可降低等待时间并增强了应用实时性,三种通讯机制区别如下表所示:

表1 ROS中节点三种通讯机制的优劣比较

通讯类型

优点

缺点

主题(Topics)

(1)适用于传输传感器信息(数据流)(2)一对多通讯模式

(1)数据可能丢失(2)可能会让系统过载(数据量太大)

服务(Service)

(1)能够得知调试是否成功(2)服务完成后会有反馈

(1)服务未完成之前,客户端会一直处于等待状态(2)通讯建立较慢

动作库(Actionlib)

(1)可以用于监控长时间运行的进程及复杂系统的控制,如机械臂知行电机的控制(2)有握手信号

(1)较复杂

(3)社区级:它是ROS在网络上进行代码发布的一种形式,这种代码库的联合系统,使得代码协作和分发得以实现,ROS软件数量也正是因此而成指数级增长。

0 人点赞