Parameter server(パラメータ サーバ)は、共有のネットワークAPIを通してアクセスのできる多変量辞書です。Nodesは実行時にこのサーバを情報を蓄えたり引き出したりするのに用います。高パフォーマンスが行えるようには設計されていないため、設定用パラメータのような静的でバイナリデータではないデータを取り扱うのが最適です。グローバルに見れることになるので、ツールは簡単にシステムの構成の設定を検査することができ、必要となれば修正することができます。
Parameter serverは、XMLRPCを用いて、実行されて、ROSのMasterの中で実行されます。すなわち、そのAPIは通常のXMLRPCのライブラリを用いてアクセスすることができます。
パラメータ
Parameters(パラメータ)は、通常のROSの命名規則と同じです. つまり、topics や nodesなどに使われる名前空間と一致する階層構造をもっているということです. この階層は、パラメータの名前が衝突を起こすことを防ぎます.この階層の構造は、個々または一つのまとまりのパラメータとしてアクセすることを可能にします.たとえば、以下のようなパラメータを見てみます:
/camera/left/name: leftcamera /camera/left/exposure: 1 /camera/right/name: rightcamera /camera/right/exposure: 1.1
パラメータ /camera/left/name はleftcameraという値を持っています. また、連想配列になっている/camera/leftの値を取得することもできます。
name: leftcamera exposure: 1
さらに、パラメータの集合を表す連想配列の連想配列である /cameraの値も取得できます:
left: { name: leftcamera, exposure: 1 } right: { name: rightcamera, exposure: 1.1 }
パラメータの型
Parameter Serverはパラメータのデータの型には以下を含むXMLRPCを使っています。:
- 32-bit integers
- booleans
- strings
- doubles
- iso8601 dates
- lists
- base64-encoded binary data
連想配列(つまり構造)をParameter Serverにためることもできますが、それらは特別な意味を持ちます。Parameter Serverは連想配列の形でROSの名前空間を表現します。たとえば、以下の3つの値をセットしたとしましょう。
/gains/P = 10.0 /gains/I = 1.0 /gains/D = 0.1
その設定した値をそれぞれ、例えば/gains/Pのように呼び出して値の10を取り出したりもできますが、/gainsで上の連想配列を取得することもできます。
{ 'P': 10.0, 'I': 1.0, 'D' : 0.1 }
ROSの命名階層のように、子の名前空間を親の名前空間の中に表現したいようなときは、連想配列のなかに連想配列をネストすることでできます。
Private Parameters(プライベート パラメータ)
ROSの命名 規則では、~nameをprivate name(プライベート ネーム)と呼びます. これらのprivate namesは主に、一つのnodeのためだけのものです。接頭辞の~は、準プライベート名前空間として使うためにnodeの名前の先頭に加えられます。(これらの変数はまだ他のシステムからアクセスできますが、一般的に致命的な名前衝突は起こらないようになっています。)
引数をリマップを利用して、~をアンダースコア_に変えることで、nodeのパラメータをコマンドラインすることで指定することができます。 例えば、
rosrun rospy_tutorials talker _param:=1.0
パラメータ ツール
rosparamのコマンドラインツールは、YAMLの文法を用いて、Parameter Server上にパラメータを設定することを可能にします。
クライアントライブラリサポート
Python
rospy 概要をご覧ください.
C++
roscpp 概要をご覧ください.