📘

ROS2におけるパラメータ

2023/09/03に公開

解説対象

本記事では、ROS2で登場する各種パラメータをまとめています。

本記事は下記の「ROS2を深く理解する」の記事群の一部ですが、この記事単独でも理解できるようになっています。

https://zenn.dev/uedake/articles/ros2_collection

前提

  • 調査はROS2 humble時の実装に基づいていますが、基本的にdistributionに依存しない内容です。
  • 調査はc++側の実装(rclcpp)に基づいていますが、基本的にクライアント言語に依存しない内容です。

解説

ROS2におけるパラメータ

ROS2においてパラメータと呼べるモノは下記表の通り多数あります。
※パラメータ(parameter)という用語と引数(argument)という用語は明確に区別せず、動作を決定するために外部から与えられる変という意味で用いています。

これらパラメータを理解することがROSのソフトウェア設計には欠かせません。

表1:ROS2における各種パラメータの一覧

概念 目的 形式 値の型
ノードパラメータ ROSノードの動作を変更する 名前がついている値の組(key-value dictionary形式) bool, int64, double, string, byte[], bool[], int64[], double[], string[]
コマンドラインROS引数 グローバルROS引数を生成する コマンドライン引数(フラグと値の配列) string
グローバルROS引数 executable中の全ROSノードの初期化処理を制御する rcl_arguments_impl_s構造体 rcl_params_t他多数
ローカルROS引数 個別のROSノードの初期化処理を制御する rcl_arguments_impl_s構造体 rcl_params_t他多数
launch引数 launch fileの動作を変更する 名前がついている値の組(key-value dictionary形式) str
xacro実行引数 URDFの生成時に可変値を与える 名前がついている値の組(key-value dictionary形式) str
xacroマクロ引数 マクロの実行時に可変値を与える 名前がついている値の組(key-value dictionary形式) str(※1),xmlブロック

※1:xacroマクロ引数の値は内部的には単なるstr型として受け渡される(マクロを呼ぶ側がhoge="1"を入力した場合、これはstr型の"1"として受け取られる)。ただし、${hoge + 1}等の形式でxacroマクロ引数を使用する時にhoge部分が置換される時にeval()によって値が解釈される("1"という文字列はintの1と解釈される)。そして最終的に${hoge + 1}の結果はint型の2となる(これを受け取る側では文字列として解釈し、str型の"2"となる)

表2:ROS2における各種パラメータのアクセス性

概念 宣言要否 読み出し 書き換え 初期値
ノードパラメータ 原則、明示的に宣言しておいた値のみ受け取れる 自ROSノードの値はフィールド参照で読み出し可能。他ROSノードの値はROSサービスを使用して読みだし可能(制限することも可能) 自ROSノードの値はフィールド参照で書き込み可能。他ROSノードの値はROSサービスを使用して書き込み可能(制限することも可能) executable実行時にコマンドラインROS引数を用いてグローバル初期値を設定可能な他、executable実装時のコード中でローカル初期値を設定可能
コマンドラインROS引数 不要 自プロセスの値をexecutableのmain関数の引数argvから読み出せる 不可 executable実行時のコマンドライン引数として値を指定する
グローバルROS引数 不要 自プロセスの値をグローバルデフォルトコンテキストから読みだせる 不可(ローカルROS引数で上書きは可能) コマンドラインROS引数から生成される
ローカルROS引数 不要 自ROSノードの値をフィールド参照で読みだせる 不可 executable実装時のコード中(Nodeのconstructorへの引数)で実装する
launch引数 必要。DeclareLaunchArgumentアクションで宣言する launchファイル中のどこでも読み出せる 不可 launchコマンドのコマンドライン引数として値を指定する
xacro実行引数 必要。xacro:argにおいてname=で宣言する xacroファイル中(includeしたxacroファイル含む)のどこでも読み出せる 不可 xacroコマンドのコマンドライン引数として値を指定する
xacroマクロ引数 必要。xacro:macroにおいて params=で宣言する 宣言したマクロ中でのみ読み出せる。 不可 マクロ呼び出し時に値を指定する

ノードパラメータは単に「パラメータ」と呼ばれることもありますが
この記事では取り違えないようにノードパラメータと呼んでいます。

GitHubで編集を提案

Discussion