上一节说到主题,但是对它的其余参数选项没有详细说明,这里对几个基本的参数选项进行说明。
以/turtlesim节点为例。
rostopic type
查看/turtlesim节点订阅的主题的消息类型:
rostopic type /turtle1/cmd_vel
这时会看到消息类型(其实也就是对应包名下的msg文件夹下的.msg文件)显示:
geometry_msgs/Twist
注:消息类型的格式是:包名/.msg文件名,这里的.msg文件名是Twist,其实就是在Twist里定义消息的类型。
注:Vector3也是一个.msg文件。
使用rosmsg命令来查看消息的详细情况:
rosmsg show geometry_msgs/Twist
注:上面两个命令其实可以用管道连接符“|”一起运行:
rostopic type /turtle1/cmd_vel | rosmsg show
查看到的消息类型(Twist文件里定义)信息如下:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
注:由此我们知道了/turtlesim节点订阅主题/turtle1/cmd_vel时所获取到的消息类型,节点获取到的消息类型分别是64位浮点类型的线速度和角速度(geometry_msgs指功能包名,斜杠后面是.msg文件名),接下来我们就可以通过rostopic pub给主题的消息类型直接发送参数数据。
rostopic pub
加pub命令参数选项之后,可以把上面的线速度和角速度数据直接发布到主题/turtle1/cmd_vel上,说白了就是给Twist文件里定义的消息类型赋值,格式如下:
rostopic pub topic_name msg_type args
举例(hydro之后的版本):
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
注:此时线速度linear的float64 x被赋值为2.0,角速度angular的float64 z被赋值为1.8。
毕竟节点之间通过主题通信,这条命令通过主题直接向/turtlesim节点发送消息数据,告诉它以2.0的线速度和1.8的角速度开始移动。
参数说明:
rostopic pub:将消息发布到特定主题;
-1:命令执行一次后退出,如果不给这个参数,默认也是执行一次,但是要ctrl+c停止命令;
/turtle1/cmd_vel:消息发布到的主题名称;
geometry_msgs/Twist:所发布消息的类型;
--:告诉命令选项解析器接下来的参数部分都不是命令选项,这在参数里面包含有破折号-(比如负号)时是必须要添加的;
'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]':参数部分,给定线速度和角速度。
rostopic pub -r
发布稳定的命令流。
例如上面的例子就可以这样用这个命令,使小乌龟以稳定频率1Hz移动:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
注:这条命令指以1Hz的频率发布速度命令到主题上。
这时可以查看一下rqt_graph中的情形,会发现通过一个主题(/turtle1/cmd_vel),有两个节点在和/turtlesim节点进行通信。
rostopic hz
此命令可以用来查看数据发布的频率。例如:
rostopic hz /turtle1/pose
此时如果在/teleop_turtle节点所在窗口按上下方向键,则可以看到发送给乌龟的频率数据。
这里可以使用一个工具:rqt_plot,可以查看数据的线性变化坐标图。
rosrun rqt_plot rqt_plot
这时还没有任何信息,我们需要在窗口左上角添加需要画线的主题名称,这里就输入/turtle1/pose/x,此时之前处于禁用状态的加号按钮将会被点亮。按一下该按钮,添加/turtle1/pose/y重复相同的过程。现在我们会在图形中看到/turtle1/pose的x-y位置坐标图。
回到/teleop_turtle节点所在窗口按上下方向键,即可看到坐标变化。
按下减号按钮会显示一组菜单让你隐藏图形中指定的话题。现在隐藏掉你刚才添加的话题并添加/turtle1/pose/theta,你会看到如下图所示的图形:
到此,主题的理解告一段落,在以后的使用过程中我们会更加深有体会的。