Drobotics logo DROBOTICSTechnical Library

Drone Guide

无人机与无人车系统调试手册

All Drone
无人机与无人车系统调试手册 | 完整现场故障排查指南

无人机与无人车系统调试手册

完整现场故障排查指南 · Windows · LQ3 · 树莓派 · Pixhawk · MAVLink

无人机 无人车 MAVLink LQ3 网络 故障排查
1. 文档目的

本文档说明如何在现场调试无人机和无人车系统。它不涉及仪表板界面,而是聚焦于实际车辆系统:

  • Windows 地面站
  • LQ3 通信网络
  • 无人车上的树莓派 4B
  • Pixhawk 飞控
  • ArduPilot / ArduCopter / ArduRover
  • MAVProxy 或 MAVLink 桥接
  • 无人车 UDP 电机代理
  • STM32 电机控制器
  • GPS 和 EKF 就绪状态
  • 摄像头视频流
当无人机无法解锁、无人车无法移动、GPS 丢失、MAVLink 心跳丢失或视频/网络不稳定时,请使用本指南。
2. 系统架构
无人机路径
Windows PC 任务脚本 | | MAVLink UDP | LQ3 / 网络 | | 无人机 Pixhawk | | ArduCopter | | 无人机电机
典型无人机任务流程:
心跳 → GPS OK → EKF OK → GUIDED 模式 → 解锁 → 起飞 → 前进速度指令 → 降落
无人车路径
Windows PC 任务脚本 | | MAVLink UDP | 无人车 Pixhawk | | 仅 GPS / EKF 状态
Windows PC 任务脚本 | | UDP 命令,端口 15000 | 树莓派 4B rover_agent.py | | USB 串口 | STM32 电机控制器 | | 无人车电机
无人车 Pixhawk: 用于心跳、GPS 和 EKF 就绪状态。
无人车电机: 不由 Pixhawk 驱动。命令通过树莓派 UDP 发送到 STM32 电机控制器。

典型无人车任务流程:
Pixhawk 心跳 → GPS OK → EKF OK → 无人车代理 UDP Ping OK → 任务开始同步 → UDP 移动命令 → STM32 串口电机命令 → 停止命令
3. 重要 IP 地址和端口
通用网络
Windows PC LQ3 侧 IP:192.168.1.234
Mac 调试 IP:192.168.1.10
典型子网:192.168.1.0/24
网关:192.168.1.1
无人车示例
ROVER_1 树莓派 IP:192.168.1.101
ROVER_2 树莓派 IP:192.168.1.102
ROVER_3 树莓派 IP:192.168.1.103
无人车 UDP 电机端口:15000
MAVLink 端口
DRONE_1:UDP 14501,sysid 1
DRONE_2:UDP 14502,sysid 2
DRONE_3:UDP 14503,sysid 3

ROVER_1:UDP 14511,sysid 11
ROVER_2:UDP 14512,sysid 12
ROVER_3:UDP 14513,sysid 13
UDP 端口和车辆 SYSID 必须与脚本配置匹配。
4. 现场调试顺序
电源 | 网络 | SSH | MAVLink 心跳 | GPS / EKF | 无人车代理 | 电机运动 | 完整任务
警告 不要从完整任务脚本开始。先逐层测试。
5. 电源检查
无人机
  • 飞行电池已连接
  • Pixhawk 已供电
  • GPS 模块 LED 亮起
  • 遥测 / LQ3 链路已供电
  • 电调已供电
  • 室内测试时拆除螺旋桨
  • 仅室外飞行测试时安装螺旋桨
无人车
  • 树莓派已供电
  • Pixhawk 已供电
  • STM32 电机控制器已供电
  • 电机电池已连接
  • 树莓派到 STM32 的 USB 线已连接
  • 如 MAVProxy 桥接在树莓派上运行,树莓派到 Pixhawk 的 USB 线已连接
  • 首次电机测试时抬高无人车轮子
6. 网络调试
检查树莓派 IP 地址
ip addr hostname -I ip route
预期:eth0 有 192.168.1.xxx,如 LQ3 为主要链路,默认路由使用 eth0。
如果 hostname -I 为空,树莓派没有活动的 IP 地址。
检查 Netplan
cat /etc/netplan/01-uav.yaml
network: version: 2 ethernets: eth0: optional: true dhcp4: no addresses: - 192.168.1.102/24 gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] wifis: wlan0: optional: true dhcp4: no
sudo netplan generate sudo netplan apply ip addr ip route
警告 重要:
addresses 缩进必须正确
gateway4 应与 addresses 对齐
• 不要将 gateway4 放在地址列表内部
Ping 测试
# 从 Windows ping 192.168.1.102 # 从树莓派 ping -c 3 192.168.1.234
如果 ping 失败:检查 LQ3 电源 · 网线 · IP 地址 · 子网 · Windows 防火墙 · IP 地址冲突
7. SSH 调试
# 从 Windows ssh ubuntu@192.168.1.102 # 如果密码登录被禁用 ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no ubuntu@192.168.1.102
# 在树莓派上 sudo vim /etc/ssh/sshd_config
有用的设置:
PasswordAuthentication yes
PubkeyAuthentication yes
KbdInteractiveAuthentication yes
sudo systemctl restart ssh
8. MAVLink 心跳调试
py -c "from pymavlink import mavutil; m=mavutil.mavlink_connection('udpin:0.0.0.0:14512'); print('等待心跳'); m.wait_heartbeat(); print('sysid', m.target_system, 'compid', m.target_component)"
预期:等待心跳 → sysid 12 compid 0
如果无心跳:确认 MAVProxy 服务 · UDP 输出 IP · Windows IP · 端口 · Pixhawk USB · Pixhawk 已供电 · ArduPilot 已启动
9. MAVProxy 桥接调试
sudo systemctl status mavlink-router.service sudo systemctl status mavproxy.service journalctl -u mavlink-router.service -n 50 --no-pager
mavproxy.py \ --master=/dev/serial/by-id/usb-ArduPilot_fmuv2_xxxxx-if00 \ --baudrate=115200 \ --out=udp:192.168.1.234:14512
ls -l /dev/serial/by-id/
使用稳定的 USB 路径。如果连接了多个 USB 设备,不要依赖 /dev/ttyACM0/dev/ttyACM1
10. GPS 调试
py -c "from pymavlink import mavutil; m=mavutil.mavlink_connection('udpin:0.0.0.0:14512'); m.wait_heartbeat(); print('heartbeat', m.target_system); while True: msg=m.recv_match(type='GPS_RAW_INT', blocking=True, timeout=2) if msg: print('fix', msg.fix_type, 'sats', msg.satellites_visible, 'eph', msg.eph)"
良好 GPS:fix_type >= 3 · 卫星 >= 8 · HDOP 低,最好低于 2.0
如果 GPS 未被检测到:检查 GPS 线缆 · GPS 端口 · 波特率 · 串口协议 · GPS 模块电源 LED · 移到室外 · 等待几分钟首次锁定
Pixhawk 2.4.8 常见 GPS 串口设置:
SERIAL3_PROTOCOL = GPS
SERIAL3_BAUD = 115200 或 38400
GPS_TYPE = Auto
如果罗盘被检测到但 GPS 未被检测到,说明 I2C 罗盘工作而 UART GPS 不工作。检查 GPS UART 线缆、端口、波特率或 GPS 协议。
11. EKF 调试
任务通过检查 GLOBAL_POSITION_INT 等待 EKF 位置。
如果 GPS 有定位但 EKF 未就绪:在室外等待更长时间 · 检查罗盘校准 · 加速度计校准 · EKF 原点 · 车辆不在室内 · ArduPilot 预解锁警告
在 Mission Planner 中:消息选项卡 · 状态选项卡 · EKF 标志 · 预解锁消息
12. 无人机调试
无人机心跳测试
py -c "from pymavlink import mavutil; m=mavutil.mavlink_connection('udpin:0.0.0.0:14503'); m.wait_heartbeat(); print('connected sysid', m.target_system)"
无人机模式测试
master.set_mode_apm("GUIDED") master.set_mode_apm("STABILIZE") # 室内无桨电机测试
无人机解锁测试
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 )
如果无人机无法解锁:预解锁消息 · GUIDED 任务的 GPS · 安全开关 · 遥控器校准 · 加速度计校准 · 罗盘校准 · 电池失效保护 · 有效模式
无人机前进运动
距离 = 速度 × 时间
示例:
0.2 m/s × 30 秒 ≈ 6 米
0.2 m/s × 50 秒 ≈ 10 米
0.5 m/s × 20 秒 ≈ 10 米
send_velocity(master, 0.2, 0, 0)
这是机身坐标系速度指令,不是真正的 GPS 航点任务。
13. 无人车调试
无人车有两个独立系统:
Pixhawk: GPS / EKF / 心跳
树莓派 + STM32: 电机控制
两者都必须工作。
无人车 Pixhawk 心跳
py -c "from pymavlink import mavutil; m=mavutil.mavlink_connection('udpin:0.0.0.0:14512'); m.wait_heartbeat(); print('rover sysid', m.target_system)"
无人车代理服务
sudo systemctl status acker-rover.service journalctl -u acker-rover.service -n 50 --no-pager
无人车代理手动运行
sudo systemctl stop acker-rover.service python3 ~/acker_rover/rover_agent.py
[ROVER] Connecting STM32...
[ROVER] STM32 OK
[ROVER] STOP
[ROVER] UDP listening on 0.0.0.0:15000
无人车 UDP Ping
py -c "import socket,json; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.settimeout(2); s.sendto(json.dumps(dict(cmd='ping')).encode(),('192.168.1.102',15000)); print(s.recvfrom(4096))"
预期:{"ok": true, "status": "alive"}
无人车移动测试
py -c "import socket,json; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.settimeout(2); s.sendto(json.dumps(dict(cmd='move',x=200,z=0,duration=2)).encode(),('192.168.1.102',15000)); print(s.recvfrom(4096))"
py -c "import socket,json; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.settimeout(2); s.sendto(json.dumps(dict(cmd='stop')).encode(),('192.168.1.102',15000)); print(s.recvfrom(4096))"
如果 UDP 回复说正在移动但轮子不转:STM32 USB 路径错误 · STM32 固件卡死 · 电机电池关闭 · 需要重启电机控制器 · 串行命令格式错误 · USB 串口设备错误
14. STM32 串口调试
ls -l /dev/serial/by-id/
预期电机控制器路径:
usb-1a86_USB_Single_Serial_xxxxx-if00
usb-WCH.CN_USB_Single_Serial_xxxxx-if00
python3 -c 'import serial,time; ser=serial.Serial("/dev/serial/by-id/usb-1a86_USB_Single_Serial_5C2C061781-if00",115200,timeout=1); f=bytes.fromhex("7B 00 00 00 64 00 00 00 00 1F 7D"); s=bytes.fromhex("7B 00 00 00 00 00 00 00 00 7B 7D"); print("forward"); ser.write(f); ser.flush(); time.sleep(2); print("stop"); ser.write(s); ser.flush(); ser.close()'
如果无反应:重启 STM32 · 重新插拔 USB · 检查电源 · 检查正确的 /dev/serial/by-id · 检查是否有其他进程占用串口
sudo lsof /dev/ttyACM0
15. 摄像头流调试
lsusb ls -l /dev/video* python3 -c "import cv2; cap=cv2.VideoCapture('/dev/video0'); print('opened', cap.isOpened()); ret, frame=cap.read(); print('ret', ret, 'shape', None if frame is None else frame.shape); cap.release()"
预期:opened True · ret True · shape (480, 640, 3)
python3 -m pip install --user flask opencv-python-headless python3 capture_video.py
打开:http://PI_IP:8080/video
LQ3 低带宽设置:WIDTH=128 · HEIGHT=96 · FPS=3 · JPEG_QUALITY=20
16. 紧急停止
# 停止无人车代理任务 py -c "import socket,json; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.settimeout(2); s.sendto(json.dumps(dict(cmd='stop')).encode(),('192.168.1.102',15000)); print(s.recvfrom(4096))" # 停止无人车服务 sudo systemctl stop acker-rover.service # 通过 MAVLink 解除无人机锁定 master.mav.command_long_send(... 0, 0, 0, 0, 0, 0, 0, 0) # 杀死运行中的 Python 任务 pkill -f mission_script_name.py # 杀死摄像头流 pkill -SIGTERM -f capture_video.py
17. 常见问题与解决方案
问题解决方案
MAVLink 心跳丢失检查 UDP 端口、Windows IP、Pixhawk USB、MAVProxy 服务、LQ3 链路、防火墙
SYSID 不匹配修改脚本中的 expected_sysidSYSID_THISMAV 参数
GPS fix_type 1,卫星 0移到室外,等待更长时间,检查天线方向、GPS 接线
罗盘检测到但 GPS 未检测到检查 GPS UART 线缆、串口、波特率、SERIALx_PROTOCOL = GPS
无人车 UDP 说移动但轮子不转检查 STM32 电源、电机电池、USB 串口路径、无人车代理日志、重启 STM32
Ctrl+C 无法停止脚本使用 STOP_EVENT、超时循环、信号处理器、解除所有 MAVLink 主机锁定
无人机无法解锁检查预解锁消息:GPS、罗盘、加速度计、安全开关、遥控器校准、电池失效保护、模式
LQ3 视频卡顿降低分辨率、帧率、JPEG 质量;使用一个高分辨率流;使用低分辨率缩略图
通过 18. 任务前检查清单
[ ] 所有车辆电池已充电 [ ] 仅室外安装螺旋桨 [ ] 无人车轮子已清理 [ ] LQ3 已连接 [ ] Windows 具有正确的 LQ3 IP [ ] 所有 Pixhawk 已供电 [ ] MAVProxy 服务正在运行 [ ] MAVLink 心跳已确认 [ ] GPS 定位已确认 [ ] EKF / 全局位置已确认 [ ] 无人车代理正在运行 [ ] 无人车 UDP Ping 工作 [ ] 无人车移动测试工作 [ ] 紧急停止已测试
19. 推荐调试命令速查
# 树莓派网络 ip addr; ip route; hostname -I; cat /etc/netplan/01-uav.yaml # 树莓派 USB 设备 lsusb; ls -l /dev/serial/by-id/; ls -l /dev/video* # 树莓派服务 sudo systemctl status acker-rover.service sudo systemctl status mavlink-router.service journalctl -u acker-rover.service -n 50 --no-pager journalctl -u mavlink-router.service -n 50 --no-pager # Windows Ping ping 192.168.1.102 # Windows MAVLink 心跳 py -c "from pymavlink import mavutil; m=mavutil.mavlink_connection('udpin:0.0.0.0:14512'); print('waiting'); m.wait_heartbeat(); print(m.target_system, m.target_component)" # Windows 无人车 UDP Ping py -c "import socket,json; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.settimeout(2); s.sendto(json.dumps(dict(cmd='ping')).encode(),('192.168.1.102',15000)); print(s.recvfrom(4096))" # Windows 无人车移动 py -c "import socket,json; s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM); s.settimeout(2); s.sendto(json.dumps(dict(cmd='move',x=200,z=0,duration=2)).encode(),('192.168.1.102',15000)); print(s.recvfrom(4096))"
20. 最终说明
最重要的原则是逐层调试
对于无人机,MAVLink 直接控制车辆。

对于无人车,MAVLink 检查 GPS/EKF,但树莓派 UDP 控制电机。

因此,无人车可能有良好的 GPS 但仍然无法移动,如果无人车代理、STM32、电机电池或串口路径不工作。

同样,无人车可以手动移动但仍然无法完成 GPS 任务,如果 Pixhawk GPS 或 EKF 未就绪。

平台:Windows · LQ3 · 树莓派 4B · Pixhawk · ArduPilot · MAVLink
(c) 卓博泰科技 · 无人机与无人车系统调试手册