news 2026/4/18 9:46:29

PX4导航遇到GPS数据丢失的处理和相关控制参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PX4导航遇到GPS数据丢失的处理和相关控制参数

PX4导航时GPS数据丢失的处理

1. GPS数据丢失的检测与驱动层处理

  • PX4的检测:GPS驱动通过poll()系统调用轮询接收数据,当超过1秒无有效数据时标记为不健康(_healthy=false
  • 重连:驱动会关闭并重启串口,在参数中设置了自动协议的话,飞控会自动循环切换协议(UBX/MTK/NMEA)尝试重连
  • 数据传输:GPS1端口使用轮询机制(pollOrRead()函数),不是串口中断或DMA,在上层中断发送GPS数据时,飞控可以正常识别到gps数据的丢失

2. EKF2状态估计器降级

GPS丢失时,EKF2通过以下步骤降级位置估计:

// gps_control.cpp: 检测GPS超时if(_imu_sample_delayed.time_us-_gps_sample_delayed.time_us>(uint64_t)1e6){stopGpsFusion();// 停止GPS融合_warning_events.flags.gps_data_stopped=true;}// ekf_helper.cpp: 停止GPS融合voidEkf::stopGpsFusion(){if(_control_status.flags.gps){stopGpsPosFusion();stopGpsVelFusion();}// 停止航向融合(如果启用)if(_control_status.flags.gps_yaw){stopGpsYawFusion();}}// 切换到气压计高度融合voidEkf::stopGpsPosFusion(){_control_status.flags.gps=false;if(_control_status.flags.gps_hgt){startBaroHgtFusion();// 启动气压计高度融合}}

该文件所在位置:

modules\ekf2\EKF\gps_control.cpp

降级结果

  • 停止GPS位置、速度和航向融合
  • 切换至气压计高度融合
  • 依赖IMU进行惯性导航,但位置误差随时间漂移
  • 尝试使用视觉/光流等辅助定位源(如果可用)

3. 导航模式的GPS依赖与切换逻辑

3.1 任务模式 (Mission)

  • GPS依赖:任务有效性验证严格依赖home位置有效性

  • 处理逻辑

    // mission.cpp: 任务有效性检查if((!_home_inited&&_navigator->home_global_position_valid())||force){MissionFeasibilityChecker_missionFeasibilityChecker(_navigator);_navigator->get_mission_result()->valid=_missionFeasibilityChecker.checkMissionFeasible(_mission,...);}// mission_feasibility_checker.cpp: 检查home有效性constboolhome_valid=_navigator->home_global_position_valid();constboolhome_alt_valid=_navigator->home_alt_valid();if(!home_alt_valid){failed=true;// 任务标记为无效}

    该文件所在位置:

    modules\navigator\mission.cpp
  • 结果:GPS丢失→home位置无效→任务标记为无效→自动切换至悬停模式

相关参数:

文件路径\px4_autopilot_ws\src\modules\navigator\mission_params.c

参数控制:

参数名称行号类型默认值描述
MIS_TAKEOFF_ALT58FLOAT2.5f起飞最小高度
MIS_TAKEOFF_REQ68INT320是否要求起飞后才能执行任务
MIS_LTRMIN_ALT83FLOAT-1.0f任务着陆前悬停最小高度
MIS_DIST_1WP99FLOAT900从起飞点到第一个航点的最大距离
MIS_DIST_WPS115FLOAT900连续航点间的最大距离
MIS_MNT_YAW_CTL129INT320任务中的挂载偏航控制
MIS_YAW_TMT146FLOAT-1.0f任务中的偏航控制超时
MIS_YAW_ERR158FLOAT12.0f任务中的偏航误差阈值

3.2 返航模式 (RTL)

  • GPS依赖:返航目标点设置依赖home位置有效性

  • 处理逻辑

    // rtl.cpp: 查找返航目标点voidRTL::find_RTL_destination(){if(!_navigator->home_global_position_valid()){return;// 无法设置返航目标点}_destination.set(home_landing_position);}

    该文件所在位置:

    modules\navigator\mission.cpp
  • 结果:GPS丢失→无法确定home位置→无法设置返航目标→自动切换至悬停模式

文件路径\px4_autopilot_ws\src\modules\navigator\rtl_params.c

参数控制:

参数名称行号类型默认值描述
RTL_RETURN_ALT59FLOAT60返航爬升高度
RTL_DESCEND_ALT75FLOAT30返航下降悬停高度
RTL_LAND_DELAY90FLOAT0.0f下降后悬停到着陆的延迟时间
RTL_MIN_DIST106FLOAT10.0f返航最小距离阈值
RTL_TYPE119INT320返航目标选择类型
RTL_CONE_ANG138INT3245返航爬升锥体半角
RTL_PLD_MD150INT320返航中的挂载模式
RTL_LOITER_RAD164FLOAT80.0f返航悬停半径
RTL_HDG_MD176INT320返航航向模式
RTL_TIME_FACTOR190FLOAT1.1f返航时间因子
RTL_TIME_MARGIN205INT32100返航时间余量

3.3 悬停模式 (Loiter)

  • GPS依赖:不直接依赖GPS,基于EKF2提供的位置估计维持位置

  • 处理逻辑

    // loiter.cpp: 设置悬停位置voidLoiter::set_loiter_position(){// 基于当前位置设置悬停点if(_navigator->get_vstatus()->vehicle_type==vehicle_status_s::VEHICLE_TYPE_ROTARY_WING){setLoiterItemFromCurrentPositionWithBreaking(&_mission_item);}else{setLoiterItemFromCurrentPosition(&_mission_item);}}

    该文件所在位置:

    modules\navigator\loiter.cpp
  • 结果GPS丢失后继续尝试维持当前位置,但精度随EKF2位置估计漂移而降低

主要文件路径\px4_autopilot_ws\src\modules\navigator\navigator_params.c

参数控制:

参数名称文件路径行号类型默认值描述
NAV_LOITER_RADnavigator_params.c55FLOAT80.0f悬停半径
RC_MAP_LOITER_SWrc_update/params.c1386INT320遥控器悬停开关映射
RC_LOITER_THrc_update/params.c1906FLOAT0.75f遥控器悬停阈值
RTL_LOITER_RADrtl_params.c164FLOAT80.0f返航悬停半径
VTO_LOITER_ALTvtol_takeoff_params.c53FLOAT80VTOL起飞悬停高度

其他导航参数

文件路径\px4_autopilot_ws\src\modules\navigator\navigator_params.c

参数名称行号类型默认值描述
NAV_ACC_RAD70FLOAT10.0f航点到达半径
NAV_FW_ALT_RAD84FLOAT10.0f固定翼高度到达半径
NAV_FW_ALTL_RAD98FLOAT5.0f固定翼着陆高度到达半径
NAV_MC_ALT_RAD112FLOAT0.8f多旋翼高度到达半径
NAV_TRAFF_AVOID128INT321是否启用交通规避
NAV_TRAFF_A_RADM141FLOAT500交通规避最大半径
NAV_TRAFF_A_RADU155FLOAT10交通规避最小半径
NAV_AH_LAT167INT32-265847810防碰撞基准点纬度
NAV_AH_LON179INT321518423250防碰撞基准点经度
NAV_AH_ALT192FLOAT600.0f防碰撞基准点高度
NAV_FORCE_VT200INT321是否强制垂直起飞

系统级导航参数

文件路径\px4_autopilot_ws\src\modules\commander\commander_params.c

参数名称行号类型默认值描述
COM_ARM_MIS_REQ712INT320解锁前是否要求有效任务
NAV_DLL_ACT861INT320数据链路丢失时的动作
NAV_RCL_ACT880INT322RC信号丢失时的动作

跟随目标参数

文件路径\px4_autopilot_ws\src\modules\navigator\follow_target_params.c

参数名称行号类型默认值描述
NAV_MIN_FT_HT55FLOAT8.0f跟随目标最小高度
NAV_FT_DST66FLOAT8.0f跟随目标距离
NAV_FT_FS77INT321跟随目标前向速度缩放
NAV_FT_RS90FLOAT0.5f跟随目标旋转速度缩放

4. 系统状态变化

  • 标志位更新

    • vehicle_status_s::global_position_valid→ false
    • vehicle_status_s::gps_position_valid→ false
    • home_position_s::valid_alt→ false
    • home_position_s::valid_hpos→ false
    • EKF2::warning_events::gps_data_stopped→ true
  • home位置有效性

    // navigator.h: home位置有效性判断boolhome_global_position_valid(){return(_home_pos.valid_alt&&_home_pos.valid_hpos);}

    该文件所在位置:

    modules\navigator\navigator.h

5. 模式切换

  1. GPS丢失→ GPS驱动标记_healthy=false
  2. EKF2检测到超时→ 停止GPS融合,切换至气压计高度融合
  3. home位置失效home_global_position_valid()返回false
  4. 任务验证失败→ 任务标记为无效
  5. 导航模式切换→ 从任务/返航模式自动切换至悬停模式
  6. 系统状态更新→ 相关标志位更新,通知其他模块

6. 依赖关系

GPS数据 → EKF2融合 → home位置有效性 → 导航模式决策 ↑ ↑ ↑ | | | 超时检测 位置/高度有效 任务/返航可行性

总结

  • 位置估计:GPS融合降级:惯性导航+气压计高度
  • 导航模式:从任务/返航切换到悬停,避免无GPS时盲目执行航线
  • 系统状态:通过标志位清晰反映GPS状态,确保各模块协同处理
  • 用户反馈:通过mavlink日志和事件系统提示GPS丢失状态

无人机在GPS丢失时,自动维持相对安全的状态,等待GPS信号恢复或由用户接管控制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:39:10

学霸同款8个一键生成论文工具,研究生高效写作必备!

学霸同款8个一键生成论文工具,研究生高效写作必备! 论文写作的“隐形助手”:AI 工具如何改变研究生的学习节奏 在当今学术研究日益复杂的背景下,研究生们面临着前所未有的挑战。无论是论文选题、文献综述,还是数据整理…

作者头像 李华
网站建设 2026/4/18 8:27:22

James 个人介绍(用于企业数字化服务咨询)

专业背景与核心经验本人拥有20 年全球化实施、数字化转型与客户服务复合经验,核心聚焦跨国企业及中资出海企业,提供数字化转型全生命周期解决方案;擅长将企业业务战略与技术架构深度融合,推动全球运营体系的智能化升级、合规化管理…

作者头像 李华
网站建设 2026/4/17 19:28:30

Cadence推出人工智能语音助手Tensilica HiFi iQ DSP IP

来源:维度网 Cadence今日推出Tensilica HiFi iQ DSP IP,作为其HiFi DSP系列第六代产品,专为下一代语音人工智能及沉浸式音频应用打造全新架构。随着家庭娱乐、车载信息娱乐及智能手机市场对语音人工智能和音频处理需求的激增,HiF…

作者头像 李华
网站建设 2026/4/17 14:25:58

C#每日面试题-简述异常处理

C#每日面试题-简述异常处理 在C#开发与面试中,异常处理是衡量代码健壮性与开发者基础能力的核心考点。面试官不仅会问“如何捕获异常”,更关注“异常的本质是什么”“如何合理设计异常处理逻辑”“底层执行机制”等深度问题。本文从入门到进阶&#xff0…

作者头像 李华
网站建设 2026/4/17 13:40:12

基于springBoot的高校大学生党建系统设计与实现

高校大学生党建系统的背景 高校大学生党建系统是信息化时代背景下,高校党建工作与数字化技术深度融合的产物。随着高校学生党员数量逐年增加,传统党建管理模式面临效率低、数据分散、流程繁琐等问题。该系统通过整合党员发展、教育、管理、服务等功能模…

作者头像 李华
网站建设 2026/4/18 1:36:42

Java基于SSM+JSP的高校师资管理系统的设计与实现

项目说明 随着信息技术的飞速发展,高校信息化水平成为衡量一所高校综合实力的重要标准之一。传统的师资管理方式通常依赖于人工操作,工作量大且容易出错。为了提高师资信息的管理水平我们开发了本系统,本系统主要实现了教师信息管理&#xff…

作者头像 李华