文章目录
4.4.1 使用 OpticalFlow 进行 EKF3 光源转换
前言
本文介绍了如何将 ModalAI VOXL-CAM 与 ArduPilot 配合使用,以替代 GPS,从而实现 Loiter、PosHold、RTL、Auto 等定位控制模式。
VOXL-CAM 中的 VOXL 电路板可以单独(individually )购买,作为配套计算机使用。此外,还可提供更新、功能更强大的 VOXL 2 配套计算机(VOXL 2 companion computer )。
!Note
ArduPilot 4.3(及更高版本)支持 VOXL 摄像头。
-
4.1 购买什么
- VOXL CAM + TOF Dev Kit
- Flight Controller Telemetry Cable
- Optionally an 8GB or larger SD Card
4.2 硬件设置
如上图所示,将 VOXL 摄像机连接到自动驾驶仪。在这些说明中使用的是自动驾驶仪的 Telem2 端口。
将 VOXL 摄像头安装在飞行器前部,使 Wifi 天线从摄像头底部伸出。
4.3 VOXL 摄像机配置
ModalAI’s VOX-CAM setup instructions here
让相机正常工作的最基本步骤包括:
- 在 Ubuntu 工作站上设置 adb(Setup adb);
- 将摄像机连接到 Ubuntu 工作站,启动 adb shell 并运行 voxl-configure-vision-px4(run voxl-configure-vision-px4)(注:当要求输入 IP 地址时,可直接按 <enter> 键);
- 运行“systemctl enable voxl-mavlink-server”配置 mavlink 服务器自动启动;
- 可选择运行“systemctl status voxl-vision-px4”(run “systemctl status voxl-vision-px4”)来检查 VOXL 是否正在生成良好的位置估计值。
4.4 自动驾驶仪配置
用地面站(如任务规划器)连接自动驾驶仪,检查是否设置了以下参数:
- SERIAL2_PROTOCOL = 2(MAVLink2)。请注意,这假定摄像机已连接到自动驾驶仪的“Telem2”端口;
- SERIAL2_BAUD = 921(921600 波特);
- 可选择设置 SERIAL2_OPTIONS = 1024(不转发 mavlink 至/从),禁止将摄像机的里程测量信息发送至 GCS;
- 可选择设置 SR2_EXTRA3 = 0,禁止向摄像机发送 SYSTEM_TIME 信息,因为已知 SYSTEM_TIME 会导致摄像机丢失位置估计值(例如,质量降为-1)。请注意,这需要将摄像机连接到自动驾驶仪的第二个 mavlink 端口(例如通常的 Telem2);
- VISO_TYPE = 3 (voxl);
- 将 VISO_POS_X、VISO_POS_Y、VISO_POS_Z 设置为相机在无人机上相对于重心的位置。详见传感器位置偏移补偿(sensor position offset compensation);
- 可选择将 VISO_QUAL_MIN 增至 10(或更高),以便仅在质量为 10%(或更高)时才消耗相机的估计值。
如果只使用 VOXL 摄像机进行位置估算和航向(例如不使用 GPS):
- EK3_SRC1_POSXY = 6 (ExternalNav);
- EK3_SRC1_VELXY = 6 (ExternalNav);
- EK3_SRC1_POSZ = 6 (ExternalNav);
- EK3_SRC1_VELZ = 6 (ExternalNav);
- EK3_SRC1_YAW = 6 (ExternalNav)。
修改参数后,重启自动驾驶仪。与地面站连接,(如果使用任务规划器)在地图上单击鼠标右键,选择“在此设置原点”、“在此设置 EKF 原点”,告诉 ArduPilot 飞行器的位置,它就会立即出现在地图上。
用于室内/室外转换(例如室内使用 VOXL 摄像头,室外使用 GPS+指南针):
- EK3_SRC1_POSXY = 3 (GPS);
- EK3_SRC1_VELXY = 3 (GPS);
- EK3_SRC1_POSZ = 1 (Baro);
- EK3_SRC1_VELZ = 0 (None);
- EK3_SRC1_YAW = 1 (Compass);
- EK3_SRC2_POSXY = 6 (ExternalNav);
- EK3_SRC2_VELXY = 6 (ExternalNav);
- EK3_SRC2_POSZ = 6 (ExternalNav);
- EK3_SRC2_VELZ = 6 (ExternalNav);
- EK3_SRC2_YAW = 6 (ExternalNav);
- RC6_OPTION = 90(EKF Pos 信号源)允许飞行员使用通道 6 在信号源 1(如 GPS+指南针)和信号源 2(如 VOXL 摄像机)之间切换。开关的低位置为源 1(GPS+指南针),中间位置为源 2(如 VOXL),高位置为源 3(如无),这将导致 EKF 失去位置估计并触发 EKF 故障安全。为避免飞行员错误触发 EKF 故障保护,您可能需要将 EK3_SRC1_xxx 或 EK2_SRC2_xxx 复制到 EK3_SRC3_xx;
- RC7_OPTION = 80(Viso Align)允许飞行员在飞行前使用通道 7 将摄像机的偏航与 AHRS/EKF 偏航重新对齐。起飞前重新调整偏航是个好主意,否则可能会发生位置失控(又称“厕所保龄球”)。
修改参数后,重新启动自动驾驶仪。
有关 GPS/Non-GPS 转换的更多详情,请点击此处(GPS/Non-GPS Transitions can be found here)。
为了在 VOXL 出现故障时使用光流和测距仪作为备份,这里提供了一个用于外部导航/光流转换的 Lua 小程序(ExternalNav/Optical flow transitions is here)。
4.4.1 使用 OpticalFlow 进行 EKF3 光源转换
如果需要在外部导航流和光学流之间切换,请参阅外部导航流/光学流转换(ExternalNAV/Optical Flow Transitions)。