无人机项目跟踪记录五十一----高度融合模块详解

2023-05-16

这个模块的函数是:void AltitudeCombineThread(void)。函数有点乱,部分没有看懂,加上了注释、以后再详细搞清楚吧!

//timeStamp in us. Thread should be executed every 2~20ms
//MS5611_Altitude  , should be in m. (can be fixed to abs, not relative). positive above ground
//accFilted  ,should be filted 
//高度融合模块
void AltitudeCombineThread(void)
{
    static uint32_t tPre=0;
    uint32_t t;
    float dt;    //时间差值

    /* accelerometer bias correction */
    float accel_bias_corr[3] = { 0.0f, 0.0f, 0.0f };  //加速计偏移矫正
    uint8_t i,j;

    t=micros();                                       //当前的计时
    dt = (tPre>0)?((t-tPre)/1000000.0f):0;            //时间间隔
    tPre=t;

    if(!paOffsetInited)	//wait baro to init its offset
    	return;

    if(!imu.ready)
        return;

    //store err when sensor update
    if(Baro_ALT_Updated)	//后面应该在sensor数值后加一个timeStamp,判断是否更新
    {
#ifndef FBM320
        corr_baro = 0 - MS5611_Altitude - z_est[0];		// MS5611_Altitude baro alt, is postive above offset level. not in NED. z_est is in NED frame.
#else
			corr_baro = relPressData*0.1 - z_est[0];  //z方向上的气压高度差
#endif
        Baro_ALT_Updated=0;
    }

    if(accUpdated)
    {
        imu.accb[0] -= acc_bias[0];    //获得角加速度真实值
        imu.accb[1] -= acc_bias[1];
        imu.accb[2] -= acc_bias[2];

        for(i=0; i<3; i++)
        {
            accel_NED[i]=0.0f;      //地理系角加速度
            for(j=0; j<3; j++)
            {
							accel_NED[i]+=imu.DCMgb[j][i]* imu.accb[j]; //将机体系角加速度转换到地理系
            }
        }

        accel_NED[2]=-accel_NED[2];   //地理系z方向的加速度
        corr_acc[2] = accel_NED[2] + CONSTANTS_ONE_G - z_est[2];          //实际测量的加速度与期望的加速度差值,z方向有重力影响
        accUpdated=0;
    }

    //correct accelerometer bias every time step
    accel_bias_corr[2] -= corr_baro * w_z_baro * w_z_baro;     //通过位置来校准z方向加速度偏差    为何如此计算没看懂

    //transform error vector from NED frame to body frame
    for (i = 0; i < 3; i++)
    {
        float c = 0.0f;

        for (j = 0; j < 3; j++) {
					c += imu.DCMgb[i][j] * accel_bias_corr[j];                  //将地理系校准的加速度偏差转换到机体系
        }

        acc_bias[i] += c * w_acc_bias * dt;		//accumulate bias       //将加速度偏差做Pid运算求得期望与实际的加速度偏差值
    }

    acc_bias[2]=-acc_bias[2];  //坐标系方向朝下


    /* inertial filter prediction for altitude */
    inertial_filter_predict(dt, z_est);     //物理定律距离与加速度方程算出期望的位置、速度、加速度
    /* inertial filter correction for altitude */
    inertial_filter_correct(corr_baro, dt, z_est, 0, w_z_baro);	//0.5f    //通过高度位置来校准
    inertial_filter_correct(corr_acc[2], dt, z_est, 2, w_z_acc);		//20.0f  //想通过加速度偏差来校准?

    nav.z=z_est[0];                                 //z方向上期望的位置
    nav.vz=z_est[1];                                //z方向上期望的速度                                
    nav.az=z_est[2];                                //z方向上期望的加速度
}

 

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

无人机项目跟踪记录五十一----高度融合模块详解 的相关文章

  • 因子图(factor graph)

    因子图 xff08 factor graph xff09 Factor Graph 是概率图的一种 xff0c 概率图有很多种 xff0c 最常见的就是Bayesian Network 贝叶斯网络 和Markov Random Fields
  • 词袋模型(Bag of Features,BOF)

    Bag of Features xff08 BOF xff09 对于程序而言这个人就是一堆像素嘛 xff0c 让它直接找的话它只能一个个像素的去比较然后返回最接近的了 xff08 近邻算法 xff09 但是现实中物体的形状颜色会发生变化 x
  • SNMPv3基于用户的安全模型USM及消息格式

    一 USM相关网址 SNMPv3使用了基于用户的安全模型USM RFC 3411 Architecture for SNMP Frameworks http www ietf org rfc rfc3411 txtRFC 3414 User
  • 超详细的python搭建区块链(下)

    在前面 超详细的python搭建区块链 xff08 中 xff09 我们搭建了一个简单的区块链 在这个简单的区块链能够实现交易 挖矿等基本功能 不过 xff0c 区块链上的节点应该是分散的 如果它们是分散的 xff0c 我们究竟如何确保它们
  • RuntimeError: Expected 4-dimensional input for 4-dimensional weight [32, 1, 5, 5]

    文章目录 1 问题引入2 运行报错3 代码4 分析原因5 解决办法6 完整代码7 参考文献 1 问题引入 今天在使用pytorch训练一个模型的 xff0c 数据集的读取是使用pytorch自带的函数来进行读取和预处理的 xff0c 网络使
  • 如何在Linux服务器上安装Anaconda(超详细)

    目录 1 安装Anaconda1 1 下载anaconda的安装包1 2 解决安装出现的bug1 3 安装anaconda1 4 点击Enter xff08 回车键 xff09 1 5 输入 yes1 6 继续点击 Enter1 7 输入
  • Pytorch实现FGSM(Fast Gradient Sign Attack)

    目录 1 相关说明2 相关简述3 代码实现3 1 引入相关包3 2 输入3 3 定义被攻击的模型3 4 定义FGSM攻击函数3 5 测试函数 4 可视化结果5 可视化对抗样本6 预训练模型下载7 训练模型8 完整代码 1 相关说明 最近在整
  • RuntimeError: element 0 of tensors does not require grad and does not have a grad_

    文章目录 1 问题描述2 解决方案2 1 方案12 2 方案2 3 参考文献 1 问题描述 今天在跑代码的过程中 xff0c 因为要训练一个模型然后在测试阶段使用PGD来生成相应的adv image来测试这个模型 xff0c 结果运行到测试
  • Pycharm 搭建 Django 项目 (非常详细)

    目录 1 安装需求2 准备工作2 1 新建项目2 2 输入相关配置2 3 项目创建完成2 4 查看安装 Django 版本2 5 启动项目2 6 解决一点小问题 3 一点小补充4 参考文献 1 安装需求 在使用 python 框架 Djan
  • Docker

    官方网站 xff1a https www docker com Docker 是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 xff0c 然后发布到任何流行的 Linux 机器上 xff0c
  • SpringBoot + Thymeleaf 实现发送验证码计时器功能

    x1f4e2 本文章通过实战记录相关问题以及提供解决方案 x1f464 公众号 xff1a 恩故事还在继续 目录 1 功能需求2 效果图展示3 代码4 参考文献5 联系我 1 功能需求 实现找回密码然后点击获取验证码之后出现XX秒候重新获取
  • 解决 SpringBoot 图片加载失败

    x1f4e2 本文章通过实战记录相关问题以及提供解决方案 x1f464 公众号 xff1a 恩故事还在继续 目录 1 问题描述2 解决方案2 1 打开 IDEA 3 参考文献 1 问题描述 在使用 SpringBoot 开发项目的时候发现了
  • 仿牛客论坛项目部署总结

    x1f4e2 本文章通过实战记录相关问题以及提供解决方案 x1f464 公众号 xff1a 恩故事还在继续 目录 1 前言2 部署项目需求3 环境配置3 1 阿里云服务器3 2 本地文件上传到服务器3 3 MySQL配置与安装3 4 Mav
  • 时间片轮转调度算法的计算

    在分时系统中 xff0c 最简单最常用的就是基于时间片轮转调度算法 xff0c 时间片轮转调度算法是非常公平的处理机分配方式 xff0c 让就绪队列的每个进程每次仅运行一个时间片 1 时间片轮转调度算法的基本原理 在时间片轮转调度算法中 x
  • IntelliJ IDEA添加注释常用的快捷键

    IDEA可以使用快捷键添加行注释Ctrl 43 块注释Ctrl 43 Shift 43 xff0c 还可以快速生成类注释 方法注释等 下面就介绍这几种快捷键的用法 1 行注释Ctrl 43 首先你的光标要处于这一行 xff0c 处于这行的哪
  • Android Studio 设置代码提示和代码自动补全快捷键

    想必使用过Eclipse的小伙伴们都习惯Eclipse快捷键带来的方便 但是当我们使用Android studio来进行开发的时候也想要这种方便该怎么办呢 当然使用过Android studio的小伙伴可能已经知道了它的方便以及强大之处 接
  • 编写一个算法,实现一维数组a输入任意n个整数,假设n=7,输入7个数字为3,7,6,8,9,4,1

    问题描述 编写一个算法 xff0c 实现一维数组a输入任意n个整数 xff0c 假设n 61 7 xff0c 输入7个数字为3 7 6 8 9 4 1 xff0c 然后建立一个具有如图所示的方阵 xff0c 并输出打印 1 3 7 6 8
  • 1.0 DS1302-外部RTC

    一 综述 DS1302是美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片 xff0c 因为应用非常广泛 xff0c 结果就导致了大量的国产仿制品 xff0c GC1302是一款国产DS1302仿制芯片 xff0c 使用方法
  • 现代C++语言

    include lt iostream gt include lt limits gt include lt future gt include lt string gt include lt map gt using namespace

随机推荐

  • ubuntu 解压 打包 命令全集

    tar 解包 xff1a tar xvf FileName tar 打包 xff1a tar cvf FileName tar DirName xff08 注 xff1a tar是打包 xff0c 不是压缩 xff01 xff09 gz 解
  • 在IDEA中解决进行有关详细信息, 请使用 -Xlint:unchecked 重新编译。

    springboot默认的打包是如下 xff1a lt build gt lt plugins gt lt plugin gt lt groupId gt org springframework boot lt groupId gt lt
  • Jetson Nano更换软件源

    Nano的镜像默认是国外的源 xff0c 速度很慢 xff0c 国内的源有的上不去 xff0c 有的包无法安装 xff0c 经过测试清华大学的源完美可用 xff0c 现放上教程 首先备份原本的source list文件 sudo cp et
  • prometheus在k8s中的部署

    1 k8s的监控指标 监控指标具体实现举例Pod性能cAdvisor容器CPU xff0c 内存利用率Node性能node exporter节点CPU xff0c 内存利用率K8S资源对象kube state metricsPod Depl
  • vue前端

    span class token operator lt span span class token operator span DOCTYPE html span class token operator gt span span cla
  • VueCli 脚手架的安装

    配置淘宝npm仓库 xff1a span class token function npm span config span class token builtin class name set span registry https re
  • vue进阶知识

    Vue单文件组件 xff08 又名 vue文件 xff0c 缩写为SFC xff09 是一种特殊 的文件格式 xff0c 它允许讲Vue组件的模板 逻辑与样式封装在 单个文件中 正如所见 xff0c Vue SFC 是经典的 HTML CS
  • ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.

    1 背景 xff1a shell脚本在主机器上执行kafka的启动命令 其他机器也会起这个进程 之前的脚本每次执行的时候出现卡住的现象 xff0c 不能回到命令行 解决方法 xff1a 第一种 span class hljs comment
  • centos升级glibc(升级到 2.17版)

    1 原先的系统glibc库的版本是2 12 xff0c 需要升级到2 17版本 下载地址 xff1a http ftp gnu org gnu glibc glibc 2 17 tar gz 这里可以选择你所需要的版本 2 安装部署 roo
  • u盘启动盘安装centos7.4操作系统

    1 使用UltraISO软件将ISO镜像刻录到U盘 xff0c 然后用u盘安装操作系统 制作好的u盘如下所示 xff1a 2 启动华为h3c服务器 xff0c 出现下面的界面 按照提示按住Ctrl 43 A制作raid 继续点击下一步 xf
  • redis一主一从两台机器高可用

    目录 1 机器规划 2 redis的部署安装 2 1配置文件内容 2 2 启动2台机器上的redis服务 2 3 查看2台机器上redis数据信息 3 redis主从之间手动切换 3 1 停掉22上的redis进程 xff0c 到23从re
  • cumulusclips的部署

    描述 xff1a CumulusClips是一个开源的视频分享 xff08 内容管理 xff09 平台 xff0c 能够提供最佳的视频分享功能之一类似YouTube 在CumulusClips的帮助下 xff0c 您可以开始自己的视频分享网
  • Linux安装nodejs和npm

    最近window系统转向linux系统开发 xff0c linux系统的确适合程序员的开发 作为前端安装了nodejs和npm xff0c 遇到了一些坑 xff0c 赶紧记录下来 第一种安装方法 xff1a 安装nodejs xff1a s
  • python 编写的DHT Crawler 网络爬虫

    1 安装boost依赖和编译环境 yum install y boost boost devel yum install y make gcc gcc c 43 43 kernel devel python devel 2 装 libtor
  • nginx location proxy_pass详解

    在nginx中配置proxy pass时 xff0c 如果在proxy pass后面的url加 xff0c 相当于是绝对根路径 xff0c 则nginx不会把location中匹配的路径部分代理走 如果没有 xff0c 则会把匹配的路径部分
  • hbase代码说明(通话记录查询)

    Hbase的项目 xff08 通话记录查询 xff09 写java的包 导入jar包 Hbase的包 xff0c hadoop的包 xff0c 驱动包 配置文件 xff08 hbase hdfs regionserver backup xf
  • SysTick 定时器详细学习笔记并兼容FreeRTOS

    文章目录 一 xff1a 基础知识二 xff1a SysTick 的时钟频率三 xff1a SysTick 的配置四 xff1a SysTick 实现精准延时并兼容 FreeRTOS五 xff1a 参考 一 xff1a 基础知识 SysTi
  • 无人机项目跟踪记录四十八---角度pid控制模块详解(2)

    角度pid控制模块中函数 xff1a static void PID Postion Cal PID Typedef PID float target float measure int32 t dertT 为PID自整定函数 xff1a
  • 无人机项目跟踪记录四十九----角速度环的pid控制详解

    角速度环的pid控制的函数是void CtrlAttiRate void xff0c 具体解释如下 xff1a 首先初始化变量 xff0c 获取陀螺仪读取的角速度 float yawRateTarget 61 0 期望的偏航角速度 stat
  • 无人机项目跟踪记录五十一----高度融合模块详解

    这个模块的函数是 xff1a void AltitudeCombineThread void 函数有点乱 xff0c 部分没有看懂 xff0c 加上了注释 以后再详细搞清楚吧 xff01 timeStamp in us Thread sho