UM982 DIY Guide: Building a Centimeter-Level RTK Positioning System for Drones
Complete hands-on guide to building a dual-antenna RTK system with UM982 — hardware selection, firmware configuration, base station setup, Pixhawk integration, and flight testing.
When your drone requires centimeter-level positioning accuracy, traditional GPS modules fall short. The UM982 — a high-precision RTK module supporting five GNSS systems across full frequency bands — is redefining what's possible in consumer and prosumer drone positioning. This guide walks you through building a complete dual-antenna RTK system from scratch: hardware selection, firmware configuration, base station deployment, and flight testing.
1. Hardware Selection & System Architecture
Before deploying RTK on a drone, understand the UM982's core advantages. This 16×21mm module integrates 1408 super channels, simultaneously receiving multi-frequency signals from BDS, GPS, GLONASS, Galileo, and QZSS. Full-frequency support delivers three key real-world benefits:
- Multi-path interference rejection: L5/E5 band signals penetrate more effectively, providing greater stability in urban environments
- Fast convergence: Multi-frequency observation combinations accelerate ambiguity resolution — initialization time <5 seconds
- Redundant backup: Automatically switches satellite systems when one is interfered with
Recommended hardware configuration:
| Component | Example Model | Key Parameters | Budget Range |
|---|---|---|---|
| UM982 Module | UM982C | CAN interface support | $100 |
| Primary Antenna | ATGM332D-5N31 | RHCP, 3dB gain | $50 |
| Secondary Antenna | ATGM332D-5N32 | Phase center stability <1mm | $50 |
| RTK Base Station | HPL-EVK 5.0 | 4G data link support | $900 |
| Flight Controller | Pixhawk 4 | CAN interface | $120 |
Circuit connection considerations:
- Main antenna interface: Use 50Ω impedance‑matched IPEX‑to‑SMA cable
- UART1: Configure at 115200 bps for NMEA message output
- CAN bus: Requires 120Ω termination resistor
- Power supply: Add π‑type filter circuit (10μF + 0.1μF)
# UM982 pin definition example (48‑pin LGA package)
PIN_MAP = {
'VCC': (1, '3.3V±5%', '500mA max'),
'GND': (2, 'Ground', ''),
'UART1_TX': (3, 'LVTTL', 'default 115200 bps'),
'UART1_RX': (4, 'LVTTL', 'firmware upgrade'),
'ANT1': (5, 'Primary antenna', '50Ω impedance'),
'ANT2': (6, 'Secondary antenna', '50Ω impedance'),
'CAN_H': (7, 'CAN bus', 'requires 120Ω termination'),
'CAN_L': (8, 'CAN bus', '')
}
2. Firmware Configuration & RTK Operating Modes
The UM982 supports three high‑precision positioning modes. For DIY projects, we recommend the mobile station + local base station combination. In‑depth configuration is available through the SDK toolchain.
Key configuration steps:
- Flash the latest firmware (usually distributed as a
.binfile) - Set satellite system weighting — BDS+GPS dual‑system is optimal
- Configure RTCM3.2 differential protocol output
- Enable dual‑antenna heading algorithm
- Set IMU coupling mode (when connected to a flight controller)
# u-center configuration example
$ u-center -p /dev/ttyACM0 -b 115200
> CFG-MSG,RTCM1074,1,1 # Enable GPS MSM4
> CFG-MSG,RTCM1084,1,1 # Enable GLONASS MSM4
> CFG-MSG,RTCM1094,1,1 # Enable Galileo MSM4
> CFG-NAV5,1,0x03 # Enable flight mode
Base station deployment essentials:
- Place the antenna in an open, unobstructed area
- Use a tripod and precisely measure the antenna phase center
- Differential data can be transmitted via 4G or LoRa wireless link
- Recommend using RTKLIB's
str2strtool for data forwarding
3. Dual‑Antenna Heading Calibration & Flight Controller Integration
A dual‑antenna system achieves heading accuracy of 0.1° with a 1‑meter baseline — significantly better than the 1° accuracy typical of magnetic compasses. Follow the calibration process carefully:
Mechanical calibration:
- Ensure the line connecting the two antennas is parallel to the drone's longitudinal axis
- Use a laser level to measure mounting flatness
- Record the relative position of the antenna phase centers
Software calibration:
- Collect 30 minutes of raw observation data in static conditions
- Analyze carrier phase residuals using
RTKPLOT - Compensate for antenna delay differences
// ArduPilot driver snippet for UM982
void AP_GPS_UM982::inject_data(const uint8_t *data, uint16_t len)
{
if (uart == nullptr) return;
uart->write("$PUBX,00*33\r\n"); // Send synchronization header
for (uint16_t i=0; i<len; i++) {
uart->write(data[i]);
if (data[i] == '\n') {
uart->write('\r');
}
}
}
Key parameters for Pixhawk integration:
EKF2_GPS_TYPE = 1 # Enable GPS heading
EKF2_GPS_POS_X = 0.15 # Primary antenna X offset (m)
EKF2_GPS_POS_Y = 0 # Primary antenna Y offset (m)
EKF2_GPS_POS_Z = -0.1 # Primary antenna Z offset (m)
GPS_YAW_OFFSET = 0 # Heading compensation angle (deg)
4. Troubleshooting & Performance Optimization
Based on real flight tests, here are common issues and their solutions:
| Issue | Possible Cause | Diagnostic Method | Solution |
|---|---|---|---|
| RTK not fixed | Base station data latency | Check RTKSTATUS message |
Switch to TCP transport |
| Heading jumps | Multipath interference | Analyze GPGSV SNR |
Add ground plane |
| Position drift | Ionospheric disturbance | Compare dual‑frequency observations | Enable IONEX correction |
| Slow cold start | Outdated ephemeris | Check AID-EPH
|
Configure automatic EPH update |
Performance optimization tips:
- In
UBX-CFG-NAV5, set dynamic platform mode to "Airborne <2g" - Enable
DGNSSsmoothing to improve standalone positioning accuracy - Configure
UBX-CFG-ITFManti‑jamming threshold (recommended value: 40 dB) - Monitor RF front‑end status via
UBX-MON-RF
For agricultural drones requiring centimeter‑level accuracy, adopt the following flight strategy:
- Achieve RTK fixed solution before takeoff
- Keep base station distance to operating area <10 km
- Fly at least 3× obstacle height
- Regularly check carrier phase lock status
# Real‑time monitoring script example
import serial
from ubx import UBXManager
def check_rtk_status():
ser = serial.Serial('/dev/ttyACM0', 115200)
ubx = UBXManager(ser)
while True:
msg = ubx.poll('NAV-STATUS')
if msg['flags']['rtkFixed']:
print(f"RTK fixed solution | Accuracy: {msg['hAcc']} cm")
else:
print(f"Float solution | Accuracy: {msg['hAcc']} cm")
5. Hardware Support & Resources
Ready to start building? This development platform provides testing software, application manuals, and rapid project setup:
All product names, trademarks, and registered trademarks are the property of their respective owners. Specifications and performance figures based on field testing and publicly available documentation. Actual results may vary depending on environmental conditions, antenna quality, and integration practices.