目录
摘要
一、ROS2 常用命令整体认识
1.1ROS2 不是单个程序,而是多个节点组成的系统
1.2 ROS2 常用命令分类
1.3 哪些命令最常用?
(1)如果只讲话题通信
(2)如果扩展到完整 ROS2 工程开发
二、节点与话题调试命令:ros2 node 和 ros2 topic
2.0 先理解节点和话题的关系
(1)节点是干活的程序,话题是传数据的通道
(2)Publisher 把消息发布到话题,Subscriber 从话题接收消息
(3)话题名和消息类型必须一致
(4)一个节点可以同时发布或订阅多个话题
(5)节点和话题总结表格
2.1 ros2 node list:查看当前有哪些节点
2.2 ros2 node info:查看某个节点详细信息
2.3 ros2 topic list:查看当前有哪些话题
2.4 ros2 topic info:查看话题消息类型
2.5 ros2 topic echo:查看话题实时数据
2.6 手动发布话题消息
(1)使用 ros2 topic pub
(2)只发布一次
2.7 ros2 topic hz:查看话题发布频率
2.8 ros2 topic 常用命令总结
三、消息结构查看命令:ros2 interface
3.1 ros2 interface 用来查看消息、服务、动作结构
3.2 查看消息字段结构:ros2 interface show
(1)Twist 字段结构
(2)继续查看 Vector3 字段结构
3.4 ros2 interface list:查看系统中所有接口
3.5 ros2 interface 常用命令总结
四、工程运行与参数调试命令:ros2 run、ros2 launch、ros2 param
4.1 ros2 run:运行单个节点
4.2 ros2 pkg executables:查看某个包有哪些可执行节点
4.3 ros2 launch:启动复杂工程
(1)为什么需要 launch?
(2)基本格式
4.4 ros2 run 和 ros2 launch 的区别
4.5 ros2 param:查看和修改参数
(1)ros2 param list 查看某个节点有哪些参数
(2)ros2 param get 查看某个参数值
(3)ros2 param set 修改参数值
(4)ros2 param dump/load 保存和加载参数
五、服务、动作与完整调试流程:ros2 service、ros2 action
5.1 ros2 service:调试服务通信
(1)ros2 service list:查看服务列表
(2)ros2 service type:查看服务类型
(3)ros2 service call:调用服务
5.2 ros2 action:调试动作通信
(1)ros2 action list :查看 Action 列表:
(2)ros2 action info :查看 Action 信息:
(3)ros2 action send_goal :发送 Action 目标:
六、本文总结
6.1 常用命令最终对比表
6.2 一句话记忆
6.3 ROS2 完整调试流程总结
(1)第一步,查看节点是否启动:
(2)第二步,查看话题是否存在:
(3)第三步,查看话题类型和连接数量:
(4)第四步,查看消息字段结构:
(5)第五步,查看实时数据:
(6)第六步,手动发布消息测试:
(7)第七步,查看节点参数:
(8)第八步,运行单个节点测试:
(9)第九步,启动完整工程:
摘要
本篇是 ROS2 保姆级入门到工程实战 专栏中的第三篇文章。
前两篇文章已经分别讲解了 ROS2 常见消息类型,以及 Publisher 发布器、Subscriber 订阅器的基本写法。
第一篇:ROS2 常见消息类型保姆级教程
ROS2 常见消息类型保姆级教程-CSDN博客
https://blog.csdn.net/m0_58954356/article/details/161693378?spm=1001.2014.3001.5501第二篇:ROS2 话题通信实战:消息对象、Publisher 发布器与 Subscriber 订阅器保姆级教程
ROS2 话题通信实战:消息对象、Publisher 发布器与 Subscriber 订阅器保姆级教程-CSDN博客
https://blog.csdn.net/m0_58954356/article/details/161702288?spm=1001.2014.3001.5501这一篇开始讲 ROS2 话题通信中非常重要的一部分:ROS2 常用命令。
在 ROS2 学习和调试过程中,最常用的并不是只会写代码,而是要会通过终端命令查看系统状态。例如:
本文将围绕 ros2 node、ros2 topic、ros2 interface、ros2 run、ros2 launch、ros2 param、ros2 service、ros2 action 等常用命令,系统整理 ROS2 开发中最常见的终端调试方法,帮助初学者从“只会写代码”逐步过渡到“会查看、会分析、会调试完整 ROS2 工程”。
一、ROS2 常用命令整体认识

1.1ROS2 不是单个程序,而是多个节点组成的系统
普通 C++ 程序运行时,通常只关注一个可执行文件。
但是 ROS2 不一样。
ROS2 系统中经常会同时运行多个节点,例如:
这些节点之间通过:
进行通信和协作。
所以 ROS2 调试时不能只看代码,还要会查看整个系统当前状态。
这些问题都需要通过 ROS2 命令来排查。
1.2 ROS2 常用命令分类
ROS2 中常用命令可以先分成下面几类:
| ros2 node | 查看节点 | 查看当前有哪些节点、某个节点有哪些话题 |
| ros2 topic | 查看和调试话题 | 查看话题列表、话题类型、实时数据、手动发布消息 |
| ros2 interface | 查看接口结构 | 查看消息、服务、动作里面有哪些字段 |
| ros2 service | 调试服务通信 | 查看服务列表、调用服务 |
| ros2 action | 调试动作通信 | 查看动作列表、发送动作目标 |
| ros2 param | 查看和修改参数 | 查看节点参数、修改参数 |
| ros2 run | 运行单个节点 | 运行某个功能包里的某个可执行节点 |
| ros2 launch | 启动复杂工程 | 一次启动多个节点、参数、配置和模型 |
总结一下:
ros2 node 看节点
ros2 topic 看话题
ros2 interface 看消息结构
ros2 service 看服务
ros2 action 看动作
ros2 param 看参数
ros2 run 跑单个节点
ros2 launch 启动一套工程
1.3 哪些命令最常用?
(1)如果只讲话题通信
如果只围绕 Publisher 和 Subscriber 话题通信,那么最常用的是:
ros2 topic
ros2 interface
其中:
ros2 topic
主要用于查看和调试话题通信。
例如:
ros2 topic list
ros2 topic info /cmd_vel
ros2 topic echo /cmd_vel
ros2 topic pub /cmd_vel …
而:
ros2 interface
主要用于查看消息结构。
例如:
ros2 interface show geometry_msgs/msg/Twist
(2)如果扩展到完整 ROS2 工程开发
如果是完整 ROS2 工程开发,还会经常用到:
ros2 node
ros2 run
ros2 launch
ros2 param
ros2 service
ros2 action
例如:
ros2 node list
ros2 run turtlesim turtlesim_node
ros2 launch nav2_bringup navigation_launch.py
ros2 param list
ros2 service list
ros2 action list
二、节点与话题调试命令:ros2 node 和 ros2 topic
2.0 先理解节点和话题的关系

(1)节点是干活的程序,话题是传数据的通道
在 ROS2 中,节点 Node 可以理解为一个具体干活的程序单元。
比如:
每个节点负责完成自己的功能。
例如:
但是节点之间并不是直接互相调用函数,而是通过 话题 Topic 进行通信。
可以简单理解为:
(2)Publisher 把消息发布到话题,Subscriber 从话题接收消息
在话题通信中,一般有两个角色:
Publisher 发布者
Subscriber 订阅者
例如速度控制话题:
/cmd_vel
发布器节点会把速度消息发布到 /cmd_vel:
Publisher 节点 —> /cmd_vel 话题
订阅器节点会从 /cmd_vel 中接收速度消息:
/cmd_vel 话题 —> Subscriber 节点
合起来就是:
Publisher 节点 —> Topic 话题 —> Subscriber 节点
例如:
键盘控制节点 —> /cmd_vel —> 底盘控制节点
这表示:
(3)话题名和消息类型必须一致
节点之间想要通过话题正常通信,必须满足两个条件:
1. 话题名一致 2. 消息类型一致
例如发布器写的是:
this->create_publisher<geometry_msgs::msg::Twist>("/cmd_vel", 10);
订阅器也必须订阅同一个话题:
this->create_subscription<geometry_msgs::msg::Twist>("/cmd_vel", 10, callback);
这里有两个关键点:
话题名:/cmd_vel
消息类型:geometry_msgs::msg::Twist
如果发布器发布到 /cmd_vel,订阅器却订阅 /cmd_vel2,那么收不到消息。
如果发布器发布的是 geometry_msgs::msg::Twist,订阅器却用 std_msgs::msg::String 接收,也无法正常通信。
(4)一个节点可以同时发布或订阅多个话题
一个 ROS2 节点并不一定只对应一个话题。
一个节点可以:
例如一个机器人底盘节点可能会:
订阅 /cmd_vel,接收速度控制命令;
发布 /odom,输出里程计信息;
发布 /tf,输出坐标变换关系。
也就是说:
(5)节点和话题总结表格
| Node 节点 | 执行具体功能的程序单元 | 键盘节点、底盘节点、雷达节点 |
| Topic 话题 | 节点之间传输数据的通道 | /cmd_vel、/odom、/scan |
| Message 消息 | 话题中传输的数据格式 | Twist、Odometry、LaserScan |
| Publisher 发布器 | 向话题发送消息 | 发布 /cmd_vel |
| Subscriber 订阅器 | 从话题接收消息 | 订阅 /cmd_vel |

2.1 ros2 node list:查看当前有哪些节点

最常用命令是:
ros2 node list
它可以查看当前 ROS2 系统中正在运行的节点。
例如可能输出:
/cmd_vel_publisher
/cmd_vel_subscriber
/turtlesim
/robot_state_publisher
这说明当前系统中有这些节点正在运行。
如果你写了一个节点,但是 ros2 node list 里面看不到,通常说明:
2.2 ros2 node info:查看某个节点详细信息

例如查看 /cmd_vel_publisher 节点信息:
ros2 node info /cmd_vel_publisher
可能会看到类似信息:
/cmd_vel_publisher
Subscribers:
Publishers:
/cmd_vel: geometry_msgs/msg/Twist
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
Service Servers:
/cmd_vel_publisher/describe_parameters
/cmd_vel_publisher/get_parameters
/cmd_vel_publisher/set_parameters
这里重点看:
Publishers
Subscribers
Service Servers
如果一个节点是发布器节点,就应该能在 Publishers 下面看到它发布的话题。
如果一个节点是订阅器节点,就应该能在 Subscribers 下面看到它订阅的话题。
2.3 ros2 topic list:查看当前有哪些话题

最常用命令是:
ros2 topic list
如果机器人或仿真环境已经启动,可能会看到:
/cmd_vel
/odom
/scan
/imu
/tf
/tf_static
这些都是移动机器人中非常常见的话题。
| /cmd_vel | 速度控制话题 |
| /odom | 里程计话题 |
| /scan | 二维激光雷达话题 |
| /imu | IMU 数据话题 |
| /tf | 动态坐标变换话题 |
| /tf_static | 静态坐标变换话题 |
2.4 ros2 topic info:查看话题消息类型

例如查看 /cmd_vel 话题:
ros2 topic info /cmd_vel
可能会看到:
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 1
其中:
Type: geometry_msgs/msg/Twist
表示 /cmd_vel 话题使用的是 Twist 消息。
Publisher count: 1
表示当前有 1 个发布者。
Subscription count: 1
表示当前有 1 个订阅者。
如果发布器和订阅器通信不成功,可以先看这里。
如果:
Publisher count: 0
说明没有节点正在发布这个话题。
如果:
Subscription count: 0
说明没有节点正在订阅这个话题。
2.5 ros2 topic echo:查看话题实时数据

如果想查看 /cmd_vel 话题里面正在传输的数据,可以输入:
ros2 topic echo /cmd_vel
可能会看到:
linear:
x: 0.1
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
这说明当前 /cmd_vel 中正在发布一条速度消息。
它对应代码中的:
vel_cmd.linear.x = 0.1;
vel_cmd.angular.z = 0.0;
也就是说,ros2 topic echo 可以直接看到话题中实时流动的数据。
2.6 手动发布话题消息

(1)使用 ros2 topic pub
除了写 C++ 程序发布消息,也可以直接在终端里手动发布消息。
例如发布一条速度消息:
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
这表示向 /cmd_vel 发布一条 Twist 消息。
其中:
linear.x = 0.2
表示机器人向前运动。
angular.z = 0.0
表示机器人不旋转。
(2)只发布一次
如果只想发布一次,可以加上:
–once
例如:
ros2 topic pub –once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2}, angular: {z: 0.0}}"
如果想让机器人停止,可以发布零速度:
ros2 topic pub –once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0}, angular: {z: 0.0}}"
实际机器人控制中,想让机器人停止,最好主动发布零速度消息,而不是直接关闭程序。
2.7 ros2 topic hz:查看话题发布频率

有时候我们不仅想知道话题有没有数据,还想知道它的发布频率。
可以使用:
ros2 topic hz /cmd_vel
如果是雷达话题,可以查看:
ros2 topic hz /scan
它会显示话题数据发布频率。
例如:
average rate: 10.000
表示该话题大约以 10Hz 的频率发布。
这个命令在调试传感器时非常有用,比如:
- 雷达数据是否稳定?
- IMU 是否在持续发布?
- 相机帧率是否正常?
- 里程计频率是否符合预期?
2.8 ros2 topic 常用命令总结
| ros2 topic list | 查看当前有哪些话题 | ros2 topic list |
| ros2 topic info |
查看话题类型、 发布者数量、订阅者数量 |
ros2 topic info /cmd_vel |
| ros2 topic echo | 查看话题实时数据 | ros2 topic echo /cmd_vel |
| ros2 topic pub | 手动发布话题消息 | ros2 topic pub –once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2}}" |
| ros2 topic hz | 查看话题发布频率 | ros2 topic hz /scan |
三、消息结构查看命令:ros2 interface

3.1 ros2 interface 用来查看消息、服务、动作结构
ROS2 中不只有消息,还有服务和动作。
它们都属于 interface,也就是接口。
常见接口包括:
所以 ros2 interface 可以查看:
3.2 查看消息字段结构:ros2 interface show
(1)Twist 字段结构
例如想知道 Twist 里面有什么字段,可以输入:
ros2 interface show geometry_msgs/msg/Twist
通常会看到:
Vector3 linear
Vector3 angular
这说明 Twist 里面有两个成员:
linear
angular
它们都是 Vector3 类型。
(2)继续查看 Vector3 字段结构
因为 Twist 里面的 linear 和 angular 都是 Vector3 类型,所以继续查看:
ros2 interface show geometry_msgs/msg/Vector3
通常会看到:
float64 x
float64 y
float64 z
所以最终在 C++ 代码里才可以写:
vel_cmd.linear.x
vel_cmd.linear.y
vel_cmd.linear.z
vel_cmd.angular.x
vel_cmd.angular.y
vel_cmd.angular.z
也就是说:
vel_cmd.linear.x
不是随便写出来的,而是由消息结构决定的。
3.4 ros2 interface list:查看系统中所有接口
可以使用:
ros2 interface list
这个命令会列出当前 ROS2 环境中所有接口,包括:
- 消息message 接口
- 服务service 接口
- 动作action 接口
如果只想查找 geometry_msgs 相关接口,在 Linux 中可以写:
ros2 interface list | grep geometry_msgs
如果是在 Windows PowerShell 中,可以写:
ros2 interface list | Select-String geometry_msgs
可能会看到:
geometry_msgs/msg/Twist
geometry_msgs/msg/Pose
geometry_msgs/msg/PoseStamped
geometry_msgs/msg/Point
geometry_msgs/msg/Quaternion
geometry_msgs/msg/Vector3
geometry_msgs/msg/TransformStamped
3.5 ros2 interface 常用命令总结
| ros2 interface list | 查看所有接口 | ros2 interface list |
| ros2 interface show | 查看接口字段结构 | ros2 interface show geometry_msgs/msg/Twist |
| ros2 interface package | 查看某个包里的接口 | ros2 interface package geometry_msgs |
| ros2 interface packages | 查看有哪些接口包 | ros2 interface packages |
其中初学最常用的是:
ros2 interface show geometry_msgs/msg/Twist
它能帮助你判断字段应该怎么写。
四、工程运行与参数调试命令:ros2 run、ros2 launch、ros2 param

4.1 ros2 run:运行单个节点
ros2 run 用来运行某个功能包中的某个可执行节点。
基本格式是:
ros2 run 功能包名 可执行文件名
例如:
ros2 run turtlesim turtlesim_node
表示运行 turtlesim 功能包中的 turtlesim_node 节点。
再比如:
ros2 run turtlesim turtle_teleop_key
表示运行键盘控制节点。
如果是自己写的功能包,也可以这样运行:
ros2 run my_robot_pkg cmd_vel_publisher
这里:
my_robot_pkg
是功能包名。
cmd_vel_publisher
是可执行节点名。
4.2 ros2 pkg executables:查看某个包有哪些可执行节点
有时候不知道某个包里有哪些节点可以运行,可以输入:
ros2 pkg executables turtlesim
可能会看到:
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
然后就可以使用:
ros2 run turtlesim turtlesim_node
运行对应节点。
这个命令虽然不是你前面表格里的核心命令,但实际开发中非常实用。
4.3 ros2 launch:启动复杂工程
(1)为什么需要 launch?
ros2 run 一次只能运行一个节点。
但是实际机器人系统中,往往需要同时启动多个节点,例如:
如果每个节点都单独开一个终端运行,会非常麻烦。
这时就需要:
ros2 launch
(2)基本格式
ros2 launch 的基本格式是:
ros2 launch 功能包名 launch文件名
例如:
ros2 launch my_robot_bringup robot.launch.py
或者导航中常见:
ros2 launch nav2_bringup navigation_launch.py
它的作用是:
一次性启动多个节点,并加载参数、配置文件和相关资源。
4.4 ros2 run 和 ros2 launch 的区别
| ros2 run | 运行单个节点 | 测试某个节点、单独运行一个程序 |
| ros2 launch | 启动多个节点组成的系统 | 启动机器人完整工程、导航、建图、仿真 |
可以简单理解为:
4.5 ros2 param:查看和修改参数
(1)ros2 param list 查看某个节点有哪些参数
ROS2 节点通常会有参数,例如:
查看所有节点参数可以用:
ros2 param list
如果想看某个节点的参数,可以看到类似:
/turtlesim:
background_b
background_g
background_r
use_sim_time
(2)ros2 param get 查看某个参数值
例如查看 /turtlesim 节点的背景颜色参数:
ros2 param get /turtlesim background_r
可能输出:
Integer value is: 69
(3)ros2 param set 修改参数值
例如修改背景颜色:
ros2 param set /turtlesim background_r 255
如果参数支持动态修改,就会生效。
(4)ros2 param dump/load 保存和加载参数
保存参数:
ros2 param dump /turtlesim
加载参数:
ros2 param load /turtlesim params.yaml
在 Nav2、机器人底盘、传感器驱动等工程中,参数文件非常重要。
五、服务、动作与完整调试流程:ros2 service、ros2 action

5.1 ros2 service:调试服务通信
Topic 话题适合连续数据,比如:
Service 服务更像是一次请求和一次响应。
例如:
它的通信模式是:
(1)ros2 service list:查看服务列表
查看当前有哪些服务:
ros2 service list
可能会看到:
/clear
/reset
/spawn
/turtle1/set_pen
/turtlesim/get_parameters
(2)ros2 service type:查看服务类型
如果想查看服务类型,可以用:
ros2 service type /spawn
可能输出:
turtlesim/srv/Spawn
(3)ros2 service call:调用服务
服务调用格式通常是:
ros2 service call 服务名 服务类型 "请求内容"
例如 turtlesim 中生成一只新乌龟:
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 2.0, theta: 0.0, name: 'turtle2'}"
这表示向 /spawn 服务发送请求,请求生成一个新的 turtle。
5.2 ros2 action:调试动作通信
Action 动作适合耗时任务,例如:
和 Service 相比,Action 的特点是:
所以 Nav2 导航中经常会用到 Action。
(1)ros2 action list :查看 Action 列表:
ros2 action list
(2)ros2 action info :查看 Action 信息:
ros2 action info /navigate_to_pose
(3)ros2 action send_goal :发送 Action 目标:
ros2 action send_goal 动作名 动作类型 "目标内容"
例如导航相关动作常见形式类似:
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 1.0, y: 2.0, z: 0.0}, orientation: {w: 1.0}}}}"
这个命令比较长,初学阶段先理解它的作用即可:
向导航系统发送一个目标点,让机器人导航过去。
六、本文总结
6.1 常用命令最终对比表
| ros2 node | 查看节点 | 看节点是否启动、节点发布/订阅了什么 |
| ros2 topic | 查看话题 | 看话题是否存在、类型是否正确、有没有数据 |
| ros2 interface | 查看接口结构 | 看消息、服务、动作里面有哪些字段 |
| ros2 service | 调试服务 | 查看服务、调用服务 |
| ros2 action | 调试动作 | 查看动作、发送目标 |
| ros2 param | 查看和修改参数 | 查看节点参数、修改运行参数 |
| ros2 run | 运行单个节点 | 单独测试一个节点 |
| ros2 launch | 启动完整工程 | 一次启动多个节点和配置 |
6.2 一句话记忆
ros2 node 看节点;
ros2 topic 看话题;
ros2 interface 看消息结构;
ros2 service 调服务;
ros2 action 发目标;
ros2 param 改参数;
ros2 run 跑单个节点;
ros2 launch 启动整套工程。
6.3 ROS2 完整调试流程总结
实际项目中,如果发现程序不正常,可以按照下面顺序排查。
(1)第一步,查看节点是否启动:
ros2 node list
(2)第二步,查看话题是否存在:
ros2 topic list
(3)第三步,查看话题类型和连接数量:
ros2 topic info /cmd_vel
(4)第四步,查看消息字段结构:
ros2 interface show geometry_msgs/msg/Twist
(5)第五步,查看实时数据:
ros2 topic echo /cmd_vel
(6)第六步,手动发布消息测试:
ros2 topic pub –once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2}, angular: {z: 0.0}}"
(7)第七步,查看节点参数:
ros2 param list
(8)第八步,运行单个节点测试:
ros2 run 功能包名 可执行文件名
(9)第九步,启动完整工程:
ros2 launch 功能包名 launch文件名


