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
| Stack | Versions | Status |
|---|---|---|
| PX4 | v1.16, v1.17, v1.18 | Primary target. Every parameter, mode and mission change is checked against all three. |
| ArduPilot | 4.3 to 4.6: Copter, Plane, Rover/Boat and Sub | Secondary target, checked with every change as well. |
| PX4 (older) | v1.12 to v1.15 | Best 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:
| PX4 | ArduPilot | |
|---|---|---|
| Flight mode | Main mode and sub mode packed into one number | One flat number, read against this vehicle type's own table (4 is GUIDED on a copter and ACRO on a plane) |
| Takeoff | Command, then arm; altitude above sea level | GUIDED, arm, then command; altitude above home. Disarmed again if the command is refused |
| Compass calibration | PREFLIGHT_CALIBRATION | DO_START_MAG_CAL |
| Accelerometer positions | Detected by the autopilot | Confirmed by the ground station, one button per position |
| Motor test | MAV_CMD_ACTUATOR_TEST | DO_MOTOR_TEST |
| ESC calibration | Offered | Not offered (see below) |
| Autotune | A command with a progress stream | The AUTOTUNE flight mode |
| Mission | Items from 0, flown in Mission mode | Item 0 is home, flown in AUTO |
| Mission start | MISSION_START, which also arms | Arm in GUIDED (AUTO on a plane), then MISSION_START |
| Mission circle | No such item: sent as waypoints around the rim | NAV_LOITER_TURNS, flown as drawn |
| Mission check | After the upload, reported in MISSION_CURRENT | At the upload, in its answer |
| MAVLink shell | NSH over SERIAL_CONTROL | None |
| On-board log | ULog (.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_CALIBRATIONand 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
.binlogs 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.