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

Hardware configuration

Cyclops requires a storage device, a camera, and a serial connection to the flight controller.

UART Serial Setup

Your device needs a serial connection to communicate with the flight controller using MAVLink. There are many ways to set this up. You can find docs on the manufacturer's website for your specific hardware setup.

For some computers such as the NanoPi R6C, you can buy a serial hat for UART connections. In the case of the Pi 5, you can read their docs on configuring a serial port, or use our script below for easy setup.

UART0 is used for the MAVLink serial connection between the Pi 5 and the flight controller at 921600 baud.

Pinout: (Pi 5 pinout diagram)

Function
GPIO
Header Pin
Connects To

TX

14

Pin 8

FC RX

RX

15

Pin 10

FC TX

GND

—

Any GND

FC GND

Both the Pi 5 and flight controller operate at 3.3V logic. No level shifting required.

Pi 5 UART naming

On Pi 5, GPIO 14/15 are driven by a PL011 UART in the RP1 southbridge, which shows up at MMIO 0x1f00030000. The device node it enumerates to depends on the OS image:

  • Ubuntu 24.04 Desktop (Pi 5): /dev/ttyAMA0 (with a /dev/serial0 symlink in some releases)

  • Ubuntu 24.04 Server (recommended for 2GB Pi 5): /dev/ttyAMA0, no /dev/serial0 symlink

  • A second node /dev/ttyAMA10 (at 0x107d001000) will also appear — this is an internal SoC UART, not GPIO 14/15. Ignore it.

To confirm which node is GPIO 14/15, check dmesg:

The line containing 1f00030000.serial identifies the GPIO header UART (typically ttyAMA0).

Setup:

  1. Disable the serial console if active (Desktop images sometimes enable this; Server typically does not):

  1. Remove console=ttyAMA0,115200 or console=serial0,115200 from /boot/firmware/cmdline.txt if present:

3. Edit /boot/firmware/config.txt. Under the [all] section, ensure the following are set:

4. Reboot. UART is available at /dev/ttyAMA0.

Verification:

Connect the Pi to the flight controller and ensure the corresponding serial port is configured to output MAVLink2 at 921600 baud. Then:

You should see binary output with recurring fd bytes (MAVLink2 start byte) followed by a length byte and incrementing sequence numbers. Example:

This confirms MAVLink data is flowing and the serial link is working. Ctrl+C to stop.

Troubleshooting:

  • cat: /dev/ttyAMA0: No such file or directory → uart0-pi5 overlay not loaded. Verify config.txt and reboot.

  • Only /dev/ttyAMA10 exists → same cause; the GPIO UART hasn't been instantiated.

  • No 0x1f00030000.serial line in dmesg → overlay didn't apply; check for typos in config.txt.

  • Data flowing but garbled even at correct baud → check TX/RX aren't swapped, and confirm FC is set to MAVLink2 (not MAVLink1, which starts with fe).

For Cyclops v1.20.0 and later, MAVLink connection to the flight controller over UDP/TCP is supported. The CLI tool vns-config on the edge device is the only way to configure an IP MAVLink connection.

Do not provide a baudrate for UDP or TCP endpoints. Supported endpoint settings:

Endpoint
Use

udpin:HOST:PORT

Listen for UDP (FC sends to Cyclops computer)

udpout:HOST:PORT or udp:HOST:PORT

Send UDP to that address

tcp:HOST:PORT or tcpout:HOST:PORT

Connect as a TCP client

tcpin is not supported

When you add an endpoint that already exists, vns-config updates that entry. Adding an existing network endpoint without a baudrate clears any baudrate from that endpoint.

After changing endpoints, restart the MAVLink Router service and verify the active configuration:

Configure the Pi to listen for MAVLink on UDP port 14550:

Point the flight controller or network sender at the Pi's IP address on port 14550.

Configure MAVLink Router to connect to a TCP MAVLink server at 192.168.1.10:5760:

Example: Replace Serial with Ethernet

Remove the default serial ports and add a UDP network endpoint:

Enable USB Port Full Power

When powering the Pi 5 via the GPIO header (pins 2/4 for 5V, bypassing the USB-C PMIC), USB ports default to a 600mA total current budget. Override this to provide full power to USB peripherals.

Edit /boot/firmware/config.txt:

Add this line under the [all] section:

Save with Ctrl+O, Enter, Ctrl+X. Reboot to apply:

This raises the total USB port current budget to 1.6A.

Recap

We have now set up all of our hardware. Your addresses may vary, but we have:

Last updated