4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rqt_graphの代わりにros2_graphを使ってtopic, service, actionの関係性を可視化する【ROS】

Last updated at Posted at 2024-07-28

お疲れ様です。秋並です。

rqt_graphではrosのトピックの送受信の関係をグラフで可視化することができます。
これにより各ノード間でどのようなやり取りをしているかを確認できるためシステム全体を把握するときに大変便利なツールです。


一方で、rqt_graphには以下のようなデメリットも存在します。

  • serviceを可視化できない
  • actionは表示されるが、topicと同じように表示されるため、topicとactionの違いを見分けにくい

いいツールがないか探していたところ、「ros2_graph」というツールが公開されていたので、今回は、このros2_graphについて紹介します。

動作環境

  • OS: ubuntu22.04 (on WSL2)
  • ROS version: humble

ros2_graphとは

ros2_graphとは、下図のようにノード間でやり取りされるtopic, service, actionの情報を可視化したグラフを生成するツールです。

image.png

rqt_graphとros2_graphの比較

ros2_graphは、rqt_graphと比較して

  • serviceを可視化できる
  • topicとactionを区別して表示するため見やすい

といったメリットがあります。


一方で、以下のようなデメリットも存在します。

  • topic, service, action以外のtfやparamなどは可視化できない(rqt_graphではできる)
  • rqt_graphのように「更新ボタンを押して動的に確認」のようなことはできない。(毎回ファイルとして出力する必要がある)
  • ファイル出力に時間がかかる(topicなどが多くなると数十分かかることも)

特に、tfトピックの流れは確認したい時も多いと思うので、その点は注意が必要です。

ros2_graphのインストール

ros2_graphのインストール方法を解説します。

ros2_graphのリポジトリのREADMEにも記載されている内容です。
アップデートが入るなどしてインストール手順が変更される場合もあるので、以下の手順でエラーが発生した場合は、READMEを確認してください。

ros2_graphをインストールします

pip install ros2-graph

グラフを画像として出力するために必要なパッケージをインストールします。

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install nodejs
npm install -g @mermaid-js/mermaid-cli

ros2_graphを使ってみる。

インストールが完了したので、さっそくros2_graphを使ってみましょう。

今回は、turtlesimノードとteleop_turtleノードを起動し、その関係性をグラフに出力したいと思います。


最初に、turtlesimノードとteleop_turtleノードを起動します。

ros2 run turtlesim turtle_teleop_key
ros2 run turtlesim turtlesim_node

次に、ros2_graphを実行します。

ros2_graph /turtlesim /teleop_turtle -o ./turtle_node_graph --outputFormat svg

上記コマンドを一般化すると以下のようになります

ros2_graph /ノード1 /ノード2 ... -o 出力ファイル名 --outputFormat 出力ファイル形式

なお、 --outputFormatオプションがない場合、mdファイルとして、mermaid記法のグラフが出力されます。


コマンドが実行されると、turtle_node_graph.svgという名称の以下のような画像ファイルが出力されます。

image.png

複数のノードを含むグラフを簡単に生成する

ros2_graphでは、以下コマンドのように、グラフを出力したいノードを一つずつ記載していく必要があります。

ros2_graph /ノード1 /ノード2 ... -o 出力ファイル名

しかし、ノードの数が多くなると全てのノードをこの形式で記述するのは面倒です。

そこで、ここからは「複数のノードを含むグラフを簡単に生成する方法」を紹介します。

全てのノード間の関係性を示したノードグラフを出力

最初に、「全てのノード間の関係性を示したノードグラフ」を出力する方法を紹介します。

この方法は、システム全体のノードの関係性を確認したい場合などに有効です。


以下コマンドを実行すると、「全てのノード間の関係性を示したノードグラフ」がsvgファイルとして出力されます。

ros2_graph $(ros2 node list) -o <出力するsvgファイルのファイル名> --outputFormat svg

/turtlesimノードと、/teleop_turtleノードを起動している場合は、以下のようなノードグラフが出力されます。

image.png

timeoutのエラーが発生した場合は、以下コマンドでros2 daemonを起動しなおしてください。

ros2 daemon start

各ノードを中心としたノードグラフを、それぞれのノードごとに出力

次に、「各ノードを中心としたノードグラフを、それぞれのノードごとに出力」する方法を紹介します。

この方法は、ノードの数が多く、1つの図にまとめてしまうと、グラフが複雑で見づらい場合などに有効です。


最初に、以下のbashファイルをros2_graph.bashという名前で作成します。

nodes=$(ros2 node list)

dir_path=$1
for node in $nodes; do
    node_without_slash=$(echo $node | sed 's/^\///')
    ros2_graph $node -o ${dir_path}/${node_without_slash} --outputFormat svg
done

次に、作成したbashファイルの権限を変更します。

sudo chmod 666 ros2_graph.bash

最後に、bashファイルを実行します

bash ros2_graph.bash <出力先ディレクトリまでのパス>

これで、各ノードを中心としたノードグラフが、それぞれのノードごとにsvgファイルとして出力されます。

例えば、~/hoegというディレクトリに出力したい場合は、以下になります

bash ros2_graph.bash ~/hoge

/turtlesimノード、teleop_turtleノードの2種類のノードを起動している場合は、以下二つのsvgファイルが出力されます。

  • /turtlesimノードを中心としたノードグラフ
    image.png

  • teleop_turtleノードを中心としたノードグラフ
    image.png

さいごに

今回は、ros2_graphの使い方を紹介しました。

4
1
0

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
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?