ROS学习笔记6(理解ROS话题)

1 启动

1.1 roscore

首先在新的终端里,输入

$ roscore

如果出现这个error:

roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://Mibook:11311/
The traceback for the exception was written to the log file

说明之前已经开启了一个roscore,没关系,因为roscore只能有一个。

1.2 turtlesim

打开一个新的终端,启动turtlesim

$ rosrun turtlesim turtlesim_node

1.3 turtel_teleop_key

打开一个新的终端,启动turtle_teleop_key

$ rosrun turtlesim turtle_teleop_key
# echo
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

接下来就可以使用键盘上的箭头来控制小乌龟了。
在这里插入图片描述

如果发现小乌龟动不了,需要点击开启键盘箭头控制的窗口,只有该窗口能接受键盘输入来控制小乌龟。

接下来看一下具体背后发生了什么。


2 ROS 话题

turtlesim_nodeturtle_teleop_key两个节点是通过ROS话题来进行通信的。

turtle_teleop_key在话题上发布键盘输入,同时turtlesim订阅相同的主题来接受键盘输入,我们使用rqt_graph来查看一下节点和话题。

2.1 使用rqt_graph

首先安装:

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins

接着打开新的终端,运行

$ rosrun rqt_graph rqt_graph

会看到:
在这里插入图片描述

/teleop_turtle/turtlesim这两个节点,就是通过/turtle1/cmd_vel这个话题通信的。

2.2 使用rostopic

首先看一下rostopic有哪些命令

$ rostopic -h

显示有如下的操作

rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic hz     display publishing rate of topic    
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic type

或者在rostopic之后按tab

$ rostopic 
bw    echo  find  hz    info  list  pub   type

2.3 使用rostopic echo

标准用法:

rostopic echo [topic]

在新的终端中,输入:

$ rostopic echo /turtle1/cmd_vel

然后去打开turtle_teleop_key的终端里,按上下左右,可以看到

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

接着回到rqt_graph,点击左上角的刷新,刷新一下

在这里插入图片描述

可以看到,刚才的rostopic echo也订阅了/turtle1/cmd_vel这个话题

2.4 使用rostopic list

rostopic list返回所有订阅和发布的话题

$ rostopic list -h

显示

Usage: rostopic list [/topic]

Options:
  -h, --help            show this help message and exit
  -b BAGFILE, --bag=BAGFILE
                        list topics in .bag file
  -v, --verbose         list full details about each topic
  -p                    list only publishers
  -s                    list only subscribers

使用详细模式来查看一下:

$ rostopic list -v

显示:

Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 2 publishers
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 6 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 2 publishers

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 4 subscribers
 * /rosout [rosgraph_msgs/Log] 1 subscriber
 * /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber

3 ROS消息

3.1 使用rostopic type

rostopic type返回一个消息的类型。

标准用法:

$ rostopic type [topic]

举例:

$ rostopic type /turtle1/cmd_vel
# echo
geometry_msgs/Twist

3.2 使用rosmsg show

查看消息的详细信息:

$ 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

4 使用rostop

4.1 使用rostopic pub

标准用法:

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只发布1次,然后退出
/turtle1/cmd_vel发布目标话题
geometry_msgs/Twist话题的消息格式
后面的数据都是必须项
‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’线速度和角速度,YAML语法格式

可以发现小乌龟一会儿就停下来了,使用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代表1hz的发布频率。

4.2 使用rostopic hz

用这个命令来查看消息发布的频率。

标准用法:

rostopic hz [topic

举例:

$ rostopic hz /turtle1/pose

会看到:

subscribed to [/turtle1/pose]
average rate: 62.450
	min: 0.015s max: 0.017s std dev: 0.00047s window: 60
average rate: 62.489
	min: 0.015s max: 0.017s std dev: 0.00054s window: 123
average rate: 62.372
	min: 0.015s max: 0.021s std dev: 0.00064s window: 174

说明大概是以62hz的速度在发布消息。

使用rostopic type和rosmsg show来查看一个话题的深度消息:

lk@Mibook:~$ rostopic type /turtle1/cmd_vel | rosmsg show
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

5 使用rqt_plot

首先启动rqt_plot

$ rosrun rqt_plot rqt_plot

查看下pose消息:

lk@Mibook:~$ rostopic type /turtle1/pose | rosmsg show
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity

接着在左上角添加话题
在这里插入图片描述


翻译原文:http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics#ROS_Messages

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值