ROS2 节点 话题 通信与服务基础
一、ROS2 架构概览
| 通信方式 | 方向 | 适用场景 |
|---|---|---|
| Topic | 单向,发布/订阅 | 传感器数据、速度指令 |
| Service | 双向,请求/响应 | 参数配置、触发操作 |
| Action | 双向,带反馈 | 导航、长耗时任务 |
二、工作空间创建
1 | # 1. 创建工作空间 |
三、Python 节点
第一个节点
1 | # src/my_pkg/my_pkg/simple_node.py |
setup.py 配置
1 | # src/my_pkg/setup.py |
1 | # 编译运行 |
四、Topic 话题通信
4.1 发布者
1 | # talker.py |
4.2 订阅者
1 | # listener.py |
4.3 常用消息类型
| 消息类型 | 用途 | 字段 |
|---|---|---|
std_msgs/String |
字符串 | data: string |
std_msgs/Int32 |
整数 | data: int32 |
std_msgs/Float32 |
浮点 | data: float32 |
geometry_msgs/Twist |
速度指令 | linear.x/y/z, angular.x/y/z |
sensor_msgs/Image |
图像 | header, height, width, data |
sensor_msgs/LaserScan |
激光 | ranges[], angle_min/max |
nav_msgs/Odometry |
里程计 | pose, twist |
4.4 自定义消息
1 | # msg/MyData.msg |
1 | # CMakeLists.txt |
五、Service 服务通信
1 | # add_two_ints_server.py |
1 | # add_two_ints_client.py |
六、常用调试命令
1 | # 节点 |
七、launch 文件
1 | # launch/demo.launch.py |
1 | ros2 launch my_pkg demo.launch.py |
八、话题 vs 服务 vs Action
| Topic | Service | Action | |
|---|---|---|---|
| 通信模式 | 发布-订阅 | 请求-响应 | 目标-结果-反馈 |
| 方向 | 单向 | 双向 | 双向 + 进度 |
| 持续性 | 持续发布 | 一次调用 | 长时间执行 |
| 多对多 | ✅ | ❌(一服务一请求) | ❌ |
| 适用 | 传感器流、控制指令 | 参数配置、计算 | 导航、抓取 |
| 接口 | .msg |
.srv |
.action |
九、ROS1 vs ROS2 速查
| ROS1 | ROS2 | |
|---|---|---|
| 构建工具 | catkin_make | colcon |
| 通信 | XML-RPC TCPROS | DDS |
| 主节点 | roscore(单点故障) | 无(去中心化) |
| Python | 2.7 | 3.6+ |
| 启动 | roslaunch | ros2 launch |
| 编译 | package.xml + CMakeLists | 同,但支持纯 Python |
| 跨平台 | 仅 Linux | Linux / Windows / macOS |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 世海浮沉,于屿得见本真归处!



