🤖

ros2front v1.0

2021/12/14に公開

前置き:

ROS2の勉強を始めて1年、1つのマイルストーンおよびROS2に関連する一発目の記事の記念として、自作するツール「ros2front」を紹介することにしました。まだまだ開発途中で機能は少ないが、OSSの恩恵を受けている1ユーザーの恩返しとして、勇気出してROS2に関する細やかな知見をシェアします。

コンセプト:

ros2frontは、フロントエンドの世界でも簡単にros2の機能を扱えるためのツールです。
フロントエンドとは、Webアプリケーションにおいて直接ユーザーの目に触れる部分のことで、ユーザーインタフェース(UI)に大きな比重を置きながら、バックエンドとの通信の橋渡し役も担います。フロントエンドについて詳しく知りたい方は、Font-endのロッドマップを参照するといいでしょう。

開発経緯:

さって、ros2frontの開発は、ROS Japan UG #44 LT大会rosboardに関する発表を聞いたのがきっかけでした。仕事でWebサービスを主戦場にしてきた自分にとって、ROS2のオフィシャルが提供している便利なクライアントインタフェースのおかげでそこまでアウェー感を感じなかったものの、慣れてない言語でなかなか攻める(開発する)意欲は湧きにくかったです。

そこで2つの素晴らしいライブラリーに出会い、見る世界は変わりました。

1つは前述のrosboardで、ROS(2)のトピック内容を立ち上げたWebサーバーでかっこよく可視化してくれます。公式のGitHubにも書いたように、スタイリッシュなTopicメッセージの可視化機能の他、ROS1とROS2の同時対応、レスポンシブデザイン、軽量で動きは早い上に優れる拡張性を持っています。このrosboardからコンセプトのインスピレーションを頂きました。

そしてもう1つは以前micro-ROSのサンプルを動かす時に知ったrclnodejsです。rclcppやrclpyと同様にROS2のユーザークライアントの1つで、Node.jsを通じてROS2の機能を使えるようになります。

rosboardとの違うところ:

車輪の再開発は勉強になりますが、完全なコピーにならないように相違点を意識しながら開発しています。

  • 複数開発言語 vs Javascriptオンリ:

rosboardでは視覚化タスクをJavasciptや関連ライブラリーに任せている以外に、ROS2のクライアントライブラリーをrclpy、websocketのライブラリーをtornadoを使用しているため、Pythonの比重も少なくありません。メリットとしてはオフィシャルで提供しているrclpyの機能をフルに使えること、機械学習関連コードを組みやすくなることなどの点が挙げられるが、その反面2種類のコードをメンテナンスする必要があります。

ros2frontはすべてのコードをJavaScriptベースを採用しているため、構成はより一貫性を持ち、開発が楽になります。

  • 二刀流 vs ROS2一筋

rosboardは使用しているROSのバージョンにより自動的にクライアントライブラリー(rospyか、rclpyか)を切り替えていて汎用性は高いです。ros2frontは未来を見据える開発となっているのでROS2のみのサポートとなります。ROS1へのサポート終了は2025年だと決めてあるので、これからの新規開発はROS2に絞ったほうがいいかもしれません。

現有機能のDemo:

すでに実装済みの機能は以下の通りです。

  • 簡易のユーザーインタフェース
  • アクティブになっているTopicの購読
  • 購読したトピックメッセージの表示(Stringのみ)
  • デバッグツールrqt_graphの呼び出し

demo

Todo & 抱負:

まだまだ機能的には貧弱だが、「フロントエンドの領域でROS2に貢献する!」という目標を具現化した初のツールなので、大事に開発していきます!以下の機能をこれから実装して行くつもりです:

  • String以外データフォーマットのデコード機能の追加
  • rosboardのように関数ベースへの作り直し
  • Reactブランチの作成
  • rosbag2!!!を呼び出す機能

また、以下の不足点も改善していきます:

  • コーディング技術の向上:きちんと設計せずにコードを書いてしまう癖があるため、開発や設計手法を学び直して公開に達する質に近づきます。
  • 仕事は社内で使うWebシステムを作っていて、デバッグは現場任せでテスターを真面目に書いたことはありません。ソフトウェアの品質を向上させるためにフロントエンドのテスターやCIツールを積極的に活用します。

以上、ros2front v1.0の紹介でした。これからも「フロントエンドの領域でROS2に貢献する」をモットーに、フロントエンドやROS2を極めて行きます。ros2frontのことをよろしくお願いします!~

リポジトリ:

[https://github.com/chaos4ros2/ros2front]

Discussion