仕事でドローンを扱う場合も、趣味のドローンを組む際や、ちょっと自作ロボットで遊んでみようと思いたった時も、プロジェクトを始める前にまず直面するのが、どのコントローラーを使うか、という非常に重要な決断です。
いわゆるフライトコントローラーや、オートパイロット、ロボットコントローラーと一般的に呼ばれるオンボードコンピューターは、ドローンの姿勢制御だけでなく、センサー入力やペイロードへの信号出力をはじめ、飛行中の機体のほぼ全てを司る、非常に重要なコンポーネントです。
このコントローラーを選択する際に誰もが感じるのが、選択肢が多すぎて困る、ということだと思います。一昔前には考えられなかったほど多くの選択肢に恵まれている、とも言えますが、あまりの情報量に頭を抱えてしまうユーザーが非常に多いのも事実です。また、情報がネットのあちこちに分散していて、なおかつものすごいスピードで技術が進化しているので、見つけた情報が古すぎて役に立たないどころが、却って有害でさえある、ということも多々あり、スマートに情報を精査するのは至難の業ですし、すべてのコントローラーの最新情報を網羅的に把握するのはほぼ不可能です。
そこで今回は、最もポピュラーなオープンソース系のフライトコントローラー、特にZenbotでも採用しているPixhawk系のコントローラーに絞って概要を解説したいと思います。
フライトコントローラー・オートパイロット・ロボットコントローラーとは?
定義はいろいろありますが、センサーやユーザーのインプットを処理して、外部のアクチュエーターに操作信号を送る小型コンピューター、と考えれば基本的にみな同じものと考えられます。マルチコプター専用のユニットや、各種ロボットに対応したもの、等いろいろありますが、最近流行りのオープンソースのコントローラーであれば、様々な用途や機体に流用可能です。
これらは一般的に、小型省電力のマイクロコントローラーや、シングルボードコンピューターをベースにし、SDカードやセンサー、各種入出力ポートを備えた小さなボックスで、センサーや外部入力データをI2C、SPI、CAN、シリアル等のポートで受け取り、外部機器にPWMや各種ポート経由で制御信号を送り、モーター、サーボ、その他のアクチュエーターを操作して、機体の姿勢制御等を行う、という基本形はどれも同じです。さらに、WiFi、Bluetooth、ZigBeeなどの通信リンクを経由して、リモート制御やモニタリングもできたり、ログを保存しておいて後で解析したりできるものが多いです。
しかし、性能や機能はそれぞれのコントローラーによって大きく異なります。最もシンプルなフライトコントローラーは、ジャイロと加速度センサーを使って機体を安定させるだけのものから、GPS、レーザーレンジファインダー、画像認識などを使って障害物を避けたり、複数機が連携しながら自律的に飛ぶものまで様々な種類があります。
フライトコントローラーのエコシステム
コントローラー本体
IMUやバロメーターなどの基本的なセンサーを搭載したオンボードコンピューターを指します。
フライトコントローラーには大きく分けて、マイクロコントローラーをベースにしたのものと、Linux SBC (Single Board Computer/シングルボードコンピューター)をベースにしたものがあります。また、最近では、マイクロコントローラーベースのコントローラーで姿勢制御し、コンパニオンコンピューターとしてLinux SBCを接続し、そちらに画像処理などの高負荷処理を担当させる方式も増えてきました。
Zenbotでは、様々なコントローラーの中でも、世界最先端のPixhawk系のコントローラーを採用しています。
フライトコントローラーハードウェア
ソフトウェア
ドローン向けのソフトウェアは、機体側で実行するフライトコントロールと、PCやタブレット上で実行するグランドコントロールの2つに大きく分けられます。
オンボードフライトコントロールソフトウェア(ファームウェア)
ファームウェア は、機体上の制御コンピューター(オンボードフライトコントローラー)上で走るソフトウェアです。
Pixhawk系のハードウェアに対応したファームウェアは大きく分けPX4とArduPilotの2種類があります。どちらも長所がありますので、Zenbotでは、機体やアプリケーションに合わせて最適なスタックを使用しています。
グランドコントロールステーション (Ground Control Station / GCS)
Ground Control Stationは、PCやタブレット、スマートフォン上で実行され、ファームウェアの設定や機体の状態を監視したり、ウェイポイントの入力などを行うソフトウェアです。テレメトリーリンクを介して機体側と通信し、センサーの値をモニタリングしたり、機体にコマンドを送ったり、ログ解析を行ったりすることができます。
これも様々な種類があり、それぞれ長所がありますので、Zenbotではどれか一つに限定することはせず、使用するファームウェアや環境に最適なものを使用しています。
外部機器
フライトコントローラー以外に、外部センサー、パワーモジュール、RC送受信機、テレメトリー通信モジュール等が必要です。
外部機器がコントローラーを選択肢を限定することもあります。例えば、最新のLiDARやIRビーコンを使いたい場合、コントローラーやファームウェア側でセンサーに対応していなければ、そのセンサーを使うことはできません。特定のフライトコントローラー向けのドライバーしか提供していないセンサーや、サポート外になるセンサーも多いです。
しかし、Zenbotで採用しているオープンソース系のコントローラーの場合、共通の信号経路さえ確保できれば(I2C、CAN、シリアル等)、自分でドライバーを書く道は残されています。これはテレメトリーモジュールやジンバル、その他のアクチュエーター等も同じです。このあたりは、DJI等のクローズドなコントローラーではそもそも実装できないことが多い領域です。
オープン v.s. プロプライエタリ
オープンソースのフライトコントロールソフトウェアは多数あり、機能や性能が大幅に違います。クローズドな製品は、見た目はカッコ良く初心者には扱いやすいことが多いですが、機能的には劣ることが多く、また機能拡張したい、といった場合のメーカーサポートは殆ど期待できません。
オープンソースシステム
ここでいうオープンソースには、2つの意味があります。通常、オープンソースというとソフトウェアを連想しますが、特にドローン用のコントローラーは、ハードウェアもオープンソースで開発されるケースが増えてきています。この場合、回路図やPCBのレイアウトデータ等がオープンソースで公開され、自由に改変したり、改良を加えたりして自分で製造したり、PCB専門の会社に発注して作ってもらことができます。ドローン向けのフライトコントローラーの多くが、ハードウェアとソフトウェアの双方をオープンソースで展開しています。
オープンソース・フライトコントローラーの例
部分的オープンソース
オープンとクローズドなソフトウェアとハードウェアを組み合わせたシステムも登場してきています。特に、インテル、クアルコム、テキサス・インスツルメンツといった半導体メーカーがIoTやドローン向けに大々的に参入してきており、これらメーカーが提供するボードはオープンな部分とクローズドな部分を兼ね備えたハイブリッドな構成であることが多いです。
Zenbotでは、これらの新しいフライトコントローラーも常に精査し、要件に合わせて採用しています。
完全クローズドシステム
DJIのようなクローズドなプロプライエタリシステムでは、ソフトウェアもハードウェアもソースは公開されていませんが、限定的な機能拡張を可能にするAPIが提供されていることが多いです。
カスタムドローン開発が専門のZenbotでは、拡張が難しいクローズドなシステムは基本的に使用しません。