> For the complete documentation index, see [llms.txt](https://docs.theseus.us/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.theseus.us/cyclops/autopilot-integration/universal-setup/ardupilot.md).

# ArduPilot

[ArduPilot](https://ardupilot.org/) is an open-source autopilot. Theseus is proud to be an [ArduPilot partner](https://ardupilot.org/ardupilot/docs/common-partners.html).

Cyclops does not require you to install any custom version of ArduPilot, Mission Planner, or QGroundControl. Our system works out of the box with existing software.

**The Cyclops system is tested on ArduPilot v4.6**. We recommend using ArduPilot v4.6+ to guarantee compatibility.

{% hint style="info" %}
The Cyclops system is expected to be compatible with ArduPilot v4.x. Please let us know if you integrate with an older version of ArduPilot.
{% endhint %}

## Parameters

Prior to configuring the ArduPilot parameters to enable communication with Cyclops, enable MAVLink on the port you selected when integrating with your flight controller in [Flight Controller](/cyclops/vehicle-integration/flight-controller.md).

### UART Port

Set the port protocol to **MAVLink 2** and baud rate to **921600**.

Here is the map between physical and UART ports for the **Cube Orange +**:

| UART   | Serial   | Physical Port |
| ------ | -------- | ------------- |
| UART 2 | SERIAL 1 | TELEM 1       |
| UART 3 | SERIAL 2 | TELEM 2       |
| UART 8 | SERIAL 4 | GPS 2         |

### ArduPilot System Params

{% hint style="info" %}
By default, Cyclops sends position using the `MAV_CMD_EXTERNAL_POSITION_ESTIMATE` message.&#x20;
{% endhint %}

{% hint style="warning" %}
To accept these estimates, ArduPilot needs to not use the GPS in its EKF sources.
{% endhint %}

These parameters govern system time synchronization. We disable GPS blending and auto switching.

| ArduPilot Parameter | Param Value | Description           |
| ------------------- | ----------- | --------------------- |
| BRD\_RTC\_TYPES     | 2           | Set time from MAVLink |

{% hint style="info" %}
If you plan on sending positions using the GPS input message type, we recommend you look at our parameter configuration for the Micro VPS in [Autopilot Integration](/micro-vps/autopilot-integration.md). We disable the `GPS_AUTO_SWITCH` and `GPS_BLEND_MASK` to avoid naive fusion with a real GPS by ArduPilot.
{% endhint %}

### ArduPilot Dead Reckoning EKF Params

These parameters govern how the ArduPilot EKF integrates sensor measurements to estimate its position. This is one of the key components in ArduPilot's navigation and control mechanisms.

{% hint style="info" %}
These are the parameters we use for our internal testing when dead reckoning with ArduPlane.
{% endhint %}

ArduPilot's EKF has three sensor source sets (`EK3_SRC1`, `EK3_SRC2`, `EK3_SRC3`). You can configure each source sets with different sensor inputs. The configuration below sets `EK3_SRC1` to pull sensor information from the barometer and compass, and to not use the GPS.

Cyclops relies on the barometer to estimate altitude. We recommend enabling continuous calibration of the compass during flight. It is recommend to set EK3\_MAG\_CAL to 3 (in the air) or 4 (always).

{% hint style="warning" %}
Do not pull velocity (VELXY, VELZ), altitude (POSZ), or yaw (YAW) inputs from the GPS when VPS is on.
{% endhint %}

| ArduPilot Parameter | Param Value | Description                                   |
| ------------------- | ----------- | --------------------------------------------- |
| EK3\_SRC\_OPTIONS   | 0           | Disable fusing velocity sources               |
| EK3\_GPS\_CHECK     | 23          | Disable horizontal accuracy checks for arming |
| EK3\_SRC1\_POSXY    | 0           | Disable xy position input                     |
| EK3\_SRC1\_VELXY    | 0           | Disable xy velocity inputs                    |
| EK3\_SRC1\_POSZ     | 1           | Pull altitude from barometer                  |
| EK3\_SRC1\_VELZ     | 0           | Disable z velocity inputs                     |
| EK3\_SRC1\_YAW      | 1           | Pull yaw from compass                         |

Go to [Mission Planner](/micro-vps/autopilot-integration/mission-planner.md) or [QGroundControl](/cyclops/autopilot-integration/universal-setup/qgroundcontrol.md) to see how to configure your drone to operate with Micro VPS.

{% hint style="info" %}
We provide a Lua script for toggling the `EK3_SRC1_POSXY` to switch between dead reckoning mode and GPS mode, allowing your UAV to dead reckon with the EKF. This is covered in [Dead Reckoning Switch](/cyclops/autopilot-integration/optional-improvements/dead-reckoning-switch.md)
{% endhint %}


---

# 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.theseus.us/cyclops/autopilot-integration/universal-setup/ardupilot.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
