Skip to content

ADR-001: PX4 over ArduPilot

Status

Accepted

Context

Choosing a flight controller firmware for a photogrammetry drone that needs tight ROS2 integration for autonomous waypoint missions and camera triggering. Both PX4 and ArduPilot are mature open-source autopilots with large communities.

The drone needs: - Native ROS2 communication (topics for position, camera triggers) - Waypoint mission execution with camera trigger support - Reliable failsafes (RC loss, battery, geofence) - Active development and long-term support

Decision

Use PX4 v1.16+ as the flight controller firmware on a Holybro Pixhawk 6C.

Consequences

Positive:

  • Native ROS2 support via uXRCE-DDS — PX4 has a built-in DDS client that publishes topics directly to ROS2. No bridge layer needed.
  • Production-grade path — PX4 is used by commercial drone companies (Auterion, Dronecode), providing a realistic development experience.
  • Camera trigger module — Built-in distance-based triggering via TRIG_MODE/TRIG_DIST parameters, sends events to companion via MAVLink.
  • Pixhawk 6C is a PX4 reference board — first-class support guaranteed.

Negative:

  • Smaller hobby community than ArduPilot — fewer forum posts for DIY quad tuning.
  • ArduPilot tuning guides don't apply — PX4 has its own parameter ecosystem.
  • ArduPilot's MAVROS is more documented for ROS integration, but MAVROS is a translation layer (MAVLink→ROS) while uXRCE-DDS is native.

Neutral:

  • Both support the same hardware (Pixhawk ecosystem).
  • Both have waypoint mission support via QGroundControl/Mission Planner.