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

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值