6.1预备工作
先在一个终端开启roscore(一台电脑只能开启一个,多开报错)
roscore
新终端开启turtlesim,把小乌龟的窗口显示出来
rosrun turtlesim turtlesim_node
另一新终端开启键盘远程控制turtle
rosrun turtlesim turtle_teleop_key
保留turtle_teleop_key 这个终端在桌面最上面,然后按键盘上下左右键就可以控制乌龟。如下图
6.2ROS Topics
turtlesim_node节点和turtle_teleop_key是通过ROS话题通信的,key在话题上发布按键输入消息,turtlesim则订阅该话题以接受消息。
6.3使用rqt_graph
rqt_graph能够创建一个显示当前系统运行情况的动态图。先下载安装:
sudo apt-get install ros-<distro>-rqt
sudo apt-get install ros-<distro>-rqt-common-plugins
然后在新终端下
rosrun rqt_graph rqt_graph
然后会弹出
把鼠标放在中间/turtle1/cmd_vel(这就是话题)上,会让话题的发布者(蓝色)和接受者(绿色)亮起。
6.4rostopic介绍
就是了解话题信息,查看rostopic的子命令
rostopic -h
输出如下
6.5使用rostopic echo
可以显示某个话题上发布的数据
用法rostopic echo [topic]
在新终端下
rostopic echo /turtle1/cmd_vel
然后高亮turtle_teleop_key那个终端,试一下上下左右,会发现上个终端会有如下显示
此时再刷新rqt_graph,会发现多了个分支,其实就是那个rostopic echo显示话题的节点。
、
6.5使用rostopic list
这个是列出所有当前订阅和发布的话题。
在新终端下,查看list子命令参数
rostopic list -f
显示出所有发布和订阅的话题及其类型的详细信息
rostopic list -v
6.6ROS Messages
对于发布器(在这里是turtlesim_node)和订阅器(在这里是turtle_teleop_key)之间通信,必须发送和和接受相同的数据类型,也就是说话题的类型由发布上面的消息类型决定。
用rostopic type可以查看消息类型
用法: rostopic type [topic]
试一下
rostopic type /turtle1/cmd_vel
会返回 geometry_msgs/Twist
我们使用rosmsg查看消息的详细情况
rosmsg show geometry_msgs/Twist
返回
可以看出turtlesim所期待的消息类型是64位浮点型。
6.7使用rostopic pub
这个可以把数据发布到当前某个正在广播的话题上。
用法: rostopic pub [topic] [msg_type] [args]
试一下,用命令的方式发一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度开始移动。
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0,0.0,0.0]' '[0.0,0.0,1.8]'
命令解析
rostopic pub:发布一个消息
-1:(单破折号)表示发布当前消息后立刻退出
/turtle1/cmd_vel : 话题名称
geometry_msgs/Twist : 消息的类型
--:告诉选项解析器后面的参数不是命令选项。
效果如下图。
让乌龟一直转圈(-r 1 就是以1Hz的频率发布速度命令到速度话题上)
rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
此时刷新一下rqt_graph,会看到
左上角是那个键盘输入控制key的节点(发布者)
左下角是那个用命令控制让乌龟不停转圈的节点(发布者)
右上角是那个有乌龟图像的节点(订阅者)
右下角是那个获取键入信息命令行显示的节点(订阅者)
到这里一共开了6个终端,上面4个节点占了4个了,还有一个初始化的,一个是graph的(显示话题关系)。
6.8使用rostopic hz
用来查看数据发布频率。
用法:rostopic hz [topic]
试一下turtlesim_node发布/turtle/pose多快
rostopic hz /turtle1/pose
现在我们可以知道turtlesim正以大概60Hz的频率发布数据给turtle。我们也可以结合rostopic type和rosmsg show命令来获取关于某个话题的更深层次信息。
rostopic type /turtle1/cmd_vel |rosmsg show
到这里已经完成通过rostopic查看话题相关情况过程。单还有另一个工具查看turtlesim发布的数据。
6.9使用rqt_plot
这个命令可以实时显示一个发布到某个话题上的数据变化图形。
在新终端下(确保rostopic pub 和turtlesim开着)
rosrun rqt_plot rqt_plot
会弹出一个新窗口,在topic上输入/turtle1/pose/x,然后按下+号,会添加该线在图片中,同样把/turtle1/pose/y添加上,就得如下图形。