四旋翼基础算法学习2-IMU输入滤波算法
前言:
处理器读取陀螺仪加速度计数据后首先需要对数据进行滤波处理,此文分析比较几种常用的滤波算法。
参考学习:四轴加速度计滤波
IMU:
IMU使用MPU9250(即MPU6500),设置加速度量程±8G,陀螺仪±2000dps,数字低通滤波设置42Hz。
IMU采集频率:Crazepony 100Hz(10ms),匿名小四 1000Hz(1ms),圆点博士小四333Hz(3ms)。本次测试使用250Hz(4ms)。
在从传感器读取的原始数据滤波之前,一般需要进行零偏校准。一般陀螺仪需要上电校准零偏,加计的零偏与IMU安装有关,校准一次以后上电始终使用校准值即可(或者不予校准)。零偏校准方法基本都是水平静止放置机体多次采样取均值。
三轴加速度三轴陀螺仪原始数据 –> 减去零偏 –> 数据滤波
加速度计滤波:
滤波方法有 滑动均值滤波,2阶低通滤波
使用匿名地面站显示加速度数据波形,滤波后数据由陀螺仪通道波形显示。
ACC_X 原始加速度x轴数据
ACC_Y 原始加速度y轴数据
ACC_Z 原始加速度z轴数据
GYRO_X 滤波后加速度x轴数据
GYRO_Y 滤波后加速度x轴数据
GYRO_Z 滤波后加速度z轴数据
1.加速度计滑动均值滤波
代码:
#define SAF_NUM 10void Slide_Average_Filter(int16_t acc_x,int16_t acc_y,int16_t acc_z,int16_t *acc_out_x,int16_t *acc_out_y,int16_t *acc_out_z){static uint8_t filter_cnt=0,cnt=0;static int16_t filter_buffer[3][SAF_NUM];int32_t temp1=0,temp2=0,temp3=0;filter_buffer[0][filter_cnt]=acc_x;filter_buffer[1][filter_cnt]=acc_y;filter_buffer[2][filter_cnt]=acc_z;for(cnt=0;cnt<SAF_NUM;cnt++){temp1 += filter_buffer[0][cnt];temp2 += filter_buffer[1][cnt];temp3 += filter_buffer[2][cnt];}*acc_out_x = temp1/SAF_NUM;*acc_out_y = temp2/SAF_NUM;*acc_out_z = temp3/SAF_NUM;filter_cnt++;if(filter_cnt==SAF_NUM)filter_cnt=0;}
水平静止放置然后拍击三次桌子 下图

水平静止放置然后旋转晃动 下图

滑动滤波大体上消除了静止时的微小抖动,平滑了波形,但是能看到少许的延时。
2.加速度计2阶低通滤波
四旋翼基础算法学习2-IMU输入滤波算法的更多相关文章
- 数据挖掘算法学习(一)K-Means算法
博主近期实习開始接触数据挖掘,将学习笔记分享给大家.眼下用的软件是weka.下篇文章会着重解说. 转载请附上链接http://blog.csdn.net/iemyxie/article/details ...
- 数据挖掘算法学习(三)NaiveBayes算法
算法简单介绍 NBC是应用最广的分类算法之中的一个.朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率.同一时候,NBC模型所需预计的參数非常少,对缺失数据不太敏感,算法也比較简 ...
- 数据挖掘算法学习(八)Adaboost算法
本文不定期更新.原创文章,转载请附上链接http://blog.csdn.net/iemyxie/article/details/40423907 谢谢 Adaboost是一种迭代算法,其核心思想是针 ...
- 算法学习导图+经典排序算法PHP实现
周末抽时间整理下算法,完整导图可点击下面链接获取. 点我看完整算法导图 八种排序算法的php实现 代码如下 拷贝后可直接运行 先上个运行后的图 代码:(有的自己些的 有的根据网友整理) <?ph ...
- PHP算法学习(4) 随机算法
svn地址:svn://gitee.com/zxadmin/live_z <?php /* * 随机数算法 * 伪随机数 根据分布概率 */ final class Random { /* * ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- php四种基础排序算法的运行时间比较
/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...
- 算法学习之C语言基础
算法学习,先熟悉一下C语言哈!!! #include <conio.h> #include<stdio.h> int main(){ printf(+); getch(); ; ...
- 第四百一十四节,python常用算法学习
本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...
随机推荐
- unity 实现调用Windows窗口/对话框交互
Unity调用Window窗口 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- 51Nod 1070:Bash游戏 V4(斐波那契博弈)
1070 Bash游戏 V4 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量最少1个 ...
- 特殊符号 sort_wc_uniq命令 tee_tr_split命令
* 任意个 任意字符 ? 任意一个字符 # 注释字符 \ 转意符 | 管道符 (之前有说过) cut 命令: cut -d "&quo ...
- django 有关session内部函数做法
session在set和调用时其实分别做了三步: def fileupload(request): request.session['k1'] = 'ppp' ''' .生成一个随机字符串 .set_ ...
- C++学习(十八)(C语言部分)之 指针2
指针1.指针的概述 指针是什么? 指针是一个地址 是一个常量 int 整型 int a a是变量 指针用来做什么? 方便使用数组或者字符串 像汇编语言一样处理内存地址2.指针变量 什么是指针变量? 是 ...
- 打开网页直接弹出qq对话框?
代码一: http://wpa.qq.com/msgrd?v=3&uin=此处输入QQ号&site=qq&menu=yes 代码二: <iframe src=" ...
- 【数据库】jdbc详解
try { if(resultSet!=null){ resultSet.close(); } }catch (SQLException e){ e.printStackTrace(); }final ...
- MySQL Binlog信息查看
##=====================================## ## 在MySQL内部查看binlog文件列表 ## SHOW BINARY LOGS; ##=========== ...
- C#使用Xamarin开发Android应用程序 -- 系列文章
Xamarin开发Android应用程序 利用Xamaria构建Android应用-公交发车信息屏 Xamarin版的C# SVG路径解析器 C#使用Xamarin开发可移植移动应用(1.入门与Xam ...
- APACHE REWRITE ? 匹配问号的写法
RewriteRule 不会去匹配 ? 后面的字符串,需要用RewriteCond来匹配 把 /abc?id=123 => /def.php?id=123 的写法: RewriteEng ...