ROS信息命令用于识别话题、服务、节点和参数等信息。尤其是rostopic、 rosservice、rosnode和rosparam经常被使用,并且rosbag是ROS的主要特征之一,它 具有记录数据和回放功能。
我们将使用下面的命令,利用ROS提供的turtlesim来了解相关的节点、话题和服 务。在使用ROS信息命令进行测试之前,需要做好以下准备工作。
运行roscore
为确保顺利进行,关闭所有以前运行的终端。然后打开一个新的终端并运行以下命令。
$ roscore
为了运行turtlesim功能包中的turtlesim_node节点,打开一个新的终端并运行以下命 令。这将从turtlesim功能包运行turtlesim_node。用户会在一个蓝色的屏幕上看到乌龟。
$ rosrun turtlesim turtlesim_node
运行turtlesim功能包中的turtle_teleop_key节点
打开一个新的终端并运行以下命令。这将在turtlesim功能包中运行turtle_teleop_ key。一旦执行,可以在该终端窗口上,用键盘上的方向键控制乌龟。当按下方向键时,屏幕上的乌龟会移动,这是一个简单的仿真,但这是将驱动机器人所需的 移动速度(m/s)和旋转速度(rad/s)用消息传送的。
$ rosrun turtlesim turtle_teleop_key
首先,我们需要了解节点(node),所以先看一些术语。
这是列出连接到roscore的所有节点的命令。如果已经运行了roscore和之前准备 好的节点(turtlesim_node,turtle_teleop_key),则可以看到终端中列出了用于在 roscore进行日志记录的rosout,以及teleop_turtle和turtlesim节点。
以下是测试turtlesim节点是否确实连接到当前使用的计算机。如果已连接,它将从 节点收到XMLRPC响应,如下所示。
如果在该节点运行出现问题或通信中断,则显示以下错误消息。
使用rosnode info命令可以查看指定节点的信息。基本上,用户可以检查发布者、订 阅者和服务等。此外,还可以检查关于节点运行URI和话题输入/输出的信息。由于会显 示大量信息,因此省略了内容,所以请务必亲自运行。
可以看到指定设备(PC或终端)上运行的所有节点。
这是一个终止正在运行的节点的命令。您可以在运行节点的终端窗口中使用[Ctrl+c] 直接终止节点,但也可以指定要结束的的节点,如下所示。
如果使用该命令终止了节点,则会在运行该节点的终端窗口上显示如下警告消息,并 关闭该节点。
删除连接信息未被确认的虚拟节点的注册信息。当节点由于意外事件而异常终止时, 该命令将从节点目录中删除连接中断的节点。这个命令很少使用,但是它非常有用,因为 用户不需要重新运行roscore。
首先,让我们参考第4.1节“ROS术语”,因为我们需要了解话题。
在运行ROS话题示例之前,请先关闭所有节点。通过在不同的终端窗口中分别运行以 下命令来运行turtlesim_node和turtle_teleop_key。
rostopic list命令显示当前正在发送和接收的所有话题的列表。
通过将“-v”选项添加到rostopic list命令,可以分开发布话题和订阅话题,并将每 个话题的消息类型一起显示。
以下示例实时显示组成/turtle1/pose话题的x、y、theta、linear_velocity和 angular_velocity的数据。
rostopic type [话题名称]:显示指定话题的消息类型
在以下示例中,用于/turtle1/pose话题的数据带宽平均为每秒1.27 KB。
在以下示例中,用户可以检查/turtle1/pose数据的发布周期。从结果可以看出,该消 息以大约62.5Hz(0.016秒= 16毫秒)的频率被发布。
在以下示例中,用户可以看到/turtle1/pose话题使用turtlesim/Pose消息类型,发布 到/turtlesim节点,并且没有实际订阅的话题。
以下是使用/turtle1/cmd_vel话题名称发布类型为geometry_msgs/Twist的消息的 示例。
每个选项的描述如下。
■ -1只发布一次消息(实际上只运行一次,但会像以前的结果一样运行3秒)。
■ /turtle1/cmd_vel 指定的话题名称
■ geometry_msgs/Twist 要发布的消息类型名称
■ -- ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’ 在x轴坐标上以每秒2.0 m的速度移动,以z轴为中心,每秒旋转 1.8rad
在运行ROS服务相关例子之前先关闭所有节点。通过在不同的终端窗口中运行以下命 令来运行turtlesim_node和turtle_teleop_key。
显示活动中的服务的信息。会显示在同一网络中使用的所有服务。
以下是使用rosservice的info选项查看/turtle1/set_pen服务的节点名称、URI、类型 和参数的示例。
在以下示例中,可以看到/turtle1/set_pen服务是turtlesim/SetPen类型。
rosservice find [服务类型]:查找指定服务类型的服务
以下示例搜索turtlesim/SetPen类型的服务。因此,可以看到搜索出/turtle1/ set_pen。
rosservice uri [服务名称]:显示ROSRPC
uri服务 用户也可以使用rosservice的uri选项来检查/turtle1/set_pen服务的ROSRPC URI, 如下所示:
rosservice args [服务名称]:服务参数输出
我们来看看/turtle1/set_pen服务的每个参数,如下例所示,该命令显示在/turtle1/ set_pen服务中使用r、g、b、width和off参数。
rosservice call [服务名称] [参数]:用输入的参数服务请求
以下示例是请求/turtle1/set_pen服务的命令。所使用的“255 0 0 5 0”是对应于用 于/turtle1/set_pen服务的参数(r,g,b,width,off)的值。红色的r的最大值是255, 因为g和b都是0,所以笔的颜色是红色的。width设置为5,off为0(假)。rosservice call是一个非常有用的命令,通常用于测试服务。
通过使用前面的命令,发送了服务请求,更改了turtlesim中使用的笔的属性,并且 从turtle_teleop_key中下达了下移命令。作为结果,可以从下面图中看到原来是白色的 笔色显示为红色。
在运行ROS参数相关示例之前先关闭所有节点。通过在不同的终端窗口中运行以下命 令来运行turtlesim_node和turtle_teleop_key。
显示在同一网络中使用的参数列表。
如果要查看特定参数的值,可以将该参数名称指定为rosparam get命令的选项。
如果要检查所有参数的值,而不是某一特定的参数,可以使用“/”作为选项来显示所 有参数的值,如下所示。
以下示例将当前参数值保存到parameters.yaml文件中。因为它保存了每次使用的参 数值,并且可以在下次执行时使用(“~/”表示用户的home目录),所以很方便。
这是设置参数值的命令。在以下示例中,将turtlesim节点的background_b参数 (与背景色相关的参数)设置为0。
RGB从255,86,69变为0,86,69,所以变成深绿色,如图5-4右图所示。但是,由于 turtlesim节点并不是每次读取参数,因此需要使用“rosparam set background_b 0” 命令修改参数之后,用“rosservice call clear”命令刷新屏幕。参数的反映结果决于节 点的运行方式。
此命令与rosparam dump相反,是读取parameters.yaml文件并将其用作当前参数 值。如下例所示,运行“rosservice call clear”命令,参数值将会变为所加载的文件的 参数值,并且在执行dump命令时,图5-4中变为绿色的背景将变为蓝色背景。rosparam load是一个非常有用的命令,会经常使用,读者需要掌握。
该命令删除指定的参数。
在运行ROS消息信息示例之前,先关闭所有节点。通过在不同的终端窗口中运行以下 命令来运行turtlesim_node和turtle_teleop_key。
该命令显示当前ROS中安装的功能包的所有消息。根据当前ROS中包含的功能包,显 示结果可能会有所不同。
显示指定的消息信息。以下是显示turtlesim/Pose消息信息的例子。float32是一个 浮点变量,可以确认它是一个包含5条信息(x、y、theta、linear_velocity和angular_ velocity)的消息。
以下是查看turtlesim/Pose消息的md5信息的示例。有时如果在消息通信期间遇到 MD5问题,则需要检查md5sum。这时会用到该命令,一般不常用。
可以看到特定功能包中使用的消息。
在运行ROS服务信息相关示例之前,先关闭所有节点。通过在不同的终端窗口中运行 以下命令来运行turtlesim_node和turtle_teleop_key。
该命令显示了ROS上当前安装的功能包的所有服务。根据目前包含在ROS中的功能 包,显示结果可能会有所不同。
以下示例显示turtlesim/SetPen服务信息。可以确认uint8是包含r、g、b、width 和off等5种信息的服务。请注意,“---”在服务文件中用作请求和响应的分隔符。对于 turtlesim/SetPen,用户可以看到只有请求,没有任何响应。
在以下示例中,使用该命令来查看turtlesim/SetPen服务的md5信息。有时如果在 服务请求和响应期间遇到MD5问题,则需要检查md5sum。这时会用到该命令,一般不 常用。
可以看到指定功能包中用到的服务。