一、背景
随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机
器人系统又不能很好的适应需求。2010年Willow Garage公司发布了开源机器人操作系统ROS
(robot operating system),很快在机器人研究领域展开了学习和使用ROS的热潮。
从下面这张图片来看,ROS是2007年诞生与斯坦福大学,斯坦福大学,世界名校,而且是专业研
究机器人的,目前也在从事人工智能的研发,ROS诞生于这样的贵族,可见ROS的发展还是非常
有前途的。
二、需求(为什么需要ROS)
想设计制造一个复杂的机器人,这个机器人能够类似于人一样能够感知,自我导航,能够自我控制
去做一些复杂的工作。面对这么复杂的工作,在研发过程中肯定需要很多各样的有效资源的共享,
但是目前很多资源要么难以共享,要么共享的资源之间不能直接拿过来用,所以,急需这样一个能
够整合资源的框架和接口,使得资源之间能够共享使用,换个专业点的话说,就是使得各种功能、
各种软件的重复利用率增加。因此为了 满足这一功能和作用,我们研发了ROS(robotics
operating system)机器人操作系统,虽然表面上叫做操作系统,但是并不是真正的操作系统,说
白了,就是一个框架,一个平台。
二、ROS横向介绍
ROS是一个适用于机器人的开源的元操作系统。集成了大量的工具,库,协议,提供类似OS所提
供的功能,简化对机器人的控制。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,
进程间消息传递,以及包管理。
ROS的总体目标,也就是提高软件复用率,(下面我们主要介绍它的五个特点和四位一体。)
五个特点
(1)点对点设计
(看到这个标题,如果不了解计算机通讯,是看不懂的),其实这个就是说的就是ROS的一个核
心,也就是节点,节点这个东西为什么是核心呢,节点就是功能,节点就是计算机术语中常说的进
程 一个机器人有多个功能,因此也就有了多个节点,因此,如果一个机器人的各个功能被分开,
也就是一个个的节点,那ROS进行软件的复用就会方便的多
分布式的框架,解耦
在机器人上可能集成各种传感器(雷达、摄像头、GPS...)以及运动控制实现,为了解耦合,在
ROS中每一个功能点都是一个单独的进程,每一个进程都是独立运行的。 这些进程可以分布于不
同主机,不同主机协同工作,从而分散计算压力。所以,ROS是进程(也称为Nodes)的分布式框
架
(2)多语言支持
ROS是有多个节点的,节点之间可能会有联系,但是联系又没有那么紧密,每个
节点都是一个功能,它们可以分别使用不同的编程语言进行编程,如C++、Python、Java等编程语
言,无论采用哪种编程语言进行编程,最后节点之间进行信息交互的时候都可以通过与语言无关的
一个接口进行连接。
(3)架构精简,集成度高
(看起来结构比较简单,操作不难,而且功能集成丰富)
(4)组件化工具包丰富
这个字面理解就是说ROS有很多功能强大的工具,比如仿真界面工具
rviz,仿真环境gazebo,rqt_plot图形化显示工具等
(5)免费且开源
四位一体
对ROS进行总结便形成了ROS四位一体的格局,首先是ROS的通讯机制(话题,服务),这个大家
都知道了,点对点通讯。其次是ROS具备很多开发工具,比如rviz,gazebo等。接着,ROS的功
能也非常多,在ROS中是以一个叫做功能包的形式存在的(此处的功能和节点不能混为一谈,大
家可以理解为一个大功能,而节点可以理解为一个个小功能),其应用功能设计视觉导航、运动规
划多个方面。最后,ROS也不是一个单独的软件,它所存在的环境有各大牛人,各大公司,全世
界都在使用它,相当于一个活跃的生态系统。
四、ROS纵向介绍
ROS的纵向介绍主要从小到大,从深到浅进行介绍,整个ROS系统分为以下三个层次,如图
计算图层
这个层次最深,主要是描述程序是如何运行的,也就是ROS当中很细节的层次,
(1)节点
这个前面已经介绍过,就是指功能,或者说是进程,也可以当做一个个软件模块,不再赘述。
(2)节点管理器
节点管理器说白了就是管理节点的,跟指挥中心一样,类似于每一个固定电话是一个节点,那节点
管理器就是基站,总站。
(3)话题
(这个就比较重要了,涉及到ROS的通讯,前面说过,ROS的通讯机制是点对点通讯,也就是一
个节点之间的通讯)ROS节点之间的主要通讯方式是两种,这个话题通讯就是一种,另外一种是
接下来会介绍到的第(4)点中的服务通讯,话题通讯和服务通讯是主要的通讯方式
首先介绍ROS的话题通讯,其两端为发布方何订阅方
ROS的话题通讯信息流图如下:
简单的说就是发布方和订阅方现在RosMaster注册,然后RosMaster会帮它们进行匹配,连接,然后双方采取相应的通信协议进行信息的通信
(4)服务
话题通信的信息流只能是由发布者流向接收者,而且节点之间的通信是有延迟的,并不同步,针对这两个缺陷,这个小点介绍的服务通信则满足了双向同步的通信,这种通信只允许有一个服务器,客户端可以有多个,服务器和客户端之间双向同步通信,采取请求和应答的模式进行通信
ROS的服务通讯信息流图如下:
服务通信的模式与话题通信相差不大,就不过多赘述了。
(确实还有一种action通信,属于问答机制,维持一段时间且有及时的反馈并可以随时取消这个通信)
(5)参数服务器
参数服务器能够使数据通过密钥存储在一个系统的核心位置。
(6)消息
消息包含一个节点发送到其他节点的信息数据。
(7)消息记录包
消息记录包是一种用于保存和回放ROS消息数据的文件格式。
文件系统层
ROS的文件的组织和排列是按照功能来进行的,不同功能的文件被放置在不同的文件夹下面,功
能包是ROS的文件系统层次下一个比较基本的单元,ROS的文件系统层次也是围绕它来展开:
(1)功能包清单(package manifest):
这个的作用主要是记录功能包信息,包括各个功能包的信息以及发行者,还有功能包之间的依赖关
系,编译的相关信息等。
(2)消息类型:
描述话题通信的消息的类型的文件
(3)服务类型:
描述服务通信的时候的服务类型的文件
(4)代码:
一个个的节点是通过相应的编程语言进行编写的,存放于特定文件夹之中。至于元功能包,其实可
以理解为小功能包组成的大功能包,为了实现一个更大的功能。
开源社区层
发行版:一系列带有版本号可以直接安装的软件包
软件源:ROS依赖于共享网络上的开源代码,不同组织机构可以开发活或共享自己的机器人软件
ROSwiki:主要论坛
邮件列表:交流ros更新的主要渠道,同时也可以交流ros开发的疑问
ros answers:咨询ros问题的网站
博客
ROS的整体结构
参考链接:
https://blog.csdn.net/qq_25267657/article/details/84316111
http://www.autolabor.com.cn/book/ROSTutorials/
https://blog.csdn.net/hcx25909/article/details/8795043