**简介:**本章学习如何使用rqt_console以及rqt_logger_level来debug,以及如何使用roslaunch一次性打开多个节点
1.所需工具包
运行以下命令安装所需要的工具包
sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
2.使用rqt_console和rqt_logger_level
rqt_console方便我们查看节点输出日志
rqt_logger_level方便我们调整logger的优先级来确定要显示哪些信息
2.1分别运行rosrun rqt_console rqt_console
和
rosrun rqt_logger_level rqt_logger_level
打开这两个节点,会弹出两个窗口
2.2 接着运行rosrun turtlesim turtlesim_node
打开乌龟节点。
会发现在console串口多了一行信息
2.3 命令行输入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}}'
让小乌龟一直往右走,直到撞墙。
这时候console会一直显示warning信息。
我们可以通过在logger_level里调整turtlesim节点logger优先级来控制要输出哪些信息,优先级有以下几种级别,从上到下优先级逐渐降低。
Fatal
Error
Warn
Info
Debug
如果我们在logger_level里把节点turtlesim里的日志记录器ros.turlesim优先级设为debug,那么所有优先级等于或高于debug的日志信息都能显示,带来的直接后果就是console里面既输出了debug信息,也输出了warn信息。如果设为warn,那么console只输出了warn信息。如果设为error,那么什么信息都不显示。
3.使用roslaunch
3.1 用法
roslaunch可以执行一个launch文件,根据launch文件里面的内容执行相应操作,因此我们就可以通过把多个命令放进launch文件来实现一句命令打开多个节点的操作。
roslaunch [package] [filename.launch]
3.2 准备工作:创建工作空间和package
- 创建和编译catkin workspace
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
- 创建catkin package
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
- 创建文件夹
roscd beginner_tutorials
mkdir launch
cd launch
3.3新建并编辑launch文件
gedit turtlemimic.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>
接着载入该文件
roslaunch beginner_tutorials turtlemimic.launch
弹出两只小乌龟,用rosnode list
查询节点得到有四个节点在运行
/mimic
/rosout
/turtlesim1/sim
/turtlesim2/sim
终端输入rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
发现两只小乌龟都在转圈圈
3.4 launch文件内容分析
- 文件头尾表示该文件是launch文件
<launch>
...
<launch>
- 新建两个有不同命名空间的组(group),命名空间的名字分别为
turtlesim1
和turtlesim2
,这两个组里面分别有一个在package turlesim里的turtlesim_node节点,名字都为sim
3 <group ns="turtlesim1">
4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
5 </group>
6
7 <group ns="turtlesim2">
8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
9 </group>
- 打开turtlesim里的mimic节点并取名为mimic,让mimic的输入是乌龟1号的输出,得到输入之后输出给乌龟2号,以达到乌龟2号模仿乌龟1号的效果。
remap from ... to ...
起到了规定输入输出的作用。
11 <node pkg="turtlesim" name="mimic" type="mimic">
12 <remap from="input" to="turtlesim1/turtle1"/>
13 <remap from="output" to="turtlesim2/turtle1"/>
14 </node>
- 查看节点之间的信号流图
rqt_graph