news 2026/9/5 22:34:37

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/9/2 6:00:12

边界之内:为何高维内插无法催生下一次科学革命?

在一个被大数据和人工智能的承诺所笼罩的时代,一种信念日益深入人心:只要有足够的数据和强大的算法,我们就能自动解锁自然界最深邃的奥秘。机器学习模型在蛋白质折叠、材料发现和气候预测等领域取得的惊人成就,似乎都在为这一愿景…

作者头像 李华
网站建设 2026/9/3 6:30:02

Spring Boot 三种方式登录系统:集成微信扫码、短信验证码、邮箱验证码

Spring Boot 三种方式登录系统:集成微信扫码、短信验证码、邮箱验证码(含高并发与安全增强) 主要因为前面的帖子不太完整。 一、引言 在现代 Web 应用中,提供多种灵活、安全的登录方式已成为标配。本文档旨在提供一套生产就绪的…

作者头像 李华
网站建设 2026/9/3 18:51:06

HTML5 与 H5:别再让你的专业度在称呼中流失

在中国互联网行业的日常交流中,很少有一个词像“H5”这样被高频使用,却又被如此普遍地误解。当你听到有人说“做一个 H5”时,对方指的往往是一个在微信朋友圈传播的精美幻灯片,或者是一个简单的营销小游戏。然而,当你打…

作者头像 李华
网站建设 2026/9/4 16:51:07

3-VueAjax

什么是Vue Vue是一款用于构建用户界面的渐进式的JavaScript框架。官方网站:https://cn.vuejs.org/ 前端负责将数据以美观的样式呈现出来,而数据最终又要在数据库服务器中存储并管理。前端想要拿到数据,就需要请求服务器。然后服务器将数据返…

作者头像 李华
网站建设 2026/9/3 8:57:58

基于springBoot的房屋租赁管理系统

房屋租赁管理系统的背景意义 市场需求驱动 随着城市化进程加快,流动人口增多,房屋租赁需求持续增长。传统租赁方式依赖中介或线下沟通,效率低且信息不透明。数字化管理系统能优化流程,提升供需匹配效率,降低交易成本…

作者头像 李华
网站建设 2026/9/3 6:30:03

Java基于SSM+JSP的智慧农业无人机租赁系统的设计与实现

项目说明 农业无人机是一种在现代农业中广泛应用的无人机设备,它可以通过遥控或自主飞行,进行一系列农业作业。这些无人机通常配备有高分辨率相机和绘图设备,可以用于进行土地勘测、作物评估、农药喷洒等农业活动。无人机在农业领域的应用&am…

作者头像 李华