nodeの中に含まれるどのROSnameについても、コマンドラインから実行されたときは、リマップされることができます。これはコマンドラインからさまざまな設定を同じノードに対して行ったうえで実行できるROSの強力な特徴です。リマップが可能なものは、nodeの名前、topicの名前、パラメータの名前です。あなたは、プライベートのnodeパラメータにも割り当てることができます。ROSの特徴は、コードを書いているときではなく実際にシステムの実行をするまで、複雑な名前の割り当てをするのを延ばすことができる。
リマップされる変数は、name:=new_nameの形の文法をとることでいかなるものにも与えることができます。たとえば、talkerのnodeの配信する/wg/chatterをchatterの代わりに使いたい場合、
rosrun rospy_tutorials talker chatter:=/wg/chatter
とすることで、名前を目的のものに変えられます。
検索する前に、変数を解決します。これによって、以前は、特定の文字列にのみリマップは適用されていても名前全体をリマップすることになります。たとえば、foo:=barは以前は、fooにのみ一致したのですが、これは、/<node_namespace>/fooにも一致することになります。解決後、ダイレクト文字列一致がつかわれるので、名前の一部をリマップすることはできません。つまり、foo:=barは、foo or /<node_namespace>/fooには一致しますが、foo/bazは一致しません。これに対する一つの例外は、古い行動を保持するsearchParamを使った時です。これは、searchParam自身が、非解決名として働くからです。
例
Node 名前空間 |
リマップ変数 |
マッチングネーム |
解決された名前 |
/ |
foo:=bar |
foo, /foo |
/bar |
/baz |
foo:=bar |
foo, /baz/foo |
/baz/bar |
/ |
/foo:=bar |
foo, /foo |
/bar |
/baz |
/foo:=bar |
/foo |
/baz/bar |
/baz |
/foo:=/a/b/c/bar |
/foo |
/a/b/c/bar |
さまざまなROSのライブラリで、簡単に、あなたの変数のパースからパースリマップ変数を簡単に除くクライアントサポートを提供します。 The various ROS libraries provide client support for easily stripping remapping arguments out of your own argument parsing.
"Pushing Down"
ROS_NAMESPACE environment variableは実行されているnodeの名前空間を変えるようにすることで、効果的に、nodeのなかのすべての名前をリマップさせてくれる。すべてのnodeはグローバル名前空間の中で実行されているので、この効果は、子の名前空間へと落ちるようになっている。nodeのなかのすべての名前はリスコープされるので、nodeの名前空間を変えるのは、コードを統合するための簡単な仕組みである。
注意:これらが正常に動作するには、プログラムがグローバルネームの使用をさけて変わりに相対的でプライベートなネームを使うことが大切である。
== Nodeのパラメータの割り当て== アンダースコア_を記号として用いることで、直接コマンドラインからnodeのためにprivate parameters を割り当てることができます。 たとえば、
rosrun rospy_tutorials talker _param:=1.0
は、~paramを1.0に設定します。ROSはYAMLの文法をパラメータのタイピングを決定するのに使用します。
Special keys
__name
__name is a special reserved keyword for "the name of the node." It lets you remap the node name without having to know its actual name. It can only be used if the program that is being launched contains one node.
__log
__log is a reserved keyword that designates the location that the node's log file should be written. Use of this keyword is generally not encouraged -- it is mainly provided for use by ROS tools like roslaunch.
__ip and __hostname
__ip and __hostname are substitutes for ROS_IP and ROS_HOSTNAME. Use of this keyword is generally not encouraged as it is provided for special cases where environment variables cannot be set.
__master
__master is a substitute for ROS_MASTER_URI. Use of this keyword is generally not encouraged as it is provided for special cases where environment variables cannot be set.
__ns
__ns is a substitute for ROS_NAMESPACE. Use of this keyword is generally not encouraged as it is provided for special cases where environment variables cannot be set.