双无人机室内通信验证测试
LQ3 网络 · pymavlink · 单地面站同时控制两架无人机
LQ3 数传链路
双机独立 SYSID (2 & 3)
UDP 端口转发 (14552 / 14553)
多线程控制
通过 室内安全测试 (无桨叶)
测试目标
验证单个 Windows 地面站能否通过 LQ3 网络同时控制两架无人机(使用 pymavlink)。
测试范围(非飞行测试):
通过 MAVLink 转发(两路树莓派)
通过 独立飞行器识别(SYSID)
通过 同时执行命令
通过 多机通信架构验证
通过 MAVLink 转发(两路树莓派)
通过 独立飞行器识别(SYSID)
通过 同时执行命令
通过 多机通信架构验证
警告 为安全起见,所有螺旋桨均已拆除。
最终网络架构
地面站 (Windows PC)
IP 地址:
运行:Python · pymavlink · Mission Planner (可选)
192.168.1.234运行:Python · pymavlink · Mission Planner (可选)
无人机 1
树莓派 IP:
Pixhawk SYSID:2
MAVLink 转发 → Windows UDP 端口 14552
192.168.1.122Pixhawk SYSID:2
MAVLink 转发 → Windows UDP 端口 14552
无人机 2
树莓派 IP:
Pixhawk SYSID:3
MAVLink 转发 → Windows UDP 端口 14553
192.168.1.123Pixhawk 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 命令接受
通过 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 集群管理
通过 地面站自主控制
通过 多无人机控制
通过 集群机器人 (Swarm Robotics)
通过 集中式任务执行
通过 ROS2 集群管理
通过 地面站自主控制
平台:Windows 10/11 · LQ3 数传 · Raspberry Pi 4B · Pixhawk 2.4.8 · pymavlink
(c) 卓博泰科技 · 双机通信验证报告
(c) 卓博泰科技 · 双机通信验证报告