Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

参考

kenichi-hamaguchi
最近はpythonが多い。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした