Skip to content

Moving Baseline Configuration

Moving Baseline is a dual-antenna technique that derives accurate heading (yaw) directly from two GPS modules mounted on the same vehicle — no magnetometer required. The Orbit Neo Plus supports this natively via its u-blox ZED-F9P chipset and DroneCAN interface.

How It Works

Two Orbit Neo Plus units are mounted on the vehicle. One is designated the Master (Base) and the other the Slave (Rover). The Master sends RTCM correction data to the Slave over the CAN bus. By computing the precise vector between the two antennas, the system derives a highly accurate heading.


Before You Begin

What You Need

  • 2× Orbit Neo Plus units
  • A CAN bus splitter
  • Flight controller running ArduPilot 4.1.5+ or PX4 1.12.3+
  • Mission Planner (ArduPilot) or QGroundControl (PX4)

Antenna Placement Rules

Getting the physical mounting right is the most important step. Follow these rules before touching any parameters:

  1. Minimum separation: 30 cm between the two antennas — more separation means better heading accuracy
  2. Same height — both antennas must be at the same vertical level on the vehicle
  3. Same orientation — both units should face the same direction
  4. Front-to-back alignment — ideally mount Master at the front and Slave at the rear, along the vehicle’s forward (0° yaw) axis
  5. Same CAN bus — both units must connect to the same CAN bus; use a CAN splitter

Step 1 — Physical Connections

  1. Connect both Orbit Neo Plus units to the CAN bus using a CAN splitter
  2. Connect the splitter output to CAN1 (or CAN2) on your flight controller
  3. Power on the flight controller

Step 2 — Measure and Record Your Offsets

Before configuring parameters, physically measure and write down two sets of offsets. You will need these in later steps.

A. Master–Slave Antenna Offset

This is the position of the Master antenna relative to the Slave antenna.

Master-Slave Antenna Offset Diagram

Measure the distance between the two antennas in each axis:

AxisPositive DirectionParameter
XMaster is in front of SlaveGPS1_MB_OFS_X
YMaster is to the right of SlaveGPS1_MB_OFS_Y
ZMaster is below SlaveGPS1_MB_OFS_Z

Example: If your Master is mounted 40 cm directly to the right side of the Slave at the same height:

  • GPS1_MB_OFS_X = 0.00
  • GPS1_MB_OFS_Y = 0.40
  • GPS1_MB_OFS_Z = 0.00

B. Master Antenna Offset from Vehicle CG

This is the position of the Master antenna relative to the vehicle’s Center of Gravity (CG). This step is optional but recommended for centimeter-level accuracy.

Master Antenna CG Offset Diagram

AxisPositive DirectionParameter
XMaster is in front of CGGPS1_POS_X
YMaster is to the right of CGGPS1_POS_Y
ZMaster is below CGGPS1_POS_Z

Keep these values handy — you will enter them into the parameter list in the next steps.


Step 3 — Configure Parameters

Choose your firmware below and follow the corresponding steps.


ArduPilot Setup

Open Mission Planner → Config → Full Parameter List.

3a. Enable DroneCAN

ParameterValueDescription
CAN_D1_PROTOCOL1Enable DroneCAN on CAN1
CAN_P1_DRIVER1Enable CAN1 driver

3b. Set GPS Types

ParameterValueDescription
GPS1_TYPE22DroneCAN Moving Baseline Master (Base)
GPS2_TYPE23DroneCAN Moving Baseline Slave (Rover)
GPS_AUTO_CONFIG2Auto-configure DroneCAN GPS for Moving Baseline
GPS_DRV_OPTIONS8Route RTCM correction data between units via CAN

3c. Configure EKF for GPS Yaw

ParameterValueDescription
AHRS_EKF_TYPE3Use EKF3
EK2_ENABLE0Disable EKF2
EK3_ENABLE1Enable EKF3
EK3_SRC1_YAW2GPS yaw source — use 3 to allow compass as fallback

Warning: Do not set GPS_AUTO_SWITCH = 2 (Blend) — it is incompatible with Moving Baseline.

3d. Set Master–Slave Antenna Offsets

These are the values you measured in Step 2A.

ParameterValueDescription
GPS1_MB_TYPE1Enable Master–Slave offset entry for GPS1
GPS1_MB_OFS_X(your measurement)Master offset from Slave — X axis (m)
GPS1_MB_OFS_Y(your measurement)Master offset from Slave — Y axis (m)
GPS1_MB_OFS_Z(your measurement)Master offset from Slave — Z axis (m)

3e. Set Master Antenna Offset from CG (optional)

These are the values you measured in Step 2B.

ParameterValueDescription
GPS1_POS_X(your measurement)Master antenna offset from CG — X axis (m)
GPS1_POS_Y(your measurement)Master antenna offset from CG — Y axis (m)
GPS1_POS_Z(your measurement)Master antenna offset from CG — Z axis (m)

Note: GPS1_CAN_NODEID and GPS2_CAN_NODEID show the auto-assigned node IDs after boot. If the wrong unit is being assigned as Master or Slave, use GPS1_CAN_OVRIDE and GPS2_CAN_OVRIDE to swap them.

3f. Write and Reboot

  1. Click Write Params
  2. Reboot the flight controller

PX4 Setup

Open QGroundControl → Vehicle Setup → Parameters.

3a. Enable DroneCAN

ParameterValueDescription
UAVCAN_ENABLE2Enable DroneCAN with dynamic node allocation

Reboot the flight controller so both nodes are detected.

3b. Configure Each Node

In QGroundControl, go to Parameters → DroneCAN and locate the two ZED-F9P nodes by their component IDs.

On the Master (Base) node:

ParameterValueDescription
GPS_TYPE17Moving Baseline Base
GPS_AUTO_CONFIG1Enable auto-configuration
GPS_POS_X(your measurement)Antenna offset from autopilot — X (m)
GPS_POS_Y(your measurement)Antenna offset from autopilot — Y (m)
GPS_POS_Z(your measurement)Antenna offset from autopilot — Z (m)

On the Slave (Rover) node:

ParameterValueDescription
GPS_TYPE18Moving Baseline Rover
GPS_AUTO_CONFIG1Enable auto-configuration
GPS_POS_X(your measurement)Antenna offset from autopilot — X (m)
GPS_POS_Y(your measurement)Antenna offset from autopilot — Y (m)
GPS_POS_Z(your measurement)Antenna offset from autopilot — Z (m)

3c. Set Autopilot Parameters

ParameterValueDescription
UAVCAN_SUB_GPS_R1Subscribe to GNSS relative data from Rover
EKF2_GPS_CTRL15Enable dual antenna heading fusion
EKF2_GPS_YAW_OFF(see table below)Angle from Base to Rover orientation

For EKF2_GPS_YAW_OFF, use the value that matches your mounting:

Rover position relative to BaseValue
Rover in front of Base0
Rover to the right of Base90
Rover behind Base180
Rover to the left of Base270

3d. Write and Reboot

  1. Save all parameters
  2. Reboot the flight controller

Step 4 — Verify

Once the flight controller has rebooted and both units have a GNSS fix, run these checks:

Indicator Check

  • The RTK Status LED on both Orbit Neo Plus units should be off, indicating a Fixed RTK lock

Heading Check

  1. Take the vehicle outside to an open area with a clear sky view
  2. Point the vehicle at a known distant landmark
  3. Confirm the heading shown in Mission Planner / QGroundControl matches the physical direction
  4. Slowly rotate the vehicle 360° and verify the heading updates correctly throughout

If the heading appears reversed, your GPS1_MB_OFS or GPS_POS values are likely swapped — recheck which unit is Master and which is Slave.

ArduPilot RTK Validation

ArduPilot performs additional checks before accepting the Moving Baseline heading. It verifies that:

  • The Slave GPS is in Fix Type 6 (Fixed RTK)
  • The measured distance between the two modules matches your configured offset within 20%
  • The height difference between the two modules is consistent with the vehicle’s attitude within 20% of the antenna separation distance

It can take a few minutes after obtaining a GNSS fix for all three conditions to be met. This is normal.


RTK Correction (Optional)

ArduPilot automatically forwards RTCM correction data received from a ground station or telemetry radio to both GPS units. This allows simultaneous use of a fixed RTK base station alongside Moving Baseline for both centimeter-level position and heading accuracy — no additional configuration is required.