ArduPilot RemoteID Transmitter:无人机远程识别解决方案
ArduPilot RemoteID Transmitter 是一个基于 MAVLink 和 DroneCAN 协议的开源项目,核心目标是为无人机提供符合 FAA 标准和欧盟远程识别(RemoteID)法规的传输方案。它不仅满足了 ASTM F3586-22 合规性要求,还为用户提供了灵活的工具来确保产品在全球范围内的合法性和安全性。
硬件支持
目前固件主要适配 ESP32-S3 和 ESP32-C3 芯片,兼容 Bluemark 的 DB110、DB200 等开发板。对于 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 服务器允许用户在线更新固件和配置参数。为了防止未经授权的修改,系统引入了固件签名机制。
密钥生成与签名
要启用安全功能,首先需要生成公钥/私钥对。可以使用项目提供的脚本:
scripts/generate_keys.py
这些密钥与 ArduPilot 的安全启动系统兼容,默认包含 3 个发布公钥。
签名 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:跳过固件升级的所有检查(调试用)
一旦锁定级别设置为 1 或 2,后续的参数更新必须使用 DroneCAN SecureCommand 接口或 MAVLink SECURE_COMMAND 接口。
配置与管理
固件提供了一套完整的参数系统,可通过 DroneCAN 或 MAVLink 访问。关键参数包括:
- UAS_TYPE、UAS_ID_TYPE 和 UAS_ID:重写 RemoteID BasicID 数据包中的 ID
- WEBSERVER_ENABLE:启用 WiFi 接入点和 Web 服务器
- PUBLIC_KEY1 到 PUBLIC_KEY5:用于验证固件更新和安全参数更新的公钥
当 WEBSERVER_ENABLE 启用后,WiFi 接入点将使用 WIFI_SSID 和 配置。默认 SSID 为 RID_xxxxxxxx(后缀为 MAC 地址),默认密码为 ArduRemoteID。Web 服务器运行在

