ROS 命令行工具

本文主要介绍 ROS 机器人操作系统的一些常用命令行工具,使用这些命令可以使机器人编程和调试变得更加简便。

为了顺利运行 ROS 命令,你需要其他安装好 ROS 软件(参考 ROS 安装),并设置环境变量:

source /opt/ros/noetic/setup.bash

roscore

roscore 命令是 ROS 中一个很重要的工具,当我们在终端中运行这个命令时,系统就会启动 ROS Master、参数服务器和日志节点。在这之后,我们就可以运行其他的 ROS 程序/节点了。

我们可以打开一个 Shell 终端运行 roscore 指令,然后在另一个 Shell 终端输入如下命令来运行 ROS 节点。运行 roscore 命令后,可以看到类似的信息:

$ roscore 
... logging to /home/rudy/.ros/log/2928a9d8-de4b-11ec-9b2d-fb09e61e79d4/roslaunch-Latitude-3420-676704.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://Latitude-3420:41275/
ros_comm version 1.15.14

SUMMARY
========

PARAMETERS
 * /rosdistro: noetic
 * /rosversion: 1.15.14

NODES

auto-starting new master
process[master]: started with pid [676714]
ROS_MASTER_URI=http://Latitude-3420:11311/

setting /run_id to 2928a9d8-de4b-11ec-9b2d-fb09e61e79d4
process[rosout-1]: started with pid [676724]
started core service [/rosout]

可以看到关于启动的 ROS Master 信息和 ROS Master 地址。

rosnode

rosnode 命令可以帮助我们探索 ROS 节点各个方面的功能。比如,我们可以列出在系统中正在运行的 ROS 节点的数量。在终端中直接输入 rosnode 命令,便可以获得该命令的所有帮助信息。

例如,启动 turtlesim 模拟器后,使用 rosnode list 命令可列出正在运行的节点列表:

$ rosnode list
/rosout
/teleop_turtle
/turtlesim

rostopic

rostopic 命令可以提供系统中与当前话题发送和订阅的相关情况。它可以列出话题名称、打印话题数据和向话题发布数据。

例如,启动 turtlesim 模拟器后,使用 rostopic list 命令可列出当前话题:

$ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

假设当前存在一个名为 hello 的话题,那么可以使用如下命令打印/调取话题数据:

$ rostopic echo /hello

使用如下命令向 hello 话题发布数据:

$ rostopic pub /hello std_msgs/String "Hello"

此时,订阅节点会收到 Hello 消息:

$ rostopic echo /hello
WARNING: topic [/hello] does not appear to be published yet
data: "Hello"
---

rosversion

rosversion 命令可用于检查 ROS 版本。例如,获取当前的 ROS 版本代号:

$ rosversion -d
noetic

rosparam

rosparam 命令可以列出加载在参数服务器上的参数。例如,列出当前 ROS 系统中的参数名称:

$ rosparam list
/rosdistro
/roslaunch/uris/host_latitude_3420__41275
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r

我们也可以通过 rosparam 命令添加参数、设置参数,或者获取参数的值。设置参数的命令格式如下:

rosparam set parameter_name value

例如,添加一个 hello 参数,并将其值设置为 “Hello”:

$ rosparam set hello "Hello"

使用 rosparam get 命令获取 hello 参数的值:

$ rosparam get hello
Hello

roslaunch

我们可以使用 roslaunch 命令启动一个 launch 文件。如果要一次运行多于 10 个的 ROS 节点,那么一个个地运行是很麻烦的。在这种情况下,我们可以用 launch 文件来避免这种麻烦。

ROS launch 文件是 XML 格式的文件,可以在文件中写入想要运行的每个节点。roslaunch 命令的另一优势是可以自动执行 roscore 命令,所以我们不必在运行这些节点前先去运行 roscore 命令。

运行 launch 文件的命令语法如下:

roslaunch ros_pkg_name launch_file_name

示例:

$ roslaunch roscpp_tutorials talker_listener.launch

rosrun

rosrun 命令用于运行 ROS 节点,语法格式如下:

rosrun ros_pkg_name node_name

示例:

$ rosrun roscpp_tutorials talker

rosservice

使用 rosservice list 命令列出 ROS 系统当前的服务列表:

$ rosservice list
/rosout/get_loggers
/rosout/set_logger_level

Package 命令

rospack

rospack 是对软件包(package)管理的工具,命令的用法如下:

命令 功能
rospack help 显示 rospack 的用法
rospack list 列出本机所有 package
rospack depends [package] 显示 package 的依赖包
rospack find [package] 定位某个 package
rospack profile 刷新所有 package 的位置记录

以上命令如果 package 缺省,则默认为当前目录(如果当前目录包含 package.xml)。

roscd

roscd 命令类似与 Linux 系统的 cd,改进之处在于 roscd 可以直接切换到 ROS 软件包的目录。

命令 功能
roscd [pacakge] cd 到 ROS package 所在路径

rosls

rosls 也可以视为 Linux 指令 ls 的改进版,可以直接列出 ROS 软件包的内容。

命令 功能
rosls [pacakge] 列出 pacakge 下的文件

rosdep

rosdep 是用于管理 ROS package 依赖项的命令行工具,用法如下:

命令 功能
rosdep check [pacakge] 检查 package 的依赖是否满足
rosdep install [pacakge] 安装 pacakge 的依赖
rosdep db 生成和显示依赖数据库
rosdep init 初始化 /etc/ros/rosdep 中的源
rosdep keys 检查 package 的依赖是否满足
rosdep update 更新本地的 rosdep 数据库

一个较常使用的命令是:

$ rosdep install --from-paths src --ignore-src --rosdistro=noetic -y

该命令用于安装工作空间中 src 路径下所有 package 的依赖项(由 pacakge.xml 文件指定)。

参考资料