ROS學習筆記七:使用rqt_console和roslaunch
本節主要介紹在調試時使用的rqt_console和rqt_logger_level,以及一次性打開多個節點的工具roslaunch。
使用rqt_console和rqt_logger_level
- rqt_console:主要顯示節點的輸出信息。
- rqt_logger_level:用於設置輸出信息的重要性等級。
還是利用turtlesim例程,看一下其不同等級的輸出。在打開turtlesim之前,首先要運行roscore,然後在兩個不同的終端中輸入以下命令:
rosrun rqt_console rqt_console
rosrun rqt_logger_level rqt_logger_level
可以看到如下彈出的窗口
然後在一個新的終端中輸入以下命令打開turtlesim
rosrun turtlesim turtlesim_node
然後發現rqt_console窗口中就有了一個生成的信息
現在可以更改rqt_logger_level中的信息等級,更改爲warn,則只會顯示warn、error和fatal類的信息。通過rostopic pub
命令向小海龜發送命令讓其撞牆,產生警告信息:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0,0.0,0.0]' '[0.0,0.0,0.0]'
然後在rqt_console窗口中就會顯示撞牆的警告信息:
roslaunch
roslaunch一次性打開在一個launch文件中定義的所有節點。
roslaunch基本語法
roslaunch [package] [launch.file] [args]
roslaunch <launch-file-paths...> [args]
雖然說launch file放在哪裏都可以,只要在運行的時候指明其位置即可。但是一般來說,都會在軟件包目錄下創建一個文件夾launch,以用來存放所創建的launch文件。
指明launch file文件位置的方式有兩種:
第一種是直接指明launch file的絕對路徑位置
第二種是指明軟件包名稱和放在軟件包目錄中的launch file,這種情況下roslaunch會在軟件包目錄中尋找和指定文件匹配的launch file
roslaunch beginner-tutorials turtlemimic.launch
roslaunch ~/ros-tutorial/src/beginner-tutorials/turtlemimic.launch
WARNING: Package name "beginner-tutorials" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits and underscores.
... logging to /home/mountzf/.ros/log/9f76d9e2-6b34-11e6-a83d-000c29521e21/roslaunch-ubuntu-4381.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://ubuntu:44397/
SUMMARY
========
PARAMETERS
* /rosdistro: indigo
* /rosversion: 1.11.20
NODES
/
mimic (turtlesim/mimic)
/turtlesim1/
sim (turtlesim/turtlesim_node)
/turtlesim2/
sim (turtlesim/turtlesim_node)
ROS_MASTER_URI=http://localhost:11311
core service [/rosout] found
WARNING: Package name "beginner-tutorials" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits and underscores.
process[turtlesim1/sim-1]: started with pid [4399]
process[turtlesim2/sim-2]: started with pid [4400]
process[mimic-3]: started with pid [4401]
rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2,0,0]' '[0,0,1.8]'
其中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>
也可使使用rqt_graph畫出節點之間的關係圖,更加清楚瞭解後roslaunch做了些什麼。
mimic是一個起模仿作用的節點,實現將turtlesim1的數據信息傳送給turtlesim2。
一個node element包含三個必須的屬性:pkg, type, name.
pkg和type屬性指出ROS應該運行哪個pkg中的哪個node,注意:此處的type是可執行文件的名稱,而name則是可以任意給出的,它覆蓋了原有文件中ros::init指定的node name。
在獨立的窗口運行各nodes
我們在各自的termin運行rosrun node_name;但是運行roslaunch時,所有的nodes共用一個相同的terminal,這對於那些需要從控制檯輸入的nodes很不方便。可以使用launch-prefix屬性。
launch-prefix=”command-prefix”
Eg:launch-prefix=”xterm -e”
等價於 xterm -e rosrun turtlesim turtle_teleop_key
xterm 命令表示新建一個terminal; -e參數告訴xterm執行剩下的命令行。
當然,launch-prefix屬性不僅僅限於xterm。它可用於調試(通過gdb或valgrind),或用於降低進程的執行順序(通過nice).
重映射names(remapping names)
除了解析relative names和private names,ROS也支持重映射,用於修改nodes當前使用的名稱。
重映射相當於換名,每次重映射需提供一個original name和一個new name。每次node使用它的original name, ROS client library都會將其替換爲remapping name。
創建remapping name兩種方法:
單個node
對於單個node,在命令行進行remapping(remap對象可以是node,topic等)。
original-name:=new-name
Eg: $ rosrun turtlesim turtlesim_node turtle1/pose:=tim
在launch文件中
在launch文件內remap names,使用remap element
<remap from=”original_name” to “new_name”>
如果remap出現在launch文件開頭,作爲launch文件的子元素,則該remapping將被用於隨後所有的nodes。如果remap作爲某個node的子元素,則只用於該節點。
Eg:<node pkg=”turtlesim” type=”turtlesim_node” name=”turtle1”>
<remap from =”turtle1/pose” to “tim”>
</node>
注意:在ROS進行remapping之前,remaping的所有name,包括original和new names,都將被解析爲global names。所以,remapping之後所有的名字通常都是relative names。
總結
- rqt_console:主要顯示節點的輸出信息。
- rqt_logger_level:用於設置輸出信息的重要性等級。
- roslaunch:一次性打開在一個launch文件中定義的所有節點。
祝楓
2016年8月26日於哈爾濱