当前位置: 首页 > news >正文

GNSS精度判断和协方差矩阵 - MKT

 

havv和vacc不是GST标准差,

 

image

 

image

 

 

image

 

image

 

 

image

 

https://blog.csdn.net/qq_38429958/article/details/135639678

image

 

image

 

https://uav.chinaflier.com/thread-25814-1-1.html

飞控需要GPS哪些信息(即需要设置哪些参数)?

以开源飞控px4为例:

实际应用中,我们可以不需要解码出这么多信息,常用的如下:
经纬度、海平面高度              lat   lon   alt
锁定类型                              fix_type
水平/垂直精度估计               eph  epv
水平/垂直精度因子               hdop  vdop
GPS噪声值                          noise_per_ms
NED系速度                         vel_n_m_s    vel_e_m_s  vel_d_m_s
卫星数                                satellites_used

 

飞控中如何判定GPS可用?

标准不定,但是基本原则是根据精度来判定。
这里插入讲一下,笔者有次在某个群里看到有人问飞控算法里的eph epv表示什么意思,有人回答说是水平和垂直的精度因子,然后一大群人附和这个说法,但其实这个说法是错误的。
首先,水平/垂直精度因子是dop数据包解析出来的hdop vdop。
这里的eph epv是pvt数据包里的hAcc vAcc,单位是mm,飞控中将其转换到m。简单理解就是水平和垂直方向的精度,这个数据是估计出来的。
在飞控算法中也更新这个数据。所以,参考开源代码的时候,要看的细致一些,不能想当然的认为,包括网络查找的答案不能尽信,要自己审核确认下。

 

这里通过判定gps的噪声值、fix_type来判定gps是否可用。
在组合导航算法中,通过eph、epv和fix_type来判定。

image

 

 

image

 

image

 

image

 

image

 

// 在UBX-NAV-PVT消息的回调函数中
void onUbxNavPvt(const ublox_msgs::msg::NavPVT& pvt) {auto nav_sat_fix_msg = sensor_msgs::msg::NavSatFix();// 1. 填充基本位置信息(注意单位转换)nav_sat_fix_msg.latitude = pvt.lat * 1e-7; // 度nav_sat_fix_msg.longitude = pvt.lon * 1e-7; // 度nav_sat_fix_msg.altitude = pvt.height * 1e-3; // 米// 2. 设置状态指示符,反映RTK状态if (pvt.flags.carr_soln == 2) { // CarrSoln == 2 表示RTK固定解nav_sat_fix_msg.status.status = sensor_msgs::msg::NavSatStatus::STATUS_GBAS_FIX;} else if (pvt.flags.carr_soln == 1) { // CarrSoln == 1 表示RTK浮动解nav_sat_fix_msg.status.status = sensor_msgs::msg::NavSatStatus::STATUS_SBAS_FIX;} else {// SPP或其他模式nav_sat_fix_msg.status.status = (pvt.fix_type == 3) ? sensor_msgs::msg::NavSatStatus::STATUS_FIX : sensor_msgs::msg::NavSatStatus::STATUS_NO_FIX;}// 3. 【核心】填充 position_covariance// 将hAcc和vAcc从毫米转换为米,并计算方差(标准差的平方)double h_std_dev = pvt.h_acc * 1e-3; // 水平精度估计 (米)double v_std_dev = pvt.v_acc * 1e-3; // 垂直精度估计 (米)// 重置协方差矩阵std::fill(nav_sat_fix_msg.position_covariance.begin(), nav_sat_fix_msg.position_covariance.end(), 0.0);// 填充对角矩阵 [East方差, North方差, Up方差]// 假设东/北方向误差相等,均为h_std_devnav_sat_fix_msg.position_covariance[0] = h_std_dev * h_std_dev; // E-E variancenav_sat_fix_msg.position_covariance[4] = h_std_dev * h_std_dev; // N-N variancenav_sat_fix_msg.position_covariance[8] = v_std_dev * v_std_dev; // U-U variance// 4. 设置协方差类型// 由于hAcc/vAcc是接收机提供的估计值,我们使用APPROXIMATEDnav_sat_fix_msg.position_covariance_type = sensor_msgs::msg::NavSatFix::COVARIANCE_TYPE_APPROXIMATED;// 5. 发布消息nav_sat_fix_pub_->publish(nav_sat_fix_msg);
}

  

为什么这是首选?​​

  • ​​自动适应所有模式​​:ZED-F9P的固件已经为你计算好了当前模式下的精度。RTK固定时,hAcc为0.01-0.03米;SPP时,为1-3米。你无需自己判断模式。

  • ​​实时准确​​:它反映了当前卫星几何结构、信号质量和解算算法的实时状态,比任何经验公式都准确。

image

 

image

 

image

 常用的有:
PDOP(position dilution of precision ) 三维位置精度因子:为纬度、经度和高程等误差平方和的开根号值
HDOP(horizontal dilution of precision )水平分量精度因子:为纬度和经度等误差平方和的开根号值
VDOP(vertical dilution of precision )垂直分量精度因子
GDOP(Geometric Dilution Precision)几何精度因子:是衡量一个定位系统精度的重要标准之一
它们之间的简单关系为:
HDOP2+VDOP2=PDOP2
DOP值的大小与GPS定位的误差成正比,DOP值越大,定位误差越大,定位的精度就低。PDOP则直接反映GPS卫星的分布情况,当PDOP较大时,表明空中的4颗GPS卫星几何分布不是太理想,他们构成的图形周长太短,定位精度就低,反之亦然。小于等于4的PDOP产生最佳位置。5到7之间的PDOP可接受,大于等于7的PDOP较差。

http://www.hskmm.com/?act=detail&tid=19281

相关文章:

  • Insightly模板页面存储型XSS漏洞分析与复现
  • 记录 | 关于陪伴型交互AI的一些探讨
  • 课后作业
  • luogu P1719 最大加权矩形
  • CF2065D Skibidus and Sigma
  • 微信二次开发个人号api
  • 课后作业2(动手动脑,课后实验性问题)
  • 从零开始构建图注意力网络:GAT算法原理与数值实现详解
  • 关于Leetcode 812题的简单思考
  • Laravel5.8 利用 snappyPDF 生成PDF文件
  • 25秋周总结4
  • Python 潮流周刊#121:工程师如何做出高效决策?
  • 饥荒联机版
  • iSCSI网络存储——基于VM17下麒麟V10SP1与SP2的共享配置
  • 微信二次开发文档
  • CSP-S1 2025
  • 金币
  • 课后作业2
  • 加密货币技术革命:揭秘数字复兴时代
  • 详细介绍:CTFshow系列——PHP特性Web113-115(123)
  • 第六篇
  • 6378:删除数组中的元素(链表)
  • DiffDock 环境安装和启用教程
  • [题解]P11533 [NOISG 2023 Finals] Topical
  • day20_修改 删除功能
  • [题解]P10231 [COCI 2023/2024 #4] Putovanje
  • # Windows CMD 基本指令参考手册
  • P13019 [GESP202506 八级] 树上旅行
  • 完整教程:负载均衡式的在线OJ项目编写(二)
  • Java语法基础课程动手动脑及课后实验问题整理文档