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

Antenna Placement Diagram


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 Antenna Separation

Before configuring parameters, measure the baseline distance between your two antennas.

Antenna Baseline Distance

Measure the straight-line distance between the two GPS antennas:

  • Minimum separation: 30 cm
  • Recommended: 50-100 cm for better accuracy
  • Maximum: No strict limit, but accuracy improves with longer baselines

Write down this measurement - you’ll verify it during the validation step.

Note: Unlike single-unit dual-antenna systems, you do NOT need to configure individual X/Y/Z offsets. The flight controller automatically calculates the heading vector from the RTK solution between the two units.


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 GPS Antenna Positions

Measure the position of each GPS antenna relative to the vehicle’s Center of Gravity (CG).

GPS Antenna Position Offsets

For GPS1 (Master):

ParameterValueDescription
GPS1_POS_X(your measurement)Master antenna position — X axis (meters)
Positive = forward of CG
GPS1_POS_Y(your measurement)Master antenna position — Y axis (meters)
Positive = right of CG
GPS1_POS_Z(your measurement)Master antenna position — Z axis (meters)
Positive = down from CG

For GPS2 (Slave):

ParameterValueDescription
GPS2_POS_X(your measurement)Slave antenna position — X axis (meters)
Positive = forward of CG
GPS2_POS_Y(your measurement)Slave antenna position — Y axis (meters)
Positive = right of CG
GPS2_POS_Z(your measurement)Slave antenna position — Z axis (meters)
Positive = down from CG

Example: If your Master GPS is mounted 20 cm to the right of CG at the height 15 cm above CG, and Slave is 20 cm to the left at the height 15 cm above CG:

  • GPS1_POS_X = 0.00 (30 cm forward)
  • GPS1_POS_Y = 0.20 (10 cm right)
  • GPS1_POS_Z = -0.15 (height 15 cm above CG)
  • GPS2_POS_X = 0.00 (20 cm behind)
  • GPS2_POS_Y = -0.20 (10 cm left)
  • GPS2_POS_Z = -0.15 (height 15 cm above CG)

Note: These offsets help the EKF calculate more accurate position and heading. While optional, they’re recommended for best performance.

3e. Write and Reboot

  1. Click Write Params
  2. Reboot the flight controller

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.


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)Master antenna offset from autopilot — X (meters)
GPS_POS_Y(your measurement)Master antenna offset from autopilot — Y (meters)
GPS_POS_Z(your measurement)Master antenna offset from autopilot — Z (meters)

On the Slave (Rover) node:

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

Coordinate System:

  • X-axis: Positive = forward from autopilot
  • Y-axis: Positive = right from autopilot
  • Z-axis: Positive = down from autopilot

3c. Set Autopilot Parameters

ParameterValueDescription
UAVCAN_SUB_GPS_R1Subscribe to GNSS relative data from Rover
EKF2_GPS_CTRL15Enable dual antenna heading fusion

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 solid, indicating a Fixed RTK lock between them

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 or offset by 90°, verify which unit is assigned as Master and which is Slave. Use GPS1_CAN_OVRIDE (ArduPilot) to swap them if needed.

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 is stable
  • The height difference between the two modules is consistent with the vehicle’s attitude

It can take a few minutes after obtaining a GNSS fix for all 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.