> For the complete documentation index, see [llms.txt](https://docs.arkelectron.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.arkelectron.com/products/gps/ark-g5-rtk-heading-gps/ardupilot-instructions.md).

# ArduPilot Instructions

The ARK G5 RTK Heading GPS can be operated as a single-antenna GPS or with two antennas to provide compass-free yaw. Start with the [Single GPS Configuration](#single-gps-configuration) below, then add the [Dual Antenna Heading Configuration](#dual-antenna-heading-configuration) if you want GPS yaw.

## Single GPS Configuration

Connect the ARK G5 RTK Heading GPS to the flight controller's CAN port using a standard 4-pin JST-GH cable.

### Flight Controller Parameters

#### Required

| Parameter         | Value | Description                              |
| ----------------- | ----- | ---------------------------------------- |
| `CAN_P1_DRIVER`   | 1     | Enable CAN port 1 driver                 |
| `CAN_D1_PROTOCOL` | 1     | Set protocol to DroneCAN                 |
| `GPS1_TYPE`       | 9     | DroneCAN                                 |
| `GPS_AUTO_CONFIG` | 1     | Enable auto-config for serial GPSes only |

{% hint style="warning" %}
Do not set `GPS_AUTO_CONFIG` to 2. The `GPS_AUTO_CONFIG=2` setting only works with GPS modules running AP\_Periph firmware (e.g., the ARK RTK GPS). The G5 runs PX4-based cannode firmware and handles its own GPS configuration internally via the `SEP_*` parameters. Setting this to 2 causes ArduPilot to attempt a parameter handshake with the CAN node that fails silently, blocking all GPS data from being processed.
{% endhint %}

Reboot the flight controller. The GPS should appear as a DroneCAN node and begin reporting position data. The on-board magnetometer will appear as an additional DroneCAN compass and can be enabled via the standard `COMPASS_*` parameters.

### CAN Node Parameters

The node publishes GPS, magnetometer and barometer data with its default parameters. To terminate the bus, fix the node ID, publish IMU data or change the receiver's output rate, PVT modes or dynamics model, see [Node Parameters](/products/gps/ark-g5-rtk-heading-gps/firmware.md#node-parameters).

***

## Dual Antenna Heading Configuration

The G5 provides compass-free yaw estimation using two GNSS antennas on a single DroneCAN node. Unlike the ARK RTK GPS dual-GPS heading setup (which uses two separate u-blox F9P nodes with `GPS1_TYPE=22` and `GPS2_TYPE=23`), the G5 handles the moving baseline calculation internally within the Septentrio mosaic-G5 module and reports the heading over DroneCAN as a single GPS.

### Hardware Setup

* Connect the ARK G5 RTK Heading GPS to the flight controller's CAN port using a standard 4-pin JST-GH cable
* Connect an antenna to MAIN (SMA) and one to ANT2 (U.FL), through an SMA-to-U.FL cable
* Mount the antennas with a minimum of **30 cm separation** (more is better for heading accuracy)

### Flight Controller Parameters

Apply the [Single GPS Configuration](#single-gps-configuration) flight controller parameters above, then add the following and reboot the flight controller.

#### Required

| Parameter       | Value      | Description                                                             |
| --------------- | ---------- | ----------------------------------------------------------------------- |
| `GPS1_MB_TYPE`  | 1          | RelativeToCustomBase — tells ArduPilot to use the antenna offsets below |
| `GPS1_MB_OFS_X` | *(meters)* | Antenna offset from ANT2 to MAIN, positive if MAIN is forward           |
| `GPS1_MB_OFS_Y` | *(meters)* | Antenna offset from ANT2 to MAIN, positive if MAIN is to the right      |
| `GPS1_MB_OFS_Z` | *(meters)* | Antenna offset from ANT2 to MAIN, positive if MAIN is below             |
| `AHRS_EKF_TYPE` | 3          | Use EKF3                                                                |
| `EK2_ENABLE`    | 0          | Disable EKF2                                                            |
| `EK3_ENABLE`    | 1          | Enable EKF3                                                             |
| `EK3_SRC1_YAW`  | 2          | GPS yaw (or `3` for GPS with compass fallback)                          |

{% hint style="info" %}
The `GPS1_MB_OFS_*` offsets describe the position of MAIN relative to ANT2 in the vehicle body frame. Measure the physical separation between the two antenna phase centers and enter the values in meters.
{% endhint %}

### CAN Node Parameters

On the P6 and P8, set `SEP_ANT_MODE` to `2` and reboot the node. The P3H ships with dual antenna saved in the receiver and needs no change. The node reports a heading only with fixed ambiguities. To disable heading (`SEP_DUAL_ANT` `0`), see [Node Parameters](/products/gps/ark-g5-rtk-heading-gps/firmware.md#node-parameters).

***

## Verifying Heading in Logs

Once the G5 is reporting heading, you can verify it in the flight logs by examining the **GPYW** (GPS Yaw) log message:

| Field   | Description                                                                                                                                   |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `RHD`   | Reported heading in degrees                                                                                                                   |
| `RDist` | Reported baseline distance between antennas (meters) — should match your physical antenna separation. `0` while the node has no valid heading |
| `RDown` | Reported vertical offset between antennas (meters)                                                                                            |
| `OK`    | 1 if the heading is valid and being used by the EKF, 0 if rejected                                                                            |

If `OK` is 0, the EKF is rejecting the GPS yaw. See the troubleshooting section below for common causes.

***

## Troubleshooting

* **GPS NO FIX with 0 satellites** — if Mission Planner shows "GPS NO FIX" with 0 sats and no position data, but the DroneCAN GUI Tool shows the GPS is publishing valid fix data on the CAN bus, check `GPS_AUTO_CONFIG`. If it is set to 2, change it to 1 and reboot. Setting it to 2 causes ArduPilot to try to auto-configure the CAN node by requesting parameters that the G5 firmware does not expose under the expected names. This handshake never completes, which blocks all GPS data from being used by the flight controller even though the CAN node is broadcasting valid fixes.
* **Verify RDist** — check the `GPYW.RDist` log field. Once the heading is valid it should closely match your measured antenna separation; a large discrepancy indicates a problem with the antenna connection or multipath. It reads `0` while the node has no valid heading, such as after boot until the heading solution is fixed.
* **Heading rejected (OK=0)** — common causes include:
  * Insufficient antenna separation
  * Poor sky view or multipath (e.g., reflections from nearby structures)
  * Incorrect `GPS1_MB_OFS_X/Y/Z` values
  * `EK3_SRC1_YAW` not set to 2 or 3
* **Compass calibration or configuration issues** — if you are having trouble calibrating or configuring the compasses, reset all `COMPASS_*` parameters back to their defaults and reboot the flight controller. Perform the compass calibration only after the GPS is connected.
* See our [GPS Placement](/knowledge-base/knowledge-base/gps-placement.md) guide for mounting best practices, interference sources, and antenna positioning.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.arkelectron.com/products/gps/ark-g5-rtk-heading-gps/ardupilot-instructions.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
