Skip to main content

Qt Robotics Framework:PoCから実験的モジュールへ

読了時間:

9分

要点まとめ

  • Qt Group は、Qt Robotics Framework(QtROS)の実験的モジュールをリリースし、ROS2 コミュニティに試用とフィードバックを呼びかけています。
  • 開発者には、ROS2(トピック、サービス、アクション、パラメータ、tf2)への強く型付けされた、QML からアクセス可能なブリッジに加え、ロボットの URDF ファイルから直接ライブの Qt Quick 3D シーンを生成するツールが提供されます。
  • UI が ROS2 のメッセージ定義と自動的に同期し、3D シーンがロボット自身の記述ファイルからそのまま得られるため、チームは何ヶ月もかけたカスタム統合なしに、ROS2 のプロトタイプから本番導入レベルの双方向 HMI へと進むことができます。

このブログは「Qt Robotics Framework: From Proof-of-Concept to Experimental Module」を翻訳・一部加筆したものです。

 

3月に開発中の新しいコンセプト、Qt Robotics Framework(PoC)を先行公開しました。これは、ROS2 を通じて Qt をロボティクス分野により本格的に持ち込み、ROS2 ベースのロボット向けに、実用的な双方向 HMI の構築をどう簡単にできるかを示す取り組みでした。URDF ファイルから直接 Qt Quick 3D シーンを生成できるようにする、基本的な利便性の向上もその一環です。 

このプロジェクトによって、本番導入レベルのロボティクス UI の構築に、何ヶ月ものカスタム統合作業は必要ないことが示されました。そして今、このプルーフオブコンセプトが、皆さんが今日から実際に試せるものになったことをお伝えできることを嬉しく思います。

現在利用できるもの

Qt Robotics Framework のパブリックベータを公開します。まずは、開発者から最も多く求められていた2つの要素からです。

  • ROS bridge — ほとんどの ROS2 C++ 型(tf2 ライブラリ、pub/sub トピックとそのメッセージ型、アクション、サービス、パラメータ)に対する、QML からアクセス可能なラッパーです。これにより、ロボットデーモン、デジタルツイン、あるいはその他のリモート制御・監視アプリの多くの部分を、QML で宣言的に記述できます。このコードは、ビルド時にお使いの ROS バージョン(Jazzy と Lyrical で最も多くテストされています)に合わせて生成されます。こちらから始め方を確認できます。モジュールにはサンプルが含まれており、Dogzilla ロボット向けにデーモンとデジタルツインも開発しました。 

  • URDF インポート ― ROS を試すためにロボットを購入した場合、通常は URDF ファイルが付属しています。自分で設計する場合も、ほとんどの CAD システムには URDF ファイルをエクスポートするためのプラグインが用意されています。QtROS モジュールをビルドすると、urdfpreview ツールも併せてビルドされます。URDF ファイルを指定してこのツールを開けば、「デジタルツイン」の Qt Quick 3D 部分をすぐに生成し、ライブでプレビューし(ロボットが発行している ROS トピックにすでに購読し、3D モデルを同期させた状態で)、生成されたコードをディレクトリに保存して、そこから望みの UI の残りの部分を開発していくことができます。

 



なぜこれに取り組んでいるのか

ロボティクスは、かつて多くの産業用ソフトウェアがたどったのと同じ変化を経験しています。ハードウェアとミドルウェアは急速に成熟しており(ROS2 は安定し、Gazebo や Isaac のようなシミュレーションツールも強力です)、それを本番導入レベルの HMI にまとめ上げるための統一されたランタイムが存在しないのです。多くのチームは RViz や Gazebo でプロトタイプを作りますが、それを実際にオペレーターや技術者、顧客が使えるものへと仕上げる段階で、壁にぶつかってしまいます。 

そのギャップこそ、まさに Qt が価値を発揮できる場所だと私たちは考えています。QML は、ロボティクスの専門家ではない UI 開発者にとってもすでに緩やかな学習曲線を持ち、Qt Quick 3D は、シミュレーションされたシーンから実機へと、一から作り直すことなく移行できるレンダリング性能をもたらします。 

QtROS is about giving both sides a shared, strongly-typed interface where a change to a ROS2 message definition regenerates your data handlers instead of silently breaking your UI.

QtROS は、ロボティクスチームに UI の専門家になることを求めたり、その逆を求めたりするのではなく、両者に共有された、強く型付けされたインターフェースを提供するためのものです。ROS2 のメッセージ定義が変更されれば、データハンドラーが再生成され、気づかぬうちに UI が壊れてしまうことはありません。 

さらに、Qt Design Studio や Figma to Qt といった私たちのデザイナー向けツールを使えば、シームレスなユーザー体験を実現するために必要な UI 要素の作成・生成・統合が、はるかに簡単になります。私たちはこれを、Qt エコシステムにとっての利点であるだけでなく、ROS2 エコシステム自体を強化する新たな価値ある要素だと捉えており、今後さらにそれを明確にしていきたいと考えています。QtROS は、RQT や RViz といったツールを置き換えるものではなく、それらと並んで存在することを目指しています。この領域をさらに分断するのではなく、プロトタイプが製品化に向けて動き出す段階で選ばれる GUI としての役割を果たすことを目指しています。 

産業オートメーションにおける Qt Group

開発者向け:内部の仕組み

ROS ブリッジは、ROS2 自身が C++ クライアントライブラリを生成するのと同じ方法で生成されるコードです。メッセージ、サービス、アクションの定義は、ROS2 がすでに使用しているのと同じファイルから取得されるため、それらの定義が進化しても、Qt のバインディングは手作業での追従によってずれていくのではなく、再生成されます。内部的には rclcpp と DDS(デフォルトは Fast DDS、Cyclone DDS と RTI Connext もサポート)の上に構築されていますが、QML からはそのレイヤーをほとんど意識する必要はありません。たとえばサブスクライバーは、プロパティを持つ単なる宣言的オブジェクトです(例示であり、実際のデモコードそのものではありません)。 

import QtRos2.Core as Ros2
import QtRos2.GeometryMsgs
 
Ros2.Node {
    nodeName: "myClient"
 
    PoseStampedSubscriber {
        id: sub
        topic: "/robot/body_pose/state"
    }
 
    Label {
        text: `roll: ${sub.pose.orientation.rpyDegrees.x.toFixed(1)}°`
    }
}

コールバックの登録も、手作業でのメッセージ解析も必要ありません。新しい pose が届けば、ラベルはそのまま更新されます。パブリッシャー、サービス、パラメータ、アクションも同じ考え方に従います。型を宣言し、プロパティをバインドすれば、あとはモジュールが ROS まわりの処理を引き受けます。

URDF については、モジュールに CLI ツール urdfviewer が同梱されています。

urdfviewer -b -u 1000 -p myrobot path/to/robot.urdf ./output

-b は稼働中の ROS2 ロボットにライブ接続してプレビューするためのオプション、-u は単位スケール(たとえばミリメートルからメートルへの変換)を設定するオプション、-p は ROS2 のトピックプレフィックスを設定し、1つのネットワーク上で複数のロボットを共存させられるようにするオプションです。このツールは、URDF のリンク、ジョイント、ビジュアルメッシュに加え、別途定義された(通常はよりシンプルな)コリジョンメッシュや物理特性(質量、慣性)を読み取り、ビジュアル用の Qt Quick 3D シーンと、対応する物理ワールドを同時に生成します。そのため、衝突判定は後から追加する工程ではなく、最初から無料で手に入ります。 

urdfviewer-dogzillaさらに詳しく

次に検討していること

This beta covers ROS2 connectivity and URDF import, which we identified as the foundation. But we don’t plan to stop there. Some of the areas we are looking into how we can fit and solve developers’ problems are around:

 今回のベータ版がカバーするのは、ROS2 との接続性と URDF インポートであり、私たちはこれを基盤と位置づけています。しかし、ここで立ち止まるつもりはありません。シミュレーションと本番環境の両方で働くチームからの実際のフィードバックをもとに、次のような領域について検討を進めています。 

  • ロボティクス向け HMI の構築とイテレーションにおける、開発者体験の改善

  • 主要なシミュレーションツールのライブなシミュレーション状態を Qt の UI 内に反映し、実機ハードウェアと並行した開発・テストをより容易にする機能 

  • SLAM、衝突判定、ナビゲーションのより良い統合を含む、完全に機能する ROS2 搭載デバイスを構築するために必要な、次の重要なステップと機能

ぜひ試して、フィードバックをお寄せください

これは実験的なモジュールです。アーキテクチャを固めてしまった後ではなく、今のうちに「自分のロボットではうまく動かない」という声を聞きたいと考えています。ぜひ試して、ご感想をお聞かせください。 

    Try Qt for Free

    Download now