INS/GNSS组合导航(十)松耦合捷联车载定位解算示例

2023-12-09 14:59

本文主要是介绍INS/GNSS组合导航(十)松耦合捷联车载定位解算示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.摘要

     基于GNSS信号辅助IMU实现车载导航,可有效规避IMU积分误差累积效应及GNSS信号丢失导致位姿解算失准的问题,为此本文引入结合GNSS与IMU的松组合融合定位计算方法实现低成本车载IMU传感器的准确定位.

2.算法实现

2.1流程图

      基于融合的INS/GNSS组合导航方法 实现位姿解算(求解PVA)的流程图如下。

2.2算法实现

2.2.1主要坐标系方向

对于车载导航算法解算过程,涉及的坐标系参见下图所示,均符合右手坐标系法则

       

                       

2.2.2 IMU估算

定义时刻的导航状态量与IMU的观测量分别如下:

                                              x_{t}=\begin{bmatrix}p_{t} \\v_{t}\\q_{t}\end{bmatrix}\in R^{10}                                                              (1)

                                                u_{t}=\begin{bmatrix}a_{t} \\\omega_{t}\end{bmatrix}\in R^{6}                                                             (2)

其中p_{t}\in R^{3}[m]对应位置向量,v_{t}\in R^{3}[m/s]对应速度向量,q_{t}\in R^{4}[-]对应姿态向量(四元数表示法),

a_{t}\in R^{3}[m/s^2]对应三个方向的加速度向量,\omega_{t}\in R^{3}[rad/s]对应三个方向的角速度向量.

对于纯惯性导航系统INS的求解,将时间物理量离散化后,可采用下述非线性差分表达式进行递推得到.

                                                 x_{t}=f(x_{t-1},u_{t})                                                            (3)

其中,

                       p_{t}=p_{t-1} + T_{s}v_{t-1} +\frac{T_{s}^{2}}{2}{R_{b}^n(q_{t-1})a_t -g)}                                           (4)

                         v_{t}=v_{t-1} + T_{s}{R_{b}^n(q_{t-1})a_t -g)}                                                          (5)

                         \frac{1}{||\omega_{t}||}sin(0.5T_{s}||\omega_{t}||)\Omega_{t})q_{t-1}                                                              (6)

                      \Omega_{t}=\begin{bmatrix}0 &[\omega_t]_z&-[\omega_t]_y&[\omega_t]_x\\-[\omega_t]_z&0&[\omega_t]_x&[\omega_t]_y\\ [\omega_t]_y&-[\omega_t]_x&0&[\omega_t]_z\\-[\omega_t]_x &-[\omega_t]_y&-[\omega_t]_z&0\end{bmatrix}                                               (7)

其中T_s对应的是IMU数据采样周期(s),R_{b}^n(q)对应的是方向余弦矩阵DCM,即将body系(b-frame)中的向量旋转到navi系(n-frame).对于车载而言,通常因安装误差或人为调整,使得IMU传感器与车体之间存在一定安装倾角,则上述表达式对应的b-frame需对应调整为车体坐标系,而非通常意义的IMU坐标系(可将IMU的坐标系调整为车体的b系).

2.2.3 GNSS与IMU融合

上述章节给出了仅采用IMU实现解算的流程,通常单独的IMU解算只能维持较短时间,长时间则因积分累计误差,使得累计误差过大解算结果大幅偏移实际行驶轨迹.为此,采用结合GNSS的松组合解算方法,具体而言,借助卡尔曼滤波器(Kalman Filter)实现融合定位的位姿解算.

假定IMU的测量信号可采用下述表达式定义:

                                                 \widetilde{u_{t}}=u_{t} - {\delta}u_{t} +W_{t}^{(1)}                                                (8)

其中,W_{t}^{(1)}  表示协方差矩阵 Q^{(1)} 添加高斯白噪声后得到的测量噪声, {\delta}u_{t}表示缓慢变化的测量偏差,可基于随机行走模拟其大小变化,即:

                                                         {\delta}u_{t}={\delta}u_{t-1} +W_{t}^{(2)}                                          (9)

其中,W_{t}^{(2)}  表示协方差矩阵 Q^{(2)}添加高斯白噪声后得到的随机行走噪声.

进一步结合上述表达式,给出真实的导航状态量x_t与INS估测得到状态量\hat{x}_t之间的误差

                                                 {\delta}x_{t}=\begin{bmatrix}{\delta}p_{t} \\{\delta}v_{t}\\\epsilon_{t}\end{bmatrix}\in R^{9}                                                  (10)

上式中,相应的得到位置误差为:\delta p_k=p_k-\hat{p}_k, 速度误差为:\delta v_k=v_k-\hat{v}_k ,姿态扰动量\epsilon_t可视作姿态量 \hat{q}_t 变化到 {q}_t 所引起的欧拉角变化,实际是一个3x3的旋转矩阵.

结合相关文献,可得到 \hat{q}_t 与 {q}_t 的关系式如下:

                                    R_{b}^{n}(q_{t})=(I_{3} -[\epsilon_{t}]_{skew})R_{b}^{n}(\widehat q)                                            (11)

其中下标skew表示相应矩阵的反对称矩阵(skew symmetric,类似A=-A^T)

根据上述式(10)定义的误差向量,将测量信号\tilde{u}_t 传递给INS求解表达式(3),对于较小的误差信号,可采用线性状态空间模型表述如下:

                                      z_{t}=F(x_{t},u_{t})z_{t-1} + G_{t}{(x_t)W_{t}}                                       (12)

其中状态转移矩阵F(x_t,u_t)与噪声增益矩阵G_t(x_t)分别定义如下:

                                      z_{t}=\begin{bmatrix}{\delta}x_{k} \\{\delta}u_{k}\end{bmatrix}\in R^{15}                                                            (13)

                                    W_{t}=\begin{bmatrix}W_{t}^{(1)} \\W_{t}^{(2)}\end{bmatrix}\in R^{12}                                                         (14)

  F(x_{t},u_{t})=\begin{bmatrix}I_{3} &T_{s}I_{3}&0_{3,3}&0_{3,3}&0_{3,3}\\0_{3,3}&I_{3}&T_{s}[R_{b}^n(q_{t})a_{t}]_{skew}&T_{s}R_{b}^n(q_{t})&0_{3,3}\\ 0_{3,3}&0_{3,3}&I_{3}&0_{3,3}&-T_{s}R_{b}^n(q_{t})\\0_{3,3}&0_{3,3}&0_{3,3}&I_3&0_{3,3}\\0_{3,3}&0_{3,3}&0_{3,3}&0_{3,3}&I_{3}\end{bmatrix}            (15)

                            G_k(x_{t})=\begin{bmatrix}0_{3,3} &0_{3,3}&0_{3,3}&0_{3,3}\\T_{s}R_{b}^n(q_{t})&0_{3,3}&0_{3,3}&0_{3,3}\\0_{3,3}&T_{s}R_{b}^n(q_{t})&0_{3,3}&0_{3,3}\\0_{3,3}&0_{3,3}&I_{3}&0_{3,3}\\0_{3,3}&0_{3,3}&0_{3,3}&I_{3} \end{bmatrix}                        (16)

进一步,对于GNSS信号接收器得到的位置测量值 \widetilde p_{t}^{gnss}可表述如下:

                                         \widetilde p_{t}^{gnss}=p_{t} +e_{t}^{(1)}                                                         (17)

其中 e_{t}^{(1)}是协方差矩阵添加高斯白噪声后得到GNSS测量噪声.

由此得到融合解算(KF解算所需)的误差输入量即为GNSS测量值与纯IMU估算量之差,即:

                                  y_{t}^{(1)}=\widetilde p_{t}^{gnss}-\widehat p_{t}=H^{(1)}z_{t} +e_{t}^{(1)}                                    (18)

                                                         H^{(1)}=\begin{bmatrix}I_3 &0_{3,12}\end{bmatrix}                                     (19)

上述式(11)与式(19)所定义的状态空间模型即通常意义上的松组合条件下GNSS辅助的INS融合解算算法.

2.2.4 车体动力学模型

尽管借助GNSS可有效辅助IMU传感器对位置进行估计,然而在GPS信号丢失的情况下,位置误差迅速增加,使得导航解算显著偏离实际位置,估算失效.为此,可引入车体运动动力学模型.通常的做法是引入运动学约束.通常假定车辆无打滑现象,车体运动方向垂直方向都无速度分量,即v_yv_z均为0,仅考虑车体前进方向速度v_x

                                                        O_{2,1}=AR_{n}^{p}v                                             (20)

                                                      A=\begin{bmatrix}0 &1&0\\0&0&1\\ \end{bmatrix}                                            (21)

 R_{n}^{p}对应的是方向余弦矩阵DCM,即将navi系(n-frame)旋转变换到车辆坐标系(p-frame)。实际行驶过程,上述两个方向的速度并非完全为0,为此适当松弛上述约束条件,即添加一个噪声项。

                                  ​​​​​​​        y_{t}^{(2)}=0_{2,1}-AR_{n}^{p}\widehat v_{t}=H^{(2)}z_{k} +e_{k}^{(2)}                     (22)

           ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         H^{(2)}=\begin{bmatrix}0_{2,3}&AR_{n}^{p}&0_{2,9}\end{bmatrix}                                    (23)

         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         y_{t}=\begin{bmatrix}y_{t}^{(1)} \\y_{t}^{(2)}\end{bmatrix}=Hz_{t}+e_{t}                                 (24)

其中,

                                             H=\begin{bmatrix}I_3 &0_{3,3}&0_{3,9}\\0_{3,3}&AR_{n}^{p}&0_{3,9}\end{bmatrix}                                     (25)

对于y_t进一步可写成如下形式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​y_{t}=\begin{bmatrix}\widetilde p_{t}^{gnss}\\0_{2,1}\end{bmatrix}-\begin{bmatrix}I_3 &0_{3,3}\\0_{2,3}&AR_{n}^{p}\end{bmatrix}\begin{bmatrix}\widehat p_{t} \\\widehat v_{t}\end{bmatrix}                         (26)

3.解算效果

 

 

4.其它说明

本次松耦合解算只是一个简单的示例,对很多误差模型的处理进行了简化,实际车载定位解算需考虑更为全面的数学模型。

5.参考文献

1.Accuracy Improvement of Low Cost INS/GPS for Land Applications

2.GNSS-aided INS for land vehicle positioning and navigation

3.Tilt Sensing Using a Three-Axis Accelerometer

4.Design and Implementation Issues of a Portable Navigation System

5.Principles of GNSS, Inertial, and Multisensor Integrated Navigation Systems

这篇关于INS/GNSS组合导航(十)松耦合捷联车载定位解算示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult