通过Tutorials上的一个教程来做一下topic相关的常用操作。
- 分别在三个终端中执行:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
这个时候可以使用键盘控制龟了。
- topic的查看
再打开一个新的终端, 查看当前所有的topic:
duncan@ubuntu:~$ rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
查看某一个topic的信息类型:
duncan@ubuntu:~$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist
可以在使用rostopic list时加上-v选项,直接在列表中显示话题的信息类型,并且显示话题的发布和订阅的情况:
duncan@ubuntu:~$ rostopic list -v
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 2 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriber
- 查看节点和话题之间的连接情况
当一个话题同时被发布和订阅时,才是有效话题
,使用下面的命令来查看:
duncan@ubuntu:~$ rqt
然后可以看到如下图所示:
turtle1这种大方框是为了在大量的topic被发布时,用于将topic分类,方便观察。
/turtle1/cmd_vel就是有效话题
,使用rostopic list命令查看的5个话题只有一个显示在了表中。
/teleop_turtle 这是一个节点,在(1)使用 rosrun turtlesim turtle_teleop_key命令生成的,如表所示,该节点向/turtle1/cmd_vel中发布消息。
/turtlesim 同样是在(1)使用命令生成的节点,该节点从/turtle1/cmd_vel订阅消息。
由于/turtle1/cmd_vel的信息类型为geometry_msgs/Twist,通过命令来查看数据格式:
duncan@ubuntu:~$ 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
所以整个流程就是:1./teleop_turtle节点接受键盘输入。2.将键盘输入的上、下、左、右输入转换成乌龟的 线速度、角速度 数据信息。3./teleop_turtle节点将信息发布到/turtle1/cmd_vel话题上。4./turtlesim节点订阅/turtle1/cmd_vel话题,读取其中的信息数据。5.程序根据/turtlesim读取到的数据刷新乌龟的位置
- 监听话题的消息输入
duncan@ubuntu:~$ rostopic echo /turtle1/cmd_vel
当按下键盘方向键时,就可以看到刷新数据了:
duncan@ubuntu:~$ 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
---
- 向话题中发布消息:
rostopic pub [topic] [msg_type] [args]