赞
踩
关于惯导的实验及问题
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(外环角度)的任务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。