Implementation Guides
Mesh Radio Networking
Set up multi-vehicle mesh networks with Doodle Labs, Silvus, or Microhard radios. From IP config to video streaming across a 5-drone swarm.
Jargon Buster
MANET
Mobile Ad-hoc Network. A network where nodes (drones, GCS, soldiers) find each other and route traffic without infrastructure. Every mesh radio creates a MANET.
batman-adv
Better Approach To Mobile Ad-hoc Networking. A Linux kernel module that handles mesh routing at Layer 2 (Ethernet frames). It's what Doodle Labs runs under the hood. Open source, well-documented.
TDMA
Time-Division Multiple Access. Silvus radios use this — each node gets a time slot to transmit. Prevents collisions, gives deterministic latency. Unlike WiFi which is "yell and hope nobody else is yelling."
MIMO
Multiple-Input Multiple-Output. Multiple antennas transmitting/receiving simultaneously. Silvus SC4200 uses 4x4 MIMO for higher throughput than single-antenna radios.
QoS
Quality of Service. Prioritizing traffic types — video gets priority over telemetry which gets priority over bulk data. Critical when mesh bandwidth is shared across vehicles.
GCS Bridge
The connection from your mesh network back to the Ground Control Station. Usually the GCS has its own mesh radio node, or connects via WiFi to a mesh gateway.
Choose Your Radio
| Feature | Doodle Labs | Silvus | Microhard | Persistent Systems |
| OS | OpenWRT (Linux) | Custom Linux | Custom | Custom Linux |
| Mesh Protocol | batman-adv (L2) | Custom TDMA MAC | OFDM P2P/Mesh | Wave Relay |
| SSH Access | Yes (root) | Limited | No | No |
| Frequency | 900MHz–6GHz | 1.2–6GHz | 900MHz/2.4GHz | 1.2–6GHz |
| Drone Size | Mini fits 5" | SC4200 fits 10"+ | pMDDL fits 7" | MPU5 fits 10"+ |
| Approx Price | $1.5K–$5K | $5K–$15K | $1K–$3K | $8K–$20K |
| Best For | Customizable, R&D | Defense, high-throughput | Budget, P2P links | Large-scale military |
Doodle Labs Setup
Doodle Labs radios run OpenWRT. You SSH in and configure them like a Linux router.
# ═══ DOODLE LABS MESH RIDER — INITIAL CONFIG ═══
# 1. Connect radio to PC via Ethernet
# Default IP: 10.223.x.x (varies by model)
# Web UI: http://10.223.x.1
# 2. SSH in (the real power move)
ssh root@10.223.x.1
# Default password: on label or 'doodlelabs'
# 3. Set unique mesh IP for this node
uci set network.mesh.ipaddr='192.168.168.11' # Drone 1
# Drone 2 = .12, Drone 3 = .13, GCS = .1
uci commit network
/etc/init.d/network restart
# 4. Set mesh channel + bandwidth
uci set wireless.radio0.channel='36' # All nodes MUST match
uci set wireless.radio0.bandwidth='20' # 20MHz = reliable, 40MHz = faster
uci commit wireless
wifi reload
# 5. Verify mesh peers
batctl o # Show batman-adv originator table
batctl n # Show direct neighbors
ping 192.168.168.1 # Ping GCSDoodle Labs
Multi-vehicle tip: Give every node the same channel, bandwidth, and mesh SSID. Give each a unique mesh IP. batman-adv handles the rest — it discovers peers automatically and routes around failures. If drone 2 can't reach GCS directly, traffic routes through drone 1.
Video & Telemetry Streaming
# ═══ GStreamer VIDEO STREAM (on drone companion computer) ═══
# Stream camera over mesh network to GCS
gst-launch-1.0 v4l2src device=/dev/video0 ! \
video/x-raw,width=1280,height=720,framerate=30/1 ! \
x264enc tune=zerolatency bitrate=2000 ! \
rtph264pay ! \
udpsink host=192.168.168.1 port=5600
# On GCS — receive with QGC or:
gst-launch-1.0 udpsrc port=5600 ! \
application/x-rtp ! rtph264depay ! avdec_h264 ! \
autovideosink
# ═══ MAVLink TELEMETRY ROUTING ═══
# mavlink-router forwards FC telemetry over mesh
# Install: apt install mavlink-router (or build from source)
mavlink-routerd -e 192.168.168.1:14550 /dev/ttyUSB0:921600
# This forwards MAVLink from FC (USB serial) to GCS over mesh
# GCS (QGC/Mission Planner) connects to UDP 14550Streaming
# ═══ QoS PRIORITY (Doodle Labs) ═══
# SSH into radio, set DSCP-based QoS
# Video (high priority):
iptables -t mangle -A POSTROUTING -p udp --dport 5600 -j DSCP --set-dscp-class AF41
# MAVLink telemetry (highest priority):
iptables -t mangle -A POSTROUTING -p udp --dport 14550 -j DSCP --set-dscp-class EF
# Bulk data (low priority):
iptables -t mangle -A POSTROUTING -p tcp --dport 22 -j DSCP --set-dscp-class BEQoS
Multi-Drone Swarm Network
The full picture: Each drone has a mesh radio + companion computer + FC. The companion runs MAVROS (for FC telemetry) + GStreamer (for video) + your autonomy stack. All traffic flows over the mesh. The GCS sees every drone as if they're on a local network — because they are.
# ═══ EXAMPLE: 3-DRONE SWARM IP PLAN ═══
# GCS: 192.168.168.1 (mesh radio + laptop)
# Drone 1: 192.168.168.11 (mesh radio on companion)
# Drone 2: 192.168.168.12
# Drone 3: 192.168.168.13
# Each drone runs mavlink-router forwarding to GCS:
# Drone 1: mavlink-routerd -e 192.168.168.1:14551 /dev/ttyUSB0:921600
# Drone 2: mavlink-routerd -e 192.168.168.1:14552 /dev/ttyUSB0:921600
# Drone 3: mavlink-routerd -e 192.168.168.1:14553 /dev/ttyUSB0:921600
# QGC: Add 3 comm links → UDP 14551, 14552, 14553
# Each drone appears as a separate vehicle in QGC
# Video: each drone streams to different port
# Drone 1 → :5601, Drone 2 → :5602, Drone 3 → :5603Swarm
Bandwidth reality check: A Doodle Labs Mini at 20MHz bandwidth gives ~12 Mbps usable throughput. H.264 720p30 at 2 Mbps eats 17% of that per drone. Three drones streaming = 50% of your mesh bandwidth on video alone. Plan accordingly — lower bitrate, use H.265, or stream only from the active ISR drone.
Back to Implementation Guides