极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 黑马

我的自平衡小车D3——滤波算法

  [复制链接]
发表于 2012-5-14 12:47:19 | 显示全部楼层
通过加速度计算的角度值与实际传感器的倾斜角度比较接近,而滤波后的角度与实际的角度相差有点大。
下图是我将传感器翻转到90度方向测量值,第一列数据位时间,第二列数据位加速度计算的角度值,
第三列数据为一阶滤波,第四列数据为二阶滤波。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-6-9 00:28:41 | 显示全部楼层
求解绘图过程
回复 支持 反对

使用道具 举报

发表于 2012-6-11 10:47:05 | 显示全部楼层
有没其他滤波直接可以用的代码啊??
回复 支持 反对

使用道具 举报

发表于 2012-6-11 23:26:04 | 显示全部楼层
MPU-6050的一阶互补滤波


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-6-12 12:59:04 | 显示全部楼层
请教:
float dt = (timer - o_timer) / 1000.0;
dt是什么意思?(timer - o_timer) 是运行程序一遍所用的时间吗?包不包括前期设置变量和setup所费的时间?
1000.0; 这个数值是怎么得出的?
谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-12 13:15:34 | 显示全部楼层
我爱胆机妙音 发表于 2012-6-12 12:59
请教:
float dt = (timer - o_timer) / 1000.0;
dt是什么意思?(timer - o_timer) 是运行程序一遍所用的 ...

一次loop的时间,就是每两次采样的间隔,前面的都是启动时运行一次,loop里的内容才是循环的。
除以1000是把毫秒换算成秒。
回复 支持 反对

使用道具 举报

发表于 2012-6-12 20:46:31 | 显示全部楼层
多谢,请问怎样用加速度计得出角度?貌似没有看到三角函数啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-13 10:03:02 | 显示全部楼层
我爱胆机妙音 发表于 2012-6-12 20:46
多谢,请问怎样用加速度计得出角度?貌似没有看到三角函数啊?

角度比较小的时候不用三角函数误差也没多大,三角函数计算比较耗资源
回复 支持 反对

使用道具 举报

发表于 2012-6-13 19:21:08 | 显示全部楼层
Fixed timed loop
The main loop duration is critical for the filtering and PID modules
  1. int STD_LOOP_TIME = 9;
  2. int lastLoopTime = STD_LOOP_TIME;
  3. int lastLoopUsefulTime = STD_LOOP_TIME;
  4. unsigned long loopStartTime = 0;

  5. void loop()  {

  6. // your code ...


  7. // *********************** loop timing control **************************
  8.   lastLoopUsefulTime = millis()-loopStartTime;
  9.   if(lastLoopUsefulTime<STD_LOOP_TIME)         delay(STD_LOOP_TIME-lastLoopUsefulTime);
  10.   lastLoopTime = millis() - loopStartTime;
  11.   loopStartTime = millis();
  12. }
复制代码
请教:这一段程序是计算一个循环所用的时间的,为什么不能在循环开始和结束时分别使用millis()函数,  然后将这两个时间值相减得到一个循环所用时间,而写的这么复杂呢?
这段代码第一行“int STD_LOOP_TIME = 9;”怎么理解?为什么等于9?9是怎样定出来的?

This loop runs 100 times per second (100 Hz)
Motor will receive an updated PWM value every 10 milliseconds

程序每秒钟循环100次,这个值是怎么定出来的?怎样改为1000次?
刚接触arduino 请多关照,谢谢。
回复 支持 反对

使用道具 举报

发表于 2012-6-21 10:38:13 | 显示全部楼层

黑马,大侠
请问下从txt数据导入到excel,怎么更快捷的整个导入,就可以直接分析呢
我从串口那得到的数据,还要一个个的复制黏贴,感觉效率太低了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-6-24 18:46:40 | 显示全部楼层
为什么你们都能正常运行呢?
没人觉得这一段很奇怪吗
  1. int v;
  2.     byte vL, vH, address;               // 存放byte数值
  3.     if (device == Acc) address = 0x32;  // ADXL345的读数地址
  4.     if (device == Gyr) address = 0xA8;  // L3G4200D的读数地址
  5.     if (device == Mag) address = 0x03;  // HMC5883L的读数地址
  6.     address = address + axis * 2;       // 数据偏移-坐标轴
  7.     Wire.beginTransmission(device);     // 开始传输数据
  8.     Wire.send(address);                 // 发送指针
复制代码
回复 支持 反对

使用道具 举报

发表于 2012-8-8 19:46:21 | 显示全部楼层
楼主,请教个问题,这个二阶互补滤波算法是怎么回事?貌似在网上没找到啊!
回复 支持 反对

使用道具 举报

发表于 2012-8-9 09:47:01 | 显示全部楼层
二阶互补算法怎么比一阶的还快,这算怎么回事?
回复 支持 反对

使用道具 举报

发表于 2012-8-20 17:19:45 | 显示全部楼层
35.    angleG = angleG + omega * dt;           // 对角速度积分得到的角度(degree)

对这句不太理解,angleG 一直在累加,这个数值的意义是什么?
回复 支持 反对

使用道具 举报

发表于 2012-11-2 19:26:33 | 显示全部楼层
我尝试版主的程式,可以烧,可是监视却没有出现数据,不知道哪里出错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 03:51 , Processed in 0.043951 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表