プラットフォームハブ

オープンなドローンスタック(PX4、ArduPilot、Dronecode)

2つのオープンソースのオートパイロットであるPX4(BSD-3)とArduPilot(GPLv3)、両者を支えるMAVLinkプロトコルと周辺ツール、そしてそれぞれのROS 2との接続方法を解説します。多くのベンダーのハードウェア上で動く無償のソフトウェアです。

組織単一のメーカーはない。Dronecode Foundation(2014年にLinux Foundationの一部として設立)がPX4・MAVLink・QGroundControl・MAVSDKをホストする。ArduPilotは2009年に始まった独立したオープンソースプロジェクト
ウェブサイトdronecode.org/
ライセンスPX4とMAVSDKはBSD-3-Clause、QGroundControlはApache-2.0、ArduPilotはGPLv3
価格ソフトウェアは無償。フライトコントローラと機体はサードパーティのベンダーから各社の価格で購入
更新2026年11月14日

製品と提供内容 #

名称種類位置づけ
PX4 Autopilot
v1.17.0を2026年5月13日にリリース
frameworkマルチコプター・固定翼機・VTOL向けの飛行制御スタック。uXRCE-DDSでROS 2と接続
ArduPilot
4.7.2のリリースを2026年10月にタグ付け
framework固定翼機・マルチコプター・ヘリコプター・ローバー・ボート・潜水艇向けのオートパイロット。ROS 2用のDDSを内蔵
MAVLink and MAVSDKlibrary両オートパイロットが共有するメッセージングプロトコルと、C++・Python・Swift・Java用のクライアントライブラリ
QGroundControlservicePX4、ArduPilotなどMAVLink対応機体のための地上管制ステーション。デスクトップとモバイルに対応
Pixhawkcontrollerフライトコントローラのオープンハードウェア設計。複数のメーカーが製造

どんな組織か

このハブは、ドローンにコンパニオンコンピュータとROS 2を載せるエンジニアや、2つのオープンなオートパイロットのどちらを選ぶか検討しているエンジニアに向けたものです。ここには単一の企業はありません。Linux Foundationのプレスリリースによれば、Dronecode Foundationは2014年にLinux Foundationの一部として設立され、ベンダー中立を掲げています。同財団のプロジェクトページによれば、PX4 Autopilot、MAVLinkプロトコル、QGroundControl地上局、MAVSDKライブラリをホストしています。また、多くのフライトコントローラが準拠するPixhawkのオープンハードウェア設計も管理しています。

もう一つの主要なオートパイロットがArduPilotです。ardupilot.orgによれば、最初の公開リポジトリは2009年にさかのぼります。商用パートナーの資金提供を受けながら、専門家と愛好家のコミュニティが開発しており、1,000,000台を超える機体に搭載されていると公表しています。ArduPilotはDronecodeのプロジェクトではありませんが、QGroundControlとMAVLinkはどちらにも対応しています。

ツールとAPI

PX4 v1.17.0は2026年5月13日にリリースされました。Pixhawk設計に準拠したフライトコントローラなどで動作し、ソフトウェア・イン・ザ・ループ(SITL)シミュレーションでも動きます。ROS 2との接続はuXRCE-DDSです。ファームウェア内のクライアントがコンパニオンコンピュータ上のMicro XRCE-DDSエージェントと通信し、エージェントがuORBトピックをROS 2のトピックとして公開します。PX4 v1.17では実験的な代替手段としてZenohが追加されましたが、PX4 ROS 2ガイドはほとんどのユーザーにDDSを推奨しています。推奨環境はUbuntu 24.04上のROS 2 Jazzy、またはUbuntu 22.04上のHumbleです。ワークスペースには、ファームウェアのメッセージ定義と同じバージョンのpx4_msgsパッケージが必要です。v1.16以降は、Message Translation Nodeでバージョンの不一致を橋渡しできます。

ArduPilotはファームウェアにDDSサポート(AP_DDS)を組み込んでいます。ArduPilot ROS 2インターフェースのページによれば、ap/pose/filtered、ap/twist/filtered、ap/navsat/navsat0、ap/tfなどのトピックを配信し、アーミング・モード変更・パラメータ用のサービスを提供します。同じページには、サポート対象のROSバージョンはHumbleであり、ArduPilotはROSのディストリビューション間で安定したインターフェースをまだ維持していないとも書かれています。現行のリリース系列は4.7で、2026年10月にCopter・Rover・Sub・Tracker向けの4.7.2がタグ付けされました。

どちらのオートパイロットもMAVLinkを話すため、MAVROS、MAVSDK、QGroundControlはどちらとも使えます。推定器と制御ループについては、空中・フィールドロボットのトピックで詳しく扱っています。

つまずきやすい点: ファームウェアとROSメッセージのバージョンを一致させる必要があります。コンパニオンコンピュータとのシリアルまたはUDP接続のタイミングが、オフボードループをどこまで速くできるかを制限します。各オートパイロットはそれぞれ独自のパラメータセットを持つため、PX4で調整済みの機体設定はArduPilotの設定にはほとんど参考になりません。

移行メモ

最大の落とし穴は座標系です。PX4のメッセージは、ワールド座標系にNED(北・東・下)、機体座標系にFRD(前・右・下)を使います。ROSはREP 103に従いENUとFLUを使います。ArduPilotのDDSのポーズとツイストのトピックは、すでにホーム位置を基準とするローカルENUで表されており、オドメトリはREP 105のodomからbase_linkへの変換に従います。PX4の場合は自分で変換するか、px4_ros_comのframe_transformsライブラリを使います。次のコードは、位置と姿勢をROSの慣例からPX4の慣例に変換します。

import numpy as np
from scipy.spatial.transform import Rotation as R

# World frames: ENU (ROS, REP 103) and NED (PX4). Swap x and y, negate z.
ENU_TO_NED = np.array([[0.0, 1.0, 0.0],
                       [1.0, 0.0, 0.0],
                       [0.0, 0.0, -1.0]])
# Body frames: FLU (ROS) and FRD (PX4). A rotation of pi about x.
FLU_TO_FRD = np.diag([1.0, -1.0, -1.0])

position_enu = np.array([10.0, 2.0, 5.0])  # 10 m east, 2 m north, 5 m up
print("position NED (m):", ENU_TO_NED @ position_enu)

# Attitude: vehicle yawed 30 degrees left of east in ROS (ENU/FLU).
q_enu_flu = R.from_euler("z", 30, degrees=True)  # SciPy quaternions are (x, y, z, w)
rot_ned_frd = ENU_TO_NED @ q_enu_flu.as_matrix() @ FLU_TO_FRD.T
yaw_ned = R.from_matrix(rot_ned_frd).as_euler("ZYX", degrees=True)[0]
print(f"yaw in NED (deg from north, clockwise): {yaw_ned:.1f}")
print("quaternion NED/FRD (x, y, z, w):", np.round(R.from_matrix(rot_ned_frd).as_quat(), 4))

出力はNEDでの位置が (2, 10, -5) m、ヨー角が60.0度です。ENUで東から北へ30度の向きは、NEDでは北から時計回りに60度になります。なお、メッセージ定義によれば、VehicleAttitudeなどのpx4_msgsは四元数を (w, x, y, z) の順で格納し、FRDからNEDへの回転を表します。SciPyとROSのメッセージは (x, y, z, w) の順です。

オートパイロット間の移行: MAVLinkメッセージは共通ですが、フライトモード・パラメータ名・ROS 2トピックはまったく異なります。乗り換えは新規の統合作業として扱ってください。

注意点

  • ArduPilotのGPLv3。 ArduPilotのライセンスページによれば、ArduPilotを搭載して出荷する製品は、それがオープンソースであることを顧客に伝え、ソースコードを提供するかそのリンクを示す必要があります。またGPLv3により、購入者はユーザー向け製品のファームウェアを置き換えることができます。PX4のBSD-3ライセンスにはこうした義務はありません。商用製品では、これが選択の決め手になることがよくあります。
  • 規制は国ごとに異なる。 飛行ルール、リモートID、操縦者の資格は国によって異なります。オートパイロットが飛行を合法にするわけではありません。
  • インターフェースは変わる。 両プロジェクトとも、リリースごとにROS 2インターフェースを改訂します。ファームウェアとメッセージパッケージのバージョンはセットで固定してください。
  • 安全。 オフボードのコードはまずSITLでテストしてください。RCによるオーバーライドとジオフェンスを必ず用意し、コンパニオンコンピュータを安全な着陸への唯一の経路にしないでください。

データベース内のロボット

  • Crazyflie 2.1 Brushless · ドローン · ブラシ付きモータ版のCrazyflieより大きな推力と可搬重量が必要な、屋内でのスウォーム研究
  • Crazyflie 2.1+ · ドローン · 手のひらサイズのオープンソース・クアッドコプターによる、屋内でのスウォーム研究と制御研究
  • Matrice 350 RTK · ドローン · 大型の業務用クアッドコプターで、測量・点検・地図作成用のペイロードを運ぶ用途
  • Skydio X10 · ドローン · 機上の障害物回避機能を使った自律点検飛行と公共安全向けの飛行
  • ANAFI Ai · ドローン · 4Gデータリンク経由で制御する写真測量・点検飛行
  • PX4 Vision Dev Kit V1.5 · ドローン · PX4クアッドコプターで障害物回避とコンピュータビジョンを開発する用途
  • PX4 Development Kit - X500 v2 · ドローン · 中型クアッドコプターでPX4を学び、飛行コードを試験する用途
  • Starling 2 · ドローン · 小型の開発用クアッドコプターによる、屋内でのビジョンベース自律飛行の研究

ニュース: Open drone stack