初识ROS

最近有幸参加一个ROS的培训,所以借此机会记录一下这几天所学的内容,希望对初学者能有帮助。


首先,什么是ROS?

ROS,全称Robot Operation System,机器人操作系统,是因为机器人的开发涉及的方面比较多,系统庞大,开发人员使用的语言不同导致开发难度大,整合困难等原因而诞生的,其实说它是操作系统,但是它又不同于我们使用的Linux或者是Windows操作系统,而更像是一个框架,就像一个叫workerman的PHP socket服务框架,我们直接调用它提供的接口就行了,ROS和操作系统的关系,我个人认为可以用下图描述。


解释一下上图,c语言相信大家都写过,比如我们要在c语言中调用系统,比如system()函数,那么它就是直接调用OS提供的东西,而跑在ROS上的程序,又调用ROS提供的函数,比如初始化一些节点,发布一个话题之类的,但是ROS提供的接口也是有限的,比如我们的程序想把接受到的传感器的数据信息存到一个文本文件里面,但是ROS并没有提供针对文件系统的函数,所以程序调用的是OS的API。


ROS的优缺点

优点 缺点
分布式计算 目前基于Ubuntu,移植嵌入式系统困难
软件复用 无实时性设计
功能包管理与多语言构建 体积较大
快速原型与测试 系统整体运行效率低
仿真与机实体机器人的无缝转换 总的来说,不擅长开发成熟的商业产品


简单说一下,做机器人开发肯定有很多人分别负责不同的部分,比如有做机器视觉的,有做路径规划的等等,那么各个开发人员可能用的都是不同的语言,而ROS社区提供了很多代码,比如我做路径规划那么我就把其他的部分拿过来直接用,然后专心搞算法,而不用从0开始考虑机器人它要怎么跑、怎么识别之类的事情,此外它还支持多语言构建,比如我用c++开发,别人用python开发,ROS可以将不同代码进行打包,这一特点使我们两者的代码整合起来更加简单,目前支持c++、python、lisp等几种语言,当然你也可以对某一语言进行编码让它支持。

目前ROS支持的平台不多,兼容性最好的是Ubuntu,对于移植到嵌入式系统困难这点,我不得不吐槽一句,真的好难...我也是因为学校老师想把ROS移植到RaspberryPi(系统是Raspbian)上所以自己尝试了一下,网上查了很多资料,也看了ROS的Wiki,反复尝试了好多次都装不了完整版,最后无奈只能装个精简的。


上图简单说明了一个系统中各个部分之间的通信。

节点(Node):节点是各自独立的科执行文件,能通过话题、服务或者参数服务器与其他进程(节点)通信。

话题(Topic):话题是节点用来传输数据的总线,一个话题可以有多个订阅者,切推送者和订阅者之间并不相识,即推送者不必知道订阅了自己的话题的是谁,而订阅者也不必知道推送者是谁。

消息(Message):一个节点通过向特定话题发布消息,消息具有一定类型和数据结构,包括ROS提供的标准类型和用户自定义的文件。

服务(Services):当需要直接与节点通信并获得应答时,则无法通过话题实现,这是需要使用服务。

另外,ROS还有一个叫Master的东西,它向ROS系统中其他节点提供命名和注册服务,跟踪和记录话题的推送者和订阅者,使ROS节点之间能够相互查找,可以简历点对点的通信方法,有点类似以前的电话接线员那样。

你可能感兴趣的:(ROS,ROS,初学)