PSINS中的各类更新代码解析

2023-12-26 14:04

本文主要是介绍PSINS中的各类更新代码解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、姿态更新

更新原理

微分方程

因为离散化比较复杂,所以采用矩阵链转换

更新也就是找到前后时刻的关系。下面是推导逻辑,

 PSINS中的涉及到的代码

需要注意的是叫增量采用的增量时刻不同,n系下是用【T/2,T】的姿态表示【T,2T】的姿态变化;所以rv2q()中使用的是T/2时刻的角速率*T/2 代表【T/2,T】的角增量-eth.wnin*nts。

b下的角增量直接用的是ins更新的时候【0  T】的角增量imu.phim。

2、速度更新

比力方程

既然是时间相关的更新,对速度微分积分,t-1 ----t的积分

所以速度更新的问题就变成了求解比力产生的速度增量,以及有害加速度产生的速度增量。

有害加速度,一般认为因为其引起的导航坐标系旋转和重力矢量变化都是很小的,所以在计算时间内,选择中间时刻的值代表整个时间段的值,因次可以直接用有害加速度gcc*时间差dt,得到有害加速度产生的速度增量。

那么比力的速度增量,其实按照严老师的讲义,此处省略。

小角模型

实际编码中,是先将dt (上式的T)时间段的速度增量已经得到了,对应的代码中的imu.dvbm,注意是b系下的比力的速度增量,通过下式,速度增量/时间 == 速度变化率,也就是平均加速度,得到dt时间段内的fb,

然后利用  

fn = qnb*fb; 这一行代码是b下的加速度转到n下,但是这里的qnb其实上  qn(t-1)b(t-1)

那么原则上fn(t)应该是下式中的表达式,代码实际上是没有第三个Cb(t-1)(t)的矩阵的,fb已经用的是均值了上面已经求解了,所以不存在所谓的b下的旋转,用了fb平均。

an = rv2q(-eth.wnin*nts2)*fn+eth.gcc; 转换后的n下的fn+有害加速度gcc 得到最终的加速度an 

an =  rv2q(-eth.wnin*nts2)*qnb*fb + eth.gcc  

然后n下的速度增量求出

vn1 = vn + an*nts;

对比公式和代码,发现公式是用速度增量直接表达,而代码中用的是加速度和时间的关系去表达,所以这里框住的速度增量其实就是imu.dvbm,

(rv2q(-eth.wnin*nts2)*qnb*fb *dt     与上图是等价的,fb *dt  就是上图框住的增量。

3、位置更新

微分方程

时间积分

系数矩阵MPv用1/2时刻代替(在地球参数更新的时候可得到),速度是求两个时刻的速度求均值,然后位置增量再乘以T,合起来就是上式中的T/2

对应的代码

这篇关于PSINS中的各类更新代码解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539700

相关文章

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -