(一)理解ROS话题
1–本节教程介绍ROS话题topics以及如何使用:
1–topics—命令行工具
2–rxplot命令行工具
2–理解ROS服务参数
(二)ROS话题topic详解
1)roscore—-首先确保roscore已经运行,打开一个新的终端:roscore
注意:
如果你的roscore,即ROS必要的服务已经启动,那么这一步可以省略,否则将会出现错误
2)turtlesim—-小海龟程序包
1–本教程中,我们也会使用到turtlesim,请在一个新的终端中运行:
rosrun turtlesim turtlesim_node
我们将会看到一个小海龟的画面
2—输出的结果如下所示:
[ INFO] [1461115871.415625988]: Starting turtlesim with node name /turtlesim
[ INFO] [1461115871.419411830]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
3)通过键盘远程控制turtle
1–我们也需要通过键盘来控制turtle的运动,请在一个新的终端中运行:
rosrun turtlesim turtle_teleop_key
2–输出的结果如下:
Reading from keyboard
—————————
Use arrow keys to move the turtle.
3–然后,用鼠标点击你输入按键命令的终端窗口,让终端获取鼠标的焦点,这样你就可以用上下左右按键控制
小海龟turtle了
现在,你可以控制turtle运动了,下面我们一起来看一下这背后发生的事:
(三)ROS topics
1—turtlesim_node节点和turtlesim_teleop_key节点之间通过一个—-ROS话题–来互相通信的
2—turtle_teleop_key—-在一个topics话题上—发布—按键输入—消息(数据)
3—turtlesim—则订阅话题topics以接受—–该消息
下面,我们使用rqt_graph来显示当前运行的节点和话题
1)使用rqt_graph
1–rqt_graph能够创建一个显示当前系统运行情况的动态图,
2–rqt_graph是rqt程序包的一部分.
3–如果你没有安装,请通过以下命令来安装:
sudo apt-get install ros-indigo-rqt
sudo apt-get install ros-indigo-rqt-common-plugins
4–在一个新的终端中运行:
rosrun rqt_graph rqt_graph
你将会看见一个显示当前运行情况的状态图
5–如果你将鼠标放在/turtle1/command/velocity上,相应的ROS节点node(蓝色和绿色)和话题topics就会
高亮显示
6–正如你所看到的那样,turtlsim_node这个节点—–和—–turtle_teleop_key这个节点—-正在通过
一个名为turtle1/commond_velocity的话题—在相互通信
(四)rostopic介绍:
1–rostopic命令工具能让你获取有关ROS话题的信息
2–你可以使用帮助想查看rostopic的子命令
示例:
rostopic -h
结果:
ostopic is a command-line tool for printing information about ROS Topics.
Commands:
rostopic bw display bandwidth used by topic
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
1)使用rostopic echo可以显示在某个话题上发布的数据
1–用法—rostopic echo [topic]
2–让我们在一个新终端中看一下turtle_teleop_key节点在turtle1/command_velocity话题行发布的数据
如果你使用的是ROS Hydro之前的ROS版本系统,请使用下面的命令:
rostopic echo /turtle1/command_velocity
如果你使用的是ROS Hydro及其之后的版本,请运行:
rostopic echo /turtle1/cmd_vel
由于我使用的是ROS2014年7月22发布的indigo靛蓝版本,因此我使用:
rostopic echo /turtle1/cmd_vel
2)使用rostopic list
1–rostopic list—能够列出当前订阅和发布的话题
2–让我们查看一下list子命令需要的参数,在一个终端中运行:
示例:
rostopic list -h
Usage: rostopic list [/namespace]
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
--host group by host name
3--在rostopic list中使用verbose选项----这会显示出有关发布和订阅的话题及其类型的详细信息:
示例:
rostopic list -v
结果:
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 4 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
* /rosout [rosgraph_msgs/Log] 1 subscriber
* /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber
(五)ROS Messages—-消息
1–话题之间的通信是通过—-节点之间发送—ROS消息实现
2–对于发布器(turtle_teleop_key)和订阅器(turtlesim_node)之间的通信,发布器和订阅器之间必需发送
和接收相同类型的消息
3–这意味者话题topics的类型是由发布在它上面的消息类型决定的
4–使用rostopic type命令可以查看发布在某个话题上的消息类型
1)使用rostopic type—命令用来查看所发布话题消息的类型
1–用法–rostopic type [topic]
2–indigo版:运行—rostopic type /turtle1/cmd_vel
可以看到的结果为:
geometry_msgs/Twist