1. PX4飞控光流模块配置全指南
上周调试一台室内无人机时,发现GPS信号在建筑内完全失效,机身像喝醉似的到处飘移。这时我想起抽屉里吃灰半年的光流模块——这个小东西能让无人机在无GPS环境下实现厘米级定位。今天就把完整的PX4光流配置经验分享给大家,包含从硬件选型到参数调试的全流程。
光流模块通过分析连续图像中的像素位移来计算机体运动状态,相当于给无人机装上了"电子复眼"。在室内、隧道等GPS拒止环境中,它能与惯性测量单元(IMU)形成互补:IMU负责短时高频的姿态稳定,光流提供低频但绝对的位置参考。目前主流的光流传感器如PX4FLOW、HereFlow等,价格从几百到上千元不等,区别主要在于分辨率、帧率和算法优化程度。
2. 硬件选型与连接方案
2.1 常见光流模块对比
去年测试过市面上五款主流光流传感器,这里用表格对比关键参数:
| 型号 | 分辨率 | 帧率(FPS) | 测距方式 | 接口类型 | 实测精度 |
|---|---|---|---|---|---|
| PX4FLOW | 752x480 | 60 | 超声波 | I2C | ±3cm |
| HereFlow | 320x240 | 120 | 激光雷达 | UART | ±1cm |
| OpenMV | 640x480 | 30 | 无 | USB | ±5cm |
| PMW3901 | 128x128 | 250 | 无 | SPI | ±10cm |
| 某国产模块 | 320x240 | 60 | 超声波 | UART | ±8cm |
提示:预算有限可选PMW3901,追求精度推荐HereFlow。注意超声波测距在柔软表面(如地毯)误差会增大。
2.2 硬件连接实操
以HereFlow连接Pixhawk 4为例:
- 使用6P杜邦线连接模块与飞控:
- 红线→5V电源
- 黑线→GND
- 白线→TELEM2的RX
- 绿线→TELEM2的TX
- 给光流模块安装减震海绵,我用3M VHB双面胶效果不错
- 确保模块与地面垂直,倾斜角度会导致位置估算漂移
- 在QGroundControl中检查传感器是否被识别
曾有个坑:某次接错线序导致模块发热冒烟,后来养成了用万用表先测通断的习惯。
3. 软件配置全流程
3.1 固件参数设置
连接地面站后,按步骤修改这些关键参数:
bash复制# 启用光流融合
EKF2_AID_MASK = 8 # 使用optical flow
SENS_EN_PX4FLOW = 1 # 启用光流传感器
# 校准参数
FLOW_ROT = 0 # 模块安装方向(0-7对应不同旋转角度)
FLOW_FX = 35.0 # 焦距(mm)需根据实际镜头填写
FLOW_MIN_HGT = 0.3 # 最小工作高度(米)
FLOW_MAX_HGT = 3.0 # 最大工作高度(米)
注意:FLOW_FX参数必须准确!我曾用错值导致无人机"跳探戈",可用棋盘格标定法获取精确值。
3.2 传感器校准技巧
- 在QGC的"传感器校准"页面选择"光流校准"
- 将无人机放在平整的纹理丰富表面(如木纹桌)
- 缓慢平移无人机完成校准,避免快速移动或旋转
- 检查校准质量指标:
- Innovation variance应<0.1
- 重投影误差应<0.5像素
有个实用技巧:在校准前用砂纸轻微打磨光滑表面,增加纹理特征点。
4. 飞行测试与调参
4.1 首次试飞步骤
- 在2米高度内手动模式测试:
bash复制MPC_POS_MODE = 3 # 启用位置保持 - 观察QGC的"光流健康状态":
- flow_quality > 80%为良好
- innovation_test_ratio应<1.0
- 缓慢推杆测试位置锁定效果
4.2 PID调参经验
光流主要影响水平位置控制,建议调整这些参数:
bash复制# 增加P增益提高响应速度
MPC_XY_P = 1.2 # 默认0.8
# 降低I增益防止震荡
MPC_XY_I = 0.1 # 默认0.3
# 根据重量调整D增益
MPC_XY_D = 0.2 # 默认0.0
调试时遇到过典型问题:无人机像溜冰一样停不下来,最后发现是地面反光太强导致特征点追踪失败,贴个磨砂膜解决。
5. 常见问题排查手册
5.1 故障现象与解决方案
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 位置保持时持续漂移 | 地面纹理单一 | 铺设棋盘格或增加地面纹理 |
| 高度突然变化 | 超声波受干扰 | 关闭附近电器或改用激光测距 |
| 光流数据时有时无 | 线缆接触不良 | 重新插拔并检查连接器 |
| 创新值(innovation)过高 | 焦距参数错误 | 重新校准FLOW_FX |
| 模块发热严重 | 电源接反 | 立即断电检查线序 |
5.2 地面站日志分析
遇到异常时,用ulogviewer工具检查:
- 关注estimator_status.flow_test_ratio指标
- 检查vehicle_optical_flow.quality值
- 对比flow和imu的velocity估计是否一致
有次发现Z轴持续漂移,日志显示是超声波被窗帘干扰,改用纯光流模式(设置EKF2_HGT_MODE=2)后解决。
6. 进阶应用场景
6.1 多传感器融合配置
在复杂环境中可组合使用:
bash复制EKF2_AID_MASK = 24 # 光流+视觉里程计
EKF2_HGT_MODE = 3 # 使用测距仪高度
6.2 室内自主飞行实现
配合激光雷达避障:
- 设置安全高度:
bash复制MIS_TAKEOFF_ALT = 1.5 # 起飞高度(米) MPC_LAND_ALT1 = 0.3 # 第一阶段降落高度 - 配置光流失效保护:
bash复制COM_OF_LOSS_T = 5 # 超时时间(秒) COM_POS_FS_DELAY = 3 # 触发失效保护延迟
去年用这套配置在仓库做自动盘点,连续飞行4小时未发生定位丢失。关键点是要定期清洁镜头——灰尘积累会让精度逐渐下降。
