【ROS实践学习入门系列(三)小海龟案例主题与节点交互】
本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流~
联系方式:ziyuanw#foxmail.com(#换成@)
一、小海龟案例
还是先通过小海龟案例分析ROS各种基本命令使用方法,熟练之后才能往后面学习更加深入的东西。
1.查找包路径:
rospack find [packagename]
以查找小海龟案例为例:
2.获得功能包或功能包集文件列表:
rosls [packagename]
3.切换ROS空间内下属任一文件目录:
roscd [directory]
4.节点操作相关命令:
首先CTRL+ALT+T打开新的终端并启动roscore,然后运行小海龟案例:
roscore
rosrun turtlesim turtlesim_node
节点信息相关命令:
①rosnode info [nodename]
②rosnode ping [nodename]
③rosnode machine
显示当前运行设备名。
rosnode machine <machine-name>
显示该设备名下正在执行的节点名称:
④rosnode kill [nodename]
⑤rosnode cleanup
不常用。
是一种临时清理节点的解决方案,在正常操作中不鼓励使用。它的优点是美观,缺点是可能无法注册正常运行的节点。
二、主题与节点交互
依旧是可使用小海龟案例:(还是roscore和rosrun turtlesim turtlesim_node。就不演示了)
1.主题相关基本命令操作:
①rostopic bw [topic] :主题所使用带宽
②rostopic echo [topic] :消息输出
③rostopic find [topic] :查找主题
④rostopic hz [topic] :主题发布频率
⑤rostopic info [topic] :活动主题信息
⑥rostopic list [topic] :列出活动主题
⑦rostopic type [topic] :将数据发布到主题
若想要使用键盘方向建移动海龟:
清除所有终端重新打开(使用CTRL+Shift+T可在同一窗口内打开三个终端):
第一个终端:
roscore
第二个终端:
rosrun turtlesim turtle_node
第三个终端:(注意:鼠标光标要放在第三个窗口才能进行移动操作)
2.小海龟以固定方向自行移动:
1.发布主题与其进行交互:
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大小的角速度开始移动。
命令参数说明:
rostopic pub:这条命令将会发布消息到某个给定的话题。
-1(单个破折号):这个参数选项使rostopic发布一条消息后马上退出。
/turtle1/cmd_vel :这是消息所发布到的话题名称。(其他老版本为/turtle1/command_velocity)
geometry_msgs/Twist:这是所发布消息的类型。(其他老版本为turtlesim/Velocity)
--:(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。
2.0 1.8:之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。这些参数其实是按照ROS官网YAML语法格式编写的。线速度linear分量参数:x,y,z。角速度angular分量参数:x,y,z。
2.一直转圈:
turtle需要一个稳定的频率为1Hz的命令流来保持移动状态。可以使用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]'
3.ROS话题理解:
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。
- rqt_graph查看节点话题情况:
rosrun rqt_graph rqt_graph
鼠标移动到上面,可以发现rostopic发布器节点(红色)正在与rostopic echo节点(绿色),通过键盘/turtle1/cmd_vel控制方向的输入消息,进行通信:
- rqt_plot实时显示数据变化:
rosrun rqt_plot rqt_plot
打开时是空的,需要在topic文本框自行添加/turtle1/pose/x后之前处于禁用状态的加号“+”按钮将会被使能变亮。按一下该按钮,并对/turtle1/pose/y重复相同的过程。现在你会在图形中看到turtle的x-y位置坐标图。再添加/turtle1/pose/theta。减号“-”按钮可隐藏显示所选topic数据。
参考资料:
【1】ROS官网:http://wiki.ros.org/cn
【2】ROS机器人高效编程
【3】机器人操作系统ROS浅析