ros2front v1.0
前置き:
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の呼び出し
Todo & 抱負:
まだまだ機能的には貧弱だが、「フロントエンドの領域でROS2に貢献する!」という目標を具現化した初のツールなので、大事に開発していきます!以下の機能をこれから実装して行くつもりです:
- String以外データフォーマットのデコード機能の追加
-
rosboard
のように関数ベースへの作り直し - Reactブランチの作成
- rosbag2!!!を呼び出す機能
また、以下の不足点も改善していきます:
- コーディング技術の向上:きちんと設計せずにコードを書いてしまう癖があるため、開発や設計手法を学び直して公開に達する質に近づきます。
- 仕事は社内で使うWebシステムを作っていて、デバッグは現場任せでテスターを真面目に書いたことはありません。ソフトウェアの品質を向上させるためにフロントエンドのテスターやCIツールを積極的に活用します。
以上、ros2front v1.0の紹介でした。これからも「フロントエンドの領域でROS2に貢献する」をモットーに、フロントエンドやROS2を極めて行きます。ros2frontのことをよろしくお願いします!~
Discussion