一.ROS的命令行工具
ros提供了丰富的命令行工具,这些工具可以帮助我们实现一些代码的编写,调试,包括整个系统的框架的调试,数据的显示,命令的一些帮助信息等都可以通过命令行工具等帮助实现,常用命令包括:rostopic,rosservice, rosnode, rosparam, rosmsg rossrv
举例:小海龟为例
第一步,在当前终端输入roscore
(作用:启动ROS Master,即ROS里管理器)
第二步,打开一个新终端输入:rosrun turtlesim turtlesim_node
(作用:启动小海龟仿真器)
rosrun 命令是用来运行在某个功能包里某个节点的指令,后跟两个参数,一个是功能包名(如:turtlesim)一个是节点名
其中,通过rosrun turtlesim+tab键可见该功能包所有结点,使用第三个节点打开仿真器界面
第三步,再打开一新终端输入:rosrun turtlesim turtle_teleop_key
(作用:启动海龟控制节点,运行键盘控制节点)
打开第四个终端输入:rqt_graph
ros里一系列以rqt开头的工具,都是基于qt的一些可视化工具
(rqt_graph 用来显示系统计算图的工具,可见整个系统的全貌)
可理解此海龟便是,两个节点与节点之间的话题组成的系统
其他命令行工具
1.rosnode
用来显示系统当中所有结点相关信息的指令
(可通过rosnode+回车键显示帮助信息)
常见
rosnode list
用来把所有系统当中的节点都列出来的指令
rosnode info
用来查看某个节点的具体信息是怎样的
例:rosnode info /turtlesim
2.rostopic
跟话题相关的参数的一个命令行工具
(一样可通过rostopic+回车键显示帮助信息)
rostopic list
打开当前系统的所有话题列表
现通过指令给该话题发布数据并让海龟运动
rostopic pub+话题名+消息的类型+消息的数据内容
pub就是发布数据给某一个话题
如何让海龟一直动?给其一个循环
-r :即频率,以多少频率去发布话题的数据内容;
例:-r 10 一秒钟发布10次20米每秒的指令
(ctrl+c 停下指令)
如何具体看一下现发布的话题的Twist消息的结构?
3.rosmsg
与消息相关的命令行工具
rosmsg show
例:rosmsg show geometry_msgs/Twist
4.rosservice
(服务相关的命令行的使用方式)
rosservice list
作用:查看当前仿真器里提供的所有服务的内容,这些服务的服务端均为仿真器,我们现用的终端作为客户端去请求某服务
其中spawn
意为:产生,诞生
该服务是用来产生一只新的海龟
如何同时使两只海龟同时存在?
rosservice call
调用,发布请求
例:rosservice call /spawn(双击tab键自动补全服务类型和服务数据)
仿真界面左下角为坐标原点
x:产生新的海龟的x坐标
y:产生新的海龟的y坐标
theta: 海龟诞生中的角度
name:产生海龟的名字
回车创建,其后新增一行为反馈信息
再次打开当前系统的所有话题列表查看
同样可以类上控制两个海龟运动
总结:
5.话题记录
rosbag record -a -O
可记录保存当前系统里所有话题数据,待下次用到可复现出来
使用场景举例:
有一无人机想做调试,但是不可能每一次都让飞机飞起来然后做数据的调试,这样很不方便,一般大家会做一次飞行,飞行时会把所有的数据保存下来然后回到实验室将这些所有数据复现出来在做实验,所以后面的实验和真机飞行没有关系了,都是使用之前已经采集好的数据
例如:rosbag record -a -O cmd_record
注释:rosbag record -a(即-all意思) -O(意为将保存数据保存成为一压缩包) cmd_record(该压缩包叫什么名字)
表示已经在订阅这样一些数据的内容
海龟运动结束后,ctrl+c保存;数据会放在当前终端的默认路径下面,home/压缩包名
6.话题复现
rosbag plag cmd_record.bag
复现:
关掉之前的所有内容,重新启动roscore和仿真器节点rosrun turtlesim turtlesim_node,不启动键盘控制节点,现通过数据包复现刚才已经录好的指令——输入rosbag plag cmd_record.bag(后跟文件名),回车后点击虚拟机即可复现,可见该海龟将按照刚才录好的指令去做运动