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

2023-05-16

2017年03月13日,原文链接-四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案

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

  首先在这里引用学长之前参考APM飞控里面互补滤波惯导融合方案:
四旋翼位置控制之-定高篇,原文将四轴在悬停油门附近的高度控制,等效为对光滑地面上滑块的位置、速度、加速度模型的控制。下图为王龙学长博客里面的融合框图:

Image text

  首先将载体坐标系下的加速度(记作 A ( b ) = ( a x , a y , a z ) T A(b)=(ax,ay,az)^T A(b)=ax,ay,azT)旋转到导航坐标系上下,导航坐标系下的加速度记为 A ( n ) = ( A X , A Y , A Z ) T A(n)=(AX,AY,AZ)^T An=(AX,AY,AZ)T,这里 A ( b ) , A ( n ) A(b),A(n) A(b),A(n)均为列向量,其中 T T T表示转置, R b n R_b^n Rbn表示载体坐标系到导航系的旋转矩阵,有:
A ( n ) = R b n ∗ A ( b ) A(n)=R_b^n*A(b) An=RbnA(b)

R b n = [ c o s ψ ∗ c o s θ − c o s Φ ∗ s i n ψ + s i n Φ ∗ s i n θ ∗ c o s ψ s i n ψ ∗ s i n Φ + c o s ϕ ∗ s i n θ ∗ c o s ψ c o s θ ∗ s i n ψ c o s Φ ∗ c o s ψ + s i n Φ ∗ s i n θ ∗ s i n ψ − c o s ψ ∗ s i n Φ + c o s Φ ∗ s i n θ ∗ s i n ψ − s i n θ c o s θ s i n Φ c o s θ c o s Φ ] R_b^n=\left[ \begin{array}{c} cos\psi*cos\theta & -cos\Phi*sin\psi+sin\Phi*sin\theta*cos\psi &sin\psi*sin\Phi+cos\phi*sin\theta*cos\psi \\ cos\theta*sin\psi & cos\Phi*cos\psi +sin\Phi*sin\theta*sin\psi & -cos\psi*sin\Phi+cos\Phi*sin\theta*sin\psi \\-sin\theta &cos\theta sin \Phi & cos\theta cos\Phi \end{array} \right] Rbn=cosψcosθcosθsinψsinθcosΦsinψ+sinΦsinθcosψcosΦcosψ+sinΦsinθsinψcosθsinΦsinψsinΦ+cosϕsinθcosψcosψsinΦ+cosΦsinθsinψcosθcosΦ
其中, Φ , θ , ψ \Phi,\theta,\psi Φ,θ,ψ分别表示横滚,俯仰,偏航角。

 在计算 R b n R_b^n Rbn的过程中也可以采用四元数旋转矩阵来实现,避免进行大量的三角函数运算:

R b n = [ q 0 q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 − q 0 q 3 ) 2 ( q 1 q 3 + q 0 q 2 ) 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 + q 0 q 1 ) 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] R_b^n=\left[ \begin{array}{c} q_0 q_0^2+q_1^2-q_2^2-q_3^2 & 2(q_1q_2-q_0q_3) & 2(q_1q_3+q_0q_2)\\ 2(q_1q_2+q_0q_3) &q_0^2-q_1^2+q_2^2-q_3^2 &2(q_2q_3+q_0q_1) \\ 2(q_1q_3-q_0q_2) & 2(q_2q_3+q_0q_1)&q_0^2-q_1^2-q_2^2+q_3^2 \end{array} \right] Rbn=q0q02+q12q22q322(q1q2+q0q3)2(q1q3q0q2)2(q1q2q0q3)q02q12+q22q322(q2q3+q0q1)2(q1q3+q0q2)2(q2q3+q0q1)q02q12q22+q32
 由此我们得到了导航系下 的加速度量,这里需要注意的是此时我们得到的加速度量并不全是用于惯性导航的运动加速度,因为加速度计为比力模型,所有作用在加速度计上的惯性力都将对其产生比力加速度。在载体坐标系中,重力 ( 0 , 0 , g ) (0,0,g) (0,0,g) 始终作用在加速度计上。

 对于时间非常短的导航 ,当忽略地球自转和哥氏项所引起的 误差的情况下有:
v ˙ e e = R b e f b + g \dot{v}_e^e=R_b^ef^b+g v˙ee=Rbefb+g

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;//减去Z轴重力加速度
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];
}

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

image

三阶互补融合方案,在飞机中、低速的上升或者下降的时候,不处理延时修正时,由于观测传感器带来的滞后感不明显,但是当你快速拖动飞机,你会发现位置融合波形在后半段会出现跟踪缓慢,强行被观测传感器拉至稳定值的情况,这里截取一小段融合波形给大家,大家对比一下速度快和慢的时候位置融合就一目了然了。

image

 问题先留在这里,如何处理这样一类因观测传感器滞后的造成的惯导融合滞后的问题?贴上处理后的融合波形,大家仔细对比下:

image

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

视频1:室外定高F330机架

视频2:QAV250穿越机

 以上内容,均为作者学习四轴的个人总结与感悟,难免有错误之处,欢迎批评指出,谢谢!!!

 作者将在下一节阐述观测传感器延时修正的处理,以及基于GPS速度+位置两个观测量的水平位置卡尔曼融合过程。

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

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

随机推荐

  • GPS卫星轨道

    GPS卫星轨道周期几乎是24小时 xff0c 而自己的卫星在太阳同步轨道上的周期大概是1 5个小时 xff0c 那么就是说太阳同步轨道已经绕几周了 xff0c GPS卫星才饶一周 所以当算多普勒频移的时候只需要算出GPS一个周期时间内的多普
  • 快速了解S7-1200 PLC的存储器及存储区的寻址方式

    S7 1200 PLC的存储器地址包括输入I 输出Q 位存储器M 数据块DB xff0c 以及本地或临时存储器L eg xff1a 标识存储区M0 0 MB0 MW0 MD0 分别是 B位 字节B 8位 字W 16位 双字D 32位 输入过
  • 网络编程之UDP简单示例

    UDP编程函数recvfrom inet pton sendto UDP协议 user data protrol 用户数据协议特点 xff1a TCP xff1a 面向连接 gt 一定双方连接上了才能进行通信 xff01 UDP xff1a
  • 微信开发(二)http请求工具类

    说明 进行微信开发 xff0c 后台程序需要与微信服务器进行交互 xff0c 通过调用接口来完成服务 xff0c 阅读微信开发文档 xff0c 发现接口的调用都是通过http请求进行的 xff0c 所以必须有个HttpUtil来支撑 xff
  • STM32寄存器与结构体

    piaolin 发表于 2015 9 30 01 02 只看该作者 倒序浏览 阅读模式 第16集 蜂鸣器实验 这个实验和流水灯是一样的 xff0c 只是将相对应的IO口拉高拉低即可控制蜂鸣器 值得注意的是电路设计方面 xff0c 根据视频描
  • 字节序

    1 字节序 字节序 xff0c 又称端序或尾序 xff0c 指的是多字节数据在内存中的存放顺序 例如一个int型变量x占用4个字节 xff0c 假设它的起始地址 amp x为0x10 xff0c 那么x将会被存储在 0x10 0x11 0x
  • extern “C“的作用及理解

    1 意图 extern 34 C 34 是C 43 43 特有的指令 xff08 C无法使用该指令 xff09 xff0c 目的在于支持C 43 43 与C混合编程 2 作用 extern C 的作用是告诉C 43 43 编译器用C规则编译
  • Linux命令 nautilus

    nautilus是GNOME桌面下的一个文件管理工具 通过这个命令我们可以在终端下非常方便的打开指定目录的文件 nautilus 命令后面一个 xff0c 表示当前目录 命令模式为 nautilus pwd支持绝对路径和相对路径两种方式 x
  • windows下C语言实现TCP通信

    编译器 xff1a vs2017 语言 xff1a c语言 具体的原理可以在其他博客看到 在我学习winsock编程时 xff0c 发现那些博客代码居然在我机器上没一个能运行 xff0c 可能是我水平有限 于是我根据winsock相关知识
  • 关于USB转串口型设备的latency问题

    USB转串口型设备在通讯时默认有16ms延时 xff0c 这在控制任务中往往是不能接受的 xff0c 为了改善这个情况需要改变latency的值为最小值1 在Windows环境下 xff0c 可以如下操作 xff1a 右键属性 端口设置 高
  • 航模lipo锂电池过放抢救/处理方式

    实验室用的tattu航模电池经常因为疏忽导致过放 xff0c 逐渐也摸索出来过放的抢救方法 当然最好的方法还是不要过放 xff1a xff09 1 首先是检查电池剩余电压 xff0c 用普通的电压表就可以了 xff0c 今天刚搞崩了了一块
  • 基于DCT+huffman变换的图像压缩解压缩FPGA实现

    目录 一 理论基础 二 verilog程序 三 仿真结果 一 理论基础 整个算法涉及到DCT变换和Huffman编码两个部分 其整体流程图如下所示 nbsp 这里 我们将做三个方面的工作
  • C++代码编译过程

    C 43 43 代码编译过程 源代码从生成到可执行文件可以分成四个步骤 xff1a 预处理 编译 汇编和链接 以下是linux下GCC生成一个可执行文件a out的过程 xff1a 一 预处理 预处理过程主要是处理那些源文件和头文件中以 开
  • Linux终端美化

    1 安装终端软件terminator 可自行选择 sudo apt get install terminator y 2 安装zsh sudo apt get install zsh y 3 安装oh my zsh sh c 34 curl
  • windows 7 浏览器无法进网站,提示安全证书存在问题(GlobalSign)

    下载更新包就行了kb4474419 http www catalog update microsoft com search aspx q 61 kb4474419
  • linux下共享库(.so文件)的调用

    需要的文件 libxxxx so xxxx h 记住 复制文件的时候千万不要用ROOT权限 xff0c 不然编译时会找不到这个共享库 最好时把库放到 usr lib chmod 777 chown username CMakeLists t
  • 3.RT-Thread线程的创建与删除,动态线程、静态进程

    在实际应用中 xff0c 经常添加多个 c 文件和 h 文件 xff0c RT Thread借助自动构建系统 Scon xff0c 它会自动添加你的 c和 h文件到你的工程中 xff0c Scon工具根据package kernel目录下的
  • Windows环境下使用VSCode和CMake学习Eigen库的使用

    YOUTUBE LINK https www youtube com watch v 61 wP4cwAtU g8 Eigen xff1a http eigen tuxfamily org index php title 61 Main P
  • Linux环境下使用 VScode + CMake +CMakeTools开发调试 C++ 程序

    插件 xff1a Bracket Pair Colorizer xff1a 括号颜色区分 C C 43 43 IntelliSense xff1a 代码提示 Chinese Simplified Language Pack for Visu
  • 四旋翼定高篇之惯导加速度+速度+位置三阶互补融合方案

    2017年03月13日 原文链接 四旋翼定高篇之惯导加速度 43 速度 43 位置三阶互补融合方案 笔者最近正在做四旋翼惯性导航的部分 xff0c 利用加速度计进行速度估计 位置估计 xff0c 从而实现四旋翼的垂直方向上的定高 水平方向上