LoginSignup
8

More than 3 years have passed since last update.

posted at

updated at

ROSのノードグラフ作図のためのDot言語のサンプル

ROSのrqt_graphで出力されるノードグラフっぽいものを、dot言語で作成するときのサンプル。

dot言語で書く理由

「rqt_graphでノードグラフを自動で作成できるのに、なぜわざわざ手書きをするのか」という当然の疑問に対する答えとして、以下のケースを挙げておきます。

  • 実装前の設計時に、どうしても綺麗なノードグラフを書く羽目になってしまった。
  • 実装はし終わったがnodeletを使っていたため、rqt_graphで出力されるノードグラフの可読性が低くなってしまった。
    • (2019/1/27追記) nodelet managerを使わずに,各ノードレットをstand aloneで起動させれば,rqt_graph内で通常のノードと同じように描画されることに気づきました。なので,後者の場合はノードグラフ描画のためにlaunchファイルを別途作ったほうが早そうです。

また、dot言語はテキストで作図できるため、gitなどで差分管理がしやすく、設計変更時に必要な労力を下げることができます(plant-UMLと同じ哲学です)。dot言語を知らないという方はここなどを見てください。

ちなみに,rqt_graphの画面の右上あたりのボタンから,図をdotファイルとして出力できます。

環境構築のメモ書き

ノードグラフのサンプル

ここではhttp://wiki.ros.org/rqt_graph に出てくる以下の図に相当するグラフをdot言語で書いてみます。
rqt_output

digraph graph_name {
 // graph setting
 graph [
     rankdir=LR; // left to right (default is TB)
 ]

 // nodes (楕円の枠を作る)
 "/joint_state_publisher";
 "/move_group";
 "/virtual_joint_broadcaster_0";

 // topics (長方形の枠を作る)
 "/joint_states"[shape=box];
 "/move_group/display_planned_path"[shape=box];
 "/tf"[shape=box];
 "/planning_scene_world"[shape=box];
 "/planning_scene"[shape=box];

 // link (矢印を作る)
 "/joint_state_publisher" -> "/joint_states";
 "/joint_states" -> "/robot_state_publisher";
 "/joint_states" -> "/move_group";
 "/virtual_joint_broadcaster_0" -> "/tf"
 "/robot_state_publisher" -> "/tf";
 "/tf" -> "/move_group";
 "/planning_scene" -> "/move_group";
 "/planning_scene_world" -> "/move_group";
 // 名前空間(長方形で囲む)
  subgraph cluster_name {
    label = "move_group";
    "/move_group" -> "/move_group/display_planned_path";
  }
}

出力すると、以下のような図ができます。
sample1.png

楕円がノード名を、長方形がトピック名をそれぞれ表しています。名前空間の長方形はsubgraphを使って実現しています。rqt_graphの出力結果と少し異なるようですが、本質ではないので気にしません。

ROSのノードグラフっぽくするポイントとして、rankdir=LRを指定しておくことです。これがないと、下図のように、上から下に矢印が描画されます。これでもいいのですが、今回の場合だと、名前空間のmove_groupの表示が矢印と重なっており、締りが悪いです。
sample1a.png

なお、トピック名は矢印のラベルとして次のように描画することもできます。


"/joint_state_publisher" -> "/robot_state_publisher"[label="joint_states"];

sample2.png

参考

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
What you can do with signing up
8