Python
ROS
ROSDay 9

roslaunchのコードAPIを使う(**very_unstable**)

Q. roslaunchをPythonから叩きたいやつおるか?w

A. おらんなw

roslaunchはROSでロボットシステムを構築するのに欠かせない機能の1つでしょう。また、その文法は『複雑なROSの構造に対応できるように』よく工夫されていると思います。roslaunchそのものに不足している機能についても、例えばtimed_roslaunchのようなユーザが作成した仕組みによって十分カバーされているように感じます。

と、いうことで、roslaunchをPythonから叩くような必要はほとんどないはずなので、そういうことを思いつく前にまずはしっかりroslaunchの文法ドキュメントとTag Referenceを読みましょう。おわり。

おわりません

ここで終わるとただのポエムになってしまうので、続きを書きます。
roslaunchには神の慈悲でPython向けのAPIが提供されています。ただしこれは、ここに書いてあるように、very unstableです。
APIは以下のように利用することができます。

import rospkg
import roslaunch

# パッケージパスの取得
rospack = rospkg.RosPack()
pkg_path = rospack.get_path('hoge')
launch_path = path + '/launch/hoge.launch'

# uuidの取得とロギング設定
uuid = roslaunch.rlutil.get_or_generate_uuid(None, False)
roslaunch.configure_logging(uuid)

# ROSLaunchParentオブジェクトの作成
# roslaunch.parent.ROSLaunchParent(uuid, [launch_path1, launch_path2, ...])とすることで複数のlaunchを同時に立ち上げることも可能
launch = roslaunch.parent.ROSLaunchParent(uuid, [launch_path])

# roslaunchの立ち上げ
launch.start()

# roslaunchの終了
launch.shutdown()

一見すると便利なように見えますが、例えばlaunch.start()したあとで、起動したroslanuchが動作し続けているのかなどの情報を得ることはできません。そういう機能を必要としているのであれば、diagnoticsとかを使ったほうがよさそうです。

まとめ

roslaunch APIはなるべく使わないようにしよう