主要介绍rqt_console命令和 rqt_logger_level命令来进行调试,roslaunch进行一次性启动多个节点。
# <distro>替换为自己电脑上对应的ROS版本 sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
我们在前述博客中已经安装过这些包,如果没有安装的话可以执行上面的sudo apt-get install命令。安装的包如下:
ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim
使用rqt_console 和 rqt_logger_level命令
首先,我们退出之前的节点和ROSCore。重新打开一个Terminal,输入下述命令:
$ rosrun rqt_console rqt_console
启动如下所示的界面:
接着输入下述命令:
$ rosrun rqt_logger_level rqt_logger_level
启动如下所示的界面:
现在,我们再打开一个新的Terminal,然后启动turtlesim包中的turtlesim_node节点。
因为默认的记录器级别为INFO,我们可以看到turtlesim启动时在console中发布的信息,如下所示:
现在我们通过在rqt_logger_level的窗口中选择为Warn,并刷新把记录器级别改为Warn。
现在,我们让小乌龟动起来,一直往前走撞墙,并查看rqt_console中的输出情况,输入命令:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 0.0]'
小乌龟行走一段时间撞墙:
在rqt_console中可以看到,一直在输出warn警告信息。
关于logger级别的快速说明
记录器级别按照以下的优先级别进行排序。
Fatal Error Warn Info Debug
Fatal是最高的优先级,Debug有最低的优先级。通过设置logger的级别,我们可以得到当前优先级或者更高级别的消息。例如,通过设置级别为Warn,则可以得到Warn、Fatal、Error等级别的logging消息。
下面我们使用Ctrl + C结束现有的turtlesim节点,接着使用roslaunch命令来调用多个turtlesim节点和一个模拟节点,来使一个节点来模拟另外一个。
使用roslaunch
roslaunch命令可以通过在launch文件中定义来启动多个节点。用法如下:
$ roslaunch [package] [filename.launch]
首先,我们切换到前述博客中所创建的beginner_tutorials包中:
$ roscd beginner_tutorials
如果上述命令提示类似于没有这个包之类的错误,则原因可能是因为我们没有激活catkin_ws的工作环境(参考:ROS学习-创建一个工作空间)
$ cd ~/catkin_ws $ source devel/setup.bash $ roscd beginner_tutorials
然后在beginner_tutorials包中创建一个launch文件夹,并切换到launch文件夹中,创建一个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>
launch文件解析
现在我们对上述中所创建的turtlemimic.launch文件内容进行解析。
首先,launch文件以一个标志开头,让这个文件能够被识别为launch文件。
<launch>
接下来,我们开始两个命名空间ns为turtlesim1 和 turtlesim2的groups,节点名称为"sim"。这允许我们启动两个模拟器而不会产生名称冲突。如下所示:
<group ns="turtlesim1"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group>
接着,我们开始模拟节点,主题输入和输出重命名为turtlesim1和turtlesim2,此重命名将使turtlesim2模仿turtlesim1。如下所示:
<node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1"/> <remap from="output" to="turtlesim2/turtle1"/> </node>
最后,我们通过下述结尾,即以一个 xml 标签的形式对launch文件进行结尾。
</launch>
roslaunch命令
现在,我们使用roslaunch命令来启动上述所创建的launch文件。命令如下:
$ roslaunch beginner_tutorials turtlemimic.launch
可以看到一次性启动了两个小乌龟,其中turtlesim2是在模仿turtlesim1的一系列行为。
接着,如果我们在一个新的Terminal中发送一个rostopic命令给turtlesim1节点,使其进行运动。命令如下:
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
则可以发现两个turtlesim1节点同时旋转起来:
我们也可以使用 rqt_graph 命令来查看当前节点,理解Launch文件中的关系。
使用rqt_graph命令,查看各节点之间的关系如下:
$ rosrun rqt_graph rqt_graph
也可以简单的使用命令:
$ rqt
或者命令:
$ rqt_graph
打开rqt主界面,依次点击Plugins -> IntroSpection -> Node Graph 添加节点图。
输出结果如下图所示:
上述介绍中,我们成功使用了 rqt_console 和 roslaunch命令。