Arduino 101 IMU测试及问题

来源:互联网 发布:php留言板视频教程 编辑:程序博客网 时间:2024/04/30 21:47

关于惯导的实验及问题

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(外环角度)的任务。


0 0
原创粉丝点击