使用rqt_console和roslaunch---ROS学习第7篇

Posted loongembedded

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用rqt_console和roslaunch---ROS学习第7篇相关的知识,希望对你有一定的参考价值。


本篇介绍在ROS中使用rqt_console和rqt_logger_level进行调试,以及使用roslaunch同时启动多个节点

1. 准备工作

本篇会用到rqt和turtlesim这两个软件包,需要先安装:

$ sudo apt-get install ros-noetic-rqt ros-noetic-rqt-common-plugins ros-noetic-turtlesim

这里是基于noetic版本。

2.使用rqt_console和rqt_logger_level

rqt_console连接到了ROS的日志框架,以显示节点的输出信息。rqt_logger_level允许我们在节点运行时改变输出信息的详细级别,包括Debug、Info、Warn和Error。

现在我们来看一下turtlesim在rqt_console中输出的信息,同时在使用turtlesim时切换rqt_logger_level中的日志级别。在启动turtlesim之前先在两个新终端中运行rqt_console和rqt_logger_level:

$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level



现在在另一个新终端中启动turtlesim

$ rosrun turtlesim turtlesim_node

默认的日志级别是Info,启动turtlesim后没有看到console中中有打印信息,我移动turtle碰墙后看到了Warn信息,如下:

可以通过在console中显示不同level的信息,比如:

还可以通过LoggerLevel的设置来输出不同level的信息

2.1 日志记录器级别

日志级别的优先级按以下顺序排列:

Fatal (致命)
Error (错误)
Warn (警告)
Info (信息)
Debug (调试)

Fatal是最高优先级,Debug是最低优先级。通过设置日志级别,你可以获得所有优先级级别,或只是更高级别的消息。比如,将日志级别设为Warn时,你会得到Warn、Error和Fatal这三个等级的日志消息。

现在按Ctrl+C退出turtlesim节点。接下来我们将使用roslaunch来启动多个turtlesim节点和一个模仿者节点,来让一个乌龟模仿另一个乌龟。

2.2 使用roslaunch

roslaunch可以用来启动定义在launch(启动)文件中的节点。
用法:

$ roslaunch [package] [filename.launch]

先切换到我们之前创建和构建的study软件包目录下,对应目录是~/catkin_ws/src/study,在此目录下创建launch目录下:

$ mkdir launch
$ cd launch

注意:存放launch文件的目录不一定非要命名为launch,事实上都不用非得放在目录中,roslaunch命令会自动查找经过的包并检测可用的启动文件。然而,这种推荐的标准做法被认为是“最佳实践”。

2.3 launch文件

现在一起创建一个名为study.launch的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>

2.4 launch解析

下面我们开始拆解launch XML文件

<launch>

首先用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>

此处创建了两个分组,并以命名空间(namespace)标签来区分,其中一个名为turtulesim1,另一个为turtlesim2,两个分组中都有相同的名为simde turtlesim节点。这样可以让我们同时启动两个turtesim模拟器,而不会产生命名冲突。

  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

在这里启动模仿节点,话题的输入和输出分别重命名为turtlesim
1和turtlesim2,这样就可以让turtlesim2模仿turtlesim1了。

</launch>

这行使得launch文件的XML标签闭合。

2.5 使用roslaunch

现在通过launch命令运行launch文件

$ roslaunch study study.launch

现在将会会有两个turtlesim被启动,然后我们一个新终端发送命令


我们还可以用rqt_graph来更好地理解launch文件所做的事情。运行rqt_graph

到此,我们已经学会了rqt_console和roslaunch命令的使用。

以上是关于使用rqt_console和roslaunch---ROS学习第7篇的主要内容,如果未能解决你的问题,请参考以下文章

ROS从入门到精通系列rqt_console & roslaunch (下)

ROS从入门到精通系列rqt_console & roslaunch (下)

[ROS-Beginner]8.使用 rqt_console 和 roslaunch

rosrun和roslaunch命令比较

rosrun和roslaunch命令比较

rosrun和roslaunch命令比较