For the complete documentation index, see llms.txt. This page is also available as Markdown.

PX4 Instructions

The ARK X20 RTK GPS runs the PX4 DroneCAN firmware, so it supports firmware update over the CAN bus and dynamic node allocation.

  • Firmware target: ark_x20-gps_default

  • Bootloader target: ark_x20-gps_canbootloader

  • Board ID: 89


Firmware Update

Updating from the Flight Controller

PX4 flashes DroneCAN nodes automatically at boot. This is the recommended method — it needs no hardware beyond the flight controller.

  1. Download the firmware from the ARK X20 RTK GPS page, or build ark_x20-gps_default yourself.

  2. Copy the .uavcan.bin file to the root of the flight controller's SD card.

  3. Set UAVCAN_ENABLE to 2 (or 3) and power cycle the vehicle.

  4. Wait for the update to finish. The node's CAN LED blinks blue and red rapidly while flashing, then returns to fast blinking green.

On boot PX4 reads the board ID from the metadata block embedded in the binary, moves the file to /fs/microsd/ufw/89.bin, and deletes it from the SD card root. The file name does not matter — only the embedded metadata is used to match the file to the node.

The firmware stays in /fs/microsd/ufw/ and PX4 re-flashes any ARK X20 RTK GPS on the bus whose firmware does not match it. This keeps a replacement node in sync automatically, but it also means you must delete /fs/microsd/ufw/89.bin before flashing a different version by any other method.

For remote or scripted updates, upload the file to /fs/microsd/ufw_staging/ instead. PX4 moves it into /fs/microsd/ufw/ on the next boot, which avoids write conflicts if the file is uploaded while the vehicle is running.

Updating with the DroneCAN GUI Tool

Use this when the node is not connected to a PX4 flight controller, or when you want to flash a single node directly. You need:

  • A USB-to-CAN adapter that supports SLCAN, such as the Zubax Babel, connected to the same CAN bus. PX4 cannot expose its own CAN bus to the tool — see the ArduPilot - Flight Controller as CAN Interface section of the DroneCAN GUI Tool Guide for the ArduPilot alternative.

  • A dynamic node ID allocation server on the bus to assign the node an ID. Either a flight controller with UAVCAN_ENABLE set to 2 or 3, or the DroneCAN GUI Tool's own allocation server, started with the rocket icon in the tool's main window.

Upload the .uavcan.bin file to the node — see the DroneCAN GUI Tool Guide for connection and firmware upload steps.

Updating to AP_Periph

To run the node with ArduPilot, flash AP_Periph instead. Support is in review upstream — see ArduPilot Instructions.


Single GPS Configuration

Connect the ARK X20 RTK GPS to the flight controller's CAN port using a standard 4-pin JST-GH cable. The recommended mounting orientation is with the connectors pointing towards the back of the vehicle.

Flight Controller Parameters

Set the following in QGroundControl and reboot the flight controller.

Required

Parameter
Value
Description

2

Enable DroneCAN with dynamic node allocation (use 3 if also driving DroneCAN ESCs)

1

Subscribe to DroneCAN GPS messages

1

Subscribe to DroneCAN magnetometer messages

7

Enable GPS fusion (lon/lat + alt + 3D velocity)

Optional

Parameter
Description

Set to 1 to subscribe to DroneCAN barometer messages

Set to 1 to subscribe to DroneCAN RawIMU messages. Requires CANNODE_PUB_IMU on the node

Set to 1 to use the safety switch on the ARK X20 RTK GPS

GPS antenna offset from the vehicle center of gravity (meters). On PX4 v1.17 and earlier these are EKF2_GPS_POS_X/Y/Z

Device ID of the receiver the SENS_GPS0_* offsets apply to. With two receivers, use SENS_GPS0_ID and SENS_GPS1_ID to match each set of offsets — matching by instance index is only reliable for serial GPS

CAN Node Parameters

Set the following on the GPS and reboot the node. CAN node parameters can be configured using either:

Optional

Parameter
Description

CANNODE_TERM

Set to 1 if this is the last node on the CAN bus

CANNODE_NODE_ID

Static node ID, 1-125. Leave at 0 (default) to use dynamic node allocation

CANNODE_PUB_MAG

Publish magnetometer messages on the CAN bus. Enabled by default

CANNODE_PUB_IMU

Set to 1 to publish RawIMU messages on the CAN bus

GPS_UBX_BAUD1

X20P UART1 baudrate. Board default is 921600

GPS_UBX_BAUD2

X20P UART2 baudrate. Default is 230400

GPS_UBX_MODE

Set to 7 to make the UART2 connector a UBX diagnostic port for u-center, at the GPS_UBX_BAUD2 baudrate


RTK Corrections from a Fixed Base

Centimeter-level absolute position requires RTCM corrections from a fixed base station on the ground. For the base station setup and the flight controller and CAN node parameters that carry the corrections onto the CAN bus, see ARK RTK Base > PX4 Instructions.

The X20P also accepts u-blox PointPerfect PPP-RTK corrections (SPARTN), which need no base station. On vehicles running ARK-OS, the pointperfect service streams them to the flight controller over MAVLink — see pointperfect-client-mavlink. They reach the node the same way as base-station corrections: UAVCAN_PUB_RTCM on the flight controller, CANNODE_SUB_RTCM on the node.


Moving Baseline GPS Heading Configuration

Two ARK X20 RTK GPS modules can provide compass-free yaw estimation using the GPS moving baseline technique. The relative position between the two antennas determines heading, so no magnetometer is required.

Moving baseline requires X20P receiver firmware 2.10 or later — see u-blox Firmware Update to check and update it.

Hardware Setup

  • Connect both modules to the same CAN bus. Each module has two CAN connectors, so the second can be daisy-chained from the first.

  • Mount the antennas with a minimum of 30 cm separation — more is better for heading accuracy.

  • Choose one module to be the Rover and the other to be the Moving Base.

Heading is only output when the Rover has an RTK Fixed solution. No heading is output in RTK Float. RTK Fixed here means the baseline between the two antennas is resolved, which is what produces the heading — the vehicle's absolute position is no more accurate than a normal 3D fix unless you also feed in corrections from a fixed base.

Flight Controller Parameters

Apply the Single GPS Configuration flight controller parameters above, then change/add the following in QGroundControl and reboot the flight controller.

Required

Parameter
Value
Description

15

Enable GPS fusion + GPS yaw (lon/lat + alt + 3D velocity + yaw). Overrides the value of 7 from the single GPS configuration

1

Subscribe to DroneCAN RelPosHeading messages, which carry the heading computed by the Rover. Enabled by default

node ID

CAN node ID of the Moving Base. It is preferred over the Rover, whose navigation rate and data latency can degrade when corrections are intermittent

7

Blend both receivers using speed, horizontal position, and vertical position accuracy. This is the default value

CAN Node Parameters

Set the following on each node and reboot it.

On the Rover:

Parameter
Value
Description

GPS_UBX_MODE

3

Heading — rover with moving base, X20P UART1 connected to the CAN node

CANNODE_SUB_MBD

1

Subscribe to MovingBaselineData messages on the CAN bus

GPS_YAW_OFFSET

0 / 90 / 180 / 270

Clockwise angle in degrees from the vehicle forward axis to the Moving BaseRover baseline: 0 if the Rover is in front of the Moving Base, 90 if right, 180 if behind, 270 if left

On the Moving Base:

Parameter
Value
Description

GPS_UBX_MODE

4

Moving base — X20P UART1 connected to the CAN node

CANNODE_PUB_MBD

1

Publish MovingBaselineData messages on the CAN bus

Sending Corrections over UART

The moving baseline corrections can be sent directly between the two modules over the X20P UART2 link instead of the CAN bus, which keeps that traffic off CAN. Both modules still connect to the flight controller over CAN.

Connect the two 4-pin JST-GH UART2 connectors to each other — TX of one module to RX of the other, and GND to GND.

Pin
Signal Name

1

TXD2

2

RXD2

3

TIMEPULSE

4

GND

Then set GPS_UBX_MODE to 1 on the Rover and 2 on the Moving Base. GPS_YAW_OFFSET is set on the Rover as above. CANNODE_PUB_MBD and CANNODE_SUB_MBD are not used in this configuration.


LED Meanings

The GPS status LEDs are to the right of the connectors:

LED
Meaning

Blinking green

GPS fix

Blinking blue

Corrections received, RTK Float

Solid blue

RTK Fixed

The CAN status LEDs are to the left of the connectors:

LED
Meaning

Slow blinking green

Waiting for CAN connection

Fast blinking green

Normal operation

Slow blinking green and blue

CAN enumeration

Fast blinking blue and red

Firmware update in progress

Blinking red

Error


Troubleshooting

  • Node does not appear on the bus — run uavcan status in the QGroundControl MAVLink Console to list the nodes PX4 has detected. Check that UAVCAN_ENABLE is set to 2 or 3 and that the flight controller has a working SD card installed.

  • Blinking red CAN LED — confirm the flight controller has an SD card, that ark_x20-gps_canbootloader was installed on the node before ark_x20-gps_default, and that there are no stale binaries left in the SD card root or in /fs/microsd/ufw/.

  • Node is not detected at all, even by the DroneCAN GUI Tool — for example after a bad flash that erased the bootloader. Recover it over SWD with an ST-LINK, see Flashing DroneCAN Nodes.

  • No heading in a moving baseline setup — heading is only output at RTK Fixed. Confirm the Rover shows a solid blue GPS LED, that the antennas are at least 30 cm apart, and that the X20P receiver firmware is 2.10 or later.

  • Test outside — GPS modules need a clear sky view to get a good fix. Indoor testing will not produce reliable results.

  • See our GPS Placement guide for mounting best practices, interference sources, and antenna positioning.

Last updated