2_ROS中的命令行工具

ROS中的命令行工具

ROS中为我们提供了丰富的命令行工具,帮助我们进行代码的编写,调试,测试,框架的搭建,数据的显示等等

大图如下,所有的命令大致可以分为四类,分别是运行相关命令,编译相关命令,包制作管理相关命令,项目创建相关命令

下面进行详细的讲解

在这里插入图片描述

ROS 运行相关命令


roscore

roscore用于启动一个ROS Master,直接输入命令即可启动

jack@ubuntu:~$ roscore 

运行结果如下

在这里插入图片描述


rosrun

rosrun用于运行一个功能包中的某个节点,其后接两个参数,一个是功能包名,一个是要启动的节点名,例如我们下面打开turtlesim功能包下的turtlesim_node节点,这个节点的功能就是打开仿真的图像界面

jack@ubuntu:~$ rosrun turtlesim turtlesim_node 

在这里插入图片描述

接下来我们打开turtlesim功能包中的turtle_teleop_key节点来进行键盘监听,从而使用键盘控制乌龟的运动

jack@ubuntu:~$ rosrun turtlesim turtle_teleop_key

在这里插入图片描述


rqt_graph

我们接下来使用rqt_graph命令来查看当前运行的各个节点之间的关系

rqt是ros中一系列基于qt开发的可视化工具,直接输入rqt_graph即可

jack@ubuntu:~$ rqt_graph 

在这里插入图片描述

我们能够看到,我们目前一共运行了两个节点,这两个节点之间具有数据的传输


rosnode

rosnode命令是用于显示系统中所有节点信息的命令,其中又有多个参数可选

rosnode list

rosnode list用于输出当前所有运行的节点

jack@ubuntu:~$ rosnode list

在这里插入图片描述

这里我们能看到除了刚才rqt_graph中的节点外,还有一个rosout节点

rosout节点实际上是启动ros master时自动就会启动的节点,这个节点主要用于采集所有节点的日志信息,用于提交给其他命令用于显示的

rosnode info

我们能用rosnode info命令来查看某一个具体的节点的信息,例如

jack@ubuntu:~$ rosnode info /turtlesim 

在这里插入图片描述

其中:

  • Publication是当前节点发布的所有信息
  • Subscription是当前节点订阅的所有信息
  • Service是当前节点提供的服务
  • 下面是进程号,主机号,底层通信机制等等一些我们并不是很关注的信息

rostopic

和rosnode类似,rostopic是一个用于查看当前系统运行的所有话题信息的命令,和rosnode一样,也有很多的参数可以选择

rostopic list

rostopic list用于显示当前所有的topic

jack@ubuntu:~$ rostopic list

在这里插入图片描述

rostopic pub

我们可以使用rostopic pub来向某一个topic发布数据

rostopic pub topic名 message名/数据结构名 要发布的数据结构内容

在这里插入图片描述

我们可以给rostopic pub后加-r参数来指定发布的频率

jack@ubuntu:~$ rostopic pub -r 10 turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 1.0
  z: 1.0
angular:
  x: 1.0
  y: 0.0
  z: 1.0"

在这里插入图片描述

此外,由于我们的乌龟是二维平面的,因此我们为其设定x,y方向的角速度是没用的,同理设定z方向的线速度也是没用的


rosmsg

我们可以使用rosmsg来查看,message相关的信息

rosmsg show

我们可以用rosmsg show命令来查看某个message的结构,其后要加查看的消息名

jack@ubuntu:~$ rosmsg show geometry_msgs/Twist

在这里插入图片描述


rosservice

此外我们还可用rosservice来查看service相关的内容

rosservice list

我们可以用rosservice list来查看所有的service

jack@ubuntu:~$ rosservice list 

在这里插入图片描述

当前所有的服务都是由我们的海龟仿真器提供的,即节点/turtlesim提供的,还有一些服务则是rosout提供的,这个我们不用管

我们可以用rosnode info查询

在这里插入图片描述

rosservice call

我们上面查看了所有的service,就像上面我们向某一个topic发布message一样,我们可以使用rosservice call来请求某个服务

我们如果将rosservice理解为某个功能,则rosservice call就是启动这个功能

rosservice call后面加上需要请求的服务名,而有些服务在启动的时候需要带上参数,为此我们和msg一样两下tab补全参数信息即可

我们请求/spawn服务来作为验证,turtlesim这个节点提供的/spawn服务的功能就是产生一个新的海龟,新的海龟在创建时需要新的海龟的位置信息(x,y坐标,左下角为0),初始转向和名字信息

jack@ubuntu:~$ rosservice call /spawn "x: 6.0
y: 2.0
theta: 0.0
name: 'jackTurtle'" 
name: "jackTurtle"

我们运行之后海龟仿真器的界面上出现新的海龟
在这里插入图片描述

上面我们讲过,我们当前运行的所有服务一共有三个节点,除了rosout之外,负责小海龟仿真器运行的有turtlesim和teleop_turtle两个节点

这两个节点一个负责监听键盘输入,一个负责处理海龟的其他信息.这里我们新创建了一个海龟,并不会产生新的node,因为所有的海龟都是由turtlesim节点管理的,如下图

在这里插入图片描述

那么我们新增的海龟到底对什么产生了影响?

我们仔细分析下整个小海龟仿真器的内容,两个节点之间通过cmd_vel这个topic来传输键盘输入,我们新创建的海龟也能够通过键盘来控制,那么我们再查看下所有的topic
在这里插入图片描述

我们能够发现除了一开始的/turtle1的三个topic,还新增了/jackTurtle的三个topic

所以在小海龟仿真器中,海龟的具体表现形式就是topic,我们调用/spawn服务来产生新的海龟的过程实际上就是创建新的topic


rosbag

通常来说我们在进行ROS开发的时候并不会每次修改完代码之后就在实体机上运行,因为这样会对机器造成很大的损耗,因此我们通常是只运行一次机器,然后将机器运行时候所有的数据保存下来,未来在仿真中进行测试

rosbag就是用于记录数据并在仿真中重现的工具

前面讲过,ROS中所有的数据的发布都是以topic的方式传输的,因此rosbag实际上记录的就是所有的topic

rosbag record

rosbag record命令用于记录所有的topic,其参数如下

rosbag record [-a] [-O]
  • -a表示记录所有的topic
  • -O表示将数据保存为一个压缩文件并指定名称

例如我们下面记录键盘控制的小海龟仿真

jack@ubuntu:~$ rosbag record -a -O turtleKeyboardRecord20201128

在这里插入图片描述

完成记录后Ctrl C结束记录,记录的数据将保存在当前的工作目录里

在这里插入图片描述

rosbag play

rosbag play用于重现记录的数据

我们首先重新启动一个ROS Master,然后打开仿真器节点,不需要打开键盘节点

然后输入rosbag play命令,后面要加记录的数据包名

rosbag play turtleKeyboardRecord20201128

rosbag play

rosbag play用于重现记录的数据

我们首先重新启动一个ROS Master,然后打开仿真器节点,不需要打开键盘节点
在这里插入图片描述

然后输入rosbag play命令,后面要加记录的数据包名

rosbag play turtleKeyboardRecord20201128

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45488242/article/details/110265496