赞
踩
符合美国航空管理局FAA规定的一些 Remote ID 设备有哪些?
https://uasdoc.faa.gov/listDocs
欧美的Remote ID规范
美国:先制定了ASTM F3411-22a规范; 后来为了满足NoA的要求又制定了F3586规范。
欧洲:ASD-STAN prEN 4709-002 规范。
符合中国的Remote ID的规范呢?
民用微轻小型无人驾驶航空器运行识别最低性能要求(试行).pdf
民用无人驾驶航空器系统安全要求.pdf
可知中国制定的Remote ID规范参考了美国和欧洲制定的规范。
ardupilot生态中可用的 Remote ID 设备有哪些?
OpenDroneID开源方案兼容哪些型号的硬件设备?
ESP32
开发了一套可以实现OpenDroneID
功能的开源固件名叫 ArduRemoteID
ArduRemoteID能实现OpenDroneID主要是因为使用了这个开源库opendroneid-core-c。
该存储库提供了一个C代码函数库,用于编码和解码(打包/拆包)Open Drone ID消息,其格式在ASTM F3411 Remote ID和ASD-STAN prEN 4709-002 Direct Remote ID规范中定义。请参阅下面的规范部分中的更多详细信息。
opendroneid-core-c代码适用于通过蓝牙或Wi-Fi广播远程ID信息的实现。
MAVLink 和 DroneCAN 都发布了与RemoteID相关的消息集(message set),请参阅他们各自的文档。
如MAVLink OpenDroneID messages:
飞控会通过串口向 transmitter 模块发送 MAVLink OpenDroneID messages ,或通过can口向 transmitter 模块发送 DroneCAN messages,messages 主要有以下几种类型:
transmitter模块向飞控只发送一种类型的 messages:
飞控中,DroneCAN messages 的内容是复制于 MAVLink OpenDroneID messages. 因此想要修改发送的内容,要先从MAVLink OpenDroneID messages消息改起,然后再改opendroneid-core-c中的相关代码,再根据需要改DroneCAN messages。
MAVLink OpenDroneID messages的内容格式定义遵循以下规范、标准:
OpenDroneID所有类型的报文格式请参考:
【1】民用微轻小型无人驾驶航空器运行识别最低性能要求(试行).pdf
【2】 ASTM F3411-22a.
【3】ASD-STAN prEN 4709-002.
【5】What are ASTM and ASD-STAN Remote ID standards?
【4】查看源码 opendroneid-core-c
如 Basicld 报文:
ArduRemoteID 兼容的硬件平台
固件下载
https://github.com/ArduPilot/ArduRemoteID/releases
推荐使用ardupilot 4.4 + ArduRemoteID 1.3
若使用ardupilot 4.4 + ArduRemoteID 1.4 时DroneCAN node参数刷不出!!
刷固件的工具
https://www.espressif.com/en/support/download/other-tools
ESP32-S3固件烧录步骤
编译适配OpenDroneID功能的 ardupilot 固件
@READONLY
,实现重要参数防篡改:# RemoteID
# 将重要参数设为只读,防止用户意外修改
DID_ENABLE 1 @READONLY
DID_OPTIONS 1 @READONLY
DID_MAVPORT -1 @READONLY
DID_CANDRIVER 1 @READONLY # 使用can driver1
AHRS_EKF_TYPE 3 @READONLY
GPS_TYPE 9 # 使用can1口连接雷迅GPS: RTK 2HP
GPS1_TYPE 9
GPS_TYPE2 0
GPS2_TYPE 0
@READONLY
表示在地面站中只可读不可改。# use a different board ID with OpenDroneID enabled
APJ_BOARD_ID 17979
# enable OpenDroneID
define AP_OPENDRONEID_ENABLED 1
./waf distclean
./waf configure --board SunHiTech --bootloader
./waf bootloader
./waf distclean
./waf configure --board=SunHiTech copter --enable-custom-controller
接线
DID_MAVPORT 2 @READONLY
DID_CANDRIVER 0 @READONLY
地面站 Mission Planner
最新版本的地面站才具备 Remote Id 功能插件,下载地址。
为PC搭建虚拟GPS
参考
相关软件:
VirtualGPS 下载
VirtualSerialPortDriver(虚拟串口工具)
使用UDP连接将虚拟GPS信号发给 mission planner!使用com貌似不行。
ArduRemoteID固件参数
详细请参考 ArduRemoteID-parameters
UAS_TYPE
UAS_ID_TYPE
UAS_ID
...
LOCK_LEVEL
= -1,0,1,2,取值含义请参考这里PUBLIC_KEY1 ~ PUBLIC_KEY5
= usr pub key,生成公私密钥对请参考这里self.OpenDroneID_settings = mp_settings.MPSettings([ MPSetting("rate_hz", float, 0.1), MPSetting("location_rate_hz", float, 1.0), # BASIC_ID MPSetting("UAS_ID_type", int, 0, choice=[("None",0), ("SerialNumber",1), ("CAA", 2), ("UTM_ASSIGNED", 3), ("SessionID", 4)]), MPSetting("UAS_ID", str, ""), MPSetting("UA_type", int, 0, choice=[("None",0), ("Aeroplane",1), ("HeliOrMulti",2), ("GyroPlane",3), ("HybridLift",4), ("Ornithopter",5), ("Glider",6), ("Kite",7), ("FreeBalloon",8), ("CaptiveBalloon",9), ("Airship", 10), ("Parachute",11), ("Rocket",12), ("TetheredPowered", 13), ("GroundObstacle", 14)]), # SELF_ID MPSetting("description_type", int, 0, choice=[("Text",0), ("Emergency",1), ("ExtendedStatus", 2)]), MPSetting("description", str, ""), # SYSTEM MPSetting("area_count", int, 1), MPSetting("area_radius", int, 0), MPSetting("area_ceiling", int, -1000), MPSetting("area_floor", int, -1000), MPSetting("category_eu", int, 0, choice=[("Undeclared",0), ("Open",1), ("Specific",2), ("Certified",3)]), MPSetting("class_eu", int, 0), MPSetting("classification_type", int, 0, choice=[("Undeclared",0),("EU",1)]), # OPERATOR_ID MPSetting("operator_location_type", int, 0, choice=[("Takeoff",0),("LiveGNSS",1),("Fixed",2)]), MPSetting("operator_id_type", int, 0), MPSetting("operator_id", str, ""), ]) self.OpenDroneID_vehicle_settings = mp_settings.MPSettings([ MPSetting("UAS_ID", str, ""), MPSetting("lock_id", int, 0), ])
Web Server 和 Firmware Signing
Web Server:网络服务
Firmware Signing:固件签名
ArduRemoteID会创建一个wifi热点,wifi名称和密码对应WIFI_SSID
和 WIFI_PASSWORD
参数。
PC连接上这个热点后可以访问http://192.168.4.1 网页,实现对ArduRemoteID固件的网络更新!
但是,Web Server 只能加载被签名的固件,即OTA固件,OTA即Over The Air.
如何实现固件签名?固件OTA?
ArduRemoteID/scripts/sign_fw.py ArduRemoteID_ESP32S3_DEV_OTA.bin MyName_private_key.dat 1
其中:
PUBLIC_KEY1 ~ PUBLIC_KEY5
其中之一对应的私钥,可以使用ArduRemoteID/scripts/generate_keys.py生成公私密钥对。参数安全更新(Secure Parameter Update)
两种方法:使用 DroneCAN GUI工具 或 ArduRemoteID/scripts/secure_command.py
推荐使用前者,因为本人试验后者时没成功!
scripts/secure_command.py mavcan::14550 --bus-num=1 --private-key my_private_key.dat --target-node=125 UAS_TYPE=3
scripts/secure_command.py mavcan:udpout:support.ardupilot.org:AAAAA --signing-passphrase=XXXXXXX --target-node=NNN --private-key=my_private_key.dat UAS_TYPE=3
PUBLIC_KEY1 ~ PUBLIC_KEY5
其中之一对应的私钥,可以使用ArduRemoteID/scripts/generate_keys.py 生成公私密钥对,如:./ArduRemoteID/scripts/generate_keys.py usrName
-1
√
键python3 -m pip uninstall pymonocypher
python3 -m pip install pymonocypher==3.1.0.0
mission planner 中的 remote ID 插件
【最低性能要求(试行)】的报文类型与【MAVLink OpenDroneID messages】不相符?
上图中的绿色箭头表示的报文是否是对应关系?要对比 MAVLink OpenDroneID messages 中的报文定义和 xxx最低性能要求(试行).pdf 中的报文格式才懂:
答案是肯定的!!
运行描述报文与SelfID报文对应:
系统报文:
其他
https://zhuanlan.zhihu.com/p/660568077
如果觉得这篇文章对你有用,请动动您发财的小手指:关注、点赞、收藏。谢谢您咧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。