入门篇:节点通信与 DDS 概念

知识库
知识库文档
/tech-stacks/ros2/tutorial/入门篇:节点通信与 DDS 概念.md

文档

ROS 2 机器人开发指南

本章目标

掌握 ROS 2 在机器人项目中的核心概念和实践模式,走通从仿真到真机部署的完整流程。


1. DDS 基础

ROS 2 的核心通信层基于 DDS,这是与 ROS 1 最大的架构变化。

DDS 带来的好处

  • 去中心化:无 Master 节点,每个节点平等
  • 自动发现:节点加入网络后自动互相发现
  • QoS 可配置:每个 Topic 独立策略

常用 DDS 实现

实现 供应商 适用场景
Fast DDS eProsima ROS 2 默认,通用
Cyclone DDS Eclipse 嵌入式 + 云端混合
RTI Connext RTI 安全认证(需要许可证)

2. ROS 2 核心概念图谱

工作空间 (workspace)
  └── 包 (package)
       ├── 节点 (node)         ← 最小执行单元
       ├── 话题 (topic)        ← 发布/订阅通信
       ├── 服务 (service)      ← 同步请求/响应
       ├── 动作 (action)       ← 异步长任务
       └── 参数 (parameter)    ← 运行时配置

Launch 文件 → 批量启动节点 + 参数配置
URDF/Xacro → 机器人模型描述
TF2       → 坐标系变换

3. 典型机器人软件架构

感知层 (Perception)
  ├── /camera/image_raw       (摄像头)
  ├── /lidar/scan             (激光雷达)
  └── /imu/data               (IMU)

决策层 (Planning)
  ├── /local_planner          (局部路径规划)
  ├── /global_planner         (全局路径规划)
  └── /behavior_tree          (行为树)

控制层 (Control)
  ├── /cmd_vel                 (速度指令)
  └── /motor_controller       (电机驱动)

状态层 (State)
  ├── /odom                    (里程计)
  └── /joint_states            (关节状态)

4. Gazebo 仿真集成

<!-- launch/sim.launch.py 核心结构 -->
<launch>
    <!-- 启动 Gazebo -->
    <include file="$(find-pkg-share gazebo_ros)/launch/gazebo.launch.py"/>

    <!-- 生成机器人模型 -->
    <node pkg="gazebo_ros" exec="spawn_entity.py"
          args="-entity my_robot -file $(find-pkg-share my_robot)/urdf/robot.urdf"/>

    <!-- 启动控制器 -->
    <node pkg="controller_manager" exec="ros2_control_node"/>
</launch>

5. 调试工具

# 查看系统拓扑
rqt_graph

# 查看话题数据
ros2 topic echo /cmd_vel
ros2 topic hz /scan     # 话题频率

# 查看节点信息
ros2 node info /controller

# 录制与回放
ros2 bag record -a       # 录制所有
ros2 bag play bag_name/  # 回放

# 参数操作
ros2 param list
ros2 param set /node param value

6. 真机部署注意事项

关注点 建议
网络 工控机 + 开发机同一子网,关闭防火墙
实时性 控制循环用 RT kernel 或 Xenomai
启动 systemd service 自动启动 ros2 launch
日志 ros2 run --log-level DEBUG 调试时
资源 htop 监控 CPU/内存,节点太多考虑合并

思考题

  1. 为什么 ROS 2 选择 DDS 而不是继续用 TCPROS?
  2. Action 的回调函数在哪个线程执行?
  3. 如何设计一个多机器人的 ROS 2 系统?

信息

路径
/tech-stacks/ros2/tutorial/入门篇:节点通信与 DDS 概念.md
更新时间
2026/5/31