》》点赞,收藏+关注,理财&技术不迷路《《
1.设置
roscore
turtlesim ———— $ rosrun turtlesim turtlesim_node ———— 运行海龟
海龟键盘操作 ———— $ rosrun turtlesim turtle_teleop_key ———— 运行对它的键盘
我们现在来查看一下:
2.ROS Topics
刚才打开的turtlesim_node 和turtle_teleop_key 两个node就是通过Topic通信的。
turtle_teleop_key 把键盘点击发布到一个Topic,如果turtlesim_node 订阅了这个Topic,它就可以得到键盘点击的内容。我们可以通过rqt_graph查看正在运行的node和topic。
Note: If you're using electric or earlier, rqt is not available. Use rxgraph instead.
2.1 使用rqt_graph
这个东西能够创建一个动态图来描述系统里面正在运行什么。rqt_graph 是rqt包的一部分。除非你已经安装过了,不然就得安装一下:
$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins
rqt由三个部分/元包组成
rqt---核心模块
rqt_common_plugins---ROS后端工具套件,可用于机器人运行时的开/关。
rqt_robot_plugins---在运行时与机器人交互的工具。
rqt metapackage提供了一个小部件rqt_gui,它允许多个`rqt`小部件停靠在单个窗口中。
开个新窗口,运行:—— $ rosrun rqt_graph rqt_graph
2.2 引入rostopic
从ROS topic获取信息。可以使用help查看一些相关命令用法: $ rostopic -h
2.3 使用rostopic echo
rostopic echo展示发布到topic上的数据 rostopic echo [topic]
$ rostopic echo /turtle1/cmd_vel
这个时候什么都不会显示,因为还没有按按键,选择小海龟那个命令行窗口,然后按按键,就会有数据了。
重新看一下rqt_graph ,点一下refresh,你会发现rostopic echo也订阅了 /turtle1/cmd_vel主题。
2.4使用rostopic list
这个命令会列举出当前正在被发布和订阅的所有topic。看一下怎么用: $ rostopic list -h
我们可以列举出所有信息:$ rostopic list -v
3.ROS Messages
node就是通过在topic上面发送message来交流的。发布者和订阅者能够交流,是因为他们使用了相同的Message类型,topic的类型就取决于message的类型。message的类型可以由rostopic type来定义。
3.1 使用rostopic type
它可以返回任何topic被发布的message类型。rostopic type [topic]
比如:$ rostopic type /turtle1/cmd_vel
然后得到这个:geometry_msgs/Twist
我们可以看一下他的详细信息:$ rosmsg show geometry_msgs/Twist
4.结合Message+topic使用:
4.1 使用rostopic pub
rostopic pub publishes data on to a topic currently advertised.这个命令可以向正在运行的topic发布数据消息。
用法: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]'
这个命令会把message发送到指定的topic ———— rostopic pub
这个选项是让rostopic只发布一次message,然后退出 ———— -1
这个是message要发布到的topic的名字 ———— /turtle1/cmd_vel
这个是发布message到topic的时候要使用的消息类型 ———— geometry_msgs/Twist
这个就是告诉选项解析器,后面如果再出现“-”就不要管了,不是选项了———— --
最后一部分就是参数了,就是对应之前获得的数据类型写的 ———— '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
这么写的原因,是这个满足YAML语法,可以详细看看YAML命令行文档(http://wiki.ros.org/ROS/YAMLCommandLine)
小乌龟移动了一下就不动了,原因是它需要持续的1Hz命令流才能保持移动,我们可以用 rostopic pub -r 来实现:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
我们再去rqt_grapg rqt_graph里面看看
4.2 使用rostopic hz
这个可以显示每个topic发布数据的速率 ———— rostopic hz [topic]
我们可以来看一下, turtlesim_node发布 /turtle1/pose的速度有多快 ———— $ rostopic hz /turtle1/pose
我们可以看到turtlesim 发布数据的速度是60Hz,我们也可以通过 rostopic type和 rosmsg show 结合获得更多关于topic的信息。
$ rostopic type /turtle1/cmd_vel | rosmsg show
5.使用rqt_plot
首先运行rqtploat: ———— $ rosrun rqt_plot rqt_plot
等一会儿就会弹出来一个框,在左上角输入 /turtle1/pose/x ,然后点击“+”再输入/turtle1/pose/y,点击“+”。就可以看到两条曲线,是发布到topic上的数据关于时间的曲线。
在这里输入: /turtle1/pose/x ,然后点击“+”再输入/turtle1/pose/y,点击“+”