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

自己造轮子-基于Ceres的GNSS-INS松耦合组合导航算法

之前硕士期间的研究课题涉及到GNSS-INS组合导航,入门看的武汉大学牛老师团队的KF-GINS,不得不说,大组的东西还是很棒的,很适合组合导航入门,KF-GINS主要是基于ESKF的GNSS/INS松耦合组合导航系统,博主就不在这里对ESKF和松耦合进行过多的阐述了。本篇主要针对基于Ceres的松耦合组合导航系统的设计与实现,那么直接开造~

Ceres

Ceres这个工具对于slamer应该不算陌生,主要用来设计基于优化问题,那么对于松耦合的GNSS/INS组合导航系统,其实也可以参考基于ESKF的思路来设计基于Ceres的融合方案;

使用工具

本篇博客对于gnss和imu的数据主要使用的是开源方针算法“gnss-ins-sim”

1.ubuntu18.04
2.ros-melodic
3.gnss-ins-sim

融合方案设计

松耦合,那么也就是将ins解算得到的PVQ与gnss提供的PVQ进行融合,然后根据建立的运动学模型和观测来反向估计对应传感器的噪声,本篇博客使用的观测有gnss提供的速度以及位置信息,那么涉及到的融合就只有速度和位置的融合;

位置的融合

1.残差函数
e r r o r = P g − P i error = P_g-P_i error=PgPi
下标i表示imu的递推解算得到的P,g表示由gnss提供的P观测;
2.残差的雅可比矩阵
J = [ 1 0 0 0 1 0 0 0 1 ] J=\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} J= 100010001

速度的融合

1.残差函数
e r r o r = V g − V i error = V_g-V_i error=VgVi
下标i表示imu的递推解算得到的P,g表示由gnss提供的P观测;
2.残差的雅可比矩阵
J = [ 1 0 0 0 1 0 0 0 1 ] J=\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} J= 100010001

加速度计的零偏估计

这块其实与上面的速度融合相似,只是需要对残差函数做更进一步的细化:
对于ins的速度更新公式:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d7fe0d5fe51a49388afef7b936c3da2f.png
v k = v k − 1 + ( R w b k a k + R w b k − 1 a k − 1 2 − g ) ( t k − t k − 1 ) v_k=v_{k-1}+(\frac{R_{wb_k}a_k+R_{wb_{k-1}}a_{k-1}}{2}-g)(t_k-t_{k-1}) vk=vk1+(2Rwbkak+Rwbk1ak1g)(tktk1)
上述公式基于中值法做的速度递推

残差公式

e r r o r = V g − V k error = V_g - V_k error=VgVk

雅可比矩阵

这里我没有手推过,就直接用的Ceres的自动求导了…

代码实现

我把代码提到我自己的github了,有兴趣的各位可以去看看,其实对于零偏的估计这块,我自己有点拿不准,但是最终估计出来的效果确实也接近我自己手动设置的加速度计的零偏,还望各位大佬能够不吝赐教,有错误的地方能够大方指点一下,我在这里谢过每一位读过我博客的各位了~
github仓库-选择master分支
如果代码能够帮到各位读者,还望能够star一下哟~

开源工具包使用参考

深蓝学院-多传感器融合定位-第六讲

http://www.lryc.cn/news/522898.html

相关文章:

  • 「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线
  • MySQL面试题2025 每日20道
  • HTML学习笔记(4)
  • 解决 MySQL 服务无法启动:failed to restart mysql.service unit not found
  • 在 Ubuntu 上安装 Nginx 的详细指南
  • 58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
  • 2.1 三个世界”与“图灵测试”:人工智能与人类智能的深度探索
  • 基于微信小程序的优购电商系统设计与实现(LW+源码+讲解)
  • JS宏进阶: 工厂函数与构造函数
  • 【Linux】线程全解:概念、操作、互斥与同步机制、线程池实现
  • 关于ubuntu命令行连接github失败解决办法
  • # [游戏开发] [Unity游戏开发]3D滚球游戏设计与实现教程
  • 强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!
  • Flutter中的事件冒泡处理
  • 昇腾环境ppstreuct部署问题记录
  • 基于 Python 的财经数据接口库:AKShare
  • 电力场景红外测温图像绝缘套管分割数据集labelme格式2436张1类别
  • 数字艺术类专业人才供需数据获取和分析研究
  • Java中json的一点理解
  • Vue项目搭建教程超详细
  • 2025年01月蓝桥杯Scratch1月stema选拔赛真题—美丽的图形
  • 【React】插槽渲染机制
  • 计算机网络 | 什么是公网、私网、NAT?
  • 如何解决Outlook无法连接到服务器的问题
  • vue2 web 多标签输入框 elinput是否当前焦点
  • 32单片机综合应用案例——物联网(IoT)环境监测站(四)(内附详细代码讲解!!!)
  • LabVIEW与WPS文件格式的兼容性
  • 小结: 路由协议的演进和分类
  • OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用
  • Android wifi列表中去自身的热点