ROS において、複数の launch ファイルを自動で起動できるように設定する場面がたくさんあると思います。
ところが、それだとまれに問題が起きる時があります。例えばこんな理由です。
- 実機のインターフェースが完了してから起動しないとうまく機能しない node がある
- Gazebo センサプラグインの初期化が完了してから起動しないと機能しない node がある
このような状況においては、launch ファイルを指定時間遅らせて起動する機能が重要となりますが、既存のパッケージでは存在していないようでした。
そこで、そのような機能を実現する timed_roslaunch というパッケージを開発したので、ご紹介を致します。
リポジトリ
対応 ROS ディストリビューション
- indigo
- kinetic
- melodig
インストール
apt を用いる場合
- kinetic のみ (2019/02/17 現在)
sudo apt install ros-kinetic-timed-roslaunch
ソースコードを用いる場合
- indigo, kinetic, melodic
<catkin_ws> は各自の ROS ワークスペースのパスに置き換えて下さい。
cd ~/<catkin_ws>/src git clone https://github.com/MoriKen254/timed_roslaunch.git cd ~/<catkin_ws> catkin_make source ~/<catkin_ws>/devel/setup.bash
使用方法
以下のコマンドの起動を2秒遅延させる場合を例題とし、使用方法をご説明します。
roslaunch turtlebot_navigation amcl_demo.launch initial_pose_x:=17.0 initial_pose_y:=17.0
コマンドライン
専用 launch ファイルからの起動
roslaunch timed_roslaunch timed_roslaunch.launch time:=2 pkg:=turtlebot_navigation file:=amcl_demo.launch value:="initial_pose_x:=17.0 initial_pose_y:=17.0"
- 起動用の launch ファイルから実行する。
- 遅延時間、pkg 名、ファイル名、遅延対象 launch ファイル用の引数、ノード名、をそれぞれ個別の- 引数として渡す。
ROS node による起動
rosrun timed_roslaunch timed_roslaunch.sh 2 turtlebot_navigation amcl_demo.launch initial_pose_x:=17.0 initial_pose_y:=17.0
- ノードを直接実行する。
- timed_roslaunch.sh の引数は1つ。
- 必要なパラメータをまとめてこの1つの引数の中に記述している。
launch ファイルでの記述
専用 launch ファイルからの起動
<launch> <include file="$(find timed_roslaunch)/launch/timed_roslaunch.launch"> <arg name="time" value="2" /> <arg name="pkg" value="turtlebot_navigation" /> <arg name="file" value="amcl_demo.launch" /> <arg name="value" value="initial_pose_x:=17.0 initial_pose_y:=17.0" /> <arg name="node_name" value="timed_roslaunch" /> <!-- This is optional argment --> </include> </launch>
ROS node による起動
<launch> <node pkg="timed_roslaunch" type="timed_roslaunch.sh" args="2 turtlebot_navigation amcl_demo.launch initial_pose_x:=17.0 initial_pose_y:=17.0" name="timed_roslaunch" output="screen" /> </launch>
おわりに
本パッケージで色々な不都合を解決できることを、願っております。