因为机器人是一个系统工程,它包括了机械臂结构,电子电路,驱动程序,通信框架,组装集成,调试和各种感知决策算法等方面,任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 。但是我们又希望自己能造出一个机器人跑一跑,验证一下自己的算法,所以我们就需要一个软件平台能够把机器人的各个部件做一个集成,这个平台就是ROS。那么至于机器人的每个部件(摄像头,电机等)就交给专业的人去做。
最开始出现的是ROS1,是2007年机器人公司Willow Garage和斯坦福人工智能实验室合作开发的,每年都在Ubuntuxx.04版本发布一个月之后的五月份发布新版本。比较有意思的是ROS的发布日期刚好是在5月23号,这一天是世界乌龟日(World Turtle Day),用过ros的小伙伴应该都了解ros的每个版本的海报都是一只别具特色的小乌龟,ros的官方仿真教程turtlesim就是一只小乌龟在跑啊跑(会心一笑)。
OS
在ROSCon2014上,ROS正式发布了新一代的ROS设计架构,2018年正式推出ROS2的第一个正式版本。可以说ROS2是ROS1脱胎换骨之后的样子。那么我们已经有ROS1了,为什么还要发布ROS2呢,把ROS1一直改进改进不就好了么?接下来我们就来了解一下为什么一定要推出ROS2,以及ROS1和ROS2的区别在哪里。
ROS1的介绍
ROS1采用分布式框架,其架构可以分为三个层次:基于Linux系统的OS层,实现ROS核心通信机制以及众多机器人开发库的中间层;在ROS Master的管理下保证功能节点的正常运行的应用层。
ROS1的通信机制是每个节点通过ROS Master发送和接收话题消息。
但是ROS1存在以下几个问题:
- 无实时性(real-time)
- 嵌入式设备不友好
- 对于网络通信的重依赖(需要高带宽且稳定的网络连接)
- 多用于学术应用
- 原生的 ROS 仅支持单机器人
- 超高的灵活性带来的不规范的编程模式
总的来说,ROS1比较适用于单个机器人,很多方面存在一些限制,对于多机器人系统,跨平台,实时性强,网络安全要求高,产品化的场景下(如自动驾驶汽车,多机械臂协同),ROS1就不能很好的胜任了。
ROS2
ROS2和ROS1的系统框架对比如下图所示,最大的区别就在于ROS2没有Master了。
ROS1中Master相当于一个团队的核心成员,如果没有了Master或者是Master出现了问题,就会无法实现节点中的通信,这样这个系统很不稳定。所以采用类似去中心化的方式,ROS2中就没有了Master节点,ROS2中采用discovery——自发现机制,让节点和节点之间无需通过Master,互相找到彼此,从而建立稳定的通信连接。