For some time I’ve wanted an affordable, easily scaled, relatively high-bandwidth telemetry system. I’ve tried several, the most performant of which was SIYI’s HM30, but it’s a little expensive and inflexible for my needs. I do recommend the HM30 if its feature set appeals to you.
Enter HaLow WiFi devices that plug into any existing LAN and act as transparent bridges. HaLow devices operate using IEEE 802.11ah on 915 MHz in the US and on 868 MHz in the EU. Fair warning - EU-compliant devices tend to be significantly less performant due to regulatory restrictions. I tested only the 915 MHz US version.
The sub-GHz frequency band and direct link between HaLow devices allow for long range (~500m over the ground), moderate bandwidth (up to ~20 Mbps) connections, tolerant of some obstruction. Max range can be increased significantly in ideal, direct LOS conditions (ground-to-air).
An Ethernet enabled autopilot is required to use HaLow bridges as described in this post. If you have a CAN port and free serial port on an H7 autopilot, the CubeNode ETH can be used in lieu of a native Ethernet port. HaLow bridges can also be easily configured to forward data between a companion computer and the GCS, but that is not covered here.
Hardware:
Power supply and wiring:
- The onboard HaLow bridge and network switch run on 5V DC at around 100–200 mA total. I powered them using a 5V BEC onboard the Rover.
- The IP camera uses 12V DC power and tolerates the dirty 13-14V from the onboard ICE charging system’s regulator just fine.
- The autopilot, onboard HaLow bridge, and the IP camera all connect to the network switch via standard Ethernet cables.
Antenna mounting:
- The multiband antennas showed about 1.5:1 VSWR on a low-cost spectrum analyzer. There are certainly higher-performance options available, but these worked well, and I have no plans to replace them.
- On the Rover, the antenna was mounted on an aluminum sun shield, which conveniently doubled as a ground plane.
- The GCS antenna was mounted on a fabricated ground plane near the ceiling on the first floor of a brick house. While this indoor placement was less than ideal, it provided easy access and served as a stress test. I plan to roof-mount it permanently in the future.
Range testing:
- For nearly direct line-of-sight testing, I mounted the camera and fixed antenna on top of a ladder, then drove around a rural, flat neighborhood with a laptop-connected bridge and antenna fixed to the roof of a car. Unfortunately, I didn’t get pictures of that goofy rig!
- Results showed usable video out to 200-300m, choppy video at 400-500m, and unreliable connection beyond that. Re-connection was seamless but usually required closing to within 250m to re-establish the HaLow link.
- I expect that a high-mounted outdoor antenna or ground-to-air application could increase the max usable range easily beyond 1km.
- In its current installed configuration, the video stream remains usable out to ~200 m, and I’ve never seen telemetry dropouts while operating within my typical 2-acre mowing area.
- I did briefly test the included “rubber duck” antennas, and performance was surprisingly only marginally worse than the higher gain antennas. I think they’d be quite viable on an airborne platform.
Telemetry data rate:
- The MAVLink 2 data rate is consistently ~2 kbps.
- Packet loss occurs in bursts and can sometimes exceed the rate of received packets at longer ranges, likely due to retransmission over the high-bandwidth link. MAVLink 2, including NTRIP forwarding, proved highly reliable, even when the packet loss rate appeared high or the link quality dropped below 20%. See notes below regarding video stream impact.
- Throughput was noticeably better than SiK radios and similar transport methods. Large flight plans or log files of a few MB transferred via MAVFTP within seconds. Very large log files were still somewhat problematic, and I recommend accessing those directly from the SD card.
Video stream:
- The Amcrest camera provides two configurable streams. I left one at the default 1080p configuration and modified the substream to H.264-encoded 480p.
- Amcrest’s own software appears to apply additional optimization, as video viewed through the camera’s web app looked sharper than the same stream played via VLC or GStreamer.
- Video streaming did increase packet loss rates, though the GCS link remained usable throughout testing. I did encounter some NTRIP dropouts when using my NTRIP Lua script to access an NTRIP stream directly while streaming telemetry and video. Switching to Mission Planner’s built-in NTRIP forwarding feature seemed to reduce bandwidth demand and resolved the issue. The Lua script remains very useful when video streaming is disabled.
NET_ Parameters:
These parameters configure an Ethernet-enabled autopilot to forward MAVLink 2 over UDP broadcast with a DHCP-assigned IP:
NET_DHCP,1
NET_ENABLE,1
NET_GWADDR0,<your>
NET_GWADDR1,<router's>
NET_GWADDR2,<ip>
NET_GWADDR3,<address>
NET_IPADDR0,<your>
NET_IPADDR1,<autopilot's>
NET_IPADDR2,<assigned>
NET_IPADDR3,<DHCP address>
NET_NETMASK,24
NET_OPTIONS,0
NET_P1_IP0,255
NET_P1_IP1,255
NET_P1_IP2,255
NET_P1_IP3,255
NET_P1_PORT,14550
NET_P1_PROTOCOL,2
NET_P1_TYPE,1
Tip: Set a static DHCP lease in your router so the autopilot always receives the same IP.
Mission Planner Video Streaming:
This configures Mission Planner to view the 480p substream.
- Right click on the HUD in Mission Planner
- Select Video->Set GStreamer Source
- Enter the following pipeline, substituting your camera’s username, password, and IP address as appropriate:
rtspsrc location="rtsp://admin:password@xxx.xxx.xxx.xxx:554/cam/realmonitor?channel=1&subtype=1" latency=20 udp-reconnect=1 timeout=0 do-retransmission=false ! application/x-rtp ! decodebin3 ! queue max-size-buffers=1 leaky=2 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink sync=false
To achieve the results pictured below, right click the HUD again and select Swap with Map. I’m also using @Eosbandi’s NextGen Messages plugin.
Note: the screenshot shows 4.7-dev firmware, but all features described here are available in ArduPilot’s current 4.6.2 stable release.
Additional bench testing:
- A CubeOrange+ with CubeNode ETH performed well and supports all features described here. Its throughput is somewhat limited compared to an autopilot with onboard Ethernet, but I don’t expect this to matter except for very large log downloads.
- If you encounter configuration issues, be sure to update the CubeNode ETH.
- A CUAV 7 Nano proved equally capable as the v6X. Its only limitation is fewer available physical ports, which does not affect network performance.
Many thanks to:
- ardupilot.org for sponsoring the HaLow hardware and camera
- CUAV for sponsoring the v6X and Nano 7+
- CubePilot for sponsoring the Cube Orange+ and CubeNode ETH and to @bugobliterator for direct configuration support
- @Swebre for the antenna type and sun shield/groundplane idea












