ROS学习笔记五:理解ROS topics

原文链接:https://blog.csdn.net/mountzf/article/details/52314364

本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具。

例子展示
roscore
首先运行roscore系列服务,这是使用ROS所必需的基础

roscore

turtlesim
这里还要用到turtlesim例子,先运行其节点:

rosrun turtlesim turtlesim_node

turtle键盘遥控操作
我们可以运行一个例程,然后通过键盘遥控操作turtle运行:

rosrun turtlesim_teleop_key

然后就可以通过方向键来驱动小海龟运行了。下面来探究一下屏幕背后发生了什么。

ROS topics
上面例程中节点turtlesim_node和节点turtle_teleop_key通过一个ROS topic来互相通信。turtle_teleop_key节点在topic上面发布关键进程,turtlesim_node节点则订阅相同的进程来接收这些关键进程。可以利用rqt_graph工具来显示正在运行的节点和主题之间的关系。

使用rqt_graph
rqt_graph工具是rqt软件包的一部分,可以创建系统中正在运行的节点、主题之间的一个动态关系图。运行命令:

rosrun rqt_graph rqt_graph

然后就可以看到类似如下的关系图,可以看出节点turtle_teleop_key和节点turtlesim_node之间在turtle1/cmd_vel主题上进行通信。

使用rostopic
rostopic工具允许我们获取ROS topics的相关信息。rostopic -h可以知道有如下命令:

Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic type

使用rostopic echo
rostopic echo显示发布在一个主题上的数据。

rostopic echo [topic]

在此可以利用此命令看一下由turtle_teleop_key发布的command_velocity数据。

rostopic echo /turtle1/cmd/vel

刚运行此命令,应该在屏幕上什么也不会出现,这是因为在这个主题上没有发布任何数据。通过按下方向键来使turtle_teleop_key节点在此topic上发布数据,此时在刚刚的窗口应该出现如下信息:

rostopic echo /turtle1/cmd_vel
linear:
x: -2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0

linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: -2.0

回过头来再看一下rqt_graph中的关系图,发现又多了一个订阅节点,就是用来显示topic数据的节点。

通过命令列出节点:

rosnode list
/rosout
/rostopic_3763_1472092089570
/rqt_gui_py_node_3827
/teleop_turtle
/turtlesim

使用rostopic list
rostopic list命令显示了当前被订阅和被发布的主题列表。

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

ROS Messages
通过在节点之间发送ROS Messages实现节点之间的通信,发布和订阅节点之间发送和接收的数据类型必须一致,这意味着一个主题的数据类型由发布在其上的信息类型所决定。发布在主题上的信息类型可以由rostopic type topic1来显示。

使用rostopic type
rostopic type返回正在使用的主题上的信息的类型。

rostopic type /turtle1/cmd_vel
geometry_msgs/Twist

利用命令rosmsg可以查看信息的详细信息

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

现在我们知道了turtlesim需要什么样的数据类型,所以我们可以发布命令给我们的小海龟。

rostopic continued
学习完ROS Messages之后,下面来学习一下rostopic和messages。

使用rostopic pub
rostopic pub直接发布数据到一个主题之上

rostopic pub [topic] [msg_type] [args]
1
对于小海龟的例子

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0,0.0,0.0]’ ‘[0.0,0.0,1.8]’
1
给定速度参数竟然只能用逗号隔开,呵呵
上面的命令告诉小海龟按照线速度2角速度1.8进行移动,默认的持续时间是3秒钟,如下图

通过加入选项-r则可以一直向topic发布数据

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0,0.0,0.0]’ ‘[0.0,0.0,1]’
1
再次看一下rqt_graph中发生了什么,其中rostopic pub节点在一直与rostopic echo节点和turtlesim节点进行通信。

使用rostopic hz
rostopic hz返回数据发布的速率。

rostopic hz [topic]
1
利用该命令查看turtlesim发布/turtle1/pose的速度

rostopic hz /turtle1/pose
subscribed to [/turtle1/pose]
average rate: 62.502
min: 0.016s max: 0.016s std dev: 0.00006s window: 60
average rate: 62.501
min: 0.016s max: 0.016s std dev: 0.00005s window: 123
average rate: 62.498
min: 0.016s max: 0.016s std dev: 0.00005s window: 185
1
2
3
4
5
6
7
8
使用rqt_plot
rqt_plot是rqt软件包的一部分,可以动态绘制发布到某一个主题上的数据的图形

rosrun rqt_plot rqt_plot
1
在输入框中输入要绘制的主题名称,选择即可。

总结
这一节的内容较多,首先要理解ROS topics、ROS nodes、ROS Messages之间的关系。目前个人的理解是:ROS topics是ROS nodes之间进行通信的枢纽,ROS messages是ROS nodes订阅和发布数据的载体。两个ROS nodes欲实现通信,则其中一个节点向ROS topic发布ROS messages,另一节点则通过订阅此topic来接收messages,两者的message类型一定要相同,而message的类型由主题确定,通过rostopic type命令可以查看topic的数据类型。

然后就是辅助查看ROS中节点关系和数据的工具:rqt_graph和rqt_plot,两者都是针对ROS类型的,其中rqt_graph工具会自动搜寻系统中正在运行的节点和主题,并动态绘制出关系图,rqt_plot则是绘制发布到topic上的数据的图形,因此两者使用的前提是有ROS的进程在运行。

运行节点:roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
查看节点关系图:rosrun rqt_graph rqt_graph

显示topic1上所发布的数据:rostopic echo topic1
列出当前处于激活状态的topic列表:rostopic list -v
显示topic1的数据类型:rostopic type topic1
显示类型更加详细的信息:rosmsg show type1
直接向主题topic1发布数据:rostopic pub [topic1] [msg_type] [args]
显示主题topic1上数据的发布速率:rostopic hz [topic1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值