ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PX4-Autopilot 的 SensorGnssRelative 消息:NED 坐标系下的 GNSS 相对定位与 RTK/移动基准解算详解

PX4-Autopilot 的 SensorGnssRelative 消息:NED 坐标系下的 GNSS 相对定位与 RTK/移动基准解算详解 嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载导读SensorGnssRelative是 PX4-Autopilot 中承载GNSS 相对定位信息的核心 uORB 消息它以**参考站Reference Station为原点的当地拓扑坐标系NED**描述接收机与参考站之间的相对位置、相对位置精度、相对航向以及 RTK 解算状态。本文以 docs/en/msg_docs/SensorGnssRelative.md 为主线逐字段解析该消息的语义并结合仓库源码说明它由谁发布、被谁消费以及如何用于 GNSS 航向双天线测向、移动基准moving base等实际场景。读完本文你将掌握该消息的完整字段含义、底层数据流与配置要点能够在日志分析与二次开发中正确理解和使用sensor_gnss_relative主题。消息概览主题名与坐标系约定该消息对应的 uORB 主题名为sensor_gnss_relative消息结构定义于 msg/SensorGnssRelative.msg并被 msg/CMakeLists.txt第 210 行纳入构建清单由 PX4 的 uORB 代码生成器自动生成sensor_gnss_relative_s结构体与发布/订阅接口。其核心语义声明如下GNSS relative positioning information in NED frame. The NED frame is defined as the local topological system at the reference station.也就是说坐标系NED北东地局部拓扑坐标系原点参考站Reference Station所在位置内容接收机相对参考站的相对位置矢量、精度、航向以及解算质量相关的状态位。该消息特别适合承载RTK载波相位差分相对定位和移动基准moving base场景下的解算结果例如无人机相对移动基站如车载基站、手持基站的厘米级相对定位以及基于双天线/多天线接收机的 GNSS 航向测量。字段详解以下表格完整列出消息的全部字段与 docs/en/msg_docs/SensorGnssRelative.md 保持一致并补充各字段在源码中的实际用途。字段名类型单位/帧说明timestampuint64µs消息发布时刻系统启动以来的微秒时间由发布方填充timestamp_sampleuint64µs采样时刻系统启动以来的微秒时间device_iduint32—传感器唯一设备 ID跨上电周期保持不变time_utc_usecuint64µs (UTC)来自 GPS 模块的 UTC 时间戳冷启动后可能不可用此时为 0reference_station_iduint16—参考站 IDpositionfloat32[3]m接收机相对参考站的 NED 位置矢量position_accuracyfloat32[3]m相对位置矢量的各分量精度headingfloat32rad相对位置矢量的航向heading_accuracyfloat32rad相对位置矢量航向的精度position_lengthfloat32m位置矢量长度accuracy_lengthfloat32m位置长度精度gnss_fix_okbool—GNSS 有效定位满足 DOP 与精度掩码differential_solutionbool—是否应用了差分改正relative_position_validbool—相对位置是否有效carrier_solution_floatingbool—载波相位解模糊度为浮点RTK Floatcarrier_solution_fixedbool—载波相位解模糊度已固定RTK Fixedmoving_base_modebool—接收机是否运行在移动基准模式reference_position_missbool—本历元使用外推的参考站位置计算移动基准解reference_observations_missbool—本历元使用外推的参考站观测值计算移动基准解heading_validbool—航向是否有效relative_position_normalizedbool—相对位置矢量各分量含高精度部分是否已归一化时间戳字段的语义差异timestamp与timestamp_sample的区分是 PX4 传感器消息的通用约定timestamp表示消息在系统内被组装/发布的时刻timestamp_sample表示传感器实际采样的时刻。在 src/drivers/gps/gps.cpp 的publishRelativePosition()第 1510–1516 行中发布时仅设置device_id get_device_id()与timestamp hrt_absolute_time()其余字段由底层的 GPS 驱动解析填充void GPS::publishRelativePosition(sensor_gnss_relative_s gnss_relative) { gnss_relative.device_id get_device_id(); gnss_relative.timestamp hrt_absolute_time(); _sensor_gnss_relative_pub.publish(gnss_relative); }time_utc_usec的 0 值语义在接收机冷启动后 UTC 时间尚未收敛时该字段为 0消费方应将其视为UTC 时间不可用。位置与精度字段position是 3 分量浮点数组直接给出接收机相对参考站的NED 位移单位米position_accuracy对应对位置矢量的 1σ 精度估计position_length与accuracy_length是矢量的标量化表示水平距离与对应的精度便于在不关心方向时快速使用——例如 src/drivers/uavcannode/Publishers/RelPosHeading.hpp 中正是使用sensor_gnss_relative.position_length作为 UAVCAN ArduPilotRelPosHeading消息的relative_distance_m。解算质量状态位这组布尔字段构成了解算质量的体检报告gnss_fix_ok整体定位是否满足 DOP 与精度掩码differential_solution本历元是否使用了差分改正RTK 或 SBAS 等差分来源carrier_solution_floating/carrier_solution_fixed载波相位差分解的模糊度状态fixed表示整数模糊度已固定RTK 固定解精度可达厘米级floating表示浮点模糊度RTK 浮点解精度次之moving_base_mode、reference_position_miss、reference_observations_miss移动基准模式下若参考站数据链路中断接收机可能使用外推的参考站位置/观测值继续结算此时对应标志置位消费方应知晓精度会随时间下降heading_valid相对位置矢量航向是否可用于 GNSS 测向relative_position_normalized指示相对位置矢量各分量含高精度部分已完成归一化处理避免直接比较量纲不一致的数据。源码中的数据流谁发布、谁消费从仓库源码可以梳理出完整的生产者-消费者链路。生产者发布方通用 GPS 驱动src/drivers/gps/gps.cpp 使用uORB::PublicationMultisensor_gnss_relative_s第 248 行发布该主题驱动在解析到相对定位数据后调用publishRelativePosition()填充device_id与timestamp并发布第 536–537 行可见回调分发逻辑。该驱动同时负责将移动基准接收机的 RTCM 数据路由到rtcm_moving_baseline主题第 1480–1507 行与相对定位消息形成配套。UAVCAN 桥接src/drivers/uavcan/sensors/gnss_relative.cpp 中的UavcanGnssRelativeBridge订阅 UAVCAN 上的RelPosHeading消息_sub_rel_pos_heading将其转换为sensor_gnss_relative并发布设备类型标记为DRV_GPS_DEVTYPE_UAVCAN。UAVCAN 节点cannode反向发布src/drivers/uavcannode/Publishers/RelPosHeading.hpp 展示了反向路径——在 UAVCAN 节点侧订阅sensor_gnss_relative将heading、heading_accuracy、position_length、position[2]下向分量转换为弧度制/米制的 ArduPilotRelPosHeading广播出去供其他 UAVCAN 设备使用。Septentrio 驱动src/drivers/gnss/septentrio/septentrio.cpp 第 1484 行将接收机上报的参考站 ID 写入_sensor_gnss_relative.reference_station_id vector.reference_id印证了reference_station_id字段的直接来源。消费者订阅方GNSS 航向融合模块src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.cpp 是sensor_gnss_relative的主要消费方。在UpdateGnssHeading()第 217–249 行中通过device_id反查对应的参数槽位与接收机状态findParamSlot/findGnssInstance对时间戳做延迟补偿resolveSampleTimestamp与 PPS 校时_pps_time_sync.correct_gnss_timestamp仅当heading_valid时才使用heading否则置为NAN提取position_length作为基线长度baseline_length、position[2]作为基线下向分量baseline_down。航向输出与 EKFhandleHeadingSample()第 251 行起要求接收机连续上报匹配的航向一段时间kHeadingSettleTime后才发布vehicle_gnss_heading且会校验基线长度一致性gnss_heading::baselineConsistent以及配置的最小天线间距gnss_heading::kMinAntennaSeparation若未配置基线参数会告警set SENS_GNSSn_HDG。最终vehicle_gnss_heading供 EKF 等下游使用。这段逻辑由编译开关CONFIG_SENSORS_VEHICLE_GNSS_HEADING控制。飞行日志src/modules/logger/logged_topics.cpp 将sensor_gnss_relative注册为多实例日志主题第 245 行默认以 1000 Hz 的日志速率记录第 423 行另有 10 Hz 的配置项同时记录vehicle_gnss_heading第 148 行。这意味着 ULog 日志中可直接检索到该消息用于事后分析。典型应用场景基于字段语义与源码消费链路sensor_gnss_relative在 PX4 中主要服务于以下场景RTK 相对定位通过carrier_solution_fixed/carrier_solution_floating判断是否达到固定解配合position与position_accuracy获取厘米级相对位置适用于编队飞行、精准降落引导、对接等对相对精度要求高的任务。GNSS 航向双天线/多天线测向heading、heading_accuracy、heading_valid是双天线接收机输出航向的关键字段经vehicle_gps_position模块处理后生成vehicle_gnss_heading供姿态估计使用前提是通过SENS_GNSSn_HDG等参数配置基线方向与天线间距。移动基准moving basemoving_base_mode、reference_position_miss、reference_observations_miss三个状态位用于标识基准站本身在运动以及参考数据是否被外推例如无人机跟随移动地面站、车载 RTK 场景可据此评估解算可信度。跨总线互联通过 UAVCAN 桥接与RelPosHeading消息可将相对定位/测向数据在 UAVCAN 设备之间共享扩展多传感器拓扑。实际使用与排查要点确认消息是否产生在运行 PX4 的平台上可通过uorb top sensor_gnss_relative查看主题发布频率与实例数若接收机不支持 RTK 相对定位或未配置差分源该主题可能不会发布。核对时间戳字段分析日志时优先使用timestamp_sample经驱动延迟补偿后的采样时刻对齐其他传感器数据time_utc_usec 0表示 UTC 时间尚未可用。RTK 解质量判断固定解carrier_solution_fixed为真是相对定位精度最高的状态若长期处于浮动解应检查差分数据链路RTCM 是否正常到达与基站距离。移动基准模式当reference_position_miss/reference_observations_miss频繁置位时说明参考数据依赖外推相对位置精度会随时间下降建议在应用中体现该降级状态。GNSS 航向使用前提vehicle_gps_position模块只在配置了基线参数SENS_GNSSn_HDG且基线长度不小于最小天线间距时才输出航向未配置时会打印告警GNSS heading from ... not used: set SENS_GNSSn_HDG。参考与进一步阅读消息定义原文msg/SensorGnssRelative.msg消息文档本文依据docs/en/msg_docs/SensorGnssRelative.md通用 GPS 驱动发布逻辑src/drivers/gps/gps.cppGNSS 航头消费与融合src/modules/sensors/vehicle_gps_position/VehicleGPSPosition.cppUAVCAN 桥接与节点侧发布src/drivers/uavcan/sensors/gnss_relative.cpp、src/drivers/uavcannode/Publishers/RelPosHeading.hppSeptentrio 驱动参考站 ID 写入src/drivers/gnss/septentrio/septentrio.cpp日志主题注册src/modules/logger/logged_topics.cpp赞分享嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载相关推荐PX4-Autopilot UORB 消息解析CollisionConstraintsNED 坐标系下的碰撞约束设定点PX4 Autopilot UORB 消息解析CollisionConstraintsNED 坐标系下的碰撞约束设定点 导读 CollisionConst嵌入式物联网机器人自动驾驶智能硬件PX4 VehicleOdometry 消息详解定义、坐标系约定与数据流解析PX4 VehicleOdometry 消息详解定义、坐标系约定与数据流解析 导读 VehicleOdometry 是 PX4 Autopilot 中用于描述嵌入式物联网机器人自动驾驶智能硬件PX4 Autopilot EstimatorBias UORB 消息详解气压计与 GNSS 高度偏差估计PX4 Autopilot EstimatorBias UORB 消息详解气压计与 GNSS 高度偏差估计 EstimatorBias 是 PX4 飞控中 E嵌入式物联网机器人自动驾驶智能硬件上一篇PyWxDump删库了微信聊天记录解密还能跑通吗下一篇7行代码实现语音模型压缩pyannote-audio轻量化实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表