文章目录
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_node
和turtle_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