机器人操作系统ROS Indigo 入门学习7理解ROS Topic.docx
- 文档编号:7290977
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:12
- 大小:415.81KB
机器人操作系统ROS Indigo 入门学习7理解ROS Topic.docx
《机器人操作系统ROS Indigo 入门学习7理解ROS Topic.docx》由会员分享,可在线阅读,更多相关《机器人操作系统ROS Indigo 入门学习7理解ROS Topic.docx(12页珍藏版)》请在冰豆网上搜索。
机器人操作系统ROSIndigo入门学习7理解ROSTopic
1.理解ROSTopic
这个教程介绍ROStopic和rostopic和rqt_plot命令行工具.
1.1建立
1.1.1roscore
先在一个新的终端中运行roscore;
$roscore
注意:
只能运行一个roscore.
1.1.2tuetlesim
在新的终端中运行turtlesim;
$rosrunturtlesimturtlesim_node
1.1.3turtle键盘遥控
我们需要用一些东西去控制turtle,在新的终端运行:
$rosrunturtlesimturtle_teleop_key
[INFO]1254264546.878445000:
Startednode[/teleop_turtle],pid[5528],boundon[aqy],xmlrpcport[43918],tcprosport[55936],loggingto[~/ros/ros/log/teleop_turtle_5528.log],using[real]time
Readingfromkeyboard
---------------------------
Usearrowkeystomovetheturtle.
现在你可以用键盘上的方向键控制小乌龟了(保持键盘输入窗口在焦点).再看看窗口后面发生了什么.
1.2ROS Topic
turtlesim_node和turtle_teleop_keynode之间用topic交流通信.
turtle_teleop_key在这个topic上发布按键敲击,而turtlesim订阅同样的topic接受按键敲击.让我们用rqt_graph显示现在正在运行的topic和nodes.
如果你是用electric或更早的版本,建议用rxygrah替代。
1.2.1用rqt_grah
rqt_grah创建了一个动态的图形显示系统上正在进行什么,rqt_grah是qptpackage的一部分.运行:
$sudoapt-getinstallros-
$sudoapt-getinstallros-
再在新终端输入:
$rosrunrqt_graphrqt_graph
你将会看到:
如果把鼠标放上去将会高亮,node是蓝色或者绿色,topic是红色.正如你所见到的一样,turtlesim_nodeandtheturtle_teleop_keynodes是通过叫做
/turtle1/command_velocity.的在通信.
1.2.3介绍rostopic
rostopic工具允许你从rostopic中获得信息.
通过:
$rostopic-h
可以获得等多命令选项
rostopicbwdisplaybandwidthusedbytopic
rostopicechoprintmessagestoscreen
rostopichzdisplaypublishingrateoftopic
rostopiclistprintinformationaboutactivetopics
rostopicpubpublishdatatotopic
rostopictypeprinttopictype
让我们用这些命令去检验一下turtlesim.
1.2.3使用rostopicecho
用法:
rostopicecho[topic]
允许我们看看turtle_teleop_keynode.发布的命令速度数据;
对于ROSHydro和之后的版本,这个数据在发布在/turtle1/cmd_veltopic,在新终端,运行:
$rostopicecho/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.点击左上角的刷新按钮显示新的node.你将会看到rostopic echo也订阅了turtle1/command_velocity topic.
1.2.4使用rostopiclist
rostopiclist会列出现在所有被订阅和发布的topic.
看看这个命令需要什么参数,运行:
$rostopiclist-h
Usage:
rostopiclist[/topic]
Options:
-h,--helpshowthishelpmessageandexit
-bBAGFILE,--bag=BAGFILE
listtopicsin.bagfile
-v,--verboselistfulldetailsabouteachtopic
-plistonlypublishers
-slistonlysubscribers
对于verbose选项:
$rostopiclist-v
显示详细的一列topic信息包括发布的,订阅的和它们的类型.
Publishedtopics:
*/turtle1/color_sensor[turtlesim/Color]1publisher
*/turtle1/command_velocity[turtlesim/Velocity]1publisher
*/rosout[roslib/Log]2publishers
*/rosout_agg[roslib/Log]1publisher
*/turtle1/pose[turtlesim/Pose]1publisher
Subscribedtopics:
*/turtle1/command_velocity[turtlesim/Velocity]1subscriber
*/rosout[roslib/Log]1subscriber
1.3 ROSMessages
Topic上的通信通过在nodes之间发送messages来实现.对于发布者(turtle_teleop_key)和订阅者(turtlesim_node)之间的通信必须使用相同的
message类型.这就意味着,topic的类型由发布的message类型决定.发布在topic上的message的类型可以由rostopictype来决定.
1.3.1使用rostopictype
rostopictype返回任何topic发布的message类型.
用法:
rostopictype[topic]
对于ROSHydro和之后的版本:
$rostopictype/turtle1/cmd_vel
你会得到:
geometry_msgs/Twist
想得到详细信息运行:
$rosmsgshowgeometry_msgs/Twist
geometry_msgs/Vector3linear
float64x
float64y
float64z
geometry_msgs/Vector3angular
float64x
float64y
float64z
既然我们已经知道turtlesim期待什么类型的message了,我们可以发布命令给小乌龟.
1.4继续rostopic
既然我们已经知道rosmessage了,让我们一起用rosmessages吧。
1.4.1使用rostopicpub
rostopicpub把数据发布到正被广播的topic上。
用法:
rostopicpub[topic][msg_type][args]
对于ROSHydro和之后的版本:
$rostopicpub-1/turtle1/cmd_velgeometry_msgs/Twist--'[2.0,0.0,0.0]''[0.0,0.0,1.8]'
这会给turtle发布一个message告诉它线速度2.0,角速度1.8.
这个命令十分复杂,所以我们仔细看看它的每个参数
对于ROSHydro和之后的版本:
这个命令会发送messages给给定的topic:
rostopicpub
这个选项使得rostopic只发布一条message然后退出:
-1
这是要发布给它信息的那个topic:
/turtle1/cmd_vel
这是发布topic时的message类型:
geometry_msgs/Twist
双虚线告诉选项剖析器接下来的参数都不是选择,以免把负号后面的参数当成参数选项。
--
一个geometry_msgs/Twist有两组由三个浮点元素组成得的向量:
线性的和角度的.这样的话,'[2.0, 0.0, 0.0]'就是线性值x=2.0,y=0.0,z=0.0,而'[0.0, 0.0, 1.8]'就是角度的值x=0.0,y=0.0,z=1.8.这些参数遵从YAML语法规则。
更多信息查看YAMLcommandlinedocumentation.
'[2.0,0.0,0.0]''[0.0,0.0,1.8]'
你也许注意到小乌龟已经停止了;这是因为小乌龟需要稳定的1HZ的命令流去保持运动。
我们可以用rostopic pub -r命令发布一个稳定的命令流。
对于ROSHydro和之后的版本:
$rostopicpub/turtle1/cmd_velgeometry_msgs/Twist-r1--'[2.0,0.0,0.0]''[0.0,0.0,1.8]'
这将以1HZ的速度去发布速度命令给速度topic.
再刷新一下rqt_graph,看到rostopicpubnode在和rostopicechonode通信
当你看到小乌龟在绕圈圈的时候可以在一个新的终端输入rostopicecho 命令看看turtlesim发布的数据。
1.4.2使用rostopichz
rostopichz报告数据发布的速度
用法:
rostopichz[topic]
来看看turtkesimnode以多快的速度发布/turtle1/pose。
$rostopichz/turtle1/pose
你会看到:
subscribedto[/turtle1/pose]
averagerate:
59.354
min:
0.005smax:
0.027sstddev:
0.00284swindow:
58
averagerate:
59.459
min:
0.005smax:
0.027sstddev:
0.00271swindow:
118
averagerate:
59.539
min:
0.004smax:
0.030sstddev:
0.00339swindow:
177
averagerate:
59.492
min:
0.004smax:
0.030sstddev:
0.00380swindow:
237
averagerate:
59.463
min:
0.004smax:
0.030sstddev:
0.00380swindow:
290
现在我们知道turtlesim大概以60HZ的速度发布数据。
也可以用rostopictype和rosmsg获取关于topic进一步的信息。
对于ROSHydro和之后的版本:
$rostopictype/turtle1/cmd_vel|rosmsgshow
现在我们已经用rostopic检验了topic,让我们用其他工具看看turtlesim发布的数据把。
1.5使用rqt_plot
electric之前的版本用rxplot代替。
rqt_plot以时间轴的形式显示发布在topic上的数据。
这里我们用它去显示发布在/turtle1/posetopic上的数据。
首先:
$rosrunrqt_plotrqt_plot
这时会弹出一个新的窗口,一个文本框出现再左上角,文本框是输入topicd的,这里我们输入/turtle1/pose/x会高亮原来不亮的按钮。
按下它并且用/turtle1/pose/y重复同样的操作,就会看到x-y位置的图像出现。
点击负号按钮可以隐藏指定的topic。
全部影藏,增加/turtle1/pose/theta,你会看到下面的图像;
这章节就是这些了,Ctrl+c杀死rostopic终端但是让turtlesim继续运行。
既然你明白rostopic是怎样工作的了,让我们来看看service和parameter是怎样工作的.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人操作系统ROS Indigo 入门学习7理解ROS Topic 机器人 操作系统 ROS 入门 学习 理解
![提示](https://static.bdocx.com/images/bang_tan.gif)