ForgeMesh Networking
All Guides
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
FeatureDoodle LabsSilvusMicrohardPersistent Systems
OSOpenWRT (Linux)Custom LinuxCustomCustom Linux
Mesh Protocolbatman-adv (L2)Custom TDMA MACOFDM P2P/MeshWave Relay
SSH AccessYes (root)LimitedNoNo
Frequency900MHz–6GHz1.2–6GHz900MHz/2.4GHz1.2–6GHz
Drone SizeMini fits 5"SC4200 fits 10"+pMDDL fits 7"MPU5 fits 10"+
Approx Price$1.5K–$5K$5K–$15K$1K–$3K$8K–$20K
Best ForCustomizable, R&DDefense, high-throughputBudget, P2P linksLarge-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