前面的文章主要是说明一下ROS入门需要了解的基本概念,这篇文章则是要说明一下如何使用命令行工具。
2.1 命令行工具的使用
ROS有很多常用命令:rostopic、rosservice、rosnode、rosparam、rosmsg、rossrv等等。
我们以启动小海龟为例来学习一下命令行工具的使用。
2.1.1 首先我们操作一下简单的小海龟
- 打开第一个终端,输入如下指令启动ROS Master。
roscore
出现上图界面即可。
-
打开第二个终端,输入如下指令启动小海龟仿真器。
rosrun turtlesim turtlesim_node
出现上图界面即可。
-
打开第三个终端,输入如下指令启动海龟控制节点。
rosrun turtlesim turtle_teleop_key
出现上图界面即可。此时我们可以在这个终端通过输入键盘的上下左右来控制小海龟的运动。
2.1.2 接下来我们就开始玩点有意思的
在上一步的操作中到底蕴含了哪些ROS的基本原理,我们要怎么运用到之后的一些工程,我们需要通过一系列的工具来分析一下。
- 我们打开第四个终端,输入如下指令来显示系统计算图
rqt_graph
(ROS中有一系列“rqt”开头的工具都是基于QT的可视化工具,我们可以很直观的看到很多信息。)
出现如上界面 。在这个界面很清晰地列出来了当前ROS系统的两个节点(两个椭圆形为两个节点):turtlesim为仿真器节点、teleop_turtle为键盘控制节点。turtle1/cmd_vel为两个节点之间的话题通信。
-
接下来我们来看几个没有界面产生的命令行工具,这些命令行工具都是以“ros”开头
-
rosnode:用来显示系统当中所有节点相关信息的指令。
-
输入如下指令来列出来系统中所有的节点。
rosnode list
出现上图界面,可以看到这里罗列出了三个节点,发现跟上一步相比多了一个rosout节点,这个节点是只要启动roscore就会启动的一个采集系统所有的日志信息提交给系统做显示的话题。
-
输入如下指令来查看某一个节点具体的信息是什么样的。(以turtlesim为例)
rosnode info /turtlesim
出现上图界面。 我根据自己的理解做出了如下解释。
- rostopic:用来显示系统当中所有话题相关信息的指令。
- 输入如下指令来列出来系统中所有的话题列表。
rostopic list
出现上图界面。那我们也可以通过指令给相应话题发布数据让小海龟运动,输入如下指令:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
出现如下界面,可以看到海龟相比之前移动了一小格,但是我们的指令是让海龟沿着x方向以1m/s的速度运动,为什么会只移动一小格呢?是因为我们这个话题只发布了一次,那怎样让海龟一直动呢?我们需要给这个指令一条循环:
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
让这个指令每秒发送10次,可以看到如下图:
看到海龟会一直运动下去。
- rosmsg:用来显示系统当中所有消息相关信息的指令。
- 输入如下指令来列出来系统中某一条消息的数据结构。(以geometry_msgs/Twist为例)
rosmsg show geometry_msgs/Twist
出现上图界面。
- rosservice:用来显示系统当中所有服务相关信息的指令。
- 输入如下指令来列出来系统中所有的服务列表。
rosservice list
出现上图界面。
-
输入如下指令产生第二只海龟。
rosservice call /spawn "x: 2.0 y: 2.0 theta: 0.0 name: 'turtle2'"
出现上图界面。此时我们再输入之前的一条指令。
rostopic list
出现上图界面, 可以看到我们已经可以通过指令控制第二只海龟的运动了
2.1.3 ROS的话题记录和复现
可以记录系统目前所有的话题数据并且保存下来并在下次用的时候复现出来。
- 话题记录
- 输入如下指令开始记录当前的数据。
rosbag record -a -O cmd_record
以上界面是运行结果,表示已经开始记录了,现在我们可以随便地控制海龟做运动。结束之后我们就可以在主文件夹下找到该文件。
-
复现记录
-
我们重新打开两个终端,分别输入roscore和rosrun turtlesim turtlesim_node 启动海龟。
-
打来第三个终端,输入如下指令复现上一步的运动。
rosbag play cmd_record.bag
运行结果如上图,可以看到已经复现出来了一个一模一样的运动。