ROS入门之使用命令行工具控制小海龟移动

本文介绍了如何使用ROS的命令行工具,包括rostopic、rosservice、rosnode等,以小海龟为例,演示了启动、控制节点以及分析系统图的过程。通过rqt_graph展示了节点间的话题通信,并利用rosnode和rostopic工具深入理解ROS系统。此外,还涉及了话题记录与复现,展示了rosbag的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面的文章主要是说明一下ROS入门需要了解的基本概念,这篇文章则是要说明一下如何使用命令行工具。

2.1 命令行工具的使用 

ROS有很多常用命令:rostopic、rosservice、rosnode、rosparam、rosmsg、rossrv等等。

我们以启动小海龟为例来学习一下命令行工具的使用。

2.1.1 首先我们操作一下简单的小海龟

  1. 打开第一个终端,输入如下指令启动ROS Master。
    roscore

    出现上图界面即可。

  2. 打开第二个终端,输入如下指令启动小海龟仿真器。

    rosrun turtlesim turtlesim_node 

     出现上图界面即可。

  3. 打开第三个终端,输入如下指令启动海龟控制节点。

    rosrun turtlesim turtle_teleop_key 

     出现上图界面即可。此时我们可以在这个终端通过输入键盘的上下左右来控制小海龟的运动。

 2.1.2 接下来我们就开始玩点有意思的

在上一步的操作中到底蕴含了哪些ROS的基本原理,我们要怎么运用到之后的一些工程,我们需要通过一系列的工具来分析一下。

  • 我们打开第四个终端,输入如下指令来显示系统计算图
    rqt_graph

    (ROS中有一系列“rqt”开头的工具都是基于QT的可视化工具,我们可以很直观的看到很多信息。)

    出现如上界面 。在这个界面很清晰地列出来了当前ROS系统的两个节点(两个椭圆形为两个节点):turtlesim为仿真器节点、teleop_turtle为键盘控制节点。turtle1/cmd_vel为两个节点之间的话题通信。

  • 接下来我们来看几个没有界面产生的命令行工具,这些命令行工具都是以“ros”开头

  • rosnode:用来显示系统当中所有节点相关信息的指令。

  1. 输入如下指令来列出来系统中所有的节点。

    rosnode list 

     

     出现上图界面,可以看到这里罗列出了三个节点,发现跟上一步相比多了一个rosout节点,这个节点是只要启动roscore就会启动的一个采集系统所有的日志信息提交给系统做显示的话题。

  2. 输入如下指令来查看某一个节点具体的信息是什么样的。(以turtlesim为例)

    rosnode info /turtlesim 

    出现上图界面。 我根据自己的理解做出了如下解释。

  • rostopic:用来显示系统当中所有话题相关信息的指令。
  1. 输入如下指令来列出来系统中所有的话题列表。
    rostopic list

    出现上图界面。那我们也可以通过指令给相应话题发布数据让小海龟运动,输入如下指令:

    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方向以1m/s的速度运动,为什么会只移动一小格呢?是因为我们这个话题只发布了一次,那怎样让海龟一直动呢?我们需要给这个指令一条循环:

    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" 
    

    让这个指令每秒发送10次,可以看到如下图:

    看到海龟会一直运动下去。

  • rosmsg:用来显示系统当中所有消息相关信息的指令。
  1. 输入如下指令来列出来系统中某一条消息的数据结构。(以geometry_msgs/Twist为例)
    rosmsg show geometry_msgs/Twist
    

     出现上图界面。

  • rosservice:用来显示系统当中所有服务相关信息的指令。
  1. 输入如下指令来列出来系统中所有的服务列表。
    rosservice list
    

    出现上图界面。 

  2. 输入如下指令产生第二只海龟。

    rosservice call /spawn "x: 2.0
    y: 2.0
    theta: 0.0
    name: 'turtle2'" 
    

    出现上图界面。此时我们再输入之前的一条指令。

    rostopic list

    出现上图界面, 可以看到我们已经可以通过指令控制第二只海龟的运动了

2.1.3 ROS的话题记录和复现

可以记录系统目前所有的话题数据并且保存下来并在下次用的时候复现出来。

  • 话题记录
  1. 输入如下指令开始记录当前的数据。
    rosbag record -a -O cmd_record

     以上界面是运行结果,表示已经开始记录了,现在我们可以随便地控制海龟做运动。结束之后我们就可以在主文件夹下找到该文件。

  • 复现记录

  1. 我们重新打开两个终端,分别输入roscore和rosrun turtlesim turtlesim_node 启动海龟。

  2. 打来第三个终端,输入如下指令复现上一步的运动。

    rosbag play cmd_record.bag 

    运行结果如上图,可以看到已经复现出来了一个一模一样的运动。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值