4、ROS命令行工具:rosrun、roslaunch、rostopic、rosservice、rosnode、rosparam
说实话,很多新手学ROS,一上来就被各种launch文件、节点通信搞懵了。我当年也是这么过来的。但后来我发现,只要把这几个命令行工具玩熟了,整个ROS的骨架就清晰了。今天我就带你挨个过一遍,每个工具我都会结合我实际踩过的坑来讲。
4.1 rosrun:启动单个节点
rosrun 是最基础的启动命令。它的格式很简单:
rosrun [包名] [节点名] [可选参数]
比如启动小乌龟:
rosrun turtlesim turtlesim_node
我在项目中遇到过一个问题:有次我同时启动了多个同类型的节点,结果发现它们都在抢同一个话题。后来我才意识到,rosrun 默认不会帮你做节点重映射。你需要手动加 __name:=my_node 来区分。
& 符号。但我个人习惯用 roslaunch 来管理多个节点,更省心。
4.2 roslaunch:批量启动的利器
roslaunch 说白了就是 rosrun 的升级版。它通过一个 .launch 文件,一次性启动多个节点。你想想看,如果每次都要手动敲十几个 rosrun,那得多崩溃。
一个典型的launch文件长这样:
<launch>
<node name="turtle1" pkg="turtlesim" type="turtlesim_node"/>
<node name="keyboard" pkg="turtlesim" type="turtle_teleop_key"/>
</launch>
然后执行:
roslaunch my_package my_launch.launch
嗯,这里要注意:roslaunch 会自动启动 roscore,所以你不用再单独敲 roscore 了。我曾经有个同事,每次都用 rosrun 启动节点,然后忘了开 roscore,卡了半天才反应过来。
roslaunch 报错说找不到节点。排查了半天才发现是拼写错误。建议你写launch文件时,先用 rosrun 测试一下节点能不能单独启动。
4.3 rostopic:话题的侦察兵
rostopic 是我调试时用得最多的工具。它能让你看到话题里到底在传什么数据。常用命令有:
| 命令 | 作用 |
|---|---|
rostopic list |
列出所有活跃话题 |
rostopic echo /topic_name |
打印话题数据 |
rostopic pub /topic_name msg_type data |
手动发布话题 |
rostopic hz /topic_name |
查看话题发布频率 |
举个例子,你想看看小乌龟的位置数据:
rostopic echo /turtle1/pose
为什么会用到 rostopic pub?我记得有一次,我写了一个导航节点,但小车死活不动。我怀疑是话题没发出去。于是我用 rostopic pub 手动发了一个速度指令:
rostopic pub /cmd_vel geometry_msgs/Twist "linear:
x: 0.5
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.5"
结果小车动了!说明我的节点有问题,而不是话题通信的问题。你看,一个命令就帮我定位了问题。
rostopic echo 是调试的「第一把钥匙」。只要你能看到数据在流动,就说明通信没问题。
4.4 rosservice:远程调用的开关
话题是「发布-订阅」模式,而服务是「请求-响应」模式。说白了,话题是持续的数据流,服务是你叫它一声,它回你一句。
常用命令:
rosservice list— 列出所有服务rosservice call /service_name args— 调用服务rosservice info /service_name— 查看服务详情
比如重置小乌龟的位置:
rosservice call /reset
我建议你多试试 rosservice call。它就像是一个遥控器,能直接触发节点里的某个功能。我在做机械臂项目时,经常用这个命令来测试夹爪的开关。
4.5 rosnode:节点的户口本
rosnode 用来查看和管理节点。常用命令:
rosnode list— 列出所有节点rosnode info /node_name— 查看节点详细信息rosnode kill /node_name— 杀掉节点
举个例子:
rosnode info /turtlesim
它会告诉你这个节点发布了哪些话题、订阅了哪些话题、提供了哪些服务。嗯,这在你调试时特别有用。有一次我发现小车不动,用 rosnode info 一看,发现节点根本没订阅 /cmd_vel 话题,原来是节点启动参数配错了。
rosnode list 看看它有没有在列表里。如果不在,说明节点根本没启动成功。
4.6 rosparam:参数服务器的小管家
rosparam 用来操作参数服务器。你可以把它理解成一个全局的配置中心。常用命令:
| 命令 | 作用 |
|---|---|
rosparam list |
列出所有参数 |
rosparam get /param_name |
获取参数值 |
rosparam set /param_name value |
设置参数值 |
rosparam dump file.yaml |
保存所有参数到文件 |
rosparam load file.yaml |
从文件加载参数 |
比如设置小乌龟的背景颜色:
rosparam set /turtlesim/background_r 255
我个人习惯把参数都写在YAML文件里,然后用 rosparam load 一次性加载。这样改参数时不用改代码,方便多了。我曾经在一个项目中,因为参数写死在代码里,每次调参都要重新编译,折腾了好几天。后来改用参数服务器,效率翻倍。
总结一下
这六个工具,说白了就是ROS的「六脉神剑」:
- rosrun — 单节点启动
- roslaunch — 多节点批量启动
- rostopic — 看数据流
- rosservice — 远程调用
- rosnode — 查节点状态
- rosparam — 管配置
你想想看,只要把这些工具用熟了,ROS在你面前就没有秘密了。遇到问题,先用 rostopic echo 看数据,再用 rosnode info 查节点,最后用 rosparam get 确认参数。这套组合拳打下来,90%的问题都能定位。
下一章,我会带你实战搭建一个完整的小车导航系统。到时候这些工具都会派上用场。