参考B站古月居ROS入门21讲:ROS命令行工具的使用
基于VMware Ubuntu 20.04 Noetic版本的环境
文章目录
一、启动小海龟
打开终端,输入以下命令启动ROS的节点管理器-ROS master,这是ROS必须运行的管理器节点:
roscore
再打开一个终端,启动小海龟可视化仿真器(可以输入
rosrun turtlesim
,敲两下空格查看这个命令有哪些功能):
如看到有
turtlesim_node
,完整命令为:
rosrun turtlesim turtlesim_node
再打开一个终端,启动键盘控制小海龟运动节点,命令为:
rosrun turtlesim turtle_teleop_key
这样启动小海龟的完整命令结束了,然后可以通过←→↑↓来控制小海龟的移动:
二、计算图可视化工具:rqt_graph
rqt_graph工具可以图形化显示当前ROS系统得中的计算图。在系统运行时,可以使用如下命令启动该工具:
rqt_graph
可以展示当前小海龟系统启动成功后的计算图:
从这个计算图可以清晰地了解到节点间通信的部分信息。
teleop_turtle节点(键盘控制节点)通过cmd_vel(topic)向turtlesim节点(海龟仿真器节点)发出消息,使得小海龟移动。
三、常用命令:
1、节点rosnode
显示节点列表:rosnode list
我们可以输入
rosnode list
来查看节点列表的信息,如下可以看到有三个节点信息:
查看节点信息:rosnode info
查看节点的具体信息:
rosnode info /节点名
比如我们查看turtlesim(小海龟)的节点信息:
可以很详细地看到海龟仿真器节点(turtlesim)的相关话题的发布和订阅,还有服务和底层通讯的信息。
2、话题rostopic
显示话题列表:rostopic list
通过
rostopic list
来查看话题列表:
手动发送数据给话题(topic)控制小海龟移动:rostopic pub
上面我们是通过键盘的↑↓←→来控制小海龟的移动的,从这里开始我们可以手动发布数据给topic来控制海龟移动。
上图我们看到小海龟是通过
/cmd_vel
这个
topic
进行发布信息而移动的,这次我们通过手动
publish
数据给这个
topic
来控制小海龟移动。
格式:rostopic pub (参数) 话题名 消息数据结构 “具体数据”
我们可以输入
rostopic pub /turtle1/cmd_vel
然后多按几次
tab
键来补全:
其中:
linear
是小海龟的线速度,
angular
是小海龟的角速度;这两个速度分别有x,y,z三个方向。
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
x:0.0
y:0.0
z:0.0
angular:
x:0.0
y:0.0
z:0.0"
我们可以通过←→来更改速度的信息,比如我更改了线速度x方向的信息:
x:0.0改成x:1.0
然后回车
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方向移动了一个单位的距离。
我们可以补充参数使得小海龟移动很多次,比如我补充参数
-r 10
使得小海龟移动十次。这个
r
指的是
rate
频率。
按
Ctrl+C
终止
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"
3、消息rosmsg
查看消息数据结构:rosmsg show
上面我们使用了消息数据结构定义了一个消息传给
topic
,我们可以通过
ros show xx数据结构
来查看某数据结构,比如查看有关速度的数据结构:
命令为:
rosmsg show geometry_msgs/Twist
Twist是有关速度的数据结构,包含线速度和角速度的x,y,z的三个分量
4、使用服务通信方式:rosservice
上面我们通过使用
topic
传
msg
来控制节点,这次我们来使用第二种通信方式service
查看服务列表:rosservice list
通过
rosservice list
来查看服务列表:
手动通过服务来进行操作
我们手动来生成一个新海龟,在服务列表中,有一个/spawn服务可以生成一个新海龟。
使用
rosservice call /spawn
接tab键补充
格式:rosservice call (参数) 服务名 “具体数据”
(x,y)是小海龟生成的坐标,theta是小海龟生成的角度,name是新生成小海龟的名字。
这里我更改了(x,y)坐标为(2.0,2.0),名字为turtle2
然后回车我们就可以看到生成一个新海龟了。
然后我们输入
rostopic list
,可以看到turtle2已经在topic里面了。
5、话题记录与复现:rosbag
我们试想一个场景,如果我们在实验室A做了一番的实验,但是因为设备或者其他原因使得我们无法继续在实验室A继续做实验,这使得我们不得不搬到实验室B,这样我们就会面临一个问题:数据的保存和复现的问题
我们不可能在实验室B把所有过程都重新执行一遍,这样太费时间了。因此我们可以在实验室A把过程数据保存下来,然后再实验室B复现一遍就可以继续实验了,这就出现了话题记录与复现的功能。
常用命令:
rosbag record -a -O 文件名
比如我们使用之前打开的键盘操作器让海龟移动一圈并记录下来:
执行命令后,就会开始记录开发者的执行过程,我们通过键盘方向键来移动小海龟,然后结束可以按
Ctrl+C
来停止。
保存的文件记录在主目录下:
接下来我们要复现一遍刚才移动小海龟的记录,我们先关闭所有小海龟的ROS节点,重新开启
roscore
,开启小海龟节点
rosrun turtlesim turtlesim_node
复现之前的移动过程的格式为:
rosbag play 文件名
这时我们输入以下命令来复现之前的移动过程:
rosbag play cmd_record
版权归原作者 Aaron-ywl 所有, 如有侵权,请联系我们删除。