第4章:ROS2命令行工具:ros2 run、ros2 topic、ros2 service、ros2 action、ros2 param、rqt工具使用

说实话,刚接触ROS2那会儿,我对着黑乎乎的终端窗口也是一脸懵。命令行工具这么多,到底哪个是干嘛的?

后来做导航项目做多了,才慢慢摸出门道。说白了,这些工具就是你和机器人系统对话的「翻译官」。你敲一行命令,机器人就动一下。你查一个话题,就知道传感器在说什么。

这一章,我就带你把这些工具挨个捋一遍。都是实战中高频使用的,一个都跑不掉。

核心观点:ROS2命令行工具是调试和验证导航系统的「瑞士军刀」。不会用它们,你连机器人为什么撞墙都查不出来。

4.1 ros2 run:启动节点的「快捷键」

先来个最简单的。你想启动一个节点,比如让乌龟仿真器跑起来:

ros2 run turtlesim turtlesim_node

这行命令的意思很直白:运行 turtlesim 包里的 turtlesim_node 节点。

我个人习惯在启动导航系统时,把多个 ros2 run 命令写成一个 shell 脚本。这样一键启动所有节点,省得一个个敲。

小技巧:如果你不确定某个包有哪些可执行文件,用 ros2 pkg executables turtlesim 查一下,一目了然。

4.2 ros2 topic:偷听节点间的「悄悄话」

节点之间怎么通信?靠话题(topic)。一个节点发布消息,另一个节点订阅。你想知道它们聊了什么?用 ros2 topic。

我最常用的几个子命令:

  • ros2 topic list —— 列出所有活跃话题
  • ros2 topic echo /topic_name —— 实时监听某个话题的数据
  • ros2 topic info /topic_name —— 查看话题的发布者和订阅者
  • ros2 topic hz /topic_name —— 查看话题发布频率

举个例子,你想看看乌龟的位置数据:

ros2 topic echo /turtle1/pose

终端里就会刷刷刷地显示坐标和角度。我在调试导航路径规划时,经常用 ros2 topic echo /plan 来查看规划器输出的路径点。有一次发现路径点全是 (0,0),排查了半天,原来是代价地图没加载成功。

注意:echo 命令会持续输出,按 Ctrl+C 退出。别开着 echo 就跑路,终端会被刷爆的。

4.3 ros2 service:一问一答的「请求-响应」模式

话题是单向的,服务是双向的。你发一个请求,对方给你一个响应。就像你问机器人「你现在在哪?」,它回答「我在 (1.0, 2.0)」。

常用命令:

  • ros2 service list —— 列出所有服务
  • ros2 service type /service_name —— 查看服务的数据类型
  • ros2 service call /service_name service_type "arguments" —— 调用服务

比如让乌龟生成一个新乌龟:

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 2.0, theta: 0.0, name: 'turtle2'}"

嗯,这里要注意参数格式。ROS2 的服务调用参数是 YAML 格式的,花括号、冒号、引号一个都不能错。我刚开始用的时候,经常因为少了个引号报错,气得想砸键盘。

4.4 ros2 action:长时间任务的「进度条」

服务适合短平快的操作。但导航不一样——让机器人从A点走到B点,可能需要几十秒甚至几分钟。这时候就需要动作(action)。

动作有三个核心要素:目标(goal)、反馈(feedback)、结果(result)。

常用命令:

  • ros2 action list —— 列出所有动作
  • ros2 action info /action_name —— 查看动作详情
  • ros2 action send_goal /action_name action_type "values" —— 发送目标

在 Nav2 中,导航到某个点就是一个典型的动作:

ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 1.0, y: 1.0, z: 0.0}, orientation: {w: 1.0}}}}"

加上 --feedback 参数,你还能实时看到机器人当前的位置和状态。我在做路径跟踪测试时,就靠这个看机器人是不是在「画龙」。

经验之谈:动作比服务更适合导航场景。因为你可以随时取消任务(Ctrl+C),或者查询当前进度。服务一旦发出请求,就只能等结果,中途没法干预。

4.5 ros2 param:运行时「拧螺丝」

参数就是节点的配置项。比如机器人的最大速度、代价地图的膨胀半径、规划器的超时时间……这些都可以在运行时动态修改。

常用命令:

  • ros2 param list —— 列出所有参数
  • ros2 param get /node_name parameter_name —— 获取参数值
  • ros2 param set /node_name parameter_name value —— 设置参数值
  • ros2 param dump /node_name —— 导出所有参数到文件
  • ros2 param load /node_name file.yaml —— 从文件加载参数

举个例子,我想看看导航规划器的最大速度设置:

ros2 param get /bt_navigator max_velocity

如果觉得速度太快,直接改:

ros2 param set /bt_navigator max_velocity 0.5

我曾经在调试机器人避障时,发现机器人总是离障碍物太近。用 ros2 param set 把膨胀半径从 0.1 改成 0.3,效果立竿见影。不用重启节点,不用重新编译,这就是动态参数的魅力。

注意:不是所有参数都支持运行时修改。有些参数只在节点启动时读取一次。改之前最好查一下文档,或者试试看——改完没效果,那就是不支持动态重配。

4.6 rqt:图形化的「仪表盘」

敲命令虽然酷,但看数据还是图形界面更直观。rqt 就是 ROS2 的图形化工具集。

启动方式:

rqt

然后会弹出一个窗口。你可以通过 Plugins 菜单添加各种插件:

  • Topic Monitor —— 实时查看话题数据,比 echo 更直观
  • Plot —— 绘制数据曲线,比如机器人的速度变化
  • Service Caller —— 图形化调用服务,不用手写 YAML 参数
  • Node Graph —— 可视化节点和话题的连接关系
  • Publisher —— 手动发布话题数据,用于测试

我个人最常用的是 Plot 插件。调试 PID 参数时,把实际速度和目标速度画在同一个图上,超调量、响应时间一目了然。比盯着终端里的数字强多了。

建议:rqt 的布局可以保存。把你常用的插件摆好,然后 File → Save Perspective,下次直接加载。省得每次重新拖拽。

4.7 本章知识体系

下面这张图帮你理清这些工具的关系:

ROS2 命令行工具知识体系 ROS2 命令行工具 ros2 run 启动节点 ros2 topic 监听/发布话题 ros2 service 请求-响应 ros2 action 长时间任务 ros2 param 动态配置 rqt:图形化集成工具 典型应用场景 调试:topic echo + plot 配置:param set + dump 测试:action send_goal

4.8 实战建议

学完这些工具,别急着背命令。我建议你打开一个 Gazebo 仿真,跑一个乌龟仿真器或者 Nav2 导航栈,然后一个个试过去。

先 ros2 topic list 看看有哪些话题,再 ros2 topic echo 听一听。然后试试 ros2 service call 让乌龟瞬移。最后用 ros2 action send_goal 让机器人导航到某个点。

遇到问题怎么办?ros2 --help 和 ros2 topic --help 是最好的老师。每个子命令后面加 --help,用法写得清清楚楚。

记住,这些工具不是摆设。它们是你在导航调试路上的「眼睛」和「手」。用熟了,排查问题快得像开挂。

一句话总结:ros2 run 启动节点,ros2 topic 看数据,ros2 service 问问题,ros2 action 派任务,ros2 param 调参数,rqt 画图看全局。六件套,一个都不能少。

可可精品资料库