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 oncan0 -
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


