ここでは以下の名前付けについて述べる
- 名前固定のもの
- node名
- nodeの提供するサービス名,トピック名
- ルールを考えるもの
- ワークスペース名・パッケージ名
- c++などでの一般で言う名前空間
- nodeの名前空間
名前固定のもの
node名
node名はその役割に応じてプログラム中にハードコーディングする.同一nodeを複数起動する場合はnodeの名前空間で区別する.
githubの公式exampleでもnode名は固定になっている.
個別の名付けルール
- "役割など"_node
サービス名・トピック名
node名と同様.
ルールを考えるもの
ワークスペース名・パッケージ名
機能に応じた名前を考え適切につける.
ここで,nodeとメッセージ,テスト用プログラムは別々につくりたい.このことから,以下のようにする.
- ワークスペース名として相応しい名前(例えばreinforcement_learning)を考える.
- そのディレクトリを作成する(mkdir reinforcement_learning)
- reinforcement_learning/にて,必要に応じて部品となるパッケージを作成する.代表的なのは以下の構造となる.
- reinforcement_learning_msgs
- reinforcement_learning_node
- reinforcement_learning_target
- reinforcement_learning/をgitで管理する(個々のパッケージで管理しない)
c++などでの一般で言う名前空間
特にlibraryとしてnodeのクラスを作成する場合,プログラミング言語が提供する名前空間をつける(ROS特有の名前空間は「nodeの名前空間」にて).
少なくとも名前空間として,パッケージ名をつける.それ以上は自由に.
例えばreinforcement_learning_nodesのクラスでは以下のような名前空間をつけること.
namespace reinforcement_learning\node{
}
あとは好みで例えば以下のように
namespace reinforcement_learning_node{
namespace action_selection_method{
}
}
nodeの名前空間
ROS2ではnodeを一意に決定するために,nodeのnamespaceとnode名が使える.公式のAPIのNodeのコンストラクタを見ると指定できることが分かる.
node名だけ指定した場合(node_name),node_nameで指定でき,namespaceも指定した場合,node_nameや/namespace/node_nameで指定できる.
この名前空間については自由に考える.