ROS 2のパラメータを使う
前々回、rclcpp (ROS Client Library for C++) を読み解く (2)の続きで、サンプルプログラムを書いていくつもりでしたが、本日は途中で出てきたROS 2のパラメータに関して、まず学ぶことにしました。
ROS 2にもROS 1と同様にパラメータがあります。 パラメータというのは、グローバル変数みたいなものであり、ノードをまたいでアクセスすることができます。 ただし、取得、設定の通信速度は速くありませんので、動的に逐次変化するものはトピックで扱い、ほぼ静的でたまに変化するものをパラメータとして扱いましょう。
パラメータの種類
パラメータには以下のデータ型を使うことができます。最後のbytes[]
はバイナリデータを扱うために用いられます。
float64
:浮動小数点数int64
:整数string
:文字列bool
:論理値bytes[]
:バイト列
パラメータの設定・取得
rclcpp (ROS Client Library for C++) を読み解く (1)で見たパラメータ関連のメソッドを呼ぶことで、パラメータの値を設定、取得することができます。
ソースコードは下記デモのものを参考にしました。
https://github.com/ros2/demos/tree/master/demo_nodes_cpp/src/parameters
パラメータの非同期取得
パラメータは上記rclcpp::parameter_client::SyncParametersClient
を使うと、パラメータの値が取得できるまで待ってしまいますが、非同期取得の方法も用意されています。
auto parameters_client = std::make_shared<rclcpp::parameter_client::SyncParametersClient>(node);
を
auto parameters_client = std::make_shared<rclcpp::parameter_client::AsyncParametersClient>(node);
に変更し、パラメータの取得メソッドを非同期処理ライブラリでよく使われるFutureパターンを使って、Futureオブジェクトの取得と値の取り出しの2段階に分けるだけです。 これにより、Futureオブジェクトだけ取得し何らかの時間がかかる処理をして、その後、値を取り出すことができるようになります。
その他、コールバック関数でイベントドリブンに処理することもできます。
Comments powered by Disqus.