LoginSignup
5
2

More than 3 years have passed since last update.

ROS2でament_pythonによるlaunchの作成

Posted at

こんにちは、yamatomatsudaです。テスト前は他の用事が捗りますね。(なお単位ry)
今回はpython packageでlaunch fileを書いていこうと思います。

ROS2のlaunchについて

さて、ros2 のlaunchを書こうと思って検索すると、これがなかなかみつからない。
とりあえずc++のlaunchを移植してみます。
publisher,subscriberはdemo_nodes_pyと同じものを使用します。(talker.py,listener.py
ちなみに、ROS2のヴァージョンはdashingを利用しています。

バッファリング

パッケージ名、ファイル名は適宜書き換え、ros2 runで実行してみます。
setup.pyに、他のパッケージファイルと同じようにpy_modules,entry_pointsを書いておきます。
おそらくctrl+Cが押されるまで何も出力はされないはずです。
これを解決するために、書き込みバッファ内に存在するデータを無理矢理出力させます。
例えば、listener.pyで、

self.get_logger().info('I heard: [%s]' % msg.data)

となっているところを

print('I heard: [%s]' % msg.data,flush=True)

のように、書き換えます。printを利用しているのはNodeクラスのget_loggerにはflushオプションが存在しないからです。
これで、ros2 runコマンドではlaunchが動作するはずです。

ros2 launch コマンド

launchコマンドで動作させるのは苦労しました。(ほんまに何も調べても出てこなかった。)
setup.pyに以下のように書き込めば、ビルド時にlaunchfileがws/install/share/に保存されるはずです。(package_nameは自分のpackage名)

data_files=[
        ('share/' + package_name, ['package.xml', 'test.launch.py']),
    ],

launchのドキュメント用意してよ〜〜!!

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2