APM-3.5.2-EKF2笔记(未完待续)

2023-05-16

20180704:
一、EKF2.InitialiseFilter()全过程
1. 记录开始时间,预期步长时间(_frameTimeUsec = 2500),每次融合读取IMU次数(_framesPerPrediction = 4),确定是否记日志(通过参数,默认不记录)
2. 根据加速度计数量确定启用EKF滤波器个数(num_cores),并创建滤波器
3. 初始化所有滤波器基本环境
   a.传入前端指针
   b.设置IMU索引
   c.设置滤波器索引
   d.传入ahrs指针
   e.初始化相应传感器的缓冲区(分配内存)
4. 所有滤波器基本环境初始化成功后,设置主滤波器索引为0
5. 初始化所有滤波器实例(输入输出变量)
   a.固定翼机型等待GPS 3D定位后开始初始化滤波器
   b.初始化能够重用的一大堆参数
   c.初始化IMU(主循环间隔、读取IMU数据、填充IMU缓冲区)
   d.读取加速度计、磁罗盘等数据
   e.利用加速度计的读值,初始化横滚角和俯仰角
   f.初始化扩展卡尔曼滤波器输出的24个状态(stateStruct)
   g.读取GPS数据,重置速度、位置信息
   h.读取气压计数据,重置高度信息
   i.根据纬度计算地球的自旋矢量
   j.初始化协方差矩阵
   k.重置输出状态
   l.置位滤波器初始化完成标志
6. 清零三个结构体(yaw_reset_data、pos_reset_data、pos_down_reset_data),尚不清楚这三个结构体的用途
7. 检查是否需要记录特定传感器的日志信息
二、EKF2.UpdateFilter()全过程
1. 记录滤波器开始时间(imuSampleTime_us)
2. 运行所有的滤波器(core[i].UpdateFilter(statePredictEnabled[i]),有个负载均衡的算法,目前还不清楚运行机制)
   a.设置startPredictEnabled的值,1:读取IMU数据4次后,允许卡尔曼估计(runUpdates = 1),0:读取IMU数据8次后,允许卡尔曼估计(runUpdates = 1)
   b.获取滤波器开始时间(imuSampleTime_ms)
   c.检查加解锁状态并执行所需的检查和滤波器模式转换
   d.读取IMU数据(3轴角度增量和3轴速度增量)
   e.如果缓冲区中有新的IMU数据,则运行EKF方程(runUpdates = 1)

附录
1. EKF2协方差矩阵(P)初值
    // attitude error
    P[0][0]   = 0.1f;
    P[1][1]   = 0.1f;
    P[2][2]   = 0.1f;
    // velocities
    P[3][3]   = 0.5*0.5;
    P[4][4]   = 0.5*0.5;
    P[5][5]   = 0.7*0.7;
    // positions
    P[6][6]   = 1.0*1.0;
    P[7][7]   = 1.0*1.0;
    P[8][8]   = 3.0*3.0;
    // gyro delta angle biases
    P[9][9] = radians(2.5 * 0.0025)*radians(2.5 * 0.0025);
    P[10][10] = radians(2.5 * 0.0025)*radians(2.5 * 0.0025);
    P[11][11] = radians(2.5 * 0.0025)*radians(2.5 * 0.0025);
    // gyro scale factor biases
    P[12][12] = 0.001*0.001;
    P[13][13] = 0.001*0.001;
    P[14][14] = 0.001*0.001;
    // Z delta velocity bias
    P[15][15] = (0.5 * 0.0025) * (0.5 * 0.0025);
    // earth magnetic field
    P[16][16] = 0.0f;
    P[17][17] = 0.0f;
    P[18][18] = 0.0f;
    // body magnetic field
    P[19][19] = 0.0f;
    P[20][20] = 0.0f;
    P[21][21] = 0.0f;
    // wind velocities
    P[22][22] = 0.0f;
    P[23][23] = 0.0f;

    // optical flow ground height covariance
    Popt = 0.25f;

注:radians(),将角度转换为弧度。

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

APM-3.5.2-EKF2笔记(未完待续) 的相关文章

随机推荐

  • CLion 控制台输出中文乱码的解决方法

    照着这篇中的做即可 xff0c 亲测有效 xff1a CLion 控制台输出中文乱码 简书
  • Apollo 自动驾驶工程 x86迁移到ARM ORIN

    概述 最近工作主要关于自动驾驶工程跨平台迁移 xff0c 从原来的X86架构工控机形式迁移到英伟达Orin Soc xff0c 由于Orin是ARM以及这个嵌入式平台的内核是定制的 xff0c 所以遇到了很多问题 xff0c 这里分享出来
  • 在CentOS上安装 Docker

    官方网站安装教程 https docs docker com engine install centos sudo docker 是以管理员模式运行 卸载旧版本 sudo yum remove docker docker client do
  • 多线程的优点和缺点?什么场景适合使用多线程?

    由于多线程应用程序将程序划分成多个独立的任务 xff0c 因此可以在以下方面显著提高性能 xff1a 1 多线程技术使程序的响应速度更快 xff0c 因为用户界面可以在进行其它工作的同时一直处于活动状态 2 当前空闲的任务可以将处理器时间让
  • 相机内参和畸变参数进行校正程序

    当相机校正完成后 xff0c 会得到相机的外参 内参 畸变参数 通过内参和畸变参数可以得到相机校正后的图像 两种方法 xff0c 程序如下 xff1a include lt opencv2 opencv hpp gt include lt
  • (根据关键词)查找论文的一些途径

    以下方式都是在查找机器学习 深度学习相关的论文而发现的 目录 一 https arxiv org search cs 二 semanticscholar xff1a https www semanticscholar org search
  • Detected problems with api compatibility

    今天遇到了这个问题 xff0c 看来还是不要升到Android9 0了 xff01 待测试 xff1a https www cnblogs com qinxiaofei p 10075320 html
  • 在 Win10 系统下安装 JDK 及配置环境变量的方法

    首先 xff0c 在官网下载 JDK xff1a Oracle 官网 如上图所示 xff0c 在 Oracle 官网下载 JDK xff0c 有一点需要注意 xff0c 那就是在我们下载合适的 JDK 之前 xff0c 需要先点击 标记 1
  • APM 路径规划笔记

    20180711 xff1a 类名 xff1a AC WPNav 功能 xff1a 完成Auto Loiter Abmode模式中的路径规划 为计算方便设置默认值 xff0c 实际值有可能又变化 wp accel cms 61 100 wp
  • 程序员5大热门发展行业,就业迷茫的同学注意啦!

    信息化时代 xff0c 程序员成为各行业中的香饽饽岗位 xff0c 发展空间大 xff0c 薪资福利高 xff0c 因此最近几年转向程序员岗位的小伙伴越来越多 xff0c 不过因为这种 青睐 xff0c 使得程序员岗的竞争也越发大了 xff
  • Jetson TX2 初体验

    阅读原文请点击 摘要 xff1a 0 简介 Jetson TX2 1 是基于 NVIDIA Pascal 架构的 AI 单模块超级计算机 xff0c 性能强大 xff08 1 TFLOPS xff09 xff0c 外形小巧 xff0c 节能
  • 写毕业论文期间的一些收获和感想

    已经有好几天没有学Python了 xff0c 这几天一直在赶论文的进度 xff0c 虽然说拖延症害死人 xff0c 但毕竟写论文这件事在我心里的重要性实在无法排到很靠前的位置 xff0c 造成这些日子突击写论文的结果也是情理之中吧 而在写论
  • C/C++Linux服务器开发/后台架构师知识体系整理

    1 xff1a 精进基石 1 1 数据结构与算法 1 1 1 随处可见的红黑树 红黑树的应用场景 进程调度cfs xff0c 内存管理 红黑树的数学证明与推导 手撕红黑树的左旋与右旋 红黑树添加的实现与添加三种情况的证明 红黑树删除的实现与
  • Java 进口管制限制解除

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 由于国外的进出口限制 xff0c 对Java密码算法体系进行了一些限制 xff0c 为了解除限制 x
  • turtlebot3仿真例子(二)----SLAM仿真实现

    turtlebot3地图构建 1 启动turtlebot3的world xff1a roslaunch turtlebot3 gazebo turtlebot3 world launch 2 启动slam导航包并配置方法 xff1a Kar
  • ros 节点话题重映射和命名空间(以turtlesim为例)

    由于ROS必须有唯一的名称 xff0c 不论是节点还是话题都是如此 xff0c 简单地两次执行相关节点将导致之前执行的节点终止 但是我们可以在运行时更改节点的名称 xff0c 而不需要运行额外的程序或更改源代码 方法包括命名空间 names
  • Markdown中插入图片

    前言 xff1a 企业中产品手册少不了图片的插入 xff0c 那如果用markdown维护手册的话 xff0c 怎么插入图片呢 xff1f 今天介绍以下几种方法 xff1a xff08 一 xff09 插入本地图片 xff08 二 xff0
  • 通过VScode进行git的版本管理

    前言 xff1a 作为测试 xff0c 我们写的自动化脚本和产品手册也是需要使用git进行版本管理起来的 xff0c 本次我们介绍怎么通过git进行版本管理 目录 xff08 一 xff09 搭建本地仓库 xff08 二 xff09 将服务
  • 教你使用stm32接收串口的一帧数据!

    stm32支持接受单个数据或者一帧数据 xff0c 若配置单个数据接收中断的话 xff0c 会出现接收包丢包 xff0c 数据不完整的情况 xff01 因此在stm32的串口中断中 xff0c 还有一个IDLE中断 xff0c 用来产生串口
  • APM-3.5.2-EKF2笔记(未完待续)

    20180704 xff1a 一 EKF2 InitialiseFilter 全过程 1 记录开始时间 xff0c 预期步长时间 frameTimeUsec 61 2500 xff0c 每次融合读取IMU次数 framesPerPredic