0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROS2メッセージをBuilderパターンで書く

Last updated at Posted at 2024-05-12

実装例

下記の例では,ROS2のパラメータ記述に関するクラス(ROS2 メッセージ)を,提供されているBuilderパターンを使って実装した例

#include <rclcpp/rclcpp.hpp>
#include <rcl_interfaces/msg/parameter_descriptor.hpp>
#include <rcl_interfaces/msg/floating_point_range.hpp>
#include <rcl_interfaces/msg/integer_range.hpp>

// ...

node->declare_parameter(
      "sigma_x",
      1.0,
      rcl_interfaces::build<rcl_interfaces::msg::ParameterDescriptor>()
        .name("sigma_x")
        .type(rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE)
        .description("The sigma of gaussian in x axis")
        .additional_constraints("")
        .read_only(false)
        .dynamic_typing(true)
        .floating_point_range(
          rosidl_runtime_cpp::BoundedVector<rcl_interfaces::msg::FloatingPointRange, 1>(
            {
              rcl_interfaces::build<rcl_interfaces::msg::FloatingPointRange>()
                .from_value(1.0)
                .to_value(100.0)
                .step(0.001)
            }))
        .integer_range(
          rosidl_runtime_cpp::BoundedVector<rcl_interfaces::msg::IntegerRange, 1>()));

普通にやるときとの違い

普通とは? 下記のような感じ

rcl_interfaces::msg::ParameterDescriptor param_desc;
param_desc.name = "sigma_x";
param_desc.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
param_desc.description = "The sigma of gaussian inn x axis";
param_desc.additional_constraints = "";
param_desc.read_only = false;
param_desc.dynamic_typoing = true;
rcl_interfaces::msg::FloatingPointRange fpr;
fpr.from_value = 1.0;
fpr.to_value = 100.0;
fpr.step = 0.001;
param_desc.floating_point_range = { fpr };

ROS2の...builder.hppで提供されるBuilderパターンを用いる場合は:

  • すべてのプロパティの値を明示的に書かなければならない(すべてをコードで示す)
    • 実装例にあるような,rcl_interfaces::msg::ParameterDescriptorにはデフォルト値があるため,普通のやり方で書く場合は,変更不要なプロパティには触らなくても良い
      • param_descを宣言した時点で設定される値があるので,その値が求める値なら省略してもよい
    • ROS2メッセージの...builder.hppでは,すべてのプロパティについて値を設定しながらメッセージを構築する仕様であるため,省略ができない
  • Builderパターンを使うと,行数が多くなりがちではあるが,バージョン変更に伴うデフォルト値の変更の影響を受けなかったり,すべてが明示されるためプロパティの制約を把握しやすいなどのメリットはあると思う
    • プロパティそのもの存在がなかったことになったり,追加されたりした場合はその限りではない
  • 個人的には人に依るさじ加減が入る余地がないので好き

注意すべきこと

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?