Qtを活用した
QGroundControlの
実行時カスタマイズ
プロトコルの語彙、オペレーターパネル、マップ、ブランディングを、起動時に読み込まれる設定ファイルで定義し、QGroundControl のメインラインソースへの変更は一切不要です。
Qt Group のエンジニアリングチームが、実際の産業用途向けに QGroundControl を効率的にカスタマイズする、Qt フレームワーク とツールの柔軟性をご紹介します。
MAVLink 設定
1つの XML 形式のファイルを編集するだけで、どのメッセージが存在し、どれをインターフェース上に表示するかを定義できます。ジェネレーターの実行もリビルドも不要です。
Qt Design Studio による HMI の作成
ローコード環境でオペレーターパネルをデザインし、車両のライブデータに連動した、そのまま使える QML ファイルとしてデプロイできます。
2D・3D マップ
2D マップのスタイルを変更し、3D シーンを任意の運用エリアに再配置できます。いずれも完全にオフラインで動作し、マッププロバイダーは不要です。
テーマ、ブランド、アイコン
パレット、アプリケーション名、ウィンドウアイコンを、起動時に読み込まれるファイルで設定できます。1つのコードベースで、いくつものブランド製品に対応します。
既存のプロトコルやプラットフォームに対応
ドリフトのないカスタマイズ
通常、ドローンメーカーは、コンパイル時の拡張機能を通じて、QGroundControl を自社のユースケース向けにカスタマイズします。この仕組みは強力ですが、そのコードベースに不慣れな開発者にとっては、かなりの学習コストを伴います。
新しいパネル、新しい MAVLink メッセージ、追加のメニューオプションといった、ささやかなカスタマイズであっても、時間と労力を要します。
フォークによるカスタマイズが増えるほど、アップストリームのリリースへ追従するための保守負担やコストも大きくなります。
リリースのたびにマージ作業が発生し、アップグレードは先送りにされ、セキュリティ修正は手作業でバックポートすることになります。
ランタイム設定レイヤーがあれば、製品を特徴づける変更について、こうした負担そのものが不要になります。
デモのご紹介
主な機能
- MAVLink 設定
- カスタムパネル
- 2D・3Dマップ
- テーマ・ブランディング・アイコン
MAVLink 設定
MAVLink は、そのメッセージを XML で定義しており、通常、このファイルはコードジェネレーターに渡され、コンパイルに組み込まれます。
ここでは起動時に読み込まれるため、メッセージの追加や、インターフェース上に表示するメッセージの変更に、ジェネレーターの実行やリビルドは一切不要です。ランタイムで定義されたメッセージも、コンパイル時に組み込まれたものと同じプロトコル検証を通過します。
Qt Design Studio で作成する、カスタムパネル
テレメトリパネル、メッセージログ、ビデオウォールは、ドロップフォルダーに配置する1つの QML ファイルです。それぞれは、任意のディスプレイに配置できるフローティングウィンドウとして、またはメインウィンドウ内にドッキングした状態でインスタンス化されます。ファイルを削除すればパネルも削除され、各パネルは実際の車両データに連動します。
作成にソフトウェア開発者は必要ありません。スタンドアロンのデザインツールとして使用する Qt Design Studio を使えば、デザイナーは生成された車両データコントラクトのモックに対してパネルをレイアウトし、アプリケーションがそのまま読み込めるファイルとして保存できます。
2D・3Dマップ
ほとんどの管制局は、プロバイダーから取得したマップ画像を表示するため、見た目は固定され、接続も必要になります。
ここでは、管制局自体がマップを描画します。見た目は設定次第で選択でき、3D ワールドは任意の運用エリアに設定できます。いずれもネットワーク接続なしで動作します。
同じ仕組みが、業界特有のオーバーレイ、たとえばシンボル表示、カバレッジレイヤー、空域認識、点検レポーティングにも対応します。
テーマ・ブランディング・アイコン
カラーパレット、アプリケーション名、ウィンドウアイコンは、起動時に読み込まれるファイルです。管制局は、すでにブランディングとテーマが適用された状態で起動します。
同じビルドから、製品ごとに別々のコードベースを維持するのではなく、いくつかの設定ファイルを変更するだけで、複数の異なる製品として提供できます。
メンテナンスと、メインラインとの差分
フォークすることは想定の範囲内です。QGroundControl の開発者ガイドも、チームにフォークしてカスタム例をコピーするよう案内しています。メンテナンスコストは、フォーク内で編集した範囲に比例し、ガイドにも明確にこう記されています。
「QGC のメインラインソースへの変更は、最小限に抑えることが最善です。」
設定レイヤーがあれば、この差分をほぼゼロに保てます。作業は、カスタムビルドディレクトリやプラグインのサブクラス化といった、QGroundControl がサポートする拡張アーキテクチャの範囲内に収まり、それ以外は Qt がすでに提供している仕組みに頼ることができます。
現行のアップストリームに対する定期的なリビルドにより、残存する差分を継続的に可視化でき、汎用性のある変更についてはアップストリームへコントリビュートすることで、差分を恒久的に解消できます。QGroundControl の開発者ガイドも、それを推奨しています。
ライセンスと規制上の考慮事項
QGroundControl は、Apache 2.0 と GPL v3 のデュアルライセンスで提供されており、どちらを選択するかによって、出荷する製品に課される義務が決まります。
GPL v3 のもとでは、変更内容を公開する必要があります。Apache 2.0 のもとでは、プロプライエタリのまま維持できますが、その場合は商用の Qt ライセンスが必要になります。
この選択は、自社がプロプライエタリとして維持したい部分を左右するため、コードができてから切り分けるよりも、開発に着手する前に決めておく方が、はるかにコストを抑えられます。
参考リソース
QGroundControl と Qt の活用
無人航空機向けの代表的なオープンソース地上管制局である QGroundControl(QGC)は、Qt を基盤に構築されています。どのモジュールを活用しているか、ライセンス上何が求められるか、そして QGC と Qt の上でコンプライアンスに準拠したプロプライエタリ製品をどう構築するかをご紹介します。