1.核心概念
节点 Node:一个独立进程,完成一个功能,如摄像头驱动、控制、建图。
话题 Topic:发布/订阅通信,异步、多对多,适合传感器数据流。
服务 Service:请求/响应通信,同步、一对一,适合短任务。
动作 Action:目标/反馈/结果,适合长时间任务,可取消,如导航到目标点。
参数 Parameter:节点配置项,ROS2 中是节点本地的,可动态修改。
消息 Message:话题的数据结构,如 std_msgs/msg/String。
接口 Interface:.msg、.srv、.action 文件定义通信数据。
包 Package:ROS 软件基本单元,含代码、配置、launch、接口。
工作空间 Workspace:存放源码、编译产物、安装文件。
计算图:节点、话题、服务、动作组成的网络。
DDS:ROS2 底层通信中间件,负责发现和传输。
QoS:服务质量,控制可靠性、持久性、历史、深度等。
执行器 Executor:调度节点回调,如单线程/多线程。
生命周期节点:有状态管理,如未配置、未激活、激活、结束。
TF2:坐标变换库,维护坐标系树。
Launch:批量启动节点和配置。
Rosbag:记录/回放话题数据。
RViz / rqt / Gazebo:可视化、调试、仿真工具。
2. 通信方式对比
方式 模式 同步性 关系 典型场景
话题 Topic 发布/订阅 异步 多对多 传感器、状态广播
服务 Service 请求/响应 同步 一对一 查询、短命令
动作 Action 目标/反馈/结果 异步 一对一 导航、抓取
参数 Parameter 配置读写 同步 节点本地 调参、配置
3. ROS2 工作空间与构建
```bash
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
source install/setup.bash
```
目录:
src/:源码
build/:编译中间文件
install/:安装结果
log/:日志
包内常见文件:
package.xml:包信息、依赖
CMakeLists.txt:C++ 包构建
setup.py:Python 包构建
launch/:启动文件
msg/ srv/ action/:接口定义
4. ROS2 常用命令
```bash
ros2 run <pkg> <node>
ros2 node list
ros2 node info /node_name
ros2 topic list
ros2 topic echo /topic
ros2 topic pub /topic <type> "<data>"
ros2 topic hz /topic
ros2 topic info /topic
ros2 service list
ros2 service call /service <type> "<request>"
ros2 action list
ros2 action send_goal /action <type> "<goal>"
ros2 param list
ros2 param get /node param
ros2 param set /node param value
ros2 interface show <type>
ros2 launch <pkg> <launch.py>
ros2 bag record /topic
ros2 bag play <bag>
ros2 pkg create <pkg_name> –build-type ament_cmake
```
5. ROS1 与 ROS2 主要区别
项目 ROS1 ROS2
通信底层 自研 TCPROS/UDPROS DDS
中心节点 需要 roscore / Master 无中心,自动发现
参数 全局参数服务器 每个节点本地参数
构建 catkin ament + colcon
启动 roslaunch XML ros2 launch Python/XML/YAML
坐标变换 tf tf2
客户端库 roscpp / rospy rclcpp / rclpy
实时性 较弱 更好,支持 QoS、实时
ROS1 常用命令:
```bash
roscore
rosrun <pkg> <node>
roslaunch <pkg> <file.launch>
rostopic list/echo/pub
rosservice list/call
rosnode list/info
rosparam list/get/set
rosbag record -a
catkin_make
source devel/setup.bash
```
6. 注意点
忘记 source install/setup.bash 或 devel/setup.bash
ROS2 QoS 不匹配导致收不到数据
话题名、命名空间写错
TF 树断裂或时间戳不同步
服务/动作类型不匹配
生命周期节点未激活
多机通信时 ROS_DOMAIN_ID 不一致




