ROS-Note:理解ROS Topic

理解ROS Topic

运行 roscore
在新窗口打开小乌龟例子 rosrun turtlesim turtlesim_node
在新窗口中运行键盘支持 rosrun turtlesim turtle_teleop_key
使用键盘上的方向键来控制turtle运动

ROS Topic

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题Topic来相互通信的。
turtle_teleop_key在话题上发布publishing 键盘按下的消息,
turtlesim 订阅subscribes 该话题以接收消息。
使用rqt_graph可以显示当前运行的节点和话题的关系图。

rqt_graph

rqt_graph用动态图显示了系统中正在发生的事情
在新终端运行 rosrun rqt_graph rqt_graph
在这里插入图片描述
turtlesim_node和turtle_teleop_key节点node正通过一个名为**/turtle1/command_velocity**的话题Topic来相互通信

rostopic

rostopic 命令工具能获取ROS话题Topic的信息

$ rostopic -h
	Commands:
        rostopic bw     display bandwidth used by topic                           显示Topic带宽
        rostopic delay  display delay of topic from timestamp in header  从header的时间戳上显示Topic的延迟
        rostopic echo   print messages to screen                                     在屏幕上输出信息
        rostopic find   find topics by type                                                  通过类型寻找Topic
        rostopic hz     display publishing rate of topic                               显示Topic的发布率
        rostopic info   print information about active topic                        显示当前活动的Topic信息
        rostopic list   list active topics                                                       列出当前活动的Topic
        rostopic pub    publish data to topic                                              发布数据到Topic
        rostopic type   print topic or field type                                            打印Topic或字段类型

Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'

rostopic echo

$	rostopic echo [topic]

查看由turtle_teleop_key节点发布的“cmd_vel”数据

$ rostopic echo /turtle1/cmd_vel

移动 小乌龟后会实时打印角度和速度

rostopic list

$ rostopic list -h
	Usage: rostopic list [/topic]                                               使用方式 +topic
	Options:
	  -h, --help            show this help message and exit          
	  -b BAGFILE, --bag=BAGFILE
	                        list topics in .bag file                                 列出 .bag 文件中的topic
	  -v, --verbose         list full details about each topic         列出有关每个topic的完整详细信息
	  -p                    list only publishers                                  只列出发布者
	  -s                    list only subscribers                                 只列出订阅者

ROS Message

Topic的通信Communication 是通过节点nodes间发送ROS消息message实现的。
为了使发布者publisher (turtle_teleop_key)和订阅者subscriber (turtulesim_node)进行通信,
发布者和订阅者必须发送和接收相同类型type的消息
这意味着topic的类型是由发布在它上面消息的类型决定的。
使用rostopic type命令可以查看发布在topic上的message的类型。
用法:

$ rostopic type [topic]
$ rostopic type /turtle1/cmd_vel
			geometry_msgs/Twist
$ rosmsg show geometry_msgs/Twist  查看详细信息
			geometry_msgs/Vector3 linear
			  float64 x
			  float64 y
			  float64 z
			geometry_msgs/Vector3 angular
			  float64 x
			  float64 y
			  float64 z

说明了这些数据的类型 为float64

rostopic pub
把数据data发布publish到当前某个正在广播advertised的话题topic上
rostopic pub [topic] [msg_type] [args]

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

让乌龟 以2.0大小的线速度和1.8大小的角速度移动
rostopic pub:将消息发布到指定的话题
-1:让rostopic只发布一条消息,然后退出
/turtle1/cmd_vel:要发布到的话题的名称
geometry_msgs/Twist:发布到话题时要使用的消息的类型
- -:告诉选项解析器,表明之后的参数都不是选项。如果参数前有符号(-),比如负数,那么- -是必需的
’[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’ :一个turtlesim/Velocity消息有两个浮点型元素:linear和angular。在本例中,’[2.0, 0.0, 0.0]'表示linear的值为x=2.0, y=0.0, z=0.0,而**’[0.0, 0.0, 1.8]'是说angular的值**为x=0.0, y=0.0, z=1.8。
这些参数实际上使用的是YAML语法

turtle已经停止移动。这是因为turtle需要一个稳定的频率为1Hz的指令流才能保持移动状态。我们可以使用rostopic pub -r命令来发布源源不断的命令:

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

这将以1 Hz的速度发布velocity指令到velocity topic上
可以看到,小乌龟正沿着一个圆形轨迹持续运动。可以在新终端中通过rostopic echo命令来查看turtlesim所发布的数据:

rostopic echo /turtle1/pose

rostopic hz
报告数据发布的速率
用法
rostopic hz [topic]

$ rostopic hz /turtle1/pose
			average rate: 62.496
				min: 0.015s max: 0.017s std dev: 0.00036s window: 749
			average rate: 62.501
				min: 0.015s max: 0.017s std dev: 0.00036s window: 812
			average rate: 62.499
				min: 0.007s max: 0.024s std dev: 0.00056s window: 874
			average rate: 62.498
				min: 0.007s max: 0.024s std dev: 0.00055s window: 937
			average rate: 62.499
				min: 0.007s max: 0.024s std dev: 0.00054s window: 999
			average rate: 62.497
				min: 0.007s max: 0.024s std dev: 0.00053s window: 1062
			average rate: 62.501
				min: 0.007s max: 0.024s std dev: 0.00053s window: 1125
			^Caverage rate: 62.498
				min: 0.007s max: 0.024s std dev: 0.00053s window: 1156

turtlesim正以大约62Hz的频率发布有关乌龟的数据
也可以结合rostopic type和rosmsg show命令来获取关于某个话题的更深层次信息:

$ rostopic type /turtle1/cmd_vel | rosmsg show

rqt_plot

如果使用的是ROS electric或早期版本,那么rqt是不可用的,使用rxgraph代替
rqt_plot命令可以在滚动时间图上scrolling time plot 显示发布到某个话题上的数据。这里我们将使用rqt_plot命令来绘制正被发布到/turtle1/pose话题上的数据

$ rosrun rqt_plot rqt_plot

会弹出一个新窗口,可以在左上角的文本框里面添加任何想要绘制的话题
在左上角的文本框里输入/turtle1/pose/x后
按下变亮的加号按钮
{对/turtle1/pose/y重复}
出现线图,vx-t vy-t的速度曲线图
在这里插入图片描述

按下减号按钮会显示一组菜单可以在图中隐藏指定的话题
现在隐藏掉刚才添加的话题并添加/turtle1/pose/theta
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值