こんにちは、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のドキュメント用意してよ〜〜!!