ArduPilot RemoteID Transmitter:无人机远程识别的利器
在无人机行业,符合 FAA 和欧盟的远程识别(RemoteID)法规已成为刚需。ArduPilot RemoteID Transmitter 是一个基于 MAVLink 和 DroneCAN 协议的开源项目,旨在为无人机提供合规的传输解决方案。它不仅满足了 ASTM F3586-22 标准,还为制造商和用户提供了一个灵活的工具,确保产品在全球范围内的合法性和安全性。
硬件支持
目前固件主要针对 ESP32-S3 和 ESP32-C3 芯片进行优化,兼容 Bluemark 的 DB110、DB200、DB201、DB202mav 和 DB210pro 等开发板。未来计划支持 Wurzbach Electronics 的硬件。
如果你使用 ESP32-S3 开发板,固件默认的引脚配置如下:
- UART TX: 18
- UART RX: 17
- CAN TX: 47
- CAN RX: 38
ESP32-C3 的引脚则略有不同:
- UART TX: 3
- UART RX: 2
- CAN TX: 5
- CAN RX: 4
注意,CAN 总线需要连接合适的 1MBit bxCAN 收发器到对应的 TX/RX 引脚,这是通信稳定的关键。
传输与协议
为了适应不同环境,项目支持多种传输模式,包括 WiFi 广播、WiFi NAN(邻近感知网络)、蓝牙 4 传统广告以及蓝牙 5 长距离 + 扩展广告。这种多样性确保了无人机在城市或偏远地区都能可靠通信。
协议方面,它支持与 ArduPilot 飞行控制器通过 MAVLink 或 DroneCAN 通信。MAVLink 使用 OpenDroneID 服务,而 DroneCAN 则使用特定的远程 ID 消息,双协议设计让集成变得简单。
固件更新与安全
项目提供了预构建的固件版本,支持通过 Espressif FlashTool 进行初始加载。更贴心的是,内置 Web 服务器允许用户方便地进行固件更新和参数配置。为了防止篡改,固件签名机制确保了只有经过授权的更新才能被加载。
安全特性详解
固件签名 生成公钥/私钥对可以使用 Python 脚本:
scripts/generate_keys.py
这些密钥与 ArduPilot 的安全启动系统兼容,默认包含 3 个 ArduPilot 发布公钥。签名 OTA 固件的命令示例如下:
scripts/sign_fw.py ArduRemoteID_ESP32S3_DEV_OTA.bin MyName_private_key.dat 1
锁定级别机制
LOCK_LEVEL 参数是防止设备被篡改的重要手段:
- LOCK_LEVEL=0:允许更改参数,但只允许通过 Web 服务器升级已签名的固件
- LOCK_LEVEL=1:阻止通过 DroneCAN 或 MAVLink 界面的所有参数更改
- LOCK_LEVEL=2:设置 ESP32 eFuse 以防止通过 USB 端口进行固件更新
- LOCK_LEVEL=-1:跳过固件升级的所有检查(仅限调试用)
一旦 LOCK_LEVEL 设置为 1 或 2,你需要使用 DroneCAN SecureCommand 接口或 MAVLink SECURE_COMMAND 接口来设置参数,这大大增加了安全性。
参数配置与 Web 服务
固件提供了一套完整的参数系统,可通过 DroneCAN 或 MAVLink 访问。关键参数包括:
- UAS_TYPE、UAS_ID_TYPE 和 UAS_ID:重写 RemoteID BasicID 数据包中的 ID
- WEBSERVER_ENABLE:启用 WiFi 接入点和 Web 服务器
- PUBLIC_KEY1 到 PUBLIC_KEY5:用于验证固件更新和安全参数更新的公钥

