打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
圆点博士——代码注释——初版——来自波波——accfilter.c
四轴飞行器
//     Copyright (c) 2013 js200300953@qq.com All rights reserved.
//         ==================================================
//         ========圆点博士微型四轴飞行器配套软件声明========
//         ==================================================
//     圆点博士微型四轴飞行器配套软件包括上位机程序、下位机Bootloader
// 、下位机App和遥控程序,及它们的源代码,以下总称“软件”。
//     软件仅提供参考,js200300953不对软件作任何担保,不对因使用该软件
// 而出现的损失负责。
//     软件可以以学习为目的修改和使用,但不允许以商业的目的使用该软件。
//     修改该软件时,必须保留原版权声明。
//
//     更多资料见:
// http://blog.sina.com.cn/js200300953
// http://www.etootle.com/
// http://www.eeboard.com/bbs/forum-98-1.html#separatorline
// 圆点博士微型四轴飞行器QQ群:276721324
// app/attitude/accfilter.c
// 2013-1-8 15:51:54
// js200300953
//波:  此为加速度计 滤波 初始化 全部设置为0  然后 再读取
#include "accfilter.h"
#define ACCFILTER_AVG_NUM 16        //波:设置 滤波次数 样本数吧
static float accfilter_history[ACCFILTER_AVG_NUM][3]; //波:static 静态变量 不随函数的结束而结束 数值为上一次调用后修改的值
static float accfilter_current[3];                      //波:此为静态变量 不释放
static uint8_t accfilter_index;                       //波: index指数 索引 指针
void accfilter_init(void);                             //波:加速度滤波 初始化
void accfilter_input(const float val[3]);                //波:加速度 输入 记住 输入量为const 只读 不能修改
const float * accfilter_getCurrent(void);             //波:const 只读模式 不能更改 只能在初始化处更改
//波:定义一个 指针 只读 量 也就是 对一个地址 取数据吧
void accfilter_init(void)
{
for(int i=0;i
{
for(int j=0;j<3;j++)
accfilter_history[i][j] = 0;        //波:将历史数据 初始化 为全零
}
for(int i=0;i<3;i++)
accfilter_current[i] = 0;                //波:当前数据 初始化 为全零
accfilter_index = 0;                            //波:指标数据 也为零
}
//波:加速度 滤波 过滤 valid 有效值
//波:输入为val[] 改变加速度计的值 三轴 故三次赋值 每次更新只占当前加计值的 1/16 其值赋给一个全局变量
//波:本来就是一个累加过程 然后 取平均
void accfilter_input(const float val[3])
{
for(int i=0;i<3;i++)
accfilter_history[accfilter_index][i] = val[i];  //波: 初始为val的三个值  读取一组  数组类型为 16*3 16为取样16次 3为 每次3个内容即变量或者数值
accfilter_index ++;                  //波:取样样本 变量加加
if(accfilter_index >= ACCFILTER_AVG_NUM)       //波:此为 滤波处理的 样本值
accfilter_index = 0;
//
float sum[3] = {0,0,0};                                //波:累加值 初始化为0
for(int i=0;i
{                                                     //波:过程为 当前值 与几次历史值相加 累加取样次数 然后 再求取平均
sum[0] += accfilter_history[i][0];                 //波:历史值 其实 就是 val输入的值
sum[1] += accfilter_history[i][1];
sum[2] += accfilter_history[i][2];
}
//
for(int i=0;i<3;i++)
accfilter_current[i] = sum[i] * (1.0f/ACCFILTER_AVG_NUM);   //波:返回为浮点型 因为_index也为静态变量 函数结束 不释放
//波:故可以 多次调用此函数 满16次 清为零
//波:而val的输入值 我估计来自 mpu6050
//波:这个平均滤波 只跟最近的16次采样有关 初始化时 全为零
//
}
//波:为什么 非要用指针呢 不是随便一个函数 都行吗 意思不就是要返回一个当前 加计滤波值
//波:其实 在accfilter_input中直接返回 但是 这个函数 简单化 只处理返回当前加计值
const float * accfilter_getCurrent(void)
{
return accfilter_current;                                          //波:返回值 为accfilter_current[0] 我认为是这样的 但是应该是
//波:三个值 因为对应着 三个轴的加速度
}
//波:说白了 此文件下函数 accfilter.c就是 将mpu6050 读取的数值 16*3(因为 读取的是三个姿态的哦!亲)个数相加 然后取平均
//波:没别的意思 之前卡住 完全是 没理解 const static 的内涵
//波:现在 还有疑问 为什么用指针 获取 当前姿态 (滤波后的) 普通函数不也行吗 还是 说 已经把此姿态放到一个 地址中以后读取该地址即可的
//波:当前滤波后的姿态
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Keil C51的库函数
C++面向对象入门这一篇就够了
分享一个自用的、极简的log模块!
C
函数模板 类模板
STM32实现IIR低通滤波器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服