ROS日记:ROS开始使用_主题2

上一节说到主题,但是对它的其余参数选项没有详细说明,这里对几个基本的参数选项进行说明。

以/turtlesim节点为例。

 

rostopic type

查看/turtlesim节点订阅的主题的消息类型:

rostopic type /turtle1/cmd_vel

这时会看到消息类型(其实也就是对应包名下的msg文件夹下的.msg文件)显示:

geometry_msgs/Twist

注:上面是直接跳过msg文件夹的,消息类型的格式是:包名/.msg文件名,这里的.msg文件名是Twist,其实就是在Twist.msg里定义消息的类型。

注: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,你会看到如下图所示的图形:

到此,主题的理解告一段落。总结:

节点是主题(或话题)的发布对象。在节点源码编辑时同时确定节点名称和主题名称,这一步称为主题发布;而另一个节点通过这个节点发布的主题获取消息数据,这一步称为主题订阅。例如,我们使用vim和ROS客户端库(如roscpp,可以理解为一套接口)编写了A节点(发布者),并在这个节点代码中指定了一个名为“A_topic”的主题,那么订阅者(另一个节点B)代码里必须指定从“A_topic”主题接收消息数据,这些都会在代码里体现。总的来说,发布者在代码里确定自己的名字和主题名字,订阅者在代码里确定自己的名字和订阅的主题名字。

如果对主题的理解依然不太清晰,没有关系,在以后的使用过程中我们会更加深有体会的。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值