ROS使いであればお馴染みのGUIツールの一つに「rqt_graph」があります。
rqt_graphは、ROSのノード間の接続を確認することができるツールです。
プログラムをノードで管理するROSの特徴を的確に表しているため、これのスクリーンショットをしばしば貼られたりします。
今回は、このrqt_graphにできる限り近い形でmermaidに落とし込むプログラムを作成しました。
mermaidとは
Mermaidはテキストデータをもとにフローチャートやシーケンス図、クラス図を作成可能なツールです。
Markdownドキュメントと非常に相性が良いこともあり、GitHubにも機能が追加されています。
mermaid化したいけど面倒→自動生成しよう!
rqt_graphの図形をREADMEに貼り付けるためにはスクショを撮って貼り付けるためのディレクトリを新規に作成して…が必要なので、できればmermaidにすると手軽に通信網を共有することができるでしょう。
しかし、mermaidの記法に慣れているわけでもないと使おうと考えすらしません(怠惰)
そこで、rqt_graphの情報をもとにmermaidも自動生成しようと考えていました。
とりあえずrqt_graphをフォークしてmermaidの出力に必要な接続情報を探すことに。
print出力を繰り返すうちに、描画する情報を集めるノード(dotcode.py)からedges
という情報が有効であることに気づきました。
edges
はEdgeクラスのリストで、__slot__
で定義されている ['start', 'end', 'label', 'key', 'rkey', 'qos']
の要素を使用するとよさそうです。
これらのうち
- start : トピック発行側
- end : トピック購読側
- label : トピック名
を使用してmermaid発行に使用することにしました。
リポジトリ
今回作成したリポジトリ「rmermaid_graph」は以下のリンクからクローン可能です。
rqt_graphと区別するために名前を変更しています。
ビルド後はrqt_graphと同じ使い方で
rmermaid_graph
と実行すれば動きます。
実行中は以下の画像のような出力が出ます。
あとは、出力されたコードをGitHubやNotionなどに貼り付ければいいです。
トピックを絞りたい場合などは、rqt_graphのチェックボックスなどをつけてください。
更新予定
引数に渡されたテキストファイルにmermaidを書き出したり、GUIなしでも実行できるようにしたいです。
ぜひ、希望があればissueやプルリクエストを送ってもらえると助かります🙏