嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载本篇技术指南以 PX4-Autopilot 的 uORB 消息landing_target_pose为核心完整解析其 19 个字段的帧系与单位语义、源消息定义msg/LandingTargetPose.msg、生产模块landing_target_estimator的卡尔曼滤波发布链路、相关LTEST_*参数以及 EKF2 辅助速度融合、导航模块精密起飞Precision Takeoff、MAVLinkLANDING_TARGET流等消费方。读完本文你将掌握该消息从传感器原始观测到导航级目标位姿的完整数据流并能在实际项目中正确解读、调试与扩展精密着陆功能。消息概览与设计意图LandingTargetPose是 PX4 精密着陆Precision Landing与精密起飞Precision Takeoff体系中的核心 uORB 消息其官方定义为Relative position of precision land target in navigation (body fixed, north aligned, NED) and inertial (world fixed, north aligned, NED) frames.即同时携带两种坐标系下的目标描述导航坐标系navigation frame目标相对飞行器的相对位置/速度坐标轴为北X、东Y、下Z即 NED 对齐方向与地磁北/航向参考一致惯性坐标系inertial frame目标相对导航原点的绝对位置x_abs/y_abs/z_abs同样为北对齐 NED 系。该消息的发布主题名为landing_target_pose来自 msg/LandingTargetPose.msg 及 uORB 生成代码ORB_ID(landing_target_pose)。其设计意图是将机载传感器如 IRLOCK 红外相机或外部定位系统观测到的目标信息经过滤波估计后以统一的位姿/速度/协方差结构发布出来供导航与飞行控制链路消费。字段逐项详解LandingTargetPose共 19 个字段分为时间戳、状态标志、相对状态位置/速度、相对协方差、绝对位置五组。下表字段、类型、单位与描述与 docs/en/msg_docs/LandingTargetPose.md 完全一致字段类型单位语义timestampuint64us系统启动以来的时间时间戳is_staticbool-目标相对地面是静止还是运动的标志rel_pos_validbool-相对位置是否有效rel_vel_validbool-相对速度是否有效rel_vel_ekf2_validbool-相对速度是否可用于 EKF2 辅助速度融合x_relfloat32m目标相对飞行器的 X/北向位置导航系y_relfloat32m目标相对飞行器的 Y/东向位置导航系z_relfloat32m目标相对飞行器的 Z/下向位置导航系vx_relfloat32m/s目标相对飞行器的 X/北向速度导航系vy_relfloat32m/s目标相对飞行器的 Y/东向速度导航系vz_relfloat32m/s目标相对飞行器的 Z/下向速度导航系cov_x_relfloat32m²X/北向位置方差cov_y_relfloat32m²Y/东向位置方差cov_z_relfloat32m²Z/下向位置方差cov_vx_relfloat32(m/s)²X/北向速度方差cov_vy_relfloat32(m/s)²Y/东向速度方差cov_vz_relfloat32(m/s)²Z/下向速度方差abs_pos_validbool-绝对位置是否有效x_absfloat32m目标相对导航原点的 X/北向位置导航系y_absfloat32m目标相对导航原点的 Y/东向位置导航系z_absfloat32m目标相对导航原点的 Z/下向位置导航系关键字段语义澄清rel_vel_ekf2_valid与is_static的耦合从 LandingTargetEstimator.cpp 的实现可见生产方以rel_vel_ekf2_valid is_static rel_vel_valid的方式赋值。即只有目标被标记为静止LTEST_MODE1时相对速度才被允许用于 EKF2 辅助速度融合——因为对移动目标而言相对速度无法直接反推机体地速z_rel的语义虽然vz_rel/cov_z_rel在消息中存在但当前landing_target_estimator实现中z_rel直接取自传感器测距见下文_dist_z并未经过卡尔曼滤波vz_rel、cov_z_rel由该模块发布时保持默认零值主要保留给其他生产方如视觉目标估计器使用相对量与绝对量的关系绝对位置 相对位置 机体本地位置x_abs x_rel vehicle_local_position.x等仅当机体本地位置xy_valid有效时abs_pos_valid才为真。源消息定义msg/LandingTargetPose.msg消息的真实定义位于仓库根目录的 msg/LandingTargetPose.msg构建时由Tools/msg/px_generate_uorb_topic_files.py生成 C/C 头文件与 IDL 定义。其完整内容如下# Relative position of precision land target in navigation (body fixed, north aligned, NED) and inertial (world fixed, north aligned, NED) frames uint64 timestamp # [us] Time since system start bool is_static # [-] Flag indicating whether the landing target is static or moving with respect to the ground bool rel_pos_valid # [-] Flag showing whether relative position is valid bool rel_vel_valid # [-] Flag showing whether relative velocity is valid bool rel_vel_ekf2_valid # [-] Flag showing whether relative velocity is valid for EKF2 auxiliary velocity aiding float32 x_rel # [m] X/north position of target, relative to vehicle (navigation frame) float32 y_rel # [m] Y/east position of target, relative to vehicle (navigation frame) float32 z_rel # [m] Z/down position of target, relative to vehicle (navigation frame) float32 vx_rel # [m/s] X/north velocity of target, relative to vehicle (navigation frame) float32 vy_rel # [m/s] Y/east velocity of target, relative to vehicle (navigation frame) float32 vz_rel # [m/s] Z/down velocity of target, relative to vehicle (navigation frame) float32 cov_x_rel # [m^2] X/north position variance float32 cov_y_rel # [m^2] Y/east position variance float32 cov_z_rel # [m^2] Z/down position variance float32 cov_vx_rel # [(m/s)^2] X/north velocity variance float32 cov_vy_rel # [(m/s)^2] Y/east velocity variance float32 cov_vz_rel # [(m/s)^2] Z/down velocity variance bool abs_pos_valid # [-] Flag showing whether absolute position is valid float32 x_abs # [m] X/north position of target, relative to origin (navigation frame) float32 y_abs # [m] Y/east position of target, relative to origin (navigation frame) float32 z_abs # [m] Z/down position of target, relative to origin (navigation frame)值得注意的编码细节全部数值字段使用float32位置、速度、方差各 9 个float32字段加上 5 个布尔标志与 1 个uint64时间戳。布尔字段在 uORB 序列化中按位打包整套消息体积很小适合高频发布与日志记录单位注释规范每个字段的# [unit]注释遵循 PX4 uORB 消息惯例方差字段明确区分m^2位置方差与(m/s)^2速度方差避免歧义无 Range/Enum 约束该消息所有字段均为自由取值不设范围校验因此消费方必须依赖各*_valid标志判断数据可用性。生产方landing_target_estimator 模块的发布链路在默认机架配置中landing_target_pose主要由 src/modules/landing_target_estimator 模块landing_target_estimator发布。该模块的类定义与实现分别在 LandingTargetEstimator.h 与 LandingTargetEstimator.cpp 中。数据流总览模块update()的典型执行流程如下订阅输入_update_topics订阅vehicle_local_position、vehicle_attitude、vehicle_acceleration与irlock_reportIRLOCK 红外传感器报告预测步若估计器已初始化且未超时利用机体加速度经姿态旋转到导航系后取负对 x/y 两个独立一维卡尔曼滤波器做时间预测量测转换收到新的irlock_report后将传感器像素坐标先经LTEST_SCALE_X/Y缩放、再按LTEST_SENS_ROT旋转得到机体坐标系下的单位射线随后用机体姿态旋转到导航系最后按下视距离dist_bottom缩放成米制相对位置LandingTargetEstimator.cpp更新步用相对位置量测更新 x/y 两个卡尔曼滤波器量测不确定性按LTEST_MEAS_UNC * dist_z²计算发布量测未被拒绝时填充并发布landing_target_pose同时发布新息到landing_target_innovations。关键实现细节可直接在源码中印证超时重置机制常量landing_target_estimator_TIMEOUT_US 20000002 秒。若在 2 秒内未收到新量测模块打印Lost sight of Marker并重置估计器等待下一次观测重新初始化LandingTargetEstimator.h、LandingTargetEstimator.cpp量测拒绝与_faulty标志当任一轴的卡尔曼更新返回失败时打印Landing target measurement rejected日志只有两轴都通过才发布位姿LandingTargetEstimator.cppL123-L182初始化逻辑首次观测时以rel_pos_x/rel_pos_y为位置初值、以机体地速的负值为目标速度初值vx_init -vehicle_local_position.vx并用LTEST_POS_UNC_IN/LTEST_VEL_UNC_IN作为初始方差L112-L121绝对位置合成在机体本地位置有效xy_valid时x_abs x_rel local_pos.x、y_abs y_rel local_pos.y、z_abs rel_pos_z local_pos.z并置abs_pos_valid true否则置 falseL168-L176is_static来源直接取自LTEST_MODE StationaryL151。卡尔曼滤波器结构滤波器实现位于 KalmanFilter.h 与 KalmanFilter.cpp。估计器对北向x与东向y各维护一个独立的一维常量加速度卡尔曼滤波器状态含位置与速度因此cov_x_rel/cov_vx_rel与cov_y_rel/cov_vy_rel分别对应两个滤波器输出的协方差而cov_z_rel、cov_vz_rel不在该模块的滤波范围内。相关参数LTEST_* 系列landing_target_estimator的全部参数定义在 src/modules/landing_target_estimator/landing_target_estimator_params.yaml 中构建时生成到参数系统。下表完整列出参数类型默认值单位说明LTEST_MODE枚举0-着陆目标模式0Moving目标可能移动量测不用于辅助定位1Stationary目标静止相对速度用于辅助速度估计LTEST_ACC_UNCfloat10.0(m/s²)²用于目标位置预测的加速度量测方差值越大对量测跟踪越紧、异常值剔除越宽松LTEST_MEAS_UNCfloat0.005tan(rad)²驱动器的着陆目标量测方差值越大对量测跟踪越弱、输出越平滑、被拒绝的量测越少LTEST_POS_UNC_INfloat0.1m²相对着陆目标位置x/y的初始方差最小 0.001LTEST_VEL_UNC_INfloat0.1(m/s)²相对着陆目标速度x/y的初始方差最小 0.001LTEST_SCALE_Xfloat1.0-传感器 x 轴量测缩放因子最小 0.01LTEST_SCALE_Yfloat1.0-传感器 y 轴量测缩放因子最小 0.01LTEST_SENS_ROT枚举2-IRLOCK 传感器相对机体的旋转0无旋转、1偏航45°、2偏航90°、3偏航135°、4偏航180°、5偏航225°、6偏航270°、7偏航315°默认偏航 90°需重启生效LTEST_SENS_POS_Xfloat0.0mIRLOCK 在机体坐标系中的 X 位置前向需重启生效LTEST_SENS_POS_Yfloat0.0mIRLOCK 在机体坐标系中的 Y 位置右向需重启生效LTEST_SENS_POS_Zfloat0.0mIRLOCK 在机体坐标系中的 Z 位置下向需重启生效参数影响解读LTEST_MODE直接决定is_static与rel_vel_ekf2_valid的取值LTEST_SENS_ROT与三个LTEST_SENS_POS_*用于将传感器安装朝向/安装位置造成的偏差在量测进入滤波器之前校正见 LandingTargetEstimator.cpp。在 QGroundControl 参数界面或地面站中可通过搜索前缀LTEST过滤查看。消费方与应用场景landing_target_pose在仓库中被多个模块订阅构成精密着陆/起飞的完整消费链路。1. EKF2 辅助速度融合速度辅助定位src/modules/ekf2/params_aux_velocity.yaml 中定义的EKF2_AVEL_EN参数说明明确指出Fuse the landing-target relative velocity as auxiliary velocity … When enabled, EKF2 fuses the relative velocity published in landing_target_pose … only fused when landing_target_pose.rel_vel_ekf2_valid is true.即当目标静止LTEST_MODE1时EKF2 可将landing_target_pose中的相对速度作为辅助速度源参与位置/速度估计这在 GPS 受限场景如室内、桥下下可显著改善定位。对应实现位于 src/modules/ekf2/EKF2.cpp相关延迟参数见EKF2_AVEL_DELAY。2. 导航模块精密起飞Precision Takeoffsrc/modules/navigator/prec_takeoff.cpp 中的PrecTakeoff::update_setpoint订阅该消息并在满足以下条件时使用其绝对位置修正起飞航点目标时间戳新鲜now - timestamp kTargetTimeoutUsabs_pos_valid为真且x_abs/y_abs为有限值目标时间戳晚于本地坐标系原点重置时间ref_timestamp且机体位置处于全球坐标系有效状态xy_global。满足条件后模块将x_abs/y_abs通过_map_ref.reproject反投影为经纬度航点使飞行器在垂直起飞后保持于着陆坪上方。与之配合的参数为MIS_TKO_PREC、MIS_TKO_PREC_DLY见 docs/en/advanced_features/precland.md。3. MAVLink 外发LANDING_TARGET 流src/modules/mavlink/streams/LANDING_TARGET.hpp 定义了MavlinkStreamLandingTarget流将landing_target_pose的timestamp/x_rel/y_rel/z_rel/rel_pos_valid映射为 MAVLinkLANDING_TARGET消息MAV_FRAME_LOCAL_NED供地面站、外部定位系统或 GCS 可视化使用。反向地外部系统也可通过 MAVLink 注入目标信息见 src/modules/mavlink/mavlink_receiver.cpp。4. 视觉目标估计器Vision Target Estimatorsrc/modules/vision_target_estimator/Position/VTEPosition.h 同样会发布landing_target_pose用于为视觉目标ArUco 码、着陆坪图案等提供滤波后的位姿。它发布的is_static等标志语义与 landing_target_estimator 一致两类生产方可通过uORB多发布者机制并存具体选用取决于机架配置相关说明见 docs/en/advanced_features/vision_target_estimator_advanced.md。5. 日志与回放src/modules/logger/logged_topics.cpp 将landing_target_pose列入默认/可配置日志主题飞行日志.ulg中可直接检索该主题进行事后分析src/modules/replay/ReplayEkf2.cpp 在回放模式下也会消费该主题用于复现 EKF2 的辅助速度融合行为。在精密着陆工作流中的位置按 docs/en/advanced_features/precland.md 的描述精密着陆支持多旋翼在静止或移动目标上降落目标可由机载 IR 传感器信标或外部定位系统提供。landing_target_pose在此工作流中的角色是目标信息在传感器与导航/控制之间的统一接口水平接近阶段导航模块消费相对位置x_rel/y_rel判断目标是否进入水平收敛半径PLD_HACC_RAD目标上方下降与最终进近阶段持续消费相对位置维持机体居中于目标上方PLD_FAPPR_ALT以下进入最终进近目标丢失处理若 2 秒内无新位姿对应估计器超时重置与导航侧kTargetTimeoutUs精密着陆退化为搜索流程PLD_SRCH_ALT/PLD_SRCH_TOUT或常规降落偏航对齐可选地通过vte_orientation另一 uORB 消息将机体偏航对齐目标朝向相关参数PLD_YAW_EN、VTE_EN、VTE_YAW_EN见 docs/en/advanced_features/vision_target_estimator_advanced.md。调试与观测建议实时观测在 SITL 或真机上运行landing_target_estimator后可用listener landing_target_posePX4 控制台/NSH 命令实时打印消息字段重点观察rel_pos_valid、is_static、abs_pos_valid与x_rel/y_rel是否随目标移动合理变化日志分析使用 Flight Review 或ulog工具打开.ulg文件中的landing_target_pose主题对比x_rel与机体本地位置可验证绝对位置合成是否正确x_abs ≈ x_rel local_pos.x参数排查顺序若位姿长期无效依次检查LTEST_SENS_ROT安装朝向、LTEST_SCALE_X/Y像素缩放、LTEST_SENS_POS_*安装偏移是否与实际安装一致并确认LTEST_MODE与目标运动状态匹配移动目标用 0静止目标用 1 才能启用 EKF2 辅助速度MAVLink 验证通过地面站查看LANDING_TARGET消息是否持续刷新可确认从landing_target_pose到外发链路的映射是否正常。综上LandingTargetPose虽然只是一条 uORB 消息但它贯穿 PX4 精密着陆的感知—估计—导航—控制全链路生产方 landing_target_estimator 负责将传感器原始观测滤波为导航级位姿消费方则覆盖 EKF2 辅助速度、精密起飞航点修正、MAVLink 外发与日志回放。理解其字段语义与发布/订阅关系是二次开发精密着陆或自定义目标检测模块的第一步。赞分享嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载相关推荐深入理解Golongpoll架构核心组件与工作原理详解深入理解Golongpoll架构核心组件与工作原理详解 Golongpoll是一个强大的Golang长轮询long polling库通过HTTP长轮询服嵌入式物联网机器人自动驾驶智能硬件PX4 Autopilot uORB 消息详解CameraStatus相机状态的字段定义、发布链路与工程应用PX4 Autopilot uORB 消息详解CameraStatus相机状态的字段定义、发布链路与工程应用 导读 camera_status 是 PX4嵌入式物联网机器人自动驾驶智能硬件PX4 Autopilot 的 DistanceSensor uORB 消息字段语义、常量体系与 rangefinder 数据链路全解析PX4 Autopilot 的 DistanceSensor uORB 消息字段语义、常量体系与 rangefinder 数据链路全解析 distance_s嵌入式物联网机器人自动驾驶智能硬件上一篇10分钟掌握xsv时空索引从CSV提速到地理数据处理下一篇iOS开发资源NVActivityIndicatorView学习路径与进阶指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考