概要
パラメータはyamlファイルで初期値を設定できる.さて,パラメータを
- declare_parameterで宣言
- undeclare_parameterで削除
- declare_parameterで宣言
など繰り返し,二回目以降の宣言の時にyamlファイルよる初期値設定はどうなるのか?と思ったのでやってみた.
実験
- ROS2バージョン
- foxy
- 2021/08/06
- やり方
- あるパラメータ
param
を宣言,関数としての初期値は0,yamlファイルでは1- declare_parameter("param", 0)を使用
- yamlファイルでは以下と設定
- param: 1
- あるパラメータ
基本の確認
まずはyamlファイルの有無で変わるか確認.当たり前の結果をちゃんと見てみよう!ってところ.
- yamlファイルなしで対象を実行
- ros2 run
- 結果は
0
- yamlファイルありで対象を実行
- ros2 run --ros-args --params-file
- 結果は
1
複数回の宣言とyamlファイルの確認
複数回の宣言とyamlファイルの設定との関係を見るために,declare/undeclareを実行中に変えられるようにプログラムした(サービスで指令を送信してdeclare/undeclareさせた).
- yamlファイルありで対象を実行
- パラメータを宣言(declare)
- ros2 param getでparamの値を取得
- 結果は1
- パラメータを削除(undeclare)
- ros2 param getでparamの値を取得
- 結果は「そんなパラメータないよ」みたいなメッセージ
- ros2 param getでparamの値を取得
- 結果は1
結果
というわけで,declareしたときにyamlファイルの値が設定される.
途中でyamlファイルの中身を書き換えたら?
- yamlファイルありで対象を実行
- パラメータを宣言(declare)
- ros2 param getでparamの値を取得
- 結果は1
- パラメータを削除(undeclare)
- ros2 param getでparamの値を取得
- 結果は「そんなパラメータないよ」みたいなメッセージ
- yamlファイルの中身を
param: 2
に書き換え - ros2 param getでparamの値を取得
- 結果は1
結果
つまり,declareしたときにyamlファイルが読み込まれるのではなく,起動時にyamlファイルの中身が読み込まれ,保存されていて,それが使用されるっぽい.