ROS(Robot Operating System)を使う
安曇野の森から > ROS(Robot Operating System)を使う > ローンチファイル
ローンチファイルは複数ノードを一度に起動するためのファイルです。
起動するノードの情報はローンチファイルにXMLで記述されています。
XMLはWebページなどに使われるHTMLと同じタグ記述言語と呼ばれるものです。XMLの詳細についてはネット上に豊富に情報があるので、そちらを検索してみてください。
ローンチファイルは以下のようなタグ(<>で囲まれたものがタグ)で構造化(階層化)されたテキストファイルです。
<nodeと/>の間に起動したいノードの属性を記載し、<launch>と</launch>の間に入れます。<launch>と</launch>の間には複数の<nodeと/>を入れることが出来ます。
roslaunchコマンドを使ってローンチファイルを実行すると各<nodeと/>間に記載されたノード属性に従って各ノードが同時に起動されます。
ノードが同時に実行されるといっても各ノードの初期化ros::init()のタイミングが完全に同時になるわけではないのでノード間の通信開始タイミング等、各ノード間での同期には注意が必要です。
ローンチファイルの最上位の構造は以下のように<launch>と</launch>タグで括られた部分でlaunchエレメントと呼ばれています。
launchエレメントは以下のように省略することも出来ます。
launchエレメントの中には<nodeと/>タグで括られた以下のようなnodeエレメントを入れることが出来ます。
nodeエレメント内には、どのノードを起動するかなどの属性が記載されます。
上記の基本的な属性の意味は以下のとおりです。
pkg | ノードプログラムが含まれているパッケージの名称を設定します。 |
type | ノードプログラムの実行名を設定します。 |
name | ノード起動時のノード名を設定します。ここで設定されたノード名はノードプログラム中のros::init()で定義したノード名をオーバーライド(上書き)し、別のノードとして起動することが出来ます。 |
ローンチファイルで実行されたノードの標準出力はデフォルトではコンソールには表示されずログファイルに記録されます。
コンソールに出力されるようにするにはノードの属性として以下を追加する必要があります。
属性に以下のように追加するとノードが何らかの理由により終了してしまった場合に再起動させることが出来るようになります。
逆に以下のように追加するとノードが終了してしまった時にローンチファイルに記載されている全てのノードを停止させることが出来ます。
respawnとrequiredは背反する要求なので両方を記載してはいけません。
以下のroslaunchコマンドを使って実行します。
roslaunchコマンドを実行した際にroscoreが起動していない場合、roscoreが自動で起動されます。