ROS2チートシート

投稿者: | 2019年12月15日

現状ではROS2にまともなドキュメントがないので、チートシートを作成しておきます。
開発中に困ったことをその場で書き足していくので内容は薄いです。

rclpy

logger

launchしたらprint周りが表示されなくなってしまうから、ちゃんとloggerで出力しましょう。

時刻の計算

地獄

ROS1の.msgファイルでは時刻の型はtimeでしたが、ROS2ではbuiltin_interfaces/Timeとなります。

以下のスクリプトはメッセージ内に含まれるtimeから現在時刻との差分を取る例です。

 

他ノードのparameterを取得

ROS2ではroscoreが廃止され、各ノード毎にパラメータサーバを保有しています。
ですので、他ノードのパラメータを取得するには少々面倒な処理が必要となります。

他ノードとのparameterまわりの通信を行う方法は、ros2cliのros2 paramコマンド周りの実装を参考にすれば分かります。

他ノードからparameterの値を取得する場合、具体的な処理は

に記載されています。

  • GetParameters.Request()したことによるresponseはrcl_interfaces.srv.GetParameters_Response
  • response.valuesはrcl_interfaces.msg.ParameterValue型のarrayが格納されています。

ParameterValueには型のtype(bool, integer等)及びその型に応じたvalueが用意されています。
(以下、printしたときの例)

自分で型のtypeを確認し、型に応じてinteger_valueやらdouble_value等から取得しないといけません。めんどくさい。

get_parameters_from_another_nodeメソッドを用意しておけば便利。多分。
(本来の型と違うparameter値でoverwriteされた時のことは考慮していないので注意)

リストの取得やsetの方法についてはros2cliを参照してください。

cmake周り

同一パッケージ内でC++とPythonスクリプトを共存させる

Pythonスクリプトをモジュールとしてインストールはできますが、ノードとして登録する方法は謎。(検索中)
とりあえずament_python_install_packageしたらモジュールのinstallはされます。

(参考) rclpyのCMakeLists.txt

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です