Drobotics logo DROBOTICSTechnical Library

Drone Guide

双无人机室内通信验证测试 | LQ3 网络 + pymavlink 多机控制

All Drone

双无人机室内通信验证测试

LQ3 网络 · pymavlink · 单地面站同时控制两架无人机

LQ3 数传链路 双机独立 SYSID (2 & 3) UDP 端口转发 (14552 / 14553) 多线程控制 通过 室内安全测试 (无桨叶)
测试目标

验证单个 Windows 地面站能否通过 LQ3 网络同时控制两架无人机(使用 pymavlink)。

测试范围(非飞行测试):
通过 MAVLink 转发(两路树莓派)
通过 独立飞行器识别(SYSID)
通过 同时执行命令
通过 多机通信架构验证
警告 为安全起见,所有螺旋桨均已拆除。
最终网络架构
地面站 (Windows PC)
IP 地址:192.168.1.234
运行:Python · pymavlink · Mission Planner (可选)
无人机 1
树莓派 IP:192.168.1.122
Pixhawk SYSID:2
MAVLink 转发 → Windows UDP 端口 14552
无人机 2
树莓派 IP:192.168.1.123
Pixhawk SYSID:3
MAVLink 转发 → Windows UDP 端口 14553
通信拓扑
Windows PC 192.168.1.234 | ---------------- | | Port14552 Port14553 | | Drone1 Drone2 SYSID=2 SYSID=3 | | Pi 192.168.1.122 Pi 192.168.1.123 | | Pixhawk Pixhawk
MAVLink 转发配置
Drone 1 (RPi 192.168.1.122)
{ "IP":"127.0.0.1", "port":14550 }, { "IP":"192.168.1.234", "port":14552 }
Drone 2 (RPi 192.168.1.123)
{ "IP":"127.0.0.1", "port":14550 }, { "IP":"192.168.1.234", "port":14553 }
两路 MAVLink 流分别转发到 Windows 的不同 UDP 端口,实现双机独立识别与控制。
室内测试流程
连接 → STABILIZE → ARM → 等待 2 秒 → DISARM
不需要: GPS · EKF · 起飞 · 位置控制 · 速度指令 · 实际飞行
测试代码 (pymavlink 多线程)
#!/usr/bin/env python3 import time import threading from pymavlink import mavutil DRONES = [ {"name": "DRONE_1", "port": 14552}, {"name": "DRONE_2", "port": 14553}, ] def connect(name, port): print(f" [{name}] Connecting on UDP {port}") master = mavutil.mavlink_connection(f"udpin:0.0.0.0:{port}") master.wait_heartbeat() print(f"通过 [{name}] Connected: system={master.target_system}") return master def set_mode(master, mode, name): print(f" [{name}] Mode -> {mode}") master.set_mode_apm(mode) time.sleep(1) def arm(master, name): print(f" [{name}] Arming") master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM, 0, 1, 0,0,0,0,0,0 ) master.motors_armed_wait() print(f"通过 [{name}] Armed") def disarm(master, name): print(f" [{name}] Disarming") master.mav.command_long_send( master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM, 0, 0, 0,0,0,0,0,0 ) master.motors_disarmed_wait() print(f"通过 [{name}] Disarmed") def motor_test(drone): name = drone["name"] port = drone["port"] try: master = connect(name, port) set_mode(master, "STABILIZE", name) arm(master, name) print(f"⏳ [{name}] Motors spinning for 2 seconds...") time.sleep(2) disarm(master, name) print(f" [{name}] Test complete") except Exception as e: print(f"错误 [{name}] Error: {e}") def main(): threads = [] for drone in DRONES: t = threading.Thread(target=motor_test, args=(drone,)) threads.append(t) t.start() for t in threads: t.join() print(" BOTH DRONES TEST COMPLETE") if __name__ == "__main__": main()
通过 测试结果
通过 Drone 1 连接成功
通过 Drone 2 连接成功
通过 两路 MAVLink 转发正常工作
通过 Windows 同时接收两路 MAVLink 流
通过 SYSID 2 和 SYSID 3 正确识别
通过 两架无人机均接受命令
通过 STABILIZE 模式激活
通过 Arm 命令接受 · 电机响应
通过 Disarm 命令接受
意义
这是首次在单一 Windows 地面站上成功同时向两架无人机发送命令的测试。
Windows Ground Station ↓ LQ3 Network ↓ Raspberry Pi #1 | Raspberry Pi #2 ↓ ↓ Pixhawk #1 Pixhawk #2
本次测试验证了未来以下应用的通信架构:
通过 多无人机控制
通过 集群机器人 (Swarm Robotics)
通过 集中式任务执行
通过 ROS2 集群管理
通过 地面站自主控制

平台:Windows 10/11 · LQ3 数传 · Raspberry Pi 4B · Pixhawk 2.4.8 · pymavlink
(c) 卓博泰科技 · 双机通信验证报告