はじめに
いつもROSノードを複数起動させる時は以下のようなbashファイルを作って使用していたが、これだとターミナルがノードの数だけ立ち上がってしまうという問題があり解決方法が見つからず困っていた。
#!/bin/bash
gnome-terminal -- roslaunch test test1.launch
gnome-terminal -- roslaunch test test2.launch
stack overflowで何かないか探していたらちょうどいいものがあったのでこれを参考に改善を試みる。
Opening new gnome-terminal (v3.28+) with multiple tabs and different commands
方針
- bashスクリプトを起動するとターミナルが1つ立ち上がる。
- ROSノードはそのターミナル上で新しいタブを作成してその中で起動する。
- 複数ノード起動する場合はその度に新しいタブを作成する。
- 作成されたタブはROSノード終了後も開いた状態を継続できるようにする。
- 作成されたタブは何も手当をしないとROSノード終了後に閉じてしまう。異常終了等の原因究明をするためには開いた状態を継続して欲しい。
環境
- Ubuntu 18.04
実装・使用方法
次のような2つのファイルを用意する。
run.bash
#!/bin/bash
# 新しいターミナルを最大化して立ち上げその中でlaunch_ros_node.bashを起動する。
gnome-terminal --window --maximize -- bash launch_ros_node.bash
launch_ros_node.bash
#!/bin/bash
# 新しいタブ"Tab 1"を作成しその中でROSのlaunchファイルを起動させる。
gnome-terminal --tab -t "Tab 1" -- roslaunch test test1.launch
# 連続でタブが立ち上がると正常に起動できない場合があるので適当にsleepを入れる。
sleep 1
# "Tab 1"はROSノードが終了すると自動的にタブも終了するが、以下のような記述をするとROSノード終了後もbashが立ち上がるのでタブはそのままとなる。
gnome-terminal --tab -t "Tab 2" -- bash -c "roslaunch test test2.launch; bash"
launch_ros_node.bashに起動したいROSノードを記載してrun.bashを起動すれば、上記例の場合1つのターミナルが立ち上がり2つのタブでROSノードがそれぞれ起動する。