MoriKen's Journal

MoriKen's Journal

アラサー社会人博士による徒然日記。技術についてつらつら。だけだとコンテンツが貧弱なので、会社公認で大学院博士課程に進学した経緯や、独学でTOEICを475→910にしたノウハウを共有します。

【ROS 1】launch ファイルの起動を遅延させる"timed_roslaunch"のご紹介

Sponsored Link

ROS において、複数の launch ファイルを自動で起動できるように設定する場面がたくさんあると思います。

ところが、それだとまれに問題が起きる時があります。例えばこんな理由です。

  • 実機のインターフェースが完了してから起動しないとうまく機能しない node がある
  • Gazebo センサプラグインの初期化が完了してから起動しないと機能しない node がある

このような状況においては、launch ファイルを指定時間遅らせて起動する機能が重要となりますが、既存のパッケージでは存在していないようでした。

そこで、そのような機能を実現する timed_roslaunch というパッケージを開発したので、ご紹介を致します。

リポジトリ

github.com

対応 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>

おわりに

本パッケージで色々な不都合を解決できることを、願っております。

参考記事

qiita.com

qiita.com

qiita.com