ROS学习笔记8-rqt_console和roslaunch

本教程来自于:http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch

rqt_console 和 rqt_logger_level 是ros的调试工具(类似于控制台和日志)。roslaunch可以用于一次启动多个节点(不同于rosrun只能启动一个节点)。

  1. 使用rqt_console和rqt_logger_level
    假设安装了ros和rqt工具,以及小乌龟的示例包。rqt_console控制台将ros的日志系统关联到节点的显示输出,rqt_logger_level允许我们在节点运行期间改变他们的信息显示级别。
    信息显示级别包括:DEBUG(调试信息), WARN(警告信息), INFO(提示信息), 和ERROR(错误信息)。
    在运行小乌龟的示例之前,在两个新的终端中分别运行如下语句,打开rqt_console和rqt_logger_level的界面:
    $ rosrun rqt_console rqt_console
    $ rosrun rqt_logger_level rqt_logger_level
    

    rqt_console界面
    ROS学习笔记8-rqt_console和roslaunch

     

     rqt_logger_level界面
    ROS学习笔记8-rqt_console和roslaunch

     

     现在我们在一个新终端中运行小乌龟的示例:

    $ rosrun turtlesim turtlesim_node
    

    则控制台中会出来如下信息:
    ROS学习笔记8-rqt_console和roslaunch

     

     然后我们可以在rqt_logger_level中改变信息级别。
    ROS学习笔记8-rqt_console和roslaunch

     

     将显示级别改为Warning,然后运行如下命令,让乌龟撞墙:

    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
    

     然后我们再看rqt_console中的信息:
    ROS学习笔记8-rqt_console和roslaunch

    可以看出显示出了警告信息。

    所有的日志级别如下:

    Fatal
    Error
    Warn
    Info
    Debug
    

    其中,Debug是最低级别,Fatal是*别,选择一个级别后,会显示选择级别以及比他低的级别。例如,选择Warn后,会显示Debug、Info和Warn级别的信息。

  2. roslaunch
    roslaunch 通过一个启动文件来启动节点
    用法如下:

    $ roslaunch [package] [filename.launch]
    

     使用如下命令进入一个ros包,该例中进入beginner_tutorials

    $ roscd beginner_tutorials
    

     如果提示没有该包,参考文档创建一个ros包。运行如下命令,建立ros的环境。

    $ cd ~/catkin_ws
    $ source devel/setup.bash
    $ roscd beginner_tutorials
    

    然后使用如下命令创建一个启动文件目录:

    $ mkdir launch
    $ cd launch
    

     事实上,不用单独建立个目录来存储启动文件,启动文件可以存放在包目录下的任何位置,ros会自动寻找他,不过为便于文件组织,还是单独创建一个目录比较好。

    然后创建一个启动文件,文件名为:turtlemimic.launch,内容如下:
    <launch>
    
      <group ns="turtlesim1">
        <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
      </group>
    
      <group ns="turtlesim2">
        <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
      </group>
    
      <node pkg="turtlesim" name="mimic" type="mimic">
        <remap from="input" to="turtlesim1/turtle1"/>
        <remap from="output" to="turtlesim2/turtle1"/>
      </node>
    
    </launch>
    

    从启动文件的标签可以看出,该文件采用的xml语法,有两个group和一个node,其中,两个group都有一个ns的标签指定命名空间(namespace)为turtlesim1和turtlesim2,两个group中各有一个node,node的名字(name)为sim。这样可以让我们同时启动两个仿真器而没有命名冲突。然后,我们定义了一个模拟(mimic)节点,该节点有输入输出主题,输入和输出分别被重映射到turtlesim1 和 turtlesim2,该重命名会让turtlesim2模拟turtlesim1(将turtlesim1的输出直接给turtlesim2)。
    然后我们采用roslaunch来启动该文件。

    $ roslaunch beginner_tutorials turtlemimic.launch
    

     输出如下:

    started roslaunch server http://UAVlab1:36470/
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosdistro: kinetic
     * /rosversion: 1.12.14
    
    NODES
      /
        mimic (turtlesim/mimic)
      /turtlesim1/
        sim (turtlesim/turtlesim_node)
      /turtlesim2/
        sim (turtlesim/turtlesim_node)
    
    ROS_MASTER_URI=http://localhost:11311
    
    process[turtlesim1/sim-1]: started with pid [4107]
    process[turtlesim2/sim-2]: started with pid [4108]
    process[mimic-3]: started with pid [4109]
    

    可以看出来,运行了三个节点,分别为/mimic,/turtlesim1/sim和/turtlesim2/sim。
    并出现了两个小乌龟:
    ROS学习笔记8-rqt_console和roslaunch

     

     我们再启动一个新终端,在其中发布消息让turtlesim1中的乌龟开始移动:

    $ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
    

     可以看出来两个窗口里的小乌龟都开始移动:

    ROS学习笔记8-rqt_console和roslaunch

     

     可以看出来其中的消息传递:
    ROS学习笔记8-rqt_console和roslaunch

     

     /mimic节点起到了消息转发的作用。




     

     

         


上一篇:xdoj-构造表达式(平民打法,身为弱鸡看不懂高端操作)


下一篇:2020字节跳动Android开发岗面试,全网首发