Launch ファイル

本演習では起動( launch )ファイルを使用してノードのグループを一度に起動する方法を見てゆきます.

モチベーション

ROS アーキテクチャは システム内の組織の基本単位として 「ノード」を使用することを奨励しています. そのため多くのノードを動作させる必要が出てきますので アプリケーションが急増します. いちいち新しいターミナルを開いて 各ノードを個別に実行することは事実上困難になります.
こうなるとノードのグループを一度に起動するツールがあると助かります. ROS の "launch" ファイルは そのようなツールの1つです. "launch" ファイルは roscore の起動・停止さえ扱ってくれます.

Scan-N-Plan アプリケーション: 演習問題

本演習では次のことを行います.

  1. パッケージ myworkcell_support を新しく作成する.
  2. launch ディレクトリを このパッケージ内に新しく作成する.
  3. このディレクトリ内に 下記機能を持つファイル workcell.launch を新しく作成する.
    1. fake_ar_publisher を起動する.
    2. vision_node を起動する.

また myworkcell_core ノードを 他のものと一緒に起動するか 別々に起動するか も選択できるようにします.

一般的には 2つの主要な launch ファイル でシステムを構成します. この例では fake_ar_publishervision_node は「環境」ノードですが, myworkcell_nodeは「アプリケーション」ノードです.

  1. 「環境」launch ファイル: ドライバ/動作計画ノード,設定データなど
  2. 「アプリケーション」launch ファイル: 特定のアプリケーションに対してシーケンス動作を実行

Scan-N-Plan アプリケーション: ガイダンス

  1. ワークスペース内に myworkcell_core に依存関係をもつ 新しいパッケージ myworkcell_support を作成してください.

    ROS が新しいパッケージを見つけることができるように ワークスペースをビルドした後に設定を反映させます.

    cd ~/catkin_ws/src
    catkin create pkg myworkcell_support --catkin-deps myworkcell_core
    catkin build
    source ~/catkin_ws/devel/setup.bash
    
  2. launch ファイル用のディレクトリを作成します. (新しい myworkcell_support パッケージ内)

    roscd myworkcell_support
    mkdir launch
    
  3. 新しいファイル workcell.launchlaunchディレクトリ内 )を 次の XML スケルトンで作成します.

    <launch>
    
    </launch>
    
  4. 演習問題に記載されている ノードを起動するための行を追加します.

    詳細はリファレンスを見てください.

    <node name="fake_ar_publisher" pkg="fake_ar_publisher" type="fake_ar_publisher_node" />
    <node name="vision_node" pkg="myworkcell_core" type="vision_node" />
    
    • 留意: すべての起動ファイルコンテンツは <launch> ... </launch> タグのペアの間にある 必要があります.
  5. launch ファイルをテストします.

    roslaunch myworkcell_support workcell.launch
    

    注: roscore と2つのノードは自動的に起動しました. Ctrl+C を押して launch ファイルによって開始された全てのノードを閉じます. 実行中のノードがない場合 roscore も停止します.

  6. 通常のメッセージは コンソールウィンドウに表示されませんでした. launch ファイルはデフォルトでは 重大度 ERROR 未満のコンソール出力が抑制されます. 通常のテキスト出力を復元するには launch ファイルの各ノードに output="screen" 属性を追加します.

    <node name="fake_ar_publisher" pkg="fake_ar_publisher" type="fake_ar_publisher_node" output="screen"/>
    <node name="vision_node" pkg="myworkcell_core" type="vision_node" output="screen" />