PX4 视觉导航技能
用于配置和使用基于视觉的定位、导航和避障功能
何时使用
当需要以下帮助时使用此技能:
- 配置光流定位
- 设置视觉里程计
- 配置激光雷达避障
- 实现室内自主飞行
快速参考
光流定位
QGC → Sensors → Optical Flow
→ 安装下视相机
→ 配置传感器
视觉里程计
# 使用 VIO
EKF2_AID_MASK |= 0b0010 # 启用视觉位置融合
# 配置视觉源
EKF2_EV_PRIO # 视觉优先级
EKF2_EV_DELAY # 视觉延迟
光流配置
支持的传感器
| 传感器 | 接口 | 说明 |
|---|---|---|
| PX4FLOW | I2C | 官方光流模块 |
| PMW3901 | SPI | 鼠标传感器 |
| OA500VM | Serial | 成品光流模块 |
配置步骤
安装传感器
- 朝下安装
- 确保视野无遮挡
QGC 配置
QGC → Sensors → Optical Flow → 点击 "Start Setup" → 按照提示校准
参数
# 启用光流
EKF2_OF_CTRL = 1
# 光流参数
EKF2_OF_PRIO # 光流优先级
EKF2_OF_QMIN # 光流质量最小值
# 测距仪参数 (必需)
EKF2_RNG_AID # 启用测距融合
RNGFND_MAX_CM # 最大测距范围
视觉里程计 (VIO)
ROS 2 + VIO 设置
# 1. 安装 VIO 软件
# 例如: VINS-Fusion, OKVIS, etc.
# 2. 配置 MAVROS
# 发布视觉里程计到 /mavros/odometry/out
# 3. PX4 配置
EKF2_AID_MASK |= 0b0010 # 视觉位置
EKF2_EV_DELAY = 0 # 视觉延迟
# 4. 启用估计器
EKF2_HGT_MODE = 2 # 使用视觉高度
VIO 参数
# 视觉位置融合
EKF2_EV_PRIO = 50 # 优先级
# 视觉速度融合
EKF2_EV_VELO_PRIO = 50
# 外部位置重置
EKF2_EV_RESET_YAW = 1 # 允许重置航向
激光雷达/测距仪
支持的传感器
| 类型 | 型号 | 接口 |
|---|---|---|
| 声学测距 | MaxBotix | Serial |
| 超声波 | SRF02/HC-SR04 | I2C |
| TOF 激光 | TFmini, TF-Luna | Serial |
| 激光雷达 | RPLidar, LEO | Serial |
配置
# 选择传感器类型
RNGFND_TYPE = 5 # 对应型号
# 配置参数
RNGFND_MAX_CM = 500 # 最大范围 (cm)
RNGFND_MIN_CM = 50 # 最小范围
RNGFND_QUALITY = 50 # 最小质量
# 测距融合
EKF2_RNG_AID = 1 # 启用测距辅助
避障功能
基于测距仪的避障
# 启用避障
OBS_CTRL = 1
# 障碍物检测范围
OBS_R_MAX = 5 # 前向检测范围 (m)
OBS_R_MIN = 0.5 # 最小检测距离
# 避障策略
OBS_TYPE = 1 # 1=停止, 2=绕行
EKF 障碍物融合
# 在 EKF 中使用距离数据
EKF2_RNG_AID = 1
# 调整噪声参数
EKF2_RNG_NOISE = 0.1
室内定位方案
推荐方案
| 方案 | 适用场景 | 精度 |
|---|---|---|
| 光流 + 测距 | 简单室内 | 10-30cm |
| VIO | 复杂环境 | 1-5cm |
| UWB | 大范围室内 | 10-30cm |
| AprilTag | 已知环境 | 1-5cm |
室内飞行配置
# 1. 禁用 GPS
EKF2_GPS_CTRL = 0
# 2. 启用视觉/光流
EKF2_AID_MASK = 0b0111
# 3. 设置高度源
EKF2_HGT_MODE = 3 # 视觉/测距
# 4. 调整参数
EKF2_NOAID_NOISE = 0.5 # 增加无GPS噪声
常见问题
光流不工作
- 检查安装方向
- 检查地面纹理
- 确认测距仪数据
- 检查 EKF 配置
VIO 漂移
- 校准相机内参
- 检查时间同步
- 调整延迟参数
- 检查 IMU 外参
避障不触发
- 检查传感器数据
- 调整检测距离参数
- 确认障碍物大小
- 检查模式设置