Project Quiver: Open-Source Companion Computer SDK & Cloud Hub for a 25 kg Modular UAV

Hi everyone,

I wanted to share some work we’ve been doing on companion computer integration and payload data architecture for Project Quiver — an open-source, 25 kg (MTOW) multi-rotor UAV built by the Arrow Air DAO. The drone runs ArduPilot on a Pix32 V6 and is designed around a modular attachment system for swappable mission payloads.

Why this might interest you

We’ve been building a Python-based SDK and cloud control center (Quiver Hub) that turns the onboard Raspberry Pi into a proper bridge between the flight controller, payload devices, and a web-based operator dashboard. The core idea: let developers plug in new sensors, actuators, or compute modules through standardized Ethernet and CAN payload ports, and have them talking to the aircraft and a cloud dashboard within minutes — no firmware mods needed.

The current (WIP) SDK developer guide is published here: Quiver SDK Developer Guide

Architecture at a glance

The companion computer (RPi 4/5) sits at the center of four data flows:

Network topology:

  • Companion ↔ Quiver Hub: HTTPS REST + WebSocket (telemetry streaming, job queue, file sync) over WiFi or 4G/5G cellular

  • Companion ↔ Payloads: Integrated Ethernet switch with 3 payload ports (C1/C2/C3 at 192.168.144.11/.12/.13) + shared CAN bus (DroneCAN)

  • Companion ↔ Flight Controller: MAVLink over Ethernet (attitude, position, GPS, battery, mode, armed state)

  • Mission Planner/QGC ↔ FC: Standard RF telemetry link

What’s implemented

Quiver Hub Client (raspberry_pi_client.py)

A polling-based job execution system. The companion checks Hub every 5 seconds for pending jobs (file downloads, config updates, service restarts, custom commands), executes locally, and reports completion. Extensible — developers subclass and add their own job handlers.

Telemetry Forwarder (telemetry_forwarder.py)

Multi-threaded collection from two concurrent sources:

  • MAVLink thread (via MAVSDK): subscribes to attitude, position, GPS, battery, flight mode

  • UAVCAN thread (via dronecan): listens for BatteryInfo messages on can0

  • HTTP thread: aggregates into a shared dict and POSTs to Hub at 10 Hz (configurable)

Flight Controller (MAVLink) ──┐
                               ├──> Telemetry Dict ──> HTTP Queue ──> Quiver Hub
Battery (UAVCAN) ─────────────┘     (thread-safe)      (rate-limited)

Payload Forwarders (demonstrated)

We’ve built and tested end-to-end pipelines for:

  • RPLidar C1 point cloud: sensor → RPi streamer (TCP) → companion forwarder (HTTP POST) → Hub WebSocket → browser 3D visualization

  • SIYI A8 mini camera feed: gimbal camera → companion (TCP control + RTSP proxy) → Hub → browser video + gimbal control UI

  • FC + battery telemetry: MAVLink + UAVCAN → companion → Hub → live attitude/position/battery dashboard

Quiver Hub (web app)

A cloud-hosted control center (repo here) providing:

  • Real-time telemetry dashboards (attitude indicators, GPS map, battery gauges)

  • Job queue management for remote companion computer control

  • File storage and distribution (S3-backed)

  • A tabbed “App Store” interface where each payload pipeline gets its own operator UI tab

  • A UI builder for custom data displays (viewports, charts, gauges, text fields, buttons)

  • tRPC + REST API for companion communication

All SDK components deploy as systemd services with rotating logs, .env-based configuration, and auto-restart.

The drone itself

A few relevant hardware details for ArduPilot users:

  • Flight controller: Pix32 V6 running ArduPilot with custom FC adapter PCB (breaks out the 100-pin connector)

  • Propulsion: 14S high-voltage with DroneCAN ESCs, hovering at ~55% throttle at MTOW

  • Navigation: Dual-antenna RTK GNSS

  • Obstacle avoidance: RPLidar S2L (360° LiDAR, BendyRuler) + NanoRadar MR82 (forward radar) + rangefinder altimeter, tuned through SITL then field-validated

  • Waterproofing: IP53 rated (3D-printed enclosures with silicone seals)

  • Attachment interface: Dual side-mounted standardized PCB connectors providing power (12V/5V), CAN, and Ethernet to payloads

Everything is open-source under the CERN Open Hardware Licence: GitHub — Arrow-air/project-quiver

Collaborate with us — open bounties for payload attachments

We’re actively looking for developers and integrators who want to build on this platform. Arrow Air runs a grants and bounties program to fund community-built attachments and payload integrations. Some of the attachments we’re interested in seeing developed:

  • Cargo delivery mechanisms (winch/drop systems)

  • Agricultural spraying/seeding modules

  • Aerial survey and mapping payloads (multispectral, thermal)

  • Environmental monitoring sensors (air quality, weather stations)

  • Search and rescue equipment (spotlights, speakers, thermal cameras)

  • Infrastructure inspection tools

  • Custom sensor integrations of your choosing

Detailed attachment requirements and bounty specs are here:

We can also loan dev-kit drones to developers with promising attachment ideas. If you’ve got a payload concept you’d like to fly on a 25 kg open-source platform with a proper companion computer SDK, we’d love to hear from you.

Links

Resource Link
Project repository github.com/Arrow-air/project-quiver
Quiver Hub (dev branch) github.com/Pan-Robotics/Quiver-Hub
SDK Developer Guide hackmd.io/@arrowair/H1XN8plPZx
SDK Information Note hackmd.io/@arrowair/Bk_oEjJv-x
Arrow DAO Forum dao.arrowair.com
Attachment bounties Bounty details on GitHub

Happy to answer questions, take feedback on the architecture, or discuss integration ideas. We’re particularly interested in how others have handled multi-source telemetry aggregation and companion-to-cloud streaming patterns with ArduPilot.

Cheers, Alex

2 Likes

Looks cool! Thanks for sharing.

1 Like