• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
GNSS精度判断和协方差矩阵

 

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

 

https://blog.csdn.net/qq_34994476/article/details/112346815

 

image

 

w_gps_xy:GPS水平定位权重,w_gps_z:GPS垂直定位权重(看注释)

因为GPS有时延,所以计算的并不是本时刻的corr。

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_dev
    nav_sat_fix_msg.position_covariance[0] = h_std_dev * h_std_dev; // E-E variance
    nav_sat_fix_msg.position_covariance[4] = h_std_dev * h_std_dev; // N-N variance
    nav_sat_fix_msg.position_covariance[8] = v_std_dev * v_std_dev; // U-U variance

    // 4. 设置协方差类型
    // 由于hAcc/vAcc是接收机提供的估计值,我们使用APPROXIMATED
    nav_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较差。

posted on 2025-09-27 20:07  MKT-porter  阅读(63)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3