はじめに
ROSにはlaunchというしくみがあり,複数のノードをまとめて実行することができます.変数もそこで設定できたりします.とっても便利です.
システムが大きくなるにつれて,起動すべきlaunchファイルも増えていきますが,includeタグを使えば,複数のlaunchを1つのlaunchにまとめることもできます.
しかし,これでは1つのターミナル上に全てのノードが展開されてしまいます.ROS_INFOなどが見難くなったり,(検証したわけではありませんが)挙動が遅くなったりしそうです.
なので,ひと手間かかるのですが,なんとか1コマンドで複数のlaunchを実行する方法を見つけました.
シチュエーション
ROSのプロジェクトってこんな感じになると思います.
ここで,a.launch, b.launch, c.launchを同時に複数のターミナルで実行することを考えます.
commonはROSのパッケージである必要はありません.
catkin_ws
├── build
├── devel
└── src
├── common
│ ├── bashes
│ │ ├── a.launch.bash
│ │ ├── b.launch.bash
│ │ └── c.launch.bash
│ └── executions
│ └── exe.bash
├── pkg_a
│ ├── CMakeLists.txt
│ ├── launch
│ │ └── a.launch
│ ├── package.xml
│ └── src
│ └── いろいろプログラムある
├── pkg_b
│ ├── CMakeLists.txt
│ ├── launch
│ │ └── b.launch
│ ├── package.xml
│ └── src
│ └── いろいろプログラムある
└── pkg_c
├── CMakeLists.txt
├── launch
│ └── c.launch
├── package.xml
└── src
└── いろいろプログラムある
やりかた
1. ターミナルプロファイルの設定
ターミナルの編集→プロファイルから新規を作成します.
プロファイル名をなんか適当に決めます(ここでは,roslaunchとします).
デフォルトと違うところは,「タイトルとコマンド」タブで設定する「コマンドの実行が完了した時」を「端末を終了する」から「端末を開いたままにする」とします.
背景とか色はご自由にどうぞ.
2. x.launch.bashの作成
ちょっと遠回りなのですが,分けて実行したいlaunchファイルを実行するbashを作成します.
つまりここでは,common/bashesに
#!/bin/bash
roslaunch pkg_a a.launch
を作ります.
もちろんただのbashなので,launchに設定したいargとかがあれば,
#!/bin/bash
roslaunch pkg_b b.launch use_gui:=true
のようにできます.
c.launch.bash
も同様に作ります.
もちろん全て実行可能にしておきましょう.
3. exe.bashの作成
これを実行することで,a.launch.bash
,b.launch.bash
,c.launch.bash
が同時に複数のターミナルで実行されるようにします.
具体的には,
#!/bin/bash
tab="--tab-with-profile=roslaunch --command "
window="--window-with-profile=roslaunch --command "
cd $HOME/catkin_ws/src/common/bashes
gnome-terminal \
$tab './a.launch.bash'\
$tab './b.launch.bash'\
$tab './c.launch.bash'
とします.
あとは,
$ ./catkin_ws/common/executions/exe.bash
のコマンド1つで複数のlaunchが同時にバラバラのターミナルで実行できます.
最後に
結局ROSかんけーないやん,というツッコミはナシでおねがいします...