0x00 引言
ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。相对于ROS1,ROS2在架构上做出了很大的更新。
0x01 ROS1与ROS2的区别
ROS1与ROS2的大致区别可以用下图展示:
1.系统架构进行了颠覆性的变化。ROS1中所有节点都需要在节点管理器ROS Master的管理下进行工作,一旦Master出现问题,系统就面临宕机的风险,ROS2实现了真正的分布式,不再有Master这个角色,借助一种全新的通信框架DDS,为所有节点的通信提供可靠保障。
2.软件API进行了重新设计。ROS1原有的接口已经无法满足需求,ROS2结合C++最新标准和Python3语言特性,设计了更具通用性的API,虽然导致原有ROS1的代码无法直接在ROS2中运行,但是尽量保留了类似的使用方法,同时提供了大量移植的说明。
3.编译系统进行了升级。ROS1中使用的rosbuild和catkin问题诸多,尤其是针对代码较多的大项目以及Python编写的项目,编译、链接经常会出错,ROS2对这些问题也进行了优化,重新优化后的编译系统叫做ament和colcon。节点的编译仍然是CMake。
其中最大的区别当属通信框架DDS,DDS其实是物联网中广泛应用的一种通信协议,其替换了原先的TCP协议。
为了解决ROS1通信能力定制化能力低、实时性差的问题,ROS2设计了一个ROS Middleware,简称RMW,也就是指定一个标准的接口,比如如何发数据,如何收数据,数据的各种属性如何配置,都定义好了,如果厂家想要接入ROS社区,就得按照这个标准写一个适配的接口,把自家的DDS给移植过来,这样就把问题交给了最熟悉自家DDS的厂商。对于我们这些用户来讲,某一个DDS用的不爽,只要安装另一个,然后做一个简单的配置,程序一行的都不用改,轻松更换底层的通信系统。
0x02 ROS2的常用命令
ros run
1 | # 运行节点 |
ros node
1 | # 查看运行中的节点 |
ros topic
1 | # 查看使用中的话题 |
ros service
类似于rpc服务,能够调用指定库的函数
1 | # 查看可使用服务 |
ros bag
1 | # 记录一段时间内的话题数据 |