えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

rqt_graphを改造してmermaidも出力するようにしてみた

ROS使いであればお馴染みのGUIツールの一つに「rqt_graph」があります。

rqt_graphは、ROSのノード間の接続を確認することができるツールです。

プログラムをノードで管理するROSの特徴を的確に表しているため、これのスクリーンショットをしばしば貼られたりします。

今回は、このrqt_graphにできる限り近い形でmermaidに落とし込むプログラムを作成しました。


mermaidとは

Mermaidはテキストデータをもとにフローチャートやシーケンス図、クラス図を作成可能なツールです。

Markdownドキュメントと非常に相性が良いこともあり、GitHubにも機能が追加されています。

mermaid-js.github.io


mermaid化したいけど面倒→自動生成しよう!

rqt_graphの図形をREADMEに貼り付けるためにはスクショを撮って貼り付けるためのディレクトリを新規に作成して…が必要なので、できればmermaidにすると手軽に通信網を共有することができるでしょう。

しかし、mermaidの記法に慣れているわけでもないと使おうと考えすらしません(怠惰)

そこで、rqt_graphの情報をもとにmermaidも自動生成しようと考えていました。


とりあえずrqt_graphをフォークしてmermaidの出力に必要な接続情報を探すことに。

print出力を繰り返すうちに、描画する情報を集めるノード(dotcode.py)からedgesという情報が有効であることに気づきました。

github.com

edges はEdgeクラスのリストで、__slot__ で定義されている ['start', 'end', 'label', 'key', 'rkey', 'qos'] の要素を使用するとよさそうです。


これらのうち

  • start : トピック発行側
  • end : トピック購読側
  • label : トピック名

を使用してmermaid発行に使用することにしました。


リポジトリ

今回作成したリポジトリ「rmermaid_graph」は以下のリンクからクローン可能です。

github.com

rqt_graphと区別するために名前を変更しています。

ビルド後はrqt_graphと同じ使い方で

rmermaid_graph

と実行すれば動きます。


実行中は以下の画像のような出力が出ます。

https://raw.githubusercontent.com/Ar-Ray-code/rmermaid_graph/humble-devel/image_readme/mermaid.png


あとは、出力されたコードをGitHubやNotionなどに貼り付ければいいです。

トピックを絞りたい場合などは、rqt_graphのチェックボックスなどをつけてください。


更新予定

引数に渡されたテキストファイルにmermaidを書き出したり、GUIなしでも実行できるようにしたいです。

ぜひ、希望があればissueやプルリクエストを送ってもらえると助かります🙏