十二、构建一个基本的组合导航系统

2023-05-16

一、概述

在之前的文章里,我们从一个基本的IMU模块开始讲起(二),利用Allan方差分析方法(三、四),得出了其误差参数,

又通过标定(五、六、七、八)、温补(九)提高了原始数据精度,通过导航解算(十)得出了状态预测值,通过分析惯性导航误差传播规律(十一)写出了状态方程,

最后使用滤波器(十二)把状态、观测融合在一起。

然而,这其实并不完整,首先初始对准还没有做,其次融合是为了得到更精确的位置、速度、姿态,但是导航误差和IMU自身的内参是耦合在一起的,

要估得更精确,强行忽视可不行,但是那么多内参都应该放在状态量里吗,真的是估的越多越好吗?这就牵扯到状态量的可观测性分析

本篇文章就着重解决初始对准和可观测性分析两个问题。由于理解初值对准要先理解可观测性分析,因此先讲后者。

 

二、可观测性分析方法

虽然组合导航的内容很多,但是如果要让我挑一个最核心的技术点,我认为就是可观测性分析,因为它和所有的估计问题绑定在一起,

是导航这个毛线团的毛线头,抓住这个毛线头,绝大多数融合问题就都可以迎刃而解。广义上讲,分析可观测性,就是分析各状态量之间的耦合关系

虽然我们之前没有提过这个概念,但是却在标定、温补等环节分析过各变量的耦合及解耦方法。狭义上讲,由于观测性这个名词是从现代控制理论里面来的,

随后被应用到kalman滤波(控制理论里的可观测性分析方法就是kalman本人提出的),所以一般导航问题里说可观测性分析,仅指滤波过程中的耦合分析

具体包括系统级标定、初始对准、组合导航。

1. 理解可观测性

之前介绍耦合问题的时候,以简单的方程为例子,这里不妨使用可观测性分析的方法从新审视一下这些例子。现在假设有状态量 

,它的各量之间满足如下关系

简单的方程可以这样直接观察得到结果,但当方程变得复杂,观察不出来的时候,就需要想别的办法。可观测性问题是现代控制理论里的重要问题

在 kalman 本人发明 kalman 滤波器之前就已经解决了这个问题。如果一个系统可以用如下方程表示

其中A是状态矩阵,C是观测矩阵,那么当下面的矩阵满秩的时候,整个系统就是完全可观测的,也即所有参数都是可解的

其中n是A矩阵的维数;这个矩阵也被称作可观测性矩阵。回到上面的例子,在第一个例子里,有

那么它的观测性矩阵可以写为

显然是满秩的,所以它完全可观测。在第二个例子里,有

它对应的观测性矩阵为

不满秩,所以不完全可观测。

2. 改变可观测性

上面的分析让我们知道什么样的系统是完全可观测的,什么样的是不完全可观测的。但这只是发现问题,我们还要解决问题,

即把所有系统都按照完全可观测标准去设计。在组合导航的问题里,是想可观就可观的吗?有时候是有时候不是,等这一节看完你会明白这句话的意思。

通过上面简单的方程例子,可以发现,对它做一些改造,是可以满足可观测性的。

在这里,虽然大家会发现无论a和b取任何值,这个模型都是不完全可观的,但是kalman是一个迭代估计过程,如果a和b在估计过程中是时变的,

即不是常值,那么它就可以完全可观测。得出这个结论的方法叫 分时段可观测性分析方法(PWCS)。用数学形式可以表达为,既然a和b是变化的,

那么A就是变化的,进而引起`$\wp$`的变化,可以得出k时刻的观测性矩阵为

PWCS指的是把所有时刻的观测性矩阵放在一起(如下式),如果它是满秩的,那么整个系统也同样是完全可观测的。

这个和我们以前讲的耦合其实是一回事,比如在标定的例子里,当方程组不可解的时候,就转动IMU,等同于构建新的方程组,

当方程组个数足够解出所有变量的时候,这个就叫 完全可观测

回到组合导航的问题,如果有这样可改变的'a'和'b',那么就容易把系统由不可观变成可观。通过前面几篇文章的分析,可以知道,

惯性导航系统的误差方程为

理解这段话的意思

 

三、初始对准

其实理解了上面的问题,那么初始对准问题就迎刃而解了。初始对准是根据gps提供的位置、速度作观测,使用kalman滤波估计出失准角,

从而得到精确姿态的过程。为了失准角是可观测的,必须通过旋转改变的值,也就是说车要转向才行。我们经常看到组合导航在进入

导航状态之前要绕八字,就是这个原因。另外,组合导航在绕八字之前会先走一段直线,这是因为状态方程里有

,即姿态矩阵,如果它的初始值不准,那么就会带来很大的模型误差,从而使滤波器发散,走直线的时候,gps的航向角或者航迹角可以提供

一个比较好的初始航向值,从而解决这个问题,这个过程可以成为粗对准;相对的,使用滤波器精确估计失准角的过程可以称为精对准

这只是分析了完全可观测的情况,对着滤波模型估就行了,很简单。但是上面还提到,静止情况下,它是不完全可观测的。真正需要深入

分析的是这种。我们同样通过方程的例子,来解释这个问题。比如下面这个方程组

显然这个方程不可解,即不完全可观测。但是我们可以得到

也就是说,如果真把上面这个模型扔给一个kalman滤波器去估计,x是会收敛到真值的,那y和z会收敛到哪呢?答案是不确定

在组合导航的模型里,这样的状况会带来什么后果呢?假设y是IMU的方位失准角,z是东向陀螺仪的零偏(因为在IMU静止的时候,

这两个量是耦合的),那么你的姿态误差有多大,是不可控的。解决办法当然有,还用这个方程组的例子。假如我把z从方程组里面删除掉,那么就会得到

显然这个y是不准的,y的误差

即z有多大值,y就有多大误差。但是如果z比较小,那么让y里面有一个小的确定性误差,也比让它不知道会收敛到哪里去要更好。在初始对准的模型里,

如果IMU真的只能静止不动,那么往往把陀螺仪的零位从状态模型里删除掉,接受姿态里有这样一个确定性的误差。当然前提是陀螺仪的精度要足够高,

如果只是一个低精度的mems,这种做法显然是不合理的,必须使用旋转的方法把零偏估出来补偿掉才行。如果你接到任务,让你在只有gps的位置、

速度作观测的前提下,使用低精度IMU在静止不动状态下完成初始对准,你可以直接置之不理; 另外,对于低精度mems,即使在初始对准时候估计出了零偏,

由于零偏不稳定性比较大,在组合导航过程中这个零偏会发生变化,所以需要在组合的时候也一直去估计它。但是估计又需要车辆有转向,否则它和姿

态失准角之间的耦合作用会导致姿态估计不准,进而引起大的导航误差。所以使用过组合导航的朋友们会发现,在车一直沿直线行驶或停车的时候,

导航误差会变大,就是这个原因,这个被称作退化现象

 

四、搭建基本的组合导航系统

完成了上面两个模块的分析,现在从一个IMU到一个基本的组合导航系统的流程就算是走通了,这个过程可以用下面的框图概括。

当然,这里只是完成一个最基本的系统,想要它变得更稳定,需要在滤波过程中对滤波状态做一些判断,并屏蔽掉不良观测。进一步,

还应该添加更多的约束,比如车辆的运动模型,让系统精度更高。还可以添加更多传感器,比如轮速计、磁力计,甚至雷达、摄像头等,

从而形成一套多传感器融合系统,后面我会们一起来讨论这些事情应该怎么做

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十二、构建一个基本的组合导航系统 的相关文章

  • GitHub Codespaces 的配置

    CPU xff1a 4x Xeon 64 2 60 GHz 轻度开发够用 xff0c 要是编译什么稍微复杂一点的项目 估计会CPU跑满 内存 xff1a 8G xff0c 勉强够用 自用的Mac 16G都感觉不太够 硬盘 xff1a 32G
  • 使用Zoundry在CSDN发布Blog

    安装一个Zoundry吧 xff0c 用这个来离线写Blog xff0c 再也不怕突然断线和丢失文章了 Zoundry是用Python实现的一个离线撰写Blog工具 支持Community Servedr blogger com Wordp
  • Python中Array的常用操作(二)数组基本操作

    1 数组操作 x代表数组中的元素 xff0c i代表位置 a append x 把元素x添加到数组的尾部 b insert i x 把元素x 插入到位置i c remove x 删除第一个元素x d pop i 删除第i个元素 xff0c
  • Python中Array的常用操作(三)数组高级操作

    1 抽取数组中不重复的数据 gt gt gt a 61 x 2 for x in range 1 5 2 gt gt gt uniq 61 list set a 8 2 4 6 gt gt gt uniq 61 sorted set a 2
  • 2011年,移动互联网加速蔓延 – 来自2011移动开发者大会

    2011移动开发者大会 xff0c 这是第二届移动开发者大会了 xff0c 这一年来移动互联网各个领域蔓延开来 xff0c 蔓延这个词是开复老师演讲的主题 从事塞班开发的请举手 xff0c 举手者寥寥 记得在去年移动开发者大会上 xff0c
  • main函数之前做了什么?

    main函数之前 真正的函数执行入口或开始 一种解释 实际上 xff0c 在可执行文件被加载之后 xff0c 控制权立即交给由编译器插入的Start函数 xff0c 它将对后面这些全局变量进行准备 xff1a osver 操作系统的构件编号
  • detecron2中的注册机制

    文章目录 一 为什么使用注册类二 注册类的实现 传送门 Detectron2 01 注册机制 Registry 实现 一 为什么使用注册类 以下转自知乎 https zhuanlan zhihu com p 93835858 对于detec
  • 单目视觉SLAM在无人机上的应用

    目录 写在前面 本文说明 论文链接和实验视频 源代码链接 一 实验环境 硬件 软件 算法 二 实验环境搭建过程 1 Intel NUC安装Ubuntu 16 04 2 安装ROS D435i驱动以及ORB SLAM2算法 3 ORB SLA
  • TypeError: Expected cv::UMat for argument ‘img‘

    研究Detectron2中的在线数据增强的源码 并显示数据增强后的图像时 xff0c 遇到 TypeError Expected cv UMat for argument 39 img 的问题 显然 xff0c 问题要求是输入一个uint8
  • Linux 桌面终于迎来了 Docker Desktop

    Docker 桌面是容器化应用程序的最简单方法 无需考虑在你选择的系统上设置环境即可开始使用 只需要安装 Docker 桌面 xff0c 就可以开始了 Docker 桌面应用程序附带容器工具 xff0c 如 Kubernetes Docke
  • Dockerfile制作镜像和常用Shell脚本语法记录

    一 常规命令和使用记录 1 定义变量 判断匹配 赋值等 定义变量 addr 61 a namespace 61 b 判断匹配自定义的 包括参数化构建设置的变量 环境变量 xff0c 并赋值 case 34 Env 34 in dev nam
  • [Holo_wo]-vscode常用配置项说明

    vscode 配置文件核心 settings json xff1a 整个vscode的配置 xff0c 是本地vscode的配置 xff0c 如果有ssh远程 xff0c 那么会在远程主机的 vscode server目录下有setting
  • 基于jQuery的ajax跨域请求,PHP作为服务器端代码

    ajax实现跨域请求有两种方式 xff1a 方法一 xff1a jsonp的方式 jsonp方式的关键点在客户请求以jsonp作为数据类型 xff0c 服务器端接收jsonp的回调函数 xff0c 并通过回调函数进行数据的传输 具体代码如下
  • 无人机位置信息计算无人机的瞬时速度的matlab仿真

    目录 1 算法描述 2 仿真效果预览 3 MATLAB核心程序 4 完整MATLAB 1 算法描述 无人机最早在20世纪20年代出现 xff0c 1914年第一次世界大战正进行得如火如荼 xff0c 英国的卡德尔和皮切尔两位将军 xff0c
  • 基于simulink的无人机姿态飞行控制仿真

    目录 1 算法描述 2 仿真效果预览 3 MATLAB核心程序 4 完整MATLAB 1 算法描述 无人机是无人驾驶飞机的简称 xff08 Unmanned Aerial Vehicle xff09 xff0c 是利用无线电遥控设备和自备的
  • 基于ADRC自抗扰控制器的simulink仿真,ESO和TD等模块使用S函数开发

    目录 1 算法仿真效果 2 MATLAB核心程序 3 算法涉及理论知识概要 4 完整MATLAB 1 算法仿真效果 matlab2022a仿真结果如下 xff1a 2 MATLAB核心程序 function sys x0 str ts 61
  • m基于模糊控制与遗传优化的自适应ADRC双闭环控制策略matlab仿真

    目录 1 算法仿真效果 2 MATLAB核心程序 3 算法涉及理论知识概要 4 完整MATLAB 1 算法仿真效果 matlab2013b仿真结果如下 xff1a 遗传优化的优化迭代过程仿真图 xff1a 这个是我们采用的优化算法的有过过程
  • VINS-mono在Ubuntu20.04上从零开始安装运行和环境配置(尝试)

    最近尝试在Ubuntu 20 04上安装运行港科大的VINS mono算法 详细记录一下安装过程以及遇到的问题 先记录一下结果 ROS opencv Eigen Ceres以及VINS mono都编译并安装成功了 但是用euroc数据集跑V
  • 数据结构-C++实现

    之前的2周一直在学数据结构 xff0c 头都大了 我是之前对数据结构一点认识都没有 xff0c 我是直接看书怼的 xff0c 我看的是 大话数据结构 xff0c 前面的讲解还不错 xff0c 到了树 图后 xff0c 就有点看不懂了 xff

随机推荐

  • 几款好看的css表格

    表格一 xff1a 代码 xff1a html代码段 xff1a 是用vs写的 表头 lt th gt 那是从数据库读取的数据段 lt td gt 那是我为测试效果加的代码 xff0c 大家可以自行更改 lt h1 gt 待处理订单 lt
  • 非线性优化 (曲线拟合) 问题:高斯牛顿、g2o 方法总结

    其实还有一个Ceres库可以进行优化 xff0c 但是之前的博客已经具体分析了 xff0c 所以这里就对其余两个进行了介绍 xff0c 相关的内容是SLAM14讲里面的知识 一 理论部分 我们先用一个简单的例子来说明如何求解最小二乘问题 x
  • VINS-Fusion : EUROC、TUM、KITTI测试成功 + 程序进程详细梳理

    完成以下任务的前提是系统安装了必备的库 xff0c 比如cere Eigen3 3等 提前下载好了数据集EUROC xff0c KITTI等 一 相关论文 T Qin J Pan S Cao and S Shen A General Opt
  • ROS 简单理解

    https download csdn net download qq 30022867 11120759 utm medium 61 distribute pc relevant download none task download b
  • ROS系列:七、熟练使用rviz

    7 熟练使用rviz xff08 1 xff09 rviz整体界面 rviz是ROS自带的图形化工具 xff0c 可以很方便的让用户通过图形界面开发调试ROS 操作界面也十分简洁 xff0c 如图29 xff0c 界面主要分为上侧菜单区 左
  • ROS系列:八、图像消息和OpenCV图像之间进行转换-cv_bridge

    cv bridge是在ROS图像消息和OpenCV图像之间进行转换的一个功能包 一 xff09 在ROS图像和OpenCV图像之间转换 xff08 C 43 43 xff09 xff11 xff0e Concepts xff08 概念 xf
  • ROS系列:九、rosbag使用

    文章目录 解析rosbag中的 bag文件 xff0c 得到 jpg图片数据和 pcd点云数据 https blog csdn net weixin 40000540 article details 83859694 1 rosbag写入文
  • 三、松灵课堂 | SCOUT的仿真使用

    仿真环境的介绍 Gazebo Gazebo是一款3D动态模拟器 xff0c 能够在复杂的室内和室外环境中准确有效地模拟机器人群 与游戏引擎提供高保真度的视觉模拟类似 xff0c Gazebo提供高保真度的物理模拟 xff0c 其提供一整套传
  • 1PPS:秒脉冲 相关概念理解

    时钟模块上的GPS接收机负责接收GPS天线传输的射频信号 xff0c 然后进行变频解调等信号处理 xff0c 向基站提供1pps信号 xff0c 进行同步 GPS使用原子钟 xff08 原子钟 xff0c 是一种计时装置 xff0c 精度可
  • opencv GStreamer-CRITICAL

    使用openvino中的opencv跑之前的代码 碰到个问题 span class token punctuation span myProg span class token operator span span class token
  • 激光雷达 LOAM 论文 解析

    注意 xff1a 本人实验室买的是Velodyne VLP 16激光雷和 LOAM 论文中作者用的不一样 xff0c 在介绍论文之前先介绍一下激光雷达的工作原路 xff0c 这样更容易理解激光雷达的工作过程 xff0c 其实物图如下图1所示
  • VINS 细节系列 - 坐标转换关系

    前言 在学习VINS Mono过程中 xff0c 对初始化代码中的坐标转换关系做出了一些推导 xff0c 特意写了博客记录一下 xff0c 主要记录大体的变量转换关系 相机和IMU的外参 若需要VINS标定旋转外参 xff0c 则进入以下代
  • VINS 细节系列 - 光束法平差法(BA)Ceres 求解

    一 理论部分 学习过VINS的小伙伴应该知道 xff0c 在SFM xff08 structure from motion xff09 的计算中 光束法平差法 BA xff08 Bundle Adjustment xff09 的重要性 xf
  • Ceres 详解(一) Problem类

    引言 Ceres 是由Google开发的开源C 43 43 通用非线性优化库 xff08 项目主页 xff09 xff0c 与g2o并列为目前视觉SLAM中应用最广泛的优化算法库 xff08 VINS Mono中的大部分优化工作均基于Cer
  • VINS - Fusion GPS/VIO 融合 一、数据读取

    目录 一 相关概念 二 程序解读 2 1 参数读取 解析 xff1a 2 2 获取图像时间信息 解析 xff1a 2 3 获取图像时间信息 解析 xff1a 2 4 定义VIO结果输出路径和读取图像信息 解析 xff1a 2 5 读取GPS
  • VINS - Fusion GPS/VIO 融合 二、数据融合

    https zhuanlan zhihu com p 75492883 一 简介 源代码 xff1a VINS Fusion 数据集 xff1a KITTI 数据 程序入口 xff1a globalOptNode cpp 二 程序解读 2
  • VINS - Fusion GPS/INS/视觉 融合 0、 Kitti数据测试

    放两张图片 至于为什么 xff1f 后面会解释 xff01 程序下载 xff1a https github com HKUST Aerial Robotics VINS Fusion 数据集制作 xff1a https zhuanlan z
  • GPS/INS/视觉 融合 、 自己采集数据测试

    cd VIO GPS MapVIG cmake build cmake make run MapVIG 别忘了更新一下 一 运行程序 打开第一个终端 roscore 打开第二个终端 进入工作区间内 xff0c 分别输入 xff1a cd G
  • 九、 惯性导航解算

    一 概述 惯性导航解算就是从上一时刻的导航信息推导本时刻的导航信息 xff0c 包括姿态 速度 位置 具体来讲 xff0c 就是构建当前时刻导航信息与上一时刻导航信息 运动输入 角速度 加速度 之间的关系 xff0c 确切地说 xff0c
  • 十二、构建一个基本的组合导航系统

    一 概述 在之前的文章里 xff0c 我们从一个基本的IMU模块开始讲起 xff08 二 xff09 xff0c 利用Allan方差分析方法 xff08 三 四 xff09 xff0c 得出了其误差参数 xff0c 又通过标定 xff08