尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PX4 OpenDroneIdBasicId 消息详解:无人机远程身份标识(Remote ID)的 UORB 数据结构与广播实现

发布时间:2026/9/29 2:40:06

资讯中心
01
ARTICLE

PX4 OpenDroneIdBasicId 消息详解:无人机远程身份标识(Remote ID)的 UORB 数据结构与广播实现

PX4 OpenDroneIdBasicId 消息详解:无人机远程身份标识(Remote ID)的 UORB 数据结构与广播实现
嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载导读本文围绕 PX4-Autopilot 中的open_drone_id_basic_idUORB 主题对应文档 docs/en/msg_docs/OpenDroneIdBasicId.md展开解析其 5 个字段的语义与取值范围并沿 MAVLink 流与 DroneCAN 两条数据通路深入源码说明 PX4 如何在缺乏外部发布者时自动生成 Basic ID 消息。读完本文你将理解无人机 Remote ID 广播链路中身份标识一节的数据来源、字段填充规则与验证调试方法。一、消息背景Open Drone ID 与 Remote IDRemote ID远程识别是日本、美国FAA与欧盟等地针对无人机强制推行的技术要求无人机实时广播自身位置/高度、序列号、操作员 ID/位置、状态等信息以实现无人机与其他航空器共享空域。Open Drone ID 是该规范的开放实现PX4 通过 docs/en/peripherals/remote_id.md 中描述的方式与支持 Open Drone ID MAVLink 协议或 Remote ID over CANDroneCAN的硬件模块协同工作。在这一体系中OpenDroneIdBasicId是承载无人机身份信息本质上是序列号的 UORB 消息对应 MAVLink 的OPEN_DRONE_ID_BASIC_ID报文。它与OpenDroneIdSystem、OpenDroneIdLocation、OpenDroneIdSelfId、OpenDroneIdOperatorId、OpenDroneIdArmStatus等消息共同构成 PX4 的 Open Drone ID 消息族对应源码见 msg 目录与 src/modules/mavlink/mavlink_messages.cpp 中的流注册。二、消息定义与字段详解该消息的 UORB 主题名为open_drone_id_basic_id定义文件为 msg/OpenDroneIdBasicId.msg完整字段如下字段类型说明timestampuint64时间戳微秒uORB 消息的标准首字段由发布方填写id_or_macuint8[20]仅用于接收自其他 UA无人航空器的 drone ID 数据无空终止符长度不足时以零填充id_typeuint8遵循 MAVLinkMAV_ODID_ID_TYPE枚举指明uas_id字段采用的格式ua_typeuint8遵循 MAVLinkMAV_ODID_UA_TYPE枚举指明无人航空器UA的类型uas_iduint8[20]UAS无人航空器系统ID格式由id_type指定无空终止符长度不足时以零填充原始.msg定义如下uint64 timestamp uint8[20] id_or_mac # Only used for drone ID data received from other UAs, no null termination, null filled if shorter uint8 id_type # MAV_ODID_ID_TYPE: indicates the format for the uas_id field uint8 ua_type # MAV_ODID_UA_TYPE: indicates the type of UA (Unmanned Aircraft) uint8[20] uas_id # UAS (Unmanned Aircraft System) ID following the format specified by id_type, no null termination, null filled if shorter值得注意的设计细节id_or_mac与uas_id均为 20 字节定长数组。注释明确无空终止符no null termination、长度不足时以零填充null filled if shorter因此消费方不能按 C 字符串方式用strlen截断处理而应使用固定长度20 字节进行拷贝或比较。id_or_mac仅在接收场景使用。当本机是从其他无人航空器收到 drone ID 数据时该字段承载对方的 ID/MAC本机作为广播源时该字段留空。这一点在下方实现章节会看到MAVLink 流与 DroneCAN 发送路径中都明确注释Only used for drone ID data received from other UAs且不填充该字段。id_type决定uas_id的编码格式。PX4 当前实现固定使用MAV_ODID_ID_TYPE_SERIAL_NUMBER见下文源码并存在尚未按 ANSI/CTA-2063 格式编码的 TODO 限制。三、id_type 与 ua_type 的枚举语义与映射3.1 id_typeUAS ID 的格式标识id_type采用 MAVLinkMAV_ODID_ID_TYPE枚举值指明uas_id的编码格式如序列号、CAA 分配的 ID、UTM 分配的 ID 等。从 PX4 源码看两条广播路径目前均将id_type固定为MAV_ODID_ID_TYPE_SERIAL_NUMBER序列号格式并附有 TODO 注释指出序列号需要符合 ANSI/CTA-2063 格式要求见 src/modules/mavlink/streams/OPEN_DRONE_ID_BASIC_ID.hpp 与 src/drivers/uavcan/remoteid.cpp。3.2 ua_type无人机类型映射ua_type表示无人航空器UA的类型。PX4 在 src/modules/mavlink/open_drone_id_translations.cpp 中提供了odidTypeForMavType()函数将飞控内部的MAV_TYPE_*系统类型来自vehicle_status.system_type映射为MAV_ODID_UA_TYPE枚举。常见映射如下完整映射见源码MAV_TYPE飞控系统类型MAV_ODID_UA_TYPERemote ID 无人机类型MAV_TYPE_GENERICMAV_ODID_UA_TYPE_OTHERMAV_TYPE_FIXED_WINGMAV_ODID_UA_TYPE_AEROPLANEMAV_TYPE_QUADROTOR/HELICOPTER/COAXIAL/HEXAROTOR/OCTOROTOR/TRICOPTER/DODECAROTORMAV_ODID_UA_TYPE_HELICOPTER_OR_MULTIROTORMAV_TYPE_AIRSHIPMAV_ODID_UA_TYPE_AIRSHIPMAV_TYPE_FREE_BALLOONMAV_ODID_UA_TYPE_FREE_BALLOONMAV_TYPE_ROCKETMAV_ODID_UA_TYPE_ROCKETMAV_TYPE_GROUND_ROVERMAV_ODID_UA_TYPE_GROUND_OBSTACLEMAV_TYPE_FLAPPING_WINGMAV_ODID_UA_TYPE_ORNITHOPTERMAV_TYPE_KITEMAV_ODID_UA_TYPE_KITEMAV_TYPE_VTOL_TAILSITTER_DUOROTOR等所有 VTOL 机型MAV_ODID_UA_TYPE_HYBRID_LIFTMAV_TYPE_PARAFOIL/MAV_TYPE_PARACHUTEMAV_ODID_UA_TYPE_FREE_FALL_PARACHUTEMAV_TYPE_GCS/MAV_TYPE_ANTENNA_TRACKER/MAV_TYPE_GIMBAL等非飞行器类型MAV_ODID_UA_TYPE_NONE未知类型defaultMAV_ODID_UA_TYPE_OTHER从源码结构看该映射函数被 MAVLink 流OPEN_DRONE_ID_BASIC_ID.hpp与 DroneCAN 控制器remoteid.cpp共同复用保证了同一机架在两条链路广播的ua_type一致。四、数据流从 uORB 到 MAVLink 广播的完整链路4.1 MAVLink 流实现OPEN_DRONE_ID_BASIC_IDPX4 将 UORB 主题open_drone_id_basic_id与 MAVLink 报文OPEN_DRONE_ID_BASIC_ID关联的流定义在 src/modules/mavlink/streams/OPEN_DRONE_ID_BASIC_ID.hpp并通过 src/modules/mavlink/mavlink_messages.cpp 中#if defined(OPEN_DRONE_ID_BASIC_ID_HPP)的条件编译注册。其send()逻辑体现了双源回退策略外部发布者优先若 UORB 主题open_drone_id_basic_id已被发布advertised()为真例如有其他模块收到了其他无人机的 Remote ID 数据则拷贝其id_type、ua_type与uas_id直接转发并通过static_assert保证两处uas_id大小一致20 字节随后以mavlink_msg_open_drone_id_basic_id_send_struct发出。id_or_mac字段在此路径下同样不填充。本机自动生成默认路径当没有外部发布者时流会订阅vehicle_status主题ORB_ID(vehicle_status)在状态更新时自动生成一条 Basic IDtarget_system/target_component均置 0表示广播broadcastid_type固定为MAV_ODID_ID_TYPE_SERIAL_NUMBERua_type由open_drone_id_translations::odidTypeForMavType(vehicle_status.system_type)映射得到uas_id由board_get_px4_guid_formated()填充——即飞控的 PX4 GUID唯一标识符的格式化字符串充当本机序列号源码注释同时标注 TODO序列号格式需符合 ANSI/CTA-2063。这也解释了 docs/en/peripherals/remote_id.md 中无需显式启用 Remote ID的结论即使未连接任何 Remote ID 硬件PX4 也会基于自身状态生成并广播OPEN_DRONE_ID_BASIC_ID该报文在normal、onboard、usb、onboard low bandwidth等流模式下按请求发送需通过MAV_CMD_SET_MESSAGE_INTERVAL主动请求而非像OPEN_DRONE_ID_LOCATION/OPEN_DRONE_ID_SYSTEM那样默认以 1 Hz 周期流式发送。4.2 DroneCAN 路径实现remoteid.cpp对于通过 CAN 总线接入的 Remote ID 硬件PX4 在 src/drivers/uavcan/remoteid.cpp 中实现了UavcanRemoteIDController通过_timer.startPeriodic(1000 / MAX_RATE_HZ)周期性调用periodic_update()进而执行send_basic_id()。其逻辑与 MAVLink 流几乎一致若 UORB 主题open_drone_id_basic_id已被发布则拷贝id_type、ua_type并把 20 字节的uas_id逐个push_back到 DroneCANBasicID消息的定长数组字段同样有static_assert做大小校验否则使用默认值id_type ODID_ID_TYPE_SERIAL_NUMBERua_type由odidTypeForMavType()映射uas_id取自board_get_px4_guid_formated()最终通过_uavcan_pub_remoteid_basicid.broadcast(msg)在 CAN 总线上广播。该控制器还同时广播Location、SelfID、System、OperatorID等 DroneCAN Remote ID 消息并订阅ArmStatus用于 Remote ID 健康检查是整个 CAN 链路 Remote ID 功能的汇聚点。五、配置、验证与调试5.1 硬件接入与串口配置Remote ID 设备可接在飞控任意空闲串口或 CAN 口上常见做法是直连TELEM2该口默认配置了 MAVLink。以 TELEM2 为例需在 QGroundControl 中设置以下参数详见 docs/en/peripherals/remote_id.mdMAV_1_CONFIGTELEM 2MAV_1_MODE NormalMAV_1_RATE 0使用端口默认发送速率MAV_1_FORWARD Enabled重启飞控后会出现新参数SER_TEL2_BAUD波特率取决于所用 Remote ID 型号如 Cube ID 需设为 57600。若走 CAN 链路则需将UAVCAN_ENABLE设为非零值以启用 DroneCAN。5.2 验证 Basic ID 消息是否在广播根据 docs/en/peripherals/remote_id.md 的调试章节可用 QGroundControl 的Analyze Tools MAVLink Inspector观察是否出现OPEN_DRONE_ID_BASIC_ID与OPEN_DRONE_ID_LOCATION报文。若消息缺失可在 QGC MAVLink 控制台中执行uavcan status以确认 Remote ID 的 CAN 节点是否出现在在线节点列表中例如125 OK OPERAT。若 CAN 节点存在但消息缺失则需在 QGCApplication Settings中启用 Remote ID 视图并填写 Basic / Operator / Self ID 信息后重试。5.3 起飞前的门控COM_ARM_ODIDPX4 v1.18 起COM_ARM_ODID参数同时配置 Remote ID 系统的起飞前检查与飞行中失效保护UAV 只有在收到 Remote ID 的HEARTBEAT消息后才允许解锁arming将该参数设为1可改为仅告警但仍允许解锁。该参数与OPEN_DRONE_ID_ARM_STATUS消息共同构成 Remote ID 健康评估机制。六、合规性现状与已知限制Open Drone ID 功能在 PX4 中仍标记为Experimental实验特性相关说明见 docs/en/peripherals/remote_id.md。围绕OpenDroneIdBasicId消息当前实现存在以下已知限制均有源码或文档依据序列号格式不完整uas_id虽声明为MAV_ODID_ID_TYPE_SERIAL_NUMBER但源码注释明确TODO: needs to be ANSI/CTA-2063 format即当前直接使用board_get_px4_guid_formated()的 GUID 字符串尚未满足 ANSI/CTA-2063 标准序列号格式要求id_or_mac未被填充两条广播路径均未写入该字段它只在未来接收其他 UA 的 drone ID 数据场景中才会使用广播方式限制OPEN_DRONE_ID_BASIC_ID默认按请求发送需MAV_CMD_SET_MESSAGE_INTERVAL主动请求与默认 1 Hz 周期广播的OPEN_DRONE_ID_LOCATION、OPEN_DRONE_ID_SYSTEM不同合规性缺口PX4 v1.14 及早期版本未处理OPEN_DRONE_ID_ARM_STATUS解锁仅以 Remote ID 设备的HEARTBEAT为条件距离 FAA 标准要求的以 Remote ID 硬件就绪状态为解锁条件仍有差距。七、关联消息一览OpenDroneIdBasicId属于 PX4 Open Drone ID 消息族的一员便于整体理解该族还包含以下 UORB 消息对应文档位于 docs/en/msg_docsUORB 消息对应 MAVLink 报文作用OpenDroneIdBasicIdOPEN_DRONE_ID_BASIC_ID无人机身份信息序列号OpenDroneIdLocationOPEN_DRONE_ID_LOCATION无人机位置、高度、航向、速度OpenDroneIdSystemOPEN_DRONE_ID_SYSTEM操作员位置、多机编队信息、时间戳OpenDroneIdSelfIdOPEN_DRONE_ID_SELF_ID操作员身份明文描述OpenDroneIdOperatorIdOPEN_DRONE_ID_OPERATOR_ID操作员注册 IDOpenDroneIdArmStatusOPEN_DRONE_ID_ARM_STATUSRemote ID 硬件状态用于解锁条件与健康检查参考路径汇总消息定义msg/OpenDroneIdBasicId.msg、docs/en/msg_docs/OpenDroneIdBasicId.mdMAVLink 流实现src/modules/mavlink/streams/OPEN_DRONE_ID_BASIC_ID.hpp流注册src/modules/mavlink/mavlink_messages.cpp类型映射src/modules/mavlink/open_drone_id_translations.cppDroneCAN 实现src/drivers/uavcan/remoteid.cpp功能文档docs/en/peripherals/remote_id.md赞分享嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载相关推荐PX4 OpenDroneIdSelfId UORB 消息详解远程 ID 自描述信息的定义、接收与广播路径PX4 OpenDroneIdSelfId UORB 消息详解远程 ID 自描述信息的定义、接收与广播路径 OpenDroneIdSelfId 是 PX4 中嵌入式物联网机器人自动驾驶智能硬件PX4-Autopilot uORB 消息 IrlockReport 详解IR-Lock 红外信标定位数据结构与驱动实现PX4 Autopilot uORB 消息 IrlockReport 详解IR Lock 红外信标定位数据结构与驱动实现 导读 IrlockReport 是嵌入式物联网机器人自动驾驶智能硬件Cacti graph_view.php 未授权 SQL 注入链式利用至 RCE 复现CVE-2023-39361 / CVE-2024-31459Cacti graph_view.php 未授权 SQL 注入链式利用至 RCE 复现CVE 2023 39361 / CVE 2024 31459 Cac嵌入式物联网机器人自动驾驶智能硬件上一篇如何用 osTicket-1.7 打造高效客户支持系统新手必备的开源解决方案下一篇Crypto安全审计终极指南10个关键步骤确保代码安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。