roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosrun rqt_graph rqt_graph
rostopic echo
rostopic list -h
rostopic type /turtle1/cmd_vel
rosmsg show geometry_msgs/Twist
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, -1.8]’
rostopic hz topic_name
rosrun rqt_plot rqt_plot
1.准备工作
1.1 roscore
在新的终端中,运行roscore
1.2 turtlesim
运行turtlesim
$ rosrun turtlesim turtlesim_node
1.3 乌龟键盘遥操作
我们需要有东西来操控乌龟移动。打开新的终端输入
$ rosrun turtlesim turtle_teleop_key
现在可以使用键盘的箭头按钮来控制乌龟移动。切记一定要在turtle_teleop_key终端操作箭头控制移动,在其他界面不好用。
2 ros话题topics
turtlesim_node与turtle_teleop_key节点是通过ROS话题进行通讯。turtle_teleop_key在向话题发送键盘敲击的命令,与此同时,turtlesim订阅相同的话题以接受键盘敲击命令。通过rqt_graph命令我们可以看到正在运行的节点和话题。
2.1 rqt_graph
rqt_graph创建了一个正在系统中运行的活跃图表。它是rqt包的一部分。首先要下载一哈。
$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins
打开新的终端窗口:
$ rosrun rqt_graph rqt_graph
当把鼠标移动到/turtle1/cmd_vel上时,将会突出ros节点,此时,可以看出来,/teleop_turtle与/turtlesim节点通过话题/turtle1/cmd_vel进行通信。因为ubuntu截图不变,此处不附图。
2.2 rostopic
rostopic工具允许你获得有关ros话题的相关信息。
你可以通过帮助选项获得可使用的rostopic子命令。
$ rostopic -h
2.3 rostopic echo
rostopic echo 展示了被发布到话题的数据
rostopic echo [topic]
具体如图所示。当我们回过头去操作之前的终端让乌龟移动时,rostopic echo便会返回具体的数据。
注意,此时我们回到rqt_graph那个小程序中,点击左上角的刷新按钮(左上角的第一个按钮,长得就像刷新一样的那个),此时再看,
可以看出,rostopic echo的工作原理是生成一个独立节点,然后订阅我们想知道的topic,获得我们需要的数据。
2.4 rostopic list
rostopic list命令将会返回当前所有的发布的和订阅的主体列表。
让我们看一哈rostopic list子命令所需要的参数,打开新的终端
$ rostopic list -h
用一下其中的-v选项
一切都显而易见。
3.ros message 消息
通过在节点之间发送ROS消息来进行主体通信。对于发送节点(turtle_teleop_key)与接受节点(turtlesim_node),二者要进行通信,必须发送和接受相同类型的消息。这意味着主题topic的类型由其上发布的消息message类型所决定。被发送到一个主体上的消息的类型可以由rostopic type来确定。
3.1 rostopic type
rostopic type 返回正在发布的任何主体的消息类型。
用法:
rostopic type topic名称
$ rostopic type /turtle1/cmd_vel
与此同时,我们还以可使用rosmsg来看消息的细节:
$ rosmsg show geometry_msgs/Twist
如此,话题的类型与消息的具体定义均可查明。
4.rostopic 扩充
既然我们已经了解了有关ros消息的相关内容,下面就将消息与rostopic结合
4.1 rostopic pub
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]'
这条命令将会向turtlesim发送一条消息,告诉他以2.0的限速度以及1.8的角速度移动。
测试证明,由于该命令发送指令的时间只有3S,只有在这3S的时间内,在rqt_graph中会出现一个rostopic的节点,用来发送数据,3S过后,该节点消失!!!
这是一个很复杂的例子,所以,让我们来认真看一下每一个参数的细节:
rostopic pub
-1 :这个选项使rostopic只发送一次消息便停止;
/turtle/cmd_vel:topic名称;
geometry_msgs/Twist:发送给topic的消息的类型
–:这个双破折号选项告诉选项分析器以下参数都不是选项。如果参数中有一个前破折号,例如负数,那么这个选项就是必须的;
‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’ :如前所述,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语法的,这在yaml命令行文档中有更详细的描述。
经过测试,我发现对于第一个速度参数,虽然有x,y,z三个坐标轴,但只有x值对速度有影响。
你或许已经注意到,乌龟已经停止移动;这是因为乌龟需要以1赫兹的稳定指令来使他持续移动。我们可以使用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]'
此时我们在通过rqt_graph来查看一下。点击左上方刷新按钮
上图中,左上角为键盘录入节点,左下角为持续发送特定指令的节点,即rostopic pub产生的节点
右上角为乌龟节点,右下角为rostopic echo 返回具体数据的节点。
可以看到,乌龟正在疯狂转圈。打开一个新的终端,使用rostopic echo可以看到我们的乌龟turtlesim发送的数据
rostopic echo /turtle1/pose
4.2 rostopic hz
rostopic hz 报告数据发送的频率。
使用方法
rostopic hz [topic]
让我们看一下turtlesim_node在以多块的速度发送/turtle/pose:
现在我们可以知道,海龟正在以60赫兹的速率发布关于海龟的数据。我们还可以将rostopic type与rosmsg show结合使用,以获得有关主题的深入信息:
$ rostopic type /turtle1/cmd_vel | rosmsg show//两个命令一起使用
5 rqt_plot
rqt_plot显示主题上发布的数据的滚动时间图。在这里,我们将使用rqt_plot来绘制发布在/turtle1/pose主题上的数据。首先,在一个新的终端键入
$ rosrun rqt_plot rqt_plot
在应该弹出的新窗口中,左上角的文本框使您能够向绘图中添加任何主题。键入/turtle1/pose/x将突出显示先前无法使用的加号按钮。按下它,重复相同的步骤,主题为/Turtle1/Pose/Y。现在您将看到图中绘制的海龟的X-Y位置。
同时,按下减号会显示一个菜单,允许您从绘图中隐藏指定的主题。隐藏刚刚添加的全部主题并且另外添加/turtle1/pose/theta将会导致下图中的情况。