SEED Noidで用いるLaunchファイルを通じたroslaunchの理解

roslaunchとは?

roslaunchとは,複数のROSノードをまとめて起動/停止するためのツールである.
“XXXX.launch”という1つまたは複数のファイルから構成される.

launchファイルを用いたノード群の起動方法

roslaunchでlaunchファイルに書かれたノードを起動するためには,以下の様に,パッケージ名とlaunchファイル名を示す必要がある.

$roslaunch   [args]

SEED Noidで用いているlaunchの例を以下に示す.

$roslaunch seed_r7_bringup seed_r7_bringup.launch

これは,seed_r7_bringupというパッケージに含まれているseed_r7_bringup.launchというファイルを実行することを示している.
このコマンドにより,launchファイルに書かれいる情報に従い,ROSノードが起動する.

seed_r7_bringupの中身の説明

launchファイルを理解するためにはXMLに関する知識が重要である.
Googleで検索すれば説明が見つかるので,調べて理解すること.
最低限の知識として,がタグ開始,がそのタグの終了を表す.
なお,1行で書く場合は終了のタグの省略が可能であり, のように書くことができる.

1行目のはXML文書である事の宣言であり,おまじないとして良い.

XMLでは,HTMLとは異なり,タグはユーザで設定でき,ROSでは,launchファイル用にタグが定義されている.

roslaunch/XML

なお,roslaunchでは,深さ優先探索で,上から順番に処理が行われる.
以下に,2020/03/07現在のseed_r7_bringup.launchの中身を示す.

 
 
 
 
  <!-- parameters when using models in official package -->
 
 
  <!-- parameters when using models in user packages -->
 
 
 
 
 
  <!-- other settings -->
 
 
 
  <!-- controller settings / load from yaml -->
 
 
 
 
 
 
 
 
 
     <!-- [ Hz ] ( rate of read/write cycle) -->
       <!-- scaling of target time -->
 
 
 
    joint_state_controller:
      type: joint_state_controller/JointStateController
      publish_rate: 50
 
 
 
 
 
 
 
 
  <!-- spawing joint controllers -->
  <!-- names of controllers depend on robot type (described at controller_settings.yaml) -->

まず,前述のように,1行目のはXML文書である事の宣言である.
続いて,2行目のから51行目のまでがlaunchファイルの実態を示している.

3行目から,16行目までに見られるタグは,変数の定義を示している.

tagの説明

3行目を例に説明する.

 

ここでは,引数名である”robot_model_plugin”のデフォルト値を”seed_r7_robot_interface/typef”と設定していることになる.
以降,同じように引数の値をセットしている.

続いて,19行目〜21行目では,タグが定義されている.

tagの説明

タグは,rosparamの書かれたYAMLファイルを読み込むことなどができる.
19行目から21行目では,command=”load”として,YAMLファイルを読み込むことを宣言し,その後でYAMLファイルのパスを指定するよう宣言されている.

19行目を例にする.

 

commandでload(読み込み)を指定し,fileプロパティで読み込むファイルのパスが設定されている.
ここで,$(arg controller_settings)として,11行目で定義しているcontroller_settingsに定義されているファイルパスを参照している.
また,21行目に注目すると

 

のように書かれており,$(find package-name)/path/sample.yamlのように,パッケージ名で探索するように指定している.
この形でのパス指定もよく用いられる.

続いて,23行目〜30行目では,ROSノードを起動するために,タグが用いられている.
タグはROSノードの起動や終了ができるため,重要なタグとなっている.
roslaunchでは,ノードの起動順番を厳密に制御できないため,どんな順番で起動されても柔軟に動作するように,ROSノードを設計する必要があるので注意する.

 
 
 
 
 
     <!-- [ Hz ] ( rate of read/write cycle) -->
       <!-- scaling of target time -->

23行目でタグの後にあるプロパティとして,”pkg”はパッケージ名を表している.
続いて,”type”はノードタイプを示している.続いて,”name”はノード名を示している.
outputは標準出力,標準エラー出力の先を指定しており,”screen”であればターミナル上,”log”とすると,$ROS_HOME/logに出力される.
タグの要素として,ここでは,タグを用いて,ノード内で利用するパラメータの設定が行われている.
これまで見てきたタグと同様に,変数名を”name”で指定し,valueでセットする値を記述している.
ここでセットする値でも代入が可能であり,宣言よりも前に書かれているような変数を$(arg robot_model_plugin)として,代入することができる.

32行目からは,rosparamタグにおいて,YAMLファイルを読み込む形ではなく,直接変数を書き込む形の記述が行われている.
具体的には,

 
    joint_state_controller:
      type: joint_state_controller/JointStateController
      publish_rate: 50

ここでの書き方の例では,[joint_state_controller]という構造体の中の,要素である[type]と[publish_rate]に値を書き込んでいる.