一、属性对比
属性 | ros1 | ros2 |
---|---|---|
支持的平台 | 仅linux | Linux、windows,Max,嵌入式RTOS |
源码语言 | c++03,它的api没有使用c++11 | 主要使用c++11 |
python版本 | Python 2 | >= Python 3.5 |
中间件 | 基于TCP/UDP实现,使用 自定义的序列化格式,实时性差、系统开销大 | 基于DDS实现,实时性、可靠性好 |
通信可靠性 | 差,不考虑可靠性,可能出现重传输和延迟 | 优,同时通过配置不同的服务质量策略(Quality of service policy),ROS2可以像TCP一样可靠,也可以像UDP那样尽力而为 |
master节点 | 有 | 无,摒弃了对master节点的依赖,各个节点可以直接通过DDS进行节点通讯,每个节点都是平等的,可以1对1、1对多,多对多进行互相通信 |
roslaunch | 定义为XML文件中,扩写修改比较麻烦 | 定义为python文件,更易于扩写修改 |
生态系统和社区支持 | 很完善 | 相对较少 |
二、ROS2的LifecycleNode
为了解决ROS1中节点启动顺序无法控制的问题,ROS2 新引入了生命周期节点的概念。
ROS2中提供了两种节点类型,Node() 是和ROS1中一样的节点基类,LifecycleNode() 是可管理状态的节点基类,它包含具有一组预定义状态的状态机(如下图),这些状态可以通过调用函数或者输入外部指令来实现切换。