文章目录
前言
本文介绍了如何使用基于 UWB(超宽带)技术的 Nooploop 系统作为 GPS 的短程替代品,实现 Loiter、PosHold、RTL、Auto indoors 等定位控制模式。
1 所需的硬件
- 5 个 Nooploop LinkTrack 节点;
- 一个 Arduino Nano Every(可选);
- 4 个带 A 型 USB 端口的便携式充电器(portable chargers),为锚点供电(可选);
- 4 个用于安装锚点的三脚架(tripods)(可选)。
2 准备锚具
需要配置 4 个 Nooploop 节点作为锚点。请按照 LinkTrack user manual 用户手册进行设置和校准。
3 放置锚具
锚点应放置成矩形。锚点 0 将作为 “原点”,Nooploop 系统的 Y 轴将作为 “正北”。如果从 0 号锚点到 1 号锚点之间的直线是正北方向,配置会稍微简单一些,但这并不是必需的,因为 BCN_ORIENT_YAW 参数可用于解释这种差异。
4 准备标签
使用 Nooploop NAssistant 工具配置一个节点作为标记。
- 将协议设置为 Node_Frame2;
- 将波特率设置为 921600;
- 将更新率设置为 25;
- 将滤波系数设为 0。
5 将标签连接至飞行控制器
可以将标签的 UART 端口直接连接到 FC。不过,某些 FC 的 UART Tx 与 Nooploop的 UART Rx 不兼容(据 Nooploop 开发人员称,这似乎是 Nooploop 节点内的 CP2012 造成的。删除 CP2012 有可能解决这个问题)。它会导致 FC 无法与标签通信。Pixhawk 4 mini 和 Kakute F7 已确认存在此问题。在这种情况下,可以使用 Arduino Nano Every 作为一种变通办法。使用 Ardnio IDE 将 Nooploop 解决方法草图(Nooploop work-around sketch)上传到 Arduino Nano Every,并将其 UART Tx 连接到标签的 UART Rx。在下文中,我们假设标签连接到 FC 的 UART 端口(对应 SERIAL1)。
6 通过地面站进行配置
确保在自动驾驶仪上加载 Copter-4.1(或更高版本),并与地面站(即任务规划器)连接。
- 将 BCN_TYPE 设置为 3(表示使用 Nooploop 系统);
- 将 BCN_LATITUDE、BCN_LONGITUDE 和 BCN_ALT 设置为与实际位置一致。这些值是否完全正确并不特别重要,但为了能从 ArduPilot 内的数据库中正确查找指南针的偏角,还是需要将它们设置为接近的值;
- 将 BCN_ORIENT_YAW 设置为从原点锚点到第二个锚点的航向。获取该值的一种方法是,站在原点控制飞行器,使其机头指向第二个信标。从 HUD 上读取飞行器的航向,并将该值输入 BCN_ORIENT_YAW;
- 将 EK3_BCN_DELAY 设置为 20;
- 将 EK3_SRC1_POSXY 设置为 4 (“Beacon”);
- 将 EK3_SRC1_POSZ 设置为 4(“Beacon”)以使用 NoopLoop 获取高度,或保留为 “1”以使用气压计;
- 将 EK3_SRC1_VELXY 设置为 0(无);
- 将 EK3_SRC1_VELZ 设置为 0(无);
- 将 EK3_SRC1_YAW 设置为 1(“指南针”),因为指南针必须与此设备一起使用;
- 将 GPS1_TYPE 设置为 0 以禁用 GPS;
- 将 ARMING_CHECK 设置为 -9 以禁用 GPS 解锁检查;
- 将 SERIAL1_BAUD 设置为 921,将 SERIAL1 的波特率设置为 921600;
- 将 SERIAL1_PROTOCOL 设置为 13,以便读取 IndoorLoiter2 协议;
- 将 BRD_SER1_RTSCTS 设置为 0,以确保 SERIAL1 不使用流量控制(假设它具有此功能)。
7 地面测试
- 将自动驾驶仪连接到地面站;
- 大约 1 分钟后,飞行器的位置应跳转到你在配置步骤(上文)中输入的经度和纬度;
- 检查飞行器的位置是否相对稳定(即移动距离不超过一米);
- 在锚点之间走动飞行器,确保其在地图上的位置更新正确。
8 飞行测试
将发射机设置为 Stabilize、AltHold 和 Loiter 飞行模式。在 AltHold 模式下起飞并保持稳定悬停。切换到 Loiter模式,但随时准备在飞行器位置或高度不稳定时切换回 AltHold 或 Stabilize 模式。
9 数据闪存记录
与信标的距离可在数据闪存日志 BCN 报文的 D0、D1、D2 和 D3 字段中找到。