当前位置:网站首页>ROS2专题(03):ROS1和ROS2的区别【01】

ROS2专题(03):ROS1和ROS2的区别【01】

2022-07-07 21:51:00 无水先生

1 提要

        未来ROS2将越来越火,而ROS1将要退出历史;小米、华为都普遍用上ROS2了,然而,ROS2资料奇缺,我这里将从国外资料筛选出一些关键的信息,提供给那些能够快马加鞭的骑手们。

2 从架构上说 

1)通信协议不同

        ros1用的是TCP和UDP协议,而ROS2用DDS协议;DDS是专用总线协议,更快更明快的通信。

2)架构不同

        ROS1需要Master也就是roscore那玩意;roscore可以理解成通信交换机,用户的通信全部集中在Master交换。

3)ROS2多了一个rcl

用户依赖于rclpy和rclcpp包,这两个包负责与rcl通信,而rcl是由DDS协议支撑的。

在下图清楚地表达了他们之间区别。

3 从代码上看

以下我们从实现“number”题目的程序为例,看ros1和ros2的代码区别是什么。

3.1 依赖包区别

3.2 回调函数 

3.3 主函数调用

 

4 通信体上看

        ros1的最小运行单元是节点,从通信上看,ros1是节点机制,即节点之间都可以相互通信,因为每个节点可以与master通信;而ros2的最小运行单元是可执行对象,每个可执行对象内部可以包含若干个组件,组件与组件能实现通信。

 5 从节点的生命周期

        ros1中的节点是没有生命周期的,什么时候启动,什么时候退出,节点本身没有控制权,控制权在使用节点的那个主体上,节点是纯被动的。

        ros2开始有了生命周期的概念,即节点有未配置状态,未激活状态,激活状态,以及冰冻状态;显然,ros2的节点已经是一个多线程管理机制,内部有状态机组织。

6 Launch文件的对比

对比看出,两种launch文件差别很大:

1)ros1的launch文件如下:

 2)ros2的launch文件是个python脚本

  (持续更新中... ... )

原网站

版权声明
本文为[无水先生]所创,转载请带上原文链接,感谢
https://yamagota.blog.csdn.net/article/details/125651436