ros1ros2区别和相同之处
ROS1 与 ROS2 主要区别(详细版)
1. 通信中间件架构
- ROS1:
- 自研TCPROS/UDPROS协议
- 依赖中央ROS Master进行节点发现和通信协调
- 单点故障风险,Master崩溃影响整个系统
- 网络拓扑相对简单,适合局域网环境
- ROS2:
- 基于DDS(Data Distribution Service)标准
- 支持多厂商实现(FastDDS、CycloneDDS、OpenDDS等)
- 分布式发现机制,无单点故障
- 跨子网、跨网络段通信更稳定
- 支持多种传输协议(UDP、TCP、共享内存等)
2. QoS(服务质量)控制
- ROS1:
- 无内置QoS机制
- 所有消息使用相同传输策略
- 无法针对不同数据类型优化传输参数
- ROS2:
- 细粒度QoS配置:
- 可靠性: Reliable/Best Effort
- 历史: KeepLast(n)/KeepAll
- 保活: 心跳检测机制
- 死亡检测: 节点存活状态监控
- 截止时间: 消息时效性控制
- 资源限制: 队列深度、内存限制
- 适合实时系统与不可靠网络环境
- 可针对IMU高频数据、控制指令等不同需求定制QoS
3. 节点生命周期管理
- ROS1:
- 节点启动后常驻运行
- 无状态管理机制
- 启动/停止相对简单但不够灵活
- ROS2:
- 生命周期节点(Lifecycle Nodes):
- unconfigured: 未配置状态
- inactive: 已配置但未激活
- active: 正常运行状态
- shutdown: 关闭状态
- 可控的启动/停用流程
- 支持状态转换回调,便于资源管理
- 适合需要精确控制启动顺序的复杂系统
4. 可组合节点与执行器
- ROS1:
- nodelet机制:同进程内共享内存通信
- 减少序列化开销,提高性能
- 但配置相对复杂
- ROS2:
- 组件(Composition): 模块化设计,支持动态加载
- 执行器(Executors):
- 单线程执行器:简单但可能阻塞
- 多线程执行器:并发处理,提高响应性
- 静态单线程执行器:确定性执行,适合实时系统
- 更好的并发性能和资源利用率
5. 参数系统与动态配置
- ROS1:
- 全局参数服务器
- dynamic_reconfigure用于运行时参数修改
- 参数类型和验证相对简单
- ROS2:
- 每节点独立参数空间
- 声明式参数定义,支持类型约束
- 动态参数回调机制
- YAML配置文件更规范,支持参数继承和覆盖
- 参数持久化和版本管理
6. 动作/服务/消息系统
- ROS1:
- actionlib库实现动作
- 消息序列化相对简单
- 类型系统相对基础
- ROS2:
- 原生Actions API,接口更统一
- IDL定义兼容DDS类型系统
- 更好的类型安全和版本兼容性
- 支持复杂数据类型和嵌套结构
7. 多平台与语言支持
- ROS1:
- 主要支持Ubuntu Linux
- Python2/3混用,存在兼容性问题
- 跨平台支持有限
- ROS2:
- 支持Ubuntu、Windows、macOS
- Python3标配,C++14/17标准
- 更好的跨平台兼容性
- 支持ARM架构(如树莓派、Jetson等)
8. 构建系统
- ROS1:
- catkin构建系统
- roscpp/rospy开发工具
- 依赖管理相对简单
- ROS2:
- ament构建系统
- colcon构建工具
- 更完善的测试、打包、代码质量检查
- 支持现代C++特性
9. 启动系统
- ROS1:
- roslaunch使用XML格式
- 配置相对静态,灵活性有限
- ROS2:
- launch使用Python脚本
- 更灵活的配置组合
- 支持条件启动、参数化启动
- 跨系统启动支持
10. 安全与实时性
- ROS1:
- 无内置安全机制
- 实时性支持有限
- ROS2:
- SROS2提供安全加密和认证
- 实时友好设计(rclcpp + DDS RT)
- 支持实时调度策略
11. 网络与多机器人支持
- ROS1:
- 依赖ROS_MASTER_URI
- 跨网段配置复杂
- 多机器人协调相对困难
- ROS2:
- DDS多播/组播发现
- 跨网段配置更容易
- 更好的多机器人系统支持
12. 调试与开发工具
- ROS1:
- rqt、rviz等工具
- 命令行工具相对基础
- ROS2:
- rqt2、rviz2等新一代工具
- ros2cli命令行工具更强大
- rosbag2支持多种后端存储
- 更好的调试和监控能力
迁移策略(ROS1 → ROS2)
第一阶段:基础设施
- 重写启动文件(XML → Python)
- 更新构建系统(catkin → ament/colcon)
- 适配新的包结构
第二阶段:核心功能
- 消息、服务、动作接口迁移
- 参数系统重构
- QoS策略配置
第三阶段:优化升级
- 使用组件化架构
- 配置执行器策略
- 优化QoS参数
何时选择ROS2
选择ROS2的场景:
- 需要跨平台部署
- 需要跨网络、跨子网通信
- 对实时性和可靠性有要求
- 需要安全加密功能
- 长期维护考虑(ROS1已EOL)
- 复杂系统架构需求
继续使用ROS1的场景:
- 现有系统稳定运行
- 团队对ROS1熟悉
- 短期内无跨平台需求
- 简单的局域网应用