Skip to content

Rclcpp

パラメータ

Nodeからいじる

get_parameter

// その1
bool bool_param = node.get_parameter("bool_param").as_bool();
// その2
rclcpp::Parameter parameter;
if(node.get_parameter("any_type_param", parameter)){
    std::cout << "get any type parameter" << std::endl;
}
// その3
if(get_parameter<bool>("bool_param", bool_param)){
    std::cout << "get bool parameter: " << bool_param << std::endl;
}
その1
rclcpp::Parameter get_parameter(const std::string & name) const

名前を指定して、パラメータを返す。
存在しないパラメータに対しては rclcpp::exceptions::ParameterNotDeclaredExceptionを送出する。

その2
bool get_parameter(const std::string & name, rclcpp::Parameter & parameter) const

名前を指定して、引数のパラメータ参照に代入する。
存在しないパラメータの場合、falseが返る。

その3
template<typename ParameterT>
bool get_parameter(const std::string & name, ParameterT & parameter) const

2のパラメータ型をテンプレートで指定するバージョン。
名前を指定して、引数の生パラメータ型の参照に代入する。
存在しないパラメータの場合、falseが返る。
テンプレートで指定したパラメータ型と取得しようとしているパラメータの型が異なる場合、rclcpp::ParameterTypeExceptionを送出する。

get_parameter_or

その1
template<typename ParameterT>
bool
get_parameter_or(
  const std::string & name,
  ParameterT & parameter,
  const ParameterT & alternative_value) const

get_parameterその3のラッパーで、3の返り値がfalseのときに3番目の引数を返す。
パラメータが宣言されていないときに自動で宣言してくれるような機能はない。
返り値はROS空間からパラメータを取得できたかどうか(=alternative_valueが使われたときはfalseが返る)
他のget_parameterと違って実装はnode_impl.hppにあるので注意。

その2
template<typename ParameterT>
ParameterT
get_parameter_or(
  const std::string & name,
  const ParameterT & alternative_value) const

4のラッパーになっていて、パラメータを参照ではなく返り値で返してくれる。