概要
オープンソースのフライトコントローラー・オートパイロット・ロボットコントローラーは、非常に多くの製品があり頭を悩ませることが多いのが現状だと思います。一般論として選択肢が多いのは良いことですが、必要な情報がネットのあちこちに散らばっていて、もし情報が見つかったとしても、英語のみであったり、目まぐるしく変化・進化する技術についていけずに古くなってしまった情報も多く、どれを選んで良いのか迷うことになってしまいます。この記事を書いている間にも、何かが進化し、ここに載せた情報の幾つかは古い情報となっていしまっています。ある意味不毛な戦いではありますが、Pixhawk系のフライトコントローラーの現状に関して、以下に現時点で把握している情報をまとめてみたいと思います。
歴史
ハードウェアの歴史については、ハードウェア進化の歴史を参照。
PX4
PX4/Pixhawkプロジェクトは、スイス工科大学チューリッヒ校(ETH Zurich)で、オープンソースハードウエア&オープンソースソフトウェアの32bitフライトコントローラーを作る目的で始まりました。
3D Roboticsは、初期段階からPixhawkの生産、販売と、ArduPilot系開発者への金銭的支援を熱心に行っていたため、3DRの製品だと勘違いされることが多いですが、出処はETH Zurichです。また、ハードウェアもオープンソースであるため、Pixhawkには一部を改良したクローンが多く存在します。ただ、3DR製をうたった劣悪な模造品も出回っているので注意が必要です。
PX4というコードネームで、いわゆるPixhawk v1の前にも、PX4FMUv1とPX4IOv1という2ボードシステムがほんのわずかな間存在していました。
そして、このチューリッヒ工科大が開発したフライトコントローラーのファームウェアが俗にPX4 Native Stackと呼ばれるものです。最近は、PX4 Proというブランドに統一しようとしているようです。これはPixhawkに搭載される32bit ARM CPUの上に実装されたNuttXというリアルタイムOSの上で走るアプリケーション群として実装され、構成的には非常にUNIX的です。
http://px4.io
また、マルチローター、VTOLを含む複数の機体構成を一つのファームウェアでカバーするのも特徴です。
ソフトウェアのライセンスは3-Claus BSDであり、GPL v3を採用するAPMよりも商用利用がしやすくなっています。
PX4プロジェクトのハードウェア
- PX4FMUv1 + PX4IOv1
- Pixhawk (PX4FMUv2)
- Pixhawk 2 - 3DR Version (PX4FMUv3)
- Pixhawk 2 - Community Version (PX4FMUv4)
- Pixracer (PX4FMUv4)
- PX4FLOW (OpticalFlowセンサー)
PX4プロジェクトのソフトウェア
- PX4 Natvie Stack
- PX4FLOWファームウェア
- QGroundControl (GCS)
- MAVLink
ArduPilot (APM)
ArduPilot (APM)は、3D RoboticsのChris Andersonが始めたDIYDrones.comから派生したプロジェクトです。こちらもオープンソースハードウェアとオープンソースソフトウェアを組み合わせたフライトコントローラーで、名前が示すように、もともとはArduinoをベースにしていたのですが、いまやLinuxを含む様々なプラットフォームに対応しています。Pixhawk上では、NuttXというリアルタイムOSの上で走るPX4 Native Stackのアプリケーションの一つとして動作します。モノリシックで巨大なアプリケーションで、あまりUNIX的な構成ではありません。
シャーシー、フレームの種類ごとに、複数のファームウェアがあり、それぞれがお互いの機能を取り込みながら開発が進むスタイルです。
ソフトウェアのライセンスはGPL v3で、商用では少々使いにくい面があります。
APMのハードウェア
- APM 2.0 APM 2.0はArduino Megaをベースとしたハードウェアです。すでにAPMソフトウェア側ではこのAPM 2.x系ボードを含め8 bitアーキテクチャー向けの開発は終了しています。
APMのソフトウェア
- Copter
- マルチローター、シングルローター用がある
- Plane
- 固定翼と、QuadPlane(VTOL)がある
- Rover
- Antenna Tracker
関連プロジェクト
PXF(Pixhawk Fire)
スペインのErle Robotics社が生産、販売する、Linuxシングルボードコンピューター用の拡張ボードです。Pixhawk Fireと名が付いていますが、初期段階ではAPM系ソフトウェアのみをサポートしていました。現在もPX4 Native Stackはアルファ版の位置付けです。 - PXFはTexas InstrumentsのBeagleBone Black向けのケープ - PXFminiは、RaspberryPi Zero向けのハット
MAVROS
ROS (Robot Operating System)からMAVLinkを扱えるようにするパッケージです。ROSノード経由のMAVLink通信だけでなく座標系の変換なども行ってくれます。
DroneCode
2015年、バラバラだったPixhawk系のハードウェアとソフトウェアをまとめるため、Linux Foundation傘下にDroneCodeという組織が設置されました。これは、今後ドローン関連の制御ソフトウェアが、単純な組み込みからLinuxベースへと移行していくことを示唆していますが、ArduPilotのリード開発者であるTridgeが、もともと著名なLinuxカーネル開発者の一人であることも無関係ではないでしょう。(Tridgeは、LinuxとWindows間のファイル共有を可能にするSambaというソフトウェアや、Unix系ではデファクトスタンダードとなっているファイル同期ソフトウェア、rsync等を書いた開発者で、インターネットを使うほぼ全ての人が知らないうちになんらかの形でTridgeのお世話になっているはずです)。
現在のDroneCode傘下の以下のソフトウェアは、それぞれが独立したプロジェクトでありながら、お互いに協調して開発が進められています。
- PX4 https://github.com/PX4
- Pixhawk https://github.com/Pixhawk
- MAVLink https://github.com/mavlink
- UAVCAN https://github.com/uavcan
- DroneKit https://github.com/dronekit
これにROSが加わることで、ドローン制御に関してはほとんどの基本的な機能が揃うことになります。
ただ、残念なことに、2016年9月に、ArduPilotはDroneCodeから分離しました。理由は、DroneCodeがIntel, Qualcomm, 3D Roboticsからなる少数のプラチナメンバーによって完全にコントロールされ、プロプライエタリなシステムで使うことができないGPLv3を採用しているArduPilotの開発を企業スポンサーがサポートしてゆく理由がないためです。今後もPixhawk系のハードウェア上でArduPilotの開発は続いていきますが、3DRのクリスアンダーソンはあからさまにPX4を推していて、コミュニティの間に軋轢が残ってしまいました。
これに関連して、QGroundControlに関しては、すべての著作権者(コード提供者)の許諾が得られたとのことで、GPLとBSDのデュアルライセンスに変更されています。
主要コンポーネント
ドローンの制御系は、センサー、駆動系、通信系を除く以下の3つの基本コンポーネントが必要であり、お互いが密に連携しているため組み合わせが重要になります。
1. フライトコントローラーハードウェア
機体側のコンピューター。センサー、通信モジュールからの入力を受け、目標とする姿勢や振る舞いと、現在の差異を計算し、目標値により近づくよう駆動装置へ信号を出力します。
大きく分けて、マイクロコントローラー系とシングルボードコンピューター(SBC)系に別れます。
マイクロコントローラーは最低限の機能を持ったライブラリかRealtime OSの上に、制御プログラムが走る形式。例としてはArduino等があげられます。
シングルボードコンピューターは通常Linuxが動作するクレジットカードサイズ程度の小型所電力コンピューター。例としてはRaspberry Pi、BeagleBone等があります。
2. フライトコントローラーソフトウェア
フライトコントローラー上で走る制御ソフトウェア。Pixhawk系のシステムでは、PX4 Native Stackか、ArduPilotかどちらかを選ぶことになります。
3. GCS (Ground Control Station|Software|System)
PCやタブレット上で動作し、機体にコマンドを送ったり、機体から送られてくるセンサーデータ等を表示する管制ソフトウェア。通常、機体側ソフトウェアの設定やアップグレード、ログ解析などもこのソフトで行います。Pixhawk系は、後述するMAVLinkに対応しているので基本的な機能はどの組み合わせでも可能ですが、独自機能への対応状況はやはり純正の組み合わせ(PX4 Native Stack + QGroundControl、ArduPilot + MissionPlanner等)が良いです。MissionPlannerはWindows版のみ、TowerはAndroid版のみ等、プラットフォームの制約もあります。
MAVLink
話を進める前に、なぜルーツの違うファームウェアとGCSが相互に通信でき、共通のコマンドやデータをやりとりすることができるのかを理解しておく必要があります。
MAVLinkは、もとはといえばPixhawkプロジェクトの一部として開発されたテレメトリー用のプロトコルなのですが、軽量で柔軟性もあったため、APMをはじめとする多くのフライトコントローラーソフトウェア標準の通信規格として採用されました。ネットワークレイヤーとしては、シリアル通信、TCP/UDP/IP、何れにも対応しています。MAVLinkは、実機用のテレメトリープロトコルをモデルにしているため、基本的なフライトモード切り替え等のコマンドや、機体の状況を地上側に知らせるためのデータフォーマットが揃っているため、共通機能は既存のメッセージを使い、独自機能のみメッセージを定義して拡張する方式が取られています。同一バージョンのMAVLinkをサポートするソフトウェア同士であれば、これらの基本的なメッセージを使って最低限の通信はできるようになっていますが、それぞれに癖があり、互換性のテストもあまりきちんと行われていないので、基本的には純正の組み合わせで使うことになります。逆に純正同士でも、バージョンが違えば色々と問題が起こりやすいので、ファームウェアのバージョンとGCSのバージョンは合わせておくことが望ましいです。
PX4ファミリーのFCハードウェア
フライトコントローラー(FC)ハードウェアは、大まかにマイクロコントローラー系と、シングルボードコンピューター系に分類することができます。
マイクロコントローラー系
マイクロコントローラー系のFCは、通常、MHzクラスの組み込み用CPUを搭載したドローン制御アプリケーションに特化したボードです。
PX4公式ボード
名称 | 概要 |
---|---|
![]() |
- PX4FMUv1は、Pixhawkプロジェクトの第一弾として作られた、2枚構成のボード(FMU + IO) - リリース後1年ほどでPixhawkにリプレースされた |
![]() |
- 168MHz 32bit STM32F427 Cortex M4プロセッサー、256KB RAM - PixhawkはETH Zurichで始まり、ハードウェアの製造パートナーとして3D Roboticsが選ばれた - オープンソースハードウェアなので、多くのクローンやコピーが存在する - Pixhawkは、PX4FMUv1とPX4IOv1を一つのボードにまとめたもので、型番はPX4FMUv2 (FMU = Flight Management Unit) - AR.Drone専用に作られたPX4IOARもある - PixhawkはヒロセのDF13コネクターを採用しているが、これはSMT(表面実装)用のコネクターで、繰り返しの抜き差しには向かず、コネクター、ソケット、ケーブル破損が多く、不評 |
![]() |
- AUAVのNick ArsovとPhillip Kocmoudによってデザインされ、AUAVが製造、販売する小型Pixhawk - PX4FMUv4としてPX4プロジェクトのオフィシャルハードウェアとしてに正式に採用された - CC3D、NAZE等とほぼ同じ小型サイズ - 250クラスのレーシングクワッドにも乗るように小型軽量であることに重点を置いてデザインされている - Pixhawkに比べて、より高速なCPU、多くのRAM、高性能なセンサーとなっている - コネクターもロッキングタブが付いていて、DF13よりも扱いやすいJST GHシリーズに変更されている 今後Drone Code関連のFCはJST GHに統一する方向 - 小型のWiFiカード(ESP8266)付き |
Pixhawk 2 (3DR Version) == PX4FMUv3 | - 3D Roboticsは、自社のSOLO専用にPixhawk 2を開発した - Pixhawk 2単体では発売されておらず、あくまでもSOLOのフライトコントローラーなので、一般には入手できない - ハードウェアはオープンソース - Pixhawk 1をキャリアボードと分割、小型化し、コネクターを含め、各部を改良したもの |
Pixhawk 2.1 (Community Version) == PX4FMUv? | - 3DRがPixhawk 2を単体で発売しなかったため、Pixhawk 2のデザイナーが複数の工場で生産準備を進めている - proficncがランチパートナー - 2016年11月出荷開始。各国の代理店から購入可能。日本はenRouteが代理店となっているが、オンラインストアで検索しても引っかからないので、proficncで直接購入するしかない - 小さなキューブ状で、DF17コネクター経由でキャリアボードと接続する Intel Edisonをコンパニオンコンピューターとして組み込めるポート付き - IMUセンサーにヒーターがついたので、外気温が変わってもキャリブレーションをし直す必要がない |
Pixhawk Mini | - PixhawkクローンメーカのHolybroと、低価格低品質Pixhawkコピーを売っていたHobbyKingが開発し、3D Roboticsが販売するという、なんとも皮肉な製品 - Pixfalconと同じ大きさで、Pixfalconのセンサーや各部を改良したもの - 2016年12月発売予定 |
Pixhawkクローン
PX4系のコントローラーボードはオープンソースなので、だれでも回路図やレイアウトデータを入手することができるため、多くのクローンやコピーが存在します。オリジナルを改良して高性能になっているものもあれば、単なる劣化コピーで、出荷検査もろくに行われていない信頼できない製品も多々あるので、購入時は注意が必要です。
名称 | 概要 |
---|---|
![]() |
小型版 CC3Dに近いサイズ |
![]() |
Pixhawkアルミケース、防振対策、JST GHコネクターを筐体側面に配置するなど、使いやすい改良が加えられている |
![]() |
HobbyKingの安価版クローン |
![]() |
各部に改良が加えられたとされるクローン |
その他のPixhawkクローン
シングルボードコンピューターベースのフライトコントローラー
PixhawkとそのクローンはNuttXとよばれるリアルタイムOSを載せたマイクロコントローラーをベースにしています。汎用OSに比べオーバーヘッドが少なく、少ないリソースでも高速に動作するため、フライトコントローラーのような特定用途のデバイスには最適ですが、RaspberryPiやBeagleBone等、近年のシングルボードコンピューターと比べると、処理能力と柔軟性で見劣りします。すでに数年前からLinuxを載せたGHzクラスのシングルボードコンピューターを使ってドローンを制御する試みは始まっており、ROS等と並行してフライト制御プログラムを普通のLinuxのプロセスとして走らせることに成功しています。この分野ではArduPilotが先行していましたが、SnapDragonの登場によって逆転し、PX4 Native Stackの他のプラットフォーム対応も進んでいます。
Name | Description |
---|---|
![]() |
- BeagleBone BlackのケープとしてErle Roboticsが販売していた - Erle Robotics はPXFにBBBと専用ケースを組み合わせてErleBrainとしても販売していた |
![]() |
- ErleBrain 2としてRaspberry Pi及び専用ケースとセットでのみ販売 - Erle Brain 1ではBeagleBone Blackベースだったが、Erle Brain 2ではRaspberry Piへプラットフォームが変更された - ErleBrain 2はRaspberry Pi 2ベースであるが、PXF 2.0自体のデザインは他のプラットフォーム(BeagleBone Black, Raspberry Pi, Raspberry Pi 2, BananaPi, Orange Pi, Odroid-C1, Odroid-C1+)とも互換性があるらしい(Erle Roboticsサイト情報。動作未確認) |
![]() |
- PXFをRaspberry Pi Zeroにフィットするサイズに小型化したもの - JST GHコネクターに変更されているが、初期のものはピン配列が左右逆になっているため、JST GHを採用する他のDrone Codeハードウェアとはコネクターの互換性がないので注意 |
![]() |
- Raspberry Pi 2ベースのコントローラー |
![]() |
- QualcommのSnapdragon CPUを搭載したLinuxベースのコントローラー - GPU、WiFi、4Kカメラ、OpticalFlow標準搭載 - 現状ではPX4 Native Stackのみが対応 - ZerotechのDobbyなどはこのボードを採用している |
オンボードソフトウェア
Pixhawkハードウェアで動作するフライトコントロールソフトウェア(フライトスタック)はPX4 Native StackとArduPilotの2つあり、ハードウェアの名前とかぶっているため、非常にややこしいです。 一時DroneCode傘下で統合されるかと思いきや、結局喧嘩別れとなってしまい、今も個別のプロジェクトとして独立して開発されています。
PX4 Native Stack
- Pixhawkと全てのクローンで動作
- Linux系ボードに関してはネイティブでサポートしているものとポーティング途中のものがある
- スイス工科大チューリッヒ校(ETH Zurich)でPixhawkハードウェアと一緒に始まったプロジェクト
- NuttXリアルタイムOS上のPX4 Middlewareというドライバーレイヤー上で動作する複数のアプリ群
- アプリ間のメッセージング機構を持つ
- QGroundControlも同じプロジェクトから生まれたので、GCSはほぼ全てのプラットフォームをサポートするQGroundControl推奨
- ライセンスはBSD
ArduPilot
- ほとんどのPixhawkクローンと多くのLinuxボードで動作
- DIYDrones.com発祥のArduinoベースのAPMハードウェア・ArduPilotソフトウェアプロジェクトがベースとなっている
- PX4 Native Stackのアプリとして実装されているので、PX4 Native StackもPX4Firmwareサブモジュールとして含まれる
- 機体、フレームタイプによって機能、バイナリが違う(Copter, Plane, Rover / Quad, Hexa, X8, etc.)
- WindowsであればMission Planner推奨
- それ以外のプラットフォームであればAPM Planner 2推奨
- AndroidであればTower推奨
- ライセンスはGPLv3
GCS
建前としては同じバージョンのMAVLinkを話す限り、どのGCSでも使えるはずですが、現実にはGCSとフライトスタックは密結合で同時進行で開発されていて、フライトスタックとGCSのバージョンも合わせないと動かないことが多いです
QGroundControl
QGroundControl
- PX4 Native Stack用
- Windows, Mac, Linux, iOS, Android
- 最近はArduPilot対応も進んだが、まだバグが多い
Mission Planner
Mission Planner
- ArduPilot向けの高機能GCS
- Windowsのみ
APM Planner 2
APM Planner 2
- ArduPilot向けクロスプラットフォームGCS
- Windows, Mac, Linux
Tower
- Tower
- Android版GCS
- もとはDroidPlanner2
- Androidのみ
MAVProxy
- MAVProxy
- Pythonで書かれたコマンドライン版GCS
- 開発者向け
互換性チャート
Hardware - Flight Stack Compatibility
ハードウェア | PX4 Native Stack | ArduPilot |
---|---|---|
Pixhawk & クローン (FMUv1, v2, v4) | YES | YES |
PXF | 移植中 | YES |
PXFmini | 移植中 | YES |
ErleBrain 2 | 移植中 | YES |
NAVIO2 | NO | YES |
SnapDragon Flight | YES | 移植中 |
フライトスタック - GCS互換表
フライトスタック | QGroundControl | Mission Planner | APM Planner 2 | MAVProxy | Tower |
---|---|---|---|---|---|
PX4 Native Stack | YES | 一部機能のみ | 一部機能のみ | 一部機能のみ | 一部機能のみ |
ArduPilot | 一部機能のみ | YES | YES | YES | YES |
開発者向け
機体上で画像処理などの重い処理を使った自律制御を行う場合やROSを走らせたい場合
- Linux系のボードを選択
- またはPixhawkクローンとLinux SBCをコンパニオンコンピューターとして搭載し、MAVLink、MAVROSなどを使って連携
ROSや画像処理を地上側PCで走らせる場合
- MAVLinkとMAVROSを使って機体側と通信