ROS學習筆記七:使用rqt_console和roslaunch

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” tonew_name”>

如果remap出現在launch文件開頭,作爲launch文件的子元素,則該remapping將被用於隨後所有的nodes。如果remap作爲某個node的子元素,則只用於該節點。

Eg:<node pkg=”turtlesim” type=”turtlesim_node” name=”turtle1”>
    <remap from =”turtle1/posetotim”>
</node>

注意:在ROS進行remapping之前,remaping的所有name,包括original和new names,都將被解析爲global names。所以,remapping之後所有的名字通常都是relative names。

總結

  • rqt_console:主要顯示節點的輸出信息。
  • rqt_logger_level:用於設置輸出信息的重要性等級。
  • roslaunch:一次性打開在一個launch文件中定義的所有節點。

祝楓
2016年8月26日於哈爾濱

發佈了47 篇原創文章 · 獲贊 90 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章