使用 rqt_console 和 roslaunch
主要內容:使用rqt_console和rqt_logger_level進行調試,以及如何使用roslaunch同時運行多個節點。
rqt和turtlesim兩個程序包安裝:
sudo apt-get install ros-kinetic-rqt ros-kinetic-rqt-common-plugins ros-kinetic-turtlesim
使用rqt_console和rqt_logger_level
- rqt_console屬於ROS日誌框架(logging framework)的一部分,用來顯示節點的輸出信息
- rqt_logger_level允許我們修改節點運行時輸出信息的日誌等級(logger levels)
- logger levels包括 DEBUG、WARN、INFO和ERROR
- 現在讓我們來看一下turtlesim在rqt_console中的輸出信息,同時在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啓動後輸出的所有信息,如下圖所示:
-
現在讓我們刷新一下rqt_logger_level窗口並選擇Warn將日誌等級修改爲WARN,如下圖所示:
-
現在我們讓turtle動起來並觀察rqt_console中的輸出(非hydro版):
rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 0.0
- hydro版:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 0.0]'
- 效果:
日誌等級說明
- 日誌等級按以下優先順序排列:
Fatal
Error
Warn
Info
Debug
-
Fatal是最高優先級,Debug是最低優先級。
-
通過設置日誌等級你可以獲取該等級及其以上優先等級的所有日誌消息。
-
比如,將日誌等級設爲Warn時,你會得到Warn、Error和Fatal這三個等級的所有日誌消息。
-
現在讓我們按Ctrl-C退出turtlesim節點
-
接下來我們將使用roslaunch來啓動多個turtlesim節點和一個模仿節點以讓一個turtlesim節點來模仿另一個turtlesim節點。
使用roslaunch
- roslaunch可以用來啓動定義在launch文件中的多個節點。
- 用法:
$ roslaunch [package] [filename.launch]
- 先切換到beginner_tutorials程序包目錄下:
$ roscd beginner_tutorials
- 如果roscd執行失敗了,記得設置你當前終端下的ROS_PACKAGE_PATH環境變量
- 設置方法如下:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 如果你仍然無法找到beginner_tutorials程序包,說明該程序包還沒有創建,那麼請返回到ROS/Tutorials/CreatingPackage教程,並按照創建程序包的操作方法創建一個beginner_tutorials程序包。
- 然後創建一個launch文件夾:
$ mkdir launch
$ cd launch
Launch 文件
- 現在我們來創建一個名爲turtlemimic.launch的launch文件並複製粘貼以下內容到該文件裏面:
1 <launch> 2 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> 10 11 <node pkg="turtlesim" name="mimic" type="mimic"> 12 <remap from="input" to="turtlesim1/turtle1"/> 13 <remap from="output" to="turtlesim2/turtle1"/> 14 </node> 15 16 </launch>
Launch 文件解析
- 現在我們開始逐句解析launch xml文件。
<launch>
- 在這裏我們以launch標籤開頭以表明這是一個launch文件。
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>
- 在這裏我們創建了兩個節點分組並以'命名空間(namespace)'標籤來區分,其中一個名爲turtulesim1,另一個名爲turtlesim2,兩個組裏面都使用相同的turtlesim節點並命名爲'sim'。
- 這樣可以讓我們同時啓動兩個turtlesim模擬器而不會產生命名衝突。
11 <node pkg="turtlesim" name="mimic" type="mimic"> 12 <remap from="input" to="turtlesim1/turtle1"/> 13 <remap from="output" to="turtlesim2/turtle1"/> 14 </node>
- 在這裏我們啓動模仿節點,並將所有話題的輸入和輸出分別重命名爲turtlesim1和turtlesim2,這樣就會使turtlesim2模仿turtlesim1。
</launch>
- 這個是launch文件的結束標籤。
roslaunching
- 現在讓我們通過roslaunch命令來啓動launch文件:
$ roslaunch beginner_tutorials turtlemimic.launch
- 現在將會有兩個turtlesims被啓動,然後我們在一個新終端中使用rostopic命令發送速度設定消息:
- 非hydro版:
$ rostopic pub /turtlesim1/turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8
- hydro版:
$ rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
- 你會看到兩個turtlesims會同時開始移動,雖然發佈命令只是給turtlesim1發送了速度設定消息。
- 我們也可以通過rqt_graph來更好的理解在launch文件中所做的事情。
- 運行rqt並在主窗口中選擇rqt_graph:
$ rqt
- 或者直接運行:
$ rqt_graph
-
效果:
-
到此,我們算是已經學會了rqt_console和roslaunch命令的使用,接下來我們開始學習使用rosed——ROS中的編輯器。
-
現在你可以按Ctrl-C退出所有turtlesims節點了,因爲在下一篇教程中你不會再用到它們。