ROS1学习笔记:ROS命令行工具的使用(ubuntu20.04)

Posted Aaron-ywl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS1学习笔记:ROS命令行工具的使用(ubuntu20.04)相关的知识,希望对你有一定的参考价值。

参考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

上面我们通过使用topicmsg来控制节点,这次我们来使用第二种通信方式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

以上是关于ROS1学习笔记:ROS命令行工具的使用(ubuntu20.04)的主要内容,如果未能解决你的问题,请参考以下文章

ROS1云课→08基础实践(CLI命令行接口)

ROS学习笔记-ROS1和ROS2

ROS2学习笔记29--项目从ROS1迁移到ROS2的经验参考

《ROS理论与实践》学习笔记海龟仿真器的命令行控制

ROS1云课→09功能包小定制(CLI命令行接口)

ROS1云课→09功能包小定制(CLI命令行接口)