Arduino 101 IMU测试及问题
2016-05-22 23:44
288 查看
关于惯导的实验及问题
1. 平台:Arduino101
2. 陀螺仪与加速度计:
BMI 160,即博世160,集成在了arduino101的硅片上
具体可以查看官网英文介绍,并且官网介绍中可以直接下载到BMI160的datasheet,看上去应该只是在arduino里面把它包装起来,做成了库的形式
3. 此次使用了两种方法进行姿态解算
第一种是调用MadgwickAHRS算法库
由于没有磁阻计的信息,所以并不是AHRS,而是IMU,进入了Update IMU函数里面
仔细观察MadgwickAHRS算法库发现里面用的姿态误差补偿算法是梯度下降法,通过计算目标梯度,逆着梯度向上求得极小值,此处将0视为误差函数的一个极小值。(貌似是)
此处程序中,加入了加速度计的IIR滤波和陀螺仪的两点的滑动窗口滤波(加速度计的IIR滤波没仔细研究,是直接移植的可能有问题)
之后调用MadgwickAHRS库里面的函数,采样频率和解算频率是1000Hz
由于没有试验台,此处用手将Arduino101转到约30度,等待一段时间,将
Arduino101放平。模拟阶跃信号,观察串口输出的pitch的图像如图所示。
问题:发现在小角度下动态特性比较好,能较为准确地反映角度变化,但是如果放大角度,例如30度,会经过一个较长的时间才能准确达到目标值。
第二种是使用互补滤波
互补滤波移植自烈火的小四轴,同样加入了加速度计的IIR滤波和陀螺仪的两点的滑动窗口滤波
互补滤波的实质是取加速度计读取方向与重力加速度方向的差值,送入一个PI控制器,发现效果和上面第一个方法即使用梯度下降法的相差不大
4. 移植了一个串级PID的程序。
主循环里面分别跑一个1000Hz(姿态解算),500Hz(内环角速度), 250Hz(外环角度)的任务。
1. 平台:Arduino101
2. 陀螺仪与加速度计:
BMI 160,即博世160,集成在了arduino101的硅片上
具体可以查看官网英文介绍,并且官网介绍中可以直接下载到BMI160的datasheet,看上去应该只是在arduino里面把它包装起来,做成了库的形式
3. 此次使用了两种方法进行姿态解算
第一种是调用MadgwickAHRS算法库
由于没有磁阻计的信息,所以并不是AHRS,而是IMU,进入了Update IMU函数里面
仔细观察MadgwickAHRS算法库发现里面用的姿态误差补偿算法是梯度下降法,通过计算目标梯度,逆着梯度向上求得极小值,此处将0视为误差函数的一个极小值。(貌似是)
此处程序中,加入了加速度计的IIR滤波和陀螺仪的两点的滑动窗口滤波(加速度计的IIR滤波没仔细研究,是直接移植的可能有问题)
之后调用MadgwickAHRS库里面的函数,采样频率和解算频率是1000Hz
由于没有试验台,此处用手将Arduino101转到约30度,等待一段时间,将
Arduino101放平。模拟阶跃信号,观察串口输出的pitch的图像如图所示。
问题:发现在小角度下动态特性比较好,能较为准确地反映角度变化,但是如果放大角度,例如30度,会经过一个较长的时间才能准确达到目标值。
第二种是使用互补滤波
互补滤波移植自烈火的小四轴,同样加入了加速度计的IIR滤波和陀螺仪的两点的滑动窗口滤波
互补滤波的实质是取加速度计读取方向与重力加速度方向的差值,送入一个PI控制器,发现效果和上面第一个方法即使用梯度下降法的相差不大
4. 移植了一个串级PID的程序。
主循环里面分别跑一个1000Hz(姿态解算),500Hz(内环角速度), 250Hz(外环角度)的任务。
相关文章推荐
- bzoj4059【Cerc2012】Non-boring sequences
- Windows Server 2012 GUI与Core的切换
- hdu 2604 Queuing(矩阵优化DP)
- Android UI(Layouts)-RelativeLayout详解
- 5. soapui 测试
- 30天C#基础巩固------this,base,string中的方法,StringBuilder性能
- android studio 编译出现Instant Run requires 'tools|Android|Enable adb integration' to be enabled错误解决方式'
- UI基础第三天(知识点)
- Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
- Service给Activity传递参数更改UI
- LeetCode 63. Unique Paths II
- Equeue初识
- String,StringBuffer与StringBuilder的区别??
- Android高级UI SwipeRefreshLayout下拉刷新
- 动画requestAnimationFrame
- Notification.Builder 实现基本通知和自定义view通知
- 令人崩溃的@requestBody乱码一例
- ORCLE10安装常见配置问题-oui.exe停止工作
- IndexedRDD:高效可更新的Key-value RDD
- HDU 1242 Rescue (BFS+优先队列)