Reference

PX4 and ArduPilot

Corvus is built for PX4 first and ArduPilot second, and treats them as two different autopilots rather than one with different words. This page lists what is supported, where the two differ, and the few things ArduPilot does not get.

Supported versions

StackVersionsStatus
PX4v1.16, v1.17, v1.18Primary target. Every parameter, mode and mission change is checked against all three.
ArduPilot4.3 to 4.6: Copter, Plane, Rover/Boat and SubSecondary target, checked with every change as well.
PX4 (older)v1.12 to v1.15Best effort, through fallback tables. Not the focus.

How Corvus adapts

Corvus reads the flight stack and the vehicle type from the first heartbeat, and the firmware version from AUTOPILOT_VERSION. From then on:

  • It loads the parameter set that matches that firmware version, and falls back gracefully (never crashes) when a parameter is absent.
  • It refuses to send a command or write a parameter the connected firmware does not understand, rather than sending it and hoping.
  • Each setup page has a version for each stack with the same layout, so the pages look the same and write the right parameters underneath.
  • A feature a stack lacks is greyed out with the reason on it, rather than hidden.

Where the two stacks differ

The differences are not cosmetic. A takeoff altitude in the wrong reference turns "ten metres up" into "ten metres above sea level". A compass calibration sent in PX4's form is acknowledged by ArduPilot and starts nothing. Every one of these differences lives in one place in the code rather than being spread across the app:

PX4ArduPilot
Flight modeMain mode and sub mode packed into one numberOne flat number, read against this vehicle type's own table (4 is GUIDED on a copter and ACRO on a plane)
TakeoffCommand, then arm; altitude above sea levelGUIDED, arm, then command; altitude above home. Disarmed again if the command is refused
Compass calibrationPREFLIGHT_CALIBRATIONDO_START_MAG_CAL
Accelerometer positionsDetected by the autopilotConfirmed by the ground station, one button per position
Motor testMAV_CMD_ACTUATOR_TESTDO_MOTOR_TEST
ESC calibrationOfferedNot offered (see below)
AutotuneA command with a progress streamThe AUTOTUNE flight mode
MissionItems from 0, flown in Mission modeItem 0 is home, flown in AUTO
Mission startMISSION_START, which also armsArm in GUIDED (AUTO on a plane), then MISSION_START
Mission circleNo such item: sent as waypoints around the rimNAV_LOITER_TURNS, flown as drawn
Mission checkAfter the upload, reported in MISSION_CURRENTAt the upload, in its answer
MAVLink shellNSH over SERIAL_CONTROLNone
On-board logULog (.ulg)DataFlash (.bin)

What ArduPilot does not get

Three things, and Corvus says so on the page rather than offering a button that fails:

The PX4 shell in the console
ArduPilot has no NSH shell. The console's flight commands still work; the shell commands are hidden, and the NuttX Console says Not available on this autopilot. See The PX4 shell.
ESC calibration
ArduPilot does it by setting ESC_CALIBRATION and rebooting with the throttle high, which is not something a ground station should put behind a button.
Flight Review of the on-board log
DataFlash .bin logs download normally and land in the same folder, but Flight Review reads ULog only. It names the format and points you to Mission Planner rather than failing obscurely. Telemetry Review, which reads what Corvus recorded itself, works on both stacks.

One setting on ArduPilot

ArduPilot only accepts stick input from the ground station named in SYSID_MYGCS (MAV_GCS_SYSID from 4.5), and silently drops everything else. Corvus identifies itself as system 254 rather than the usual 255, deliberately, so it can share a link with QGroundControl without the two fighting over one ID. The result is that the on-screen joystick does nothing on a stock ArduPilot vehicle.

Corvus checks this when it connects and tells you, with the number to change. It does not write the parameter itself, because which ground station may take an aircraft's sticks is your decision. Flight commands, mode changes and everything else are unaffected.

Setpoints in the tuning plots

The PID tuning page's plot of commanded against achieved needs the autopilot to stream its setpoints. ArduPilot streams the attitude and rate targets in any mode, but the position and velocity targets only in GUIDED, so those two charts stay empty in a manual hover. The gains themselves edit normally.

Firmware for both

Firmware flashing works for both stacks. See Firmware.

Suggest a change to this page