四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案

2023-05-16

笔者最近正在做四旋翼惯性导航的部分,利用加速度计进行速度估计、位置估计,从而实现四旋翼的垂直方向上的定高、水平方向上的定点控制。

首先在这里引用学长之前参考APM飞控里面互补滤波惯导融合方案:原文见四旋翼位置控制之-定高篇

原文将四轴在悬停油门附近的高度控制,等效为对光滑地面上滑块的位置、速度、加速度模型的控制。

下图为王龙学长博客里面的融合框图:




首先将载体坐标系下的加速度(记作A(b)=(ax,ay,az)^T)旋转到导航坐标系上下,导航坐标系下的加速度记为A(n)=(AX,AY,AZ)^T,这里A(b),A(n)均为列向量,其中T表示转置。

有:A(n)=A(b)*R(b2n)

其中R(b2n)表示载体坐标系到导航系的旋转矩阵,下面是方向余弦矩阵的推导

/*Z-Y-X顺规欧拉角转方向余弦矩阵
  //Pitch Roll  Yaw 分别对应Φ θ Ψ 
       X轴旋转矩阵      
       R(Φ)
  {1      0        0    }
  {0      cosΦ    sinΦ}
  {0    -sinΦ    cosΦ }


       Y轴旋转矩阵
       R(θ)
  {cosθ     0        -sinθ}
  {0         1        0     }
  {sinθ     0        cosθ}
  
       Z轴旋转矩阵
       R(θ)
  {cosΨ      sinΨ       0}
  {-sinΨ     cosΨ       0}
  {0          0           1 }
  
  由Z-Y-X顺规有:
载体坐标系到导航坐标系下旋转矩阵R(b2n)  
R(b2n) =R(Ψ)^T*R(θ)^T*R(Φ)^T

  
R(b2n)=
  {cosΨ*cosθ     -cosΦ*sinΨ+sinΦ*sinθ*cosΨ        sinΨ*sinΦ+cosΦ*sinθ*cosΨ}
  {cosθ*sinΨ     cosΦ*cosΨ +sinΦ*sinθ*sinΨ        -cosΨ*sinΦ+cosΦ*sinθ*sinΨ}
  {-sinθ             cosθsin Φ                                        cosθcosΦ                   }

在计算R(b2n)的过程中也可以采用四元数旋转矩阵来实现,避免进行大量的三角函数运算,这里直接截取论文里面的图片如下。


根据上述公式可得导航坐标系下加速度A(n)为:

A(n)_X=Cos_Yaw* Cos_Roll * A(b)_X
                        +(Sin_Pitch*Sin_Roll*Cos_Yaw-Cos_Pitch * Sin_Yaw) * A(b)_Y 
                          +(Sin_Pitch * Sin_Yaw+Cos_Pitch * Sin_Roll * Cos_Yaw) * A(b)_Z; 

 
A(n)_Y=Sin_Yaw* Cos_Roll * A(b)_X
                        +(Sin_Pitch * Sin_Roll * Sin_Yaw +Cos_Pitch * Cos_Yaw) * A(b)_Y
                          + (Cos_Pitch * Sin_Roll * Sin_Yaw - Sin_Pitch * Cos_Yaw) * A(b)_Z;


A(n)_Z=-Sin_Roll* A(b)_X 
                        + Sin_Pitch *Cos_Roll * A(b)_Y 
                           + Cos_Pitch * Cos_Roll *A(b)_Z;

由此我们得到了导航系下的加速度量,这里需要注意的是此时我们得到的加速度量并不全是用于惯性导航的运动加速度,因为加速度计为比力模型,所有作用在加速度计上的惯性力都将对其产生比力加速度。在载体坐标系中,重力(0,0,1)g始终作用在加速度计上。


对于时间非常短的导航 ,当忽略地球自转和哥氏项所引起的 误差的情况下有:


所以为得到到用于导航的运动加速度Acce(x,y,z)转化为cm/s^2有:

Acce(x)*=9.8/AcceMax;
Acce(x)*=100;//加速度cm/s^2

Acce(y)*=9.8/AcceMax;
Acce(y)*=100;//加速度cm/s^2


Acce(z)*=9.8/AcceMax;
Acce(z)-=9.8;
Acce(z)*=100;//加速度cm/s^2


至此我们得到了三组用于导航的运动加速度量,这里注意一点的是,水平运动加速度Acce(x),Acce(y)在这里表示的是四旋翼沿着正北(纬度)、正东(经度)运动的加速度。AcceMax为加度素计1G量程下的值。


下面贴出本文参考APM三阶互补位置融合的代码:

#define TIME_CONTANST_Z5.0f
#define K_ACC_Z (5.0f / (TIME_CONTANST_Z * TIME_CONTANST_Z * TIME_CONTANST_Z))
#define K_VEL_Z (3.0f / (TIME_CONTANST_Z * TIME_CONTANST_Z))
#define K_POS_Z (3.0f / TIME_CONTANST_Z)

float  High_Filter[3]={
0.03,//0.015
0.05,//0.05
0.02//0.03
};


float Altitude_Dealt=0;
void Strapdown_INS_High()
{
//Altitude_Dealt=HC_SR04_Distance-NamelessQuad.Position[_YAW];//气压计(超声波)与SINS估计量的差,单位cm
Altitude_Dealt=Altitude_Estimate-NamelessQuad.Position[_YAW];//气压计(超声波)与SINS估计量的差,单位cm

acc_correction[_YAW] += High_Filter[0]*Altitude_Dealt* K_ACC_Z ;//加速度校正量
vel_correction[_YAW] += High_Filter[1]*Altitude_Dealt* K_VEL_Z ;//速度校正量
pos_correction[_YAW] += High_Filter[2]*Altitude_Dealt* K_POS_Z ;//位置校正量

//原始加速度+加速度校正量=融合后的加速度
NamelessQuad.Acceleration[_YAW]=Origion_NamelessQuad.Acceleration[_YAW]+acc_correction[_YAW];

//融合后的加速度积分得到速度增量
SpeedDealt[_YAW]=NamelessQuad.Acceleration[_YAW]*CNTLCYCLE;

//得到速度增量后,更新原始位置
Origion_NamelessQuad.Position[_YAW]+=(NamelessQuad.Speed[_YAW]+0.5*SpeedDealt[_YAW])*CNTLCYCLE;


//原始位置+位置校正量=融合后位置
NamelessQuad.Position[_YAW]=Origion_NamelessQuad.Position[_YAW]+pos_correction[_YAW];


//原始速度+速度校正量=融合后的速度
Origion_NamelessQuad.Speed[_YAW]+=SpeedDealt[_YAW];
NamelessQuad.Speed[_YAW]=Origion_NamelessQuad.Speed[_YAW]+vel_correction[_YAW];
}


作者在去年寒假的之前基本上都是用的上述方案进行气压计定高融合,效果还比较好,实际融合调试过程中,只需要调整三个积分系数即可,如果你之前的位置观测量是采用气压计,当你直接把高度位置观测量换成超声波时,参数基本不用调整,融合就挺好的。


下面给出之前测试时候融合波形:


三阶互补融合方案,在飞机中、低速的上升或者下降的时候,不


处理延时修正时,由于观测传感器带来的滞后感不明显,但是当


你快速拖动飞机,你会发现位置融合波形在后半段会出现跟踪缓


慢,强行被观测传感器拉至稳定值的情况,这里截取一小段融合


波形给大家,大家对比一下速度快和慢的时候位置融合就一目了


然了。


问题先留在这里,如何处理这样一类因观测传感器滞后的造成的惯导融合滞后的问题?

贴上处理后的融合波形,大家仔细对比下:


附上之前寒假的三阶互补室外定高视频:

视频1:室外定高F330机架

视频2:QAV250穿越机



以上内容,均为作者学习四轴的个人总结与


感悟,难免有错误之处,欢迎批评指出,谢


谢!!!



作者将在下一节阐述观测传感器延时修正的


处理,以及基于GPS速度+位置两个观测量


的水平位置卡尔曼融合过程。



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

四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案 的相关文章

  • Java日志管理最佳实践

    原文出处 xff1a http www ibm com developerworks cn java j lo practicelog 感谢原作者 xff0c 感谢ibm网站 xff0c 里面有好多的精华帖 日志记录是应用程序运行中必不可少
  • MySQL数据类型--浮点数类型和定点数类型

    MySQL中使用浮点数类型和定点数类型来表示小数 浮点数类型包括单精度浮点数 xff08 float型 xff09 和双精度浮点数 xff08 double型 xff09 定点数类型就是decimal型 OK xff0c 现在我们来看看这几
  • MySQL数据类型--日期和时间类型

    MySQL中的多种时间和格式数据类型 日期和时间类型是为了方便在数据库中存储日期和时间而设计的 MySQL中有多种表示日期和时间的数据类型 其中 xff0c year类型表示时间 xff0c date类型表示日期 xff0c time类型表
  • MySQL数据类型--二进制类型

    二进制类型是在数据库中存储二进制数据的数据类型 二进制类型包括binary xff0c varbinary xff0c bit xff0c tinyblob xff0c blob xff0c mediumblob xff0c longblo
  • 单行注释和多行注释

    我们在实际编码中 xff0c 总是需要为程序添加一些注释 什么是注释 xff1f 注释就是一段文字 xff0c 这段文字并不是必须的 xff0c 也不直接参与代码运行 注释用来说明某段代码的作用 xff0c 或者说明某个类的用途 xff0c
  • Integer源码解析

    这篇博客我来整理下以Integer为例整理下包装类的源码 首先来看一段代码 xff1a public class LinkinPark public static void main String args Integer a 61 1 I
  • 不可变类

    不可变类 先来科普2个概念 xff0c 可变类和不可变类 1 xff09 xff0c 不可变类的意思就是创建该类的实例后 xff0c 该实例的实例变量是不可改变的 Java提供的8个包装类和String类都是不可变类 xff0c 当创建他们
  • 博客迁移<a>jiangweili.me</a>

    各位 xff0c 我的博客已经迁移 xff0c 具体请移步新博客地址 我会重新整理JavaSE和JavaEE相关 xff0c 最后搭建自己的一套web框架 xff0c 谢谢各位
  • Mac环境下localhhost无法访问

    今天访问本地服务器 localhost 提示无法访问 查看apache 错误日志最后一行提示以下错误 于是经过百度 搜索 34 AH00045 child process 1409 still did not exit sending a
  • RNAseq---Hisat2 标准输出中比对率信息解读

    RNA Seq Hisat2 标准输出中比对率信息解读 本文具体解释部分 xff08 一 xff09 中内容复制自Biostar内容 xff0c 后面附上我实际的例子 xff0c 二者略有不同 xff0c 整体理解上没大问题 xff0c 有
  • 解决Android单个dex文件不能超过65535个方法问题

    一 找坑 xff1a 谷歌规定单个dex文件中的方法不能超过65536的限制 我们编写项目过程中在工程的lib文件夹下引用的第三方插件jar包太多 或者项目过大 xff0c 编译运行时就有可能报出com android dex DexInd
  • Decode Ways问题及解法

    问题描述 xff1a A message containing letters from A Z is being encoded to numbers using the following mapping 39 A 39 gt 1 39
  • Android性能优化(一)内存泄露优化(静态变量、单例模式、属性动画)

    内存泄露优化分为两个方面 xff0c 一方面是在开发过程中避免写出有内存泄露的代码 xff0c 另一方面是通过一些分析工具比如 MAT来找出潜在的内存泄露继而解决 一 静态变量导致内存泄露 一般情况下静态变量引用了或者内部持有Activit
  • 图论 —— 图的连通性 —— Tarjan 求强连通分量

    概述 Tarjan 算法是基于对图深度优先搜索的算法 xff0c 每个强连通分量为搜索树中的一棵子树 搜索时 xff0c 把当前搜索树中未处理的节点加入一个堆栈 xff0c 回溯时可以判断栈顶到栈中的节点是否为一个强连通分量 基本思路 定义
  • 开发日记(一)

    这是自己编程第二天 xff0c 自己解决了好几个问题 xff0c 觉得很有成就感 xff0c 决定写下以后开发中遇到的问题 1 在多个Activity中传递数据 xff0c 之前只学过绑定基本的putExtra xff0c 今天上网一搜 x
  • 源程序生成控制流图和du-path

    最近上 源代码分析技术 这个课 xff0c 老师让写一个程序 xff0c 由一段c代码 xff0c 生成生成控制流图和du path xff0c 控制流图不用解释了 xff0c 说一下du path xff0c 这个术语是针对变量来说的 x
  • pandas使用笔记

    DataFrame使用笔记 dates 61 pd date range span class hljs string 39 20160728 39 span periods 61 span class hljs number 6 span
  • keras

    大神笔记 xff0c 转载自http blog csdn net u012162613 article details 45397033 Keras简介 Keras是基于Theano的一个深度学习框架 xff0c 它的设计参考了Torch
  • gensim similarity计算文档相似度

    向量空间模型计算文档集合相似性 0 将原始输入的词转换为ID xff0c 词的id表示法简单易用 xff0c 但是无法预测未登记词 xff0c 难以挖掘词关系 xff1b 词汇鸿沟 1 任意两个词之间是独立的 xff0c 无法通过词的ID来
  • doc2vec计算文档相似度

    doc2vec是基于word2vec的 xff0c word2vec对于计算两个词语的相似度效率比较好 xff0c 修改了word2vec中的cbow和skip gram模型 xff0c paragraph vector直接得到doc向量

随机推荐

  • win10远程登录提示“您的远程桌面会话已结束。另一用户已连接到此远程计算机,因此您的连接已丢失……”

    远程登陆的Windows 10 系统是否没有设置密码 xff1f 没有密码的话设计机制是唤醒自动登陆 xff0c 所以会把远程挤下来 xff0c 设置密码就好了
  • Spring注解

    注解介绍 注解有两个作用 xff1a 标注和注入 标注 xff1a 类路径下自动扫描 xff0c 减少在xml中配置bean 例如 64 Component 64 Service注入 xff1a 自动装配 xff0c 需要类的地方直接加注解
  • akka基础

    基本概念消息传递API 通用API消息传递方式 Future机制Actor生命周期处理状态和错误 监督kill actor生命周期监控和DeathWatch安全重启状态 纵向扩展 Router调度方式使用策略 横向扩展 订阅集群事件启动 退
  • Ubuntu使用root登录系统界面、免密码、添加开机启动

    以下测试环境为Ubuntu 16 04 一 使用root登录系统界面 Ubuntu在命令行模式下 xff0c 是可以登录root的 为了安全 xff0c 在图形界面模式下 xff0c 默认不允许使用root登录系统 可以通过修改50 uni
  • 线程(Thread)的三种等待唤醒机制详解

    1 为什么需要线程的等待和唤醒 线程的等待唤醒机制是一种经典的 生产者和消费者 模型 例如食品加工厂 xff0c 食品加工人员和原料补给人员 xff0c 在有充足原料时 xff0c 补给人员是在等待 xff0c 等到原料不够时 xff0c
  • Linux常用终端命令之cat、grep、echo

    这三个指令 xff0c 每一个都很常用 xff0c 用法也都很多 作为一个linux初学者 xff0c 我还不能很好的掌握三个命令的用法 xff0c 于是先在这篇博客里做一个简单的整理和总结 xff0c 以加深对三个指令的理解 grep 先
  • Python+Pycharm使用opencv

    http blog csdn net whykifan article details 66478421 在这个配置过程中 xff0c 遇到了不少的问题 xff0c 于是就写了这篇博文 xff0c 希望可以帮到遇到相同问题的人 主要步骤 x
  • Linux启动流程rcN.d rcS.d rc.local等

    1 环境 当前系统环境为 xff1a Linux mint mate 17 1 基于ubuntu14 04的衍生版 备注 xff1a etc rc d文件夹中的脚本文件的链接目标为 xff1a etc init d文件夹下的脚本 为系统运行
  • Ubuntu 启用root账户并开启远程登录

    生产环境尽量不要如下操作 生产环境尽量不要如下操作 生产环境尽量不要如下操作 本地虚拟机 xff0c 为了方便 xff0c 直接root远程登录 Ubuntu 20 4 1 启用root账户 sudo passwd root 2 开启远程登
  • datatable中报错 table.XXX is not a function的解决方法

    在datatable中可以通过三种不同的方式为一个或多个表获取一个新的Datatables API实例 xff1a xff08 1 xff09 selector DataTable xff08 2 xff09 selector dataTa
  • 在ubuntu下安装libpcap库

    这两天公司里要我了解一下pcap xff0c 但是还不知道它是干什么的 首先 xff0c 我从网上查到了 xff0c pcap实际上是抓包库 这个抓包库给抓包系统提供了一个高层次的接口 所有网络上的数据包 xff0c 甚至是那些发送给其他主
  • Python 获取当前路径(文件及所在文件夹,正斜线)

    参考博客 xff1a http www cnblogs com wind wang p 5822192 html 更多路径读取请参照上述博客 xff08 使用Python 2 x版本 xff09 xff0c 这里只挑出个人认为最直接 常用的
  • 基于docker搭建mysql,redis,mongo,gitlab,wiki等开发环境

    今天基于docker搭建一整套开发环境 首先安装docker yum y install docker io 使用加速器 xff1a vim etc docker daemon json 添加163的加速地址 xff1a 34 regist
  • Android编译系统分析五:system.img的生成过程

    Android编译系统分析系列文章 xff1a android编译系统分析 xff08 一 xff09 source build envsetup sh与lunch Android编译系统 xff08 二 xff09 mm编译单个模块 an
  • linux学习笔记--Xshell远程登陆linux

    1 登录xshell官网XSHELL NetSarang Website xff0c 输入姓名和邮箱 xff0c 下载免费版的Xshell xff0c 下载链接会发送到邮箱中 下载完成后直接安装即可 2 双击打开安装完成的Xshell xf
  • Apache使用localhost可以访问但使用本机IP(局域网)不能访问

    Apache使用localhost可以访问但使用本机IP 局域网 不能访问 Apache 使用localhost 127 0 0 1 可以访问 xff0c 使用本机IP 局域网 不能访问 xff0c 为什么本机ip地址不能访问localho
  • ubuntu14.04LTS命令行安装xfce4桌面

    安装ubuntu14 04LTS后 xff0c 需要一个桌面 xff0c 因此选择安装xfce4 1 安装 1 1 安装默认版本4 10 sudo apt get install xfce4 1 2 安装版本4 12 1 sudo add
  • OCLint的部分规则(Convention 部分)

    OCLint的部分规则 xff08 Convention 部分 xff09 对OCLint的部分规则进行简单翻译解释 xff0c 有部分进行了验证以及进一步分析 测试 OCLint其他相关内容如下 xff1a OCLint iOS OC项目
  • 修改virualbox下的虚拟系统Ubuntu的内存

    VBoxManage exe在VirtualBox 安装目录下 xff0c 如下图 xff0c 我们进VirtualBox 安装目录查看到VBoxManage exe 要使用这个工具 xff0c 就先了解一下这个工具吧 xff0c 要用命令
  • 四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案

    笔者最近正在做四旋翼惯性导航的部分 xff0c 利用加速度计进行速度估计 位置估计 xff0c 从而实现四旋翼的垂直方向上的定高 水平方向上的定点控制 首先在这里引用学长之前参考APM飞控里面互补滤波惯导融合方案 xff1a 原文见四旋翼位