前言:本教程介绍 ROS 调试中的 rqt_console 和 rqt_logger_level 以及一次启动多个节点的 roslaunch。如果你在使用 ROS fuerte 或者更早的版本,rqt 不是完全可用的,请查看[http://wiki.ros.org/ROS/Tutorials/UsingRxconsoleRoslaunch],使用来的 rx 基础工具。
###1.rqt 和 turtlesim 包的前置需求
本教程使用了 rqt 和 turtlesim 包。使用本教程需要安装 2 个包。如果没有安装过。执行:
$ sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
用你使用的ROS版本名称替换<distro> (比如:indigo, jade, kinetic).
注意:你可能已经在之前的某一个教程构建过 rqt 和 turtlesim。如果你不确定的话,重新安装过一遍也无伤大雅。
###2.使用 rqt_console 和 rqt_logger_level
rqt_console 连接了 ROS 的日志框架,它显示了节点的输出信息。rqt_logger_level 允许我们改变运行的节点繁琐的等级(DEBUG、WARN、INFO、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
你将看到两个悬浮窗:
现在我们可以开启一个新的命令行窗口:
$ rosrun turtlesim turtlesim_node
因为默认的 logger 等级是 INFO,所以你将看到 turtlesim 启动之后发布的任意消息,类似下面图片中看到的:
现在让我们改变 logger 的等级到 WARN,然后在 rqt_logger_level 窗口刷新节点,如下:
现在让我们让小乌龟撞墙,然后看看 rqt_console 将会显示什么消息:
Now let's run our turtle into the wall and see what is displayed in our rqt_console:
ROS Hydro 之后的版本运行:
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}}'
ROS Groovy 之前的版本运行:
rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 0.0
####2.1 快速的学习 logger 的等级
日志等级的优先级如下:
Fatal>Error>Warn>Info>Debug
Fatal 是最高的优先级,Debug 是最低的优先级。通过设置 logger 的等级,可以得到设置的优先级及以上的所有消息。例如,设置 logger 的等级是 Warn,那么可以收到 Warn,Error,Fatal 的日志信息。
对着 turtlesim 窗口点击 Ctrl+C,让我们通过 roslaunch 来建立多个 turtlesim 节点和一个克隆的节点用来一个 turtlesim 克隆另外一个:
####2.2 使用 roslaunch
roslaunch 开启在 launch 文件中定义的节点。
用法:
$ roslaunch [package] [filename.launch]
首先进入我们之前创建的 beginner_tutorials 包:
$ roscd beginner_tutorials
如果使用 roscd 之后看到类似的:No such package/stack 'beginner_tutorials',就需要像创建工作空间那篇教程一样设置环境变量:
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roscd beginner_tutorials
创建 launch 文件夹:
$ mkdir launch
$ cd launch
注意:保存 launch 文件的文件夹不用非要命名为 launch。实际上你甚至不需要把 launch 文件保存在目录中。roslaunch 自动的查找给定的包里面可用的 launch 文件。事实上,结果证明设施一个好的实践。
####2.3The Launch File
现在让我们创建一个 launch 文件,名字叫做 turtlesmimic,然后复制下面的内容:
<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.4launch 文件的说明
现在,让我们来分解 launch 的 xml 文件。
<launch>
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>
这里定义了 2 个组各有一个 namespace 标签,值是 turtlesim1 和 turtlesim2,以及一个 turtlesim 节点,值是 sim。这允许我们开启 2 个仿真器并能避免名称冲突。
<node pkg="turtlesim" name="mimic" type="mimic">
<remap from="input" to="turtlesim1/turtle1"/>
<remap from="output" to="turtlesim2/turtle1"/>
</node>
这里开启 mimic 节点,并具有重命名为 turtlesim1 和 turtlesim2 的 input 和 output 主题。重命名将导致 turtlesim2 克隆 turtlesim1.
<launch>
launch 文件的结束标签。
####2.5roslaunching
现在我们通过 roslaunch 运行 launch 文件:
$ roslaunch beginner_tutorials turtlemimic.launch
两个 turtlesim 窗口将被启动,新建一个新的命令行窗口发送 rostopic 命令:
对于 ROS Hydro 及其之后的版本,
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
对于 ROS Groovy 及其之前的版本,
$ rostopic pub /turtlesim1/turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8
我们可以看到 2 个 turtlesim 窗口里面的小乌龟在移动,尽管我们只发不了消息到 turtlesim1.
我们也可以使用 rqt_graph 来更好的理解上面的 launch 文件做了什么。运行 rqt,然后在主界面的 Plugins 中选择 Node Graph:
$ rqt
或者直接运行:
$ rqt_graph
现在我们已经成功的使用了 rat_console 和 roslaunch,让我们来学习 ROS 编辑选项。使用 ctrl+c 停止所有的 turtlesim,接下来的教程不需要使用到这些。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于