ROS 的核心架构
- 节点管理器 Master:负责管理所有节点,提供命名服务和注册服务
- 节点 Node:ROS 的基本执行单元,每个节点负责一个特定的功能
- 话题 Topic:节点之间异步通信的方式,发布者发布消息,订阅者接收消息
- 服务 Service:节点之间同步通信的方式,客户端发送请求,服务器返回响应
- 动作 Action:基于话题和服务实现的异步通信方式,支持取消和进度反馈
话题和服务的区别,各自的适用场景
| 特性 | 话题 | 服务 |
|---|---|---|
| 通信方式 | 异步 | 同步 |
| 消息模式 | 发布 - 订阅 | 请求 - 响应 |
| 适用场景 | 连续数据流(如传感器数据) | 一次性请求(如参数查询) |
ROS1 和 ROS2 的核心区别
| 特性 | ROS1 | ROS2 |
|---|---|---|
| 通信模型 | 基于 Master 的中心化通信 | 基于 DDS 的去中心化通信 |
| 实时性 | 差 | 好 |
| 多机器人支持 | 差 | 好 |
| 安全性 | 差 | 好 |
| 平台支持 | 主要支持 Linux | 支持 Linux、Windows、macOS |
如何调试 ROS 程序
- 命令行工具:
rostopic、rosservice、rosnode、rosbag - 日志输出:
ROS_INFO、ROS_DEBUG、ROS_ERROR - 调试器:使用 GDB 调试 C++ 节点,使用 pdb 调试 Python 节点
- RViz:可视化数据,检查数据是否正确
参数服务器的使用,如何加载和修改参数
- 加载参数:
- 命令行:
rosparam load params.yaml - C++:
ros::param::get("param_name", param_value) - Python:
rospy.get_param("param_name")
- 命令行:
- 修改参数:
- 命令行:
rosparam set param_name param_value - C++:
ros::param::set("param_name", param_value) - Python:
rospy.set_param("param_name", param_value)
- 命令行: