rqt_consoleとroslaunch
Simple Wiki Based Contents Management System
関心分野 >> Ros4Winのインストール >> rqt_consoleとroslaunch

rqt_consoleとroslaunch

このページでは、ROSシステム開発時に使う rqt_console, rqt_logger_level、及び複数のノードを一度に起動できるroslaunchについて説明していきます。

rqt_consoleとrqt_logger_levelを使ってみる

ROSノードの動作を確認するためにコンソールへの出力やログ機能がよくつかわれます。通常のターミナルでROSノードを起動するとDebugやInfoなどレベルの異なる情報が流れていきます。ROSノードの動作の確認には、この情報を効率的に選択できると非常に便利です。ROSシステムでは、このような情報の効率的な選択を行うツールとして rqt_consoleとrqt_logger_levelがあります。
rqt_consoleは、コンソール出力の拡張版であり、rqt_logger_levelはノードの実行時のログ詳細レベル(Debug, Warn, Info, Error)の変更を可能にするツールです。
では、このツールの動作をturtlesimを例にとして確認してみましょう。
まず、ターミナルから rqt_consoleとrtq_logger_levelを起動しましょう。
 > rosrun --start rqt_console
 > rosrun --start rqt_logger_level1
このコマンドで下のような2つのウィンドウがあらわれます。


次に、turtlesim_nodeを起動してみましょう。
 > rosrun --start turtlesim turtlesim_node
今、ログ出力レベルはInfoになっていますので、turtlesim_node起動しに出力される情報がみえていますので、rqt_consoleは下のようになっていると思います。

次に、rqt_logger_levelでログ出力レベルを変更してみましょう。ログ出力レベルの変更は、下のようにrqt_logger_levelのLevelsの選択を変更するだけです。

これでログ出力レベルが変更できましたので、turtlesimの亀を壁に向かって直進させてみましょう。
 > rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- "[2.0, 0.0, 0.0]" "[0.0, 0.0, 0.0]"
亀が壁に当たると下のようにWarningが出力されると思います。

rqt_consoleでは、出力された情報をログ出力レベルで選択したり、ノードを指定して選択的に出力を得ることもできます。
色々試してみて、これらのツールの動作を確認してみてください。

roslaunchを使って複数のノードの一括起動

これまでの例では、ROSノードを移動するためにrosrunコマンドを使っていました。このコマンドは、パッケージとノード名を指定して、1つのROSノードを実行するスクリプトです。
ROSシステムで大規模なシステム開発を行った場合には、rosrunで一つ一つ起動させるのではなく、関連するノードを単一のコマンドで起動させたくなってきます。このような場合には、roslaunchというコマンドを使います。
roslaunchコマンドの使い方は、下のようになっています。
 >roslaunch
Usage: roslaunch [options] [package] <filename> [arg_name:=value...]
       roslaunch [options] <filename> [<filename>...] [arg_name:=value...]

If <filename> is a single dash ('-'), launch XML is read from standard input.

roslaunch: error: you must specify at least one input file
これからもわかるようにroslaunchでROSノードを起動させるにはlaunchファイルが必要になります。

launchファイル

では、turlesim_nodeを同時に2つ起動させるlaunchファイルを作成してみます。適当なエディタで turtlemimic.lanuchというファイルを新たに作成して、下のように記述してください。
 <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ファイルは、簡易なXMLファイルになっており、launchタグで囲まれた部分に起動させたいノードなどを記述していきます。

launchファイルの説明

roslaunchで実行できるファイルは、簡易XMLファイルです。ここで「簡易」と呼んでいるのは、XMLファイルであれば、必ず最初に
 <?xml version="1.0">
のようにXMLファイルであることを宣言するタグがないということです。
また、launchファイルは、必ず<launch>タグから始まります。(例の1行目)
次の3行目から9行目の<group>タグは、turtlesim_nodeを起動させる部分です。
  <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>
通常、rosrunで起動させた場合には、__name:X=XXXのような引数を指定しなければ、ROSノードの名前が衝突してしまいます。
しかしこの例のように、<group>タグで異なる名前空間を指定することで、名前が衝突することなく、2つのturtlesim_nodeを起動させることができます。
次の11行目から14行目の部分は、mimicというROSノードの起動です。
  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>
mimicというノードは、模倣動作を行うノードなのですが、どのノードを模倣させかを通常は引数などで指定しますが、ここでは<remap>タグで指定しています。
これで turtle2がturtle1eの動作を模倣することになります。
最後の16行目は、</launch>タグでlaunchファイルを閉じています。

launchファイルでを起動してみる

では、先ほど作成したlaunchファイルでROSノードを起動してみましょう。
 > start roslaunch turtlemimic.launch
このコマンドを実行するとturtlesimの画面が2つ起動したと思います。
次に、rostopic pubコマンドで下のように円を描いて動く命令を送ってみます。
 > rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- "[2.0, 0.0, 0.0]" "[0.0, 0.0, -1.8]"
このコマンドは、1つの亀にしかコマンドを与えていませんが、2つのturtlesimの亀が下のように動いていると思います。

これは、launchファイルでturtle1の出力をturtle2の入力に渡しているためです。
これらのノードの通信状態(連結状態)を確認するために、rqt_graphで確認してみましょう
 > rosrun --start rqt_graph
これで下のような出力が得られると思います。

このページでは、rqt_console, rqt_logger_levelとroslaunchを使ってみました。ROSでは、このほかにもrqt_XXXというツールがありますので、各コマンドを実行して動作を確認してみてください。
次は、ROSのパッケージを作成していきたいと思います。

資料