1、ROS简介

ROS wiki : http://wiki.ros.org/

ROS(Robot Operating System,简称“ROS”)是一个适用于机器人的开源的操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

1.1、ROS的主要特点

(1)分布式架构(每一个工作进程都看作一个节点,使用节点管理器统一管理),

(2)多语言支持(如C++、Python等),

(3)良好的伸缩性(既可以写一个节点,也可以通过roslaunch将很多节点组织成一个更大的工程),

(4)源码开放(ROS遵循BSD协议,对个体和商业应用及修改完全免费)。

1.2、ROS的整体架构

开源社区级 : 主要包括开发人员知识、代码、算法共享。

文件系统级 : 用于描述可以在硬盘上查到的代码及可执行程序,

计算图级 : 体现进程与进程、进程与系统之间的通讯。

1.2.1、计算图级

image-20210827145606482

1.2.2、文件系统级

文件系统级
综合功能包
功能包
功能包清单
消息
服务
代码
其他

功能包之间可以配置依赖关系。如果功能包A依赖功能包B,那么在ROS构建系统时,B一定要早于A的构建,并且A可以使用B中的头文件和库文件。

文件系统级的概念如下:

 

1.2.3、开源社区级

1.3、通讯机制

1.3.1、Topic

ros中广为使用的是异步的 publish-subscribe 通讯模式。Topic 一般 用于单向,消息流通讯。Topic 一般拥有很强的类型定义:一种类型的topic只能接受/ 发送特定数据类型(message type)的message。Publisher 没有被要求类型一致性,但是接受时subscriber会检查类型 的md5,进而报错。

image-20210831162509791

1.3.2、Service

service 用于处理ros通讯中的同步通讯,采用server/client 语义。每个service type拥 有 request 与 response两部分,对于service中的 server,ros不会检查重名(name conflict),只有最后注册的server会生效,与client建立连接。

image-20210831163032489

1.3.3、Action

action使用多个topic组成,用于定义任务,任务定义包括目标(Goal)、任务执行过程状态反馈(Feedback)和结果(Result)等。编译action将会自动产生7个结构体分别为:Action、ActionGoal、ActionFeedback、ActionResult、Goal、Feedback、Result结构体。

image-20210830102834443

Action的特点:

Action的接口:

通讯模式特点对比

特点TopicServiceAction
响应机制结果响应进度响应,结果响应
同步性异步同步异步
通讯模型PublisherSubscriberClientServerClientServer
Node对应关系多对多多(Client)对一(Server)多(Client)对一(Server)

1.4、常用组件

launch启动文件;TF坐标变换;Rviz;Gazebo;QT工具箱;Navigation;MoveIt!

launch:启动文件(Launch File)是ROS中一种同时启动多个节点的途径,它还可以自动启动ROS Master节点管理器,并且可以实现每个节点的各种配置,为多个节点的操作提供很大便利。

TF坐标变换:机器人本体和机器人的工作环境中往往存在大量的组件元素,在机器人设计和机器人应用中都会涉及不同组件的位置和姿态,TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间、在坐标系间完成点、向量等坐标的变换。

QT工具箱:为了方便可视化调试和显示,ROS提供了一个Qt架构的后台图形工具套件——rqt_common_plugins,其中包含不少实用工具:日志输出工具(rqt_console)、计算图可视化工具(rqt_graph)、数据绘图工具(rqt_plot)、参数动态配置工具(rqt_reconfigure)

Rviz:rviz是一款三维可视化工具,很好地兼容了各种基于ROS软件框架的机器人平台。在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。同时,rviz还可以通过图形化方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。

Gazebo:Gazebo是一个功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的还有其具备开源免费的特性。虽然Gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境、以可视化的方式显示。

Navigation:navigation是ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。

Moveit:Moveit!功能包是最常用的工具包,主要用来进行轨迹规划。Moveit!配置助手用来配置一些在规划中需要用到的文件,非常关键。

1.5、发行版本

参考链接:http://wiki.ros.org/Distributions

ROS 1 Distribution

ROS的发行版本(ROS distribution)指ROS软件包的版本,其与Linux的发行版本(如Ubuntu)的概念类似。推出ROS发行版本的目的在于使开发人员可以使用相对稳定的代码库,直到其准备好将所有内容进行版本升级为止。因此,每个发行版本推出后,ROS开发者通常仅对这一版本的bug进行修复,同时提供少量针对核心软件包的改进。截至2019年10月,ROS的主要发行版本的版本名称、发布时间与版本生命周期如下表所示 :

版本名称发布日期版本生命周期操作系统平台
ROS Noetic Ninjemys2020年5月2025年5月Ubuntu 20.04
ROS Melodic Morenia2018年5月23日2023年5月Ubuntu 17.10, Ubuntu 18.04, Debian 9, Windows 10
ROS Lunar Loggerhead2017年5月23日2019年5月Ubuntu 16.04, Ubuntu 16.10, Ubuntu 17.04,Debian 9
ROS Kinetic Kame2016年5月23日2021年4月Ubuntu 15.10, Ubuntu 16.04, Debian 8
ROS Jade Turtle2015年5月23日2017年5月Ubuntu 14.04, Ubuntu 14.10, Ubuntu 15.04
ROS Indigo Igloo2014年7月22日2019年4月Ubuntu 13.04, Ubuntu 14.04
ROS Hydro Medusa2013年9月4日2015年5月Ubuntu 12.04, Ubuntu 12.10, Ubuntu 13.04
ROS Groovy Galapagos2012年12月31日2014年7月Ubuntu 11.10, Ubuntu 12.04, Ubuntu 12.10
ROS Fuerte Turtle2012年4月23日--Ubuntu 10.04, Ubuntu 11.10, Ubuntu 12.04
ROS Electric Emys2011年8月30日--Ubuntu 10.04, Ubuntu 10.10, Ubuntu 11.04, Ubuntu 11.10
ROS Diamondback2011年3月2日--Ubuntu 10.04, Ubuntu 10.10, Ubuntu 11.04
ROS C Turtle2010年8月2日--Ubuntu 9.04, Ubuntu 9.10, Ubuntu 10.04, Ubuntu 10.10
ROS Box Turtle2010年3月2日--Ubuntu 8.04, Ubuntu 9.04, Ubuntu 9.10, Ubuntu 10.04