




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
新手四旋翼算法总结一姿态结算(匿名版程序)首先,程序中一般用了两种求解姿态的方法,一种为欧拉角法,一种为四元数法(1)欧拉角法静止状态,或者总加速度只是稍微大于g时,由加计算出的值比较准确。使用欧拉角表示姿态,令,和代表ZYX 欧拉角,分别称为偏航角、俯仰角和横滚角 。 载体坐标系下的 加 速 度(axB,ayB,azB)和参考坐标系下的加速度(axN, ayN, azN)之间的关系可表示为(1)。其中 c 和 s 分别代表 cos 和 sin。axB,ayB,azB就是mpu读出来的三个值。这个矩阵就是三个旋转矩阵相乘得到的,因为矩阵的乘法可以表示旋转。 (1)飞行器处于静止状态,此时参考系下的加速度等于重力加速度,即(2)把(2)代入(1)可以解的(3)(4)即为初始俯仰角和横滚角,通过加速度计得到载体坐标系下的加速度即可将其解出,偏航角可以通过电子罗盘求出。(2)四元数法(通过处理单位采样时间内的角增量(mpu的陀螺仪得到的就是角增量),为了避免噪声的微分放大,应该直接用角增量-抄的书) 上匿名的程序void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az) float norm;/ float hx, hy, hz, bx, bz; float vx, vy, vz;/ wx, wy, wz; float ex, ey, ez; / 先把这些用得到的值算好 float q0q0 = q0*q0; float q0q1 = q0*q1; float q0q2 = q0*q2;/ float q0q3 = q0*q3; float q1q1 = q1*q1;/ float q1q2 = q1*q2; float q1q3 = q1*q3; float q2q2 = q2*q2; float q2q3 = q2*q3; float q3q3 = q3*q3;if(ax*ay*az=0) return; norm = sqrt(ax*ax + ay*ay + az*az); /acc数据归一化 ax = ax /norm; ay = ay / norm; az = az / norm; / estimated direction of gravity and flux (v and w) vx = 2*(q1q3 - q0q2);/四元素中xyz的 vy = 2*(q0q1 + q2q3); vz = q0q0 - q1q1 - q2q2 + q3q3 ; / error is sum of cross product between reference direction of fields and direction measured by sensors ex = (ay*vz - az*vy) ; /向量外积在相减得到差分就是误差 ey = (az*vx - ax*vz) ; ez = (ax*vy - ay*vx) ; exInt = exInt + ex * Ki; /对误差进行积分 eyInt = eyInt + ey * Ki; ezInt = ezInt + ez * Ki; / adjusted gyroscope measurements gx = gx + Kp*ex + exInt; /将误差PI后补偿到陀螺仪,即补偿零点漂移 gy = gy + Kp*ey + eyInt; gz = gz + Kp*ez + ezInt; /这里的gz由于没有观测者进行矫正会产生漂移,表现出来的就是积分自增或自减 / integrate quaternion rate and normalise /四元素的微分方程 q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT; q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT; q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT; q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT; / normalise quaternion norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3); q0 = q0 / norm; q1 = q1 / norm; q2 = q2 / norm; q3 = q3 / norm; /Q_ANGLE.Yaw = atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2*q2 - 2 * q3* q3 + 1)* 57.3; / yaw Q_ANGLE.Y = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; / pitch Q_ANGLE.X = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; / roll逐条解释。姿态矩阵可以由以下两种方式表示第一个就是上图所说的欧拉角法(式(1),还有一个就是四元数法注意!1这里是CbR,假设b为四旋翼固连坐标系,R为参考坐标系,那么CbR表示b系到R系的坐标变换矩阵,由于(1)式表示的为R系到b系的坐标矩阵,要用上式表示,则要对四元数法矩阵求逆,又因为该矩阵为正交阵,逆等于转置,则描述R系到b系的四元数矩阵为此时矩阵跟1式矩阵一一对应。1. float q0q0 = q0*q0; float q0q1 = q0*q1; float q0q2 = q0*q2;/ float q0q3 = q0*q3; float q1q1 = q1*q1;/ float q1q2 = q1*q2; float q1q3 = q1*q3; float q2q2 = q2*q2; float q2q3 = q2*q3; float q3q3 = q3*q3;这段程序就是为了把需要用到的姿态矩阵的元素求出来给出的。2. vx = 2*(q1q3 - q0q2);/ vy = 2*(q0q1 + q2q3); vz = q0q0 - q1q1 - q2q2 + q3q3 ;可以看到vx,vy,vz为CRb的最后一列的三项,四元数矩阵带入(1)式得vx,vy,vz分别是axB,ayB,azB每一项g前的系数。且静止情况下vx,vy,vz组成向量模长基本可以认为为1.3. norm = sqrt(ax*ax + ay*ay + az*az); /acc数据归一化 ax = ax /norm; ay = ay / norm; az = az / norm;以上已说,由四元数倒推回去的加速度,向量模长为1,为了比较误差进行归1化,算的由加计得出的向量。4. ex = (ay*vz - az*vy) ; ey = (az*vx - ax*vz) ; ez = (ax*vy - ay*vx) ; 接着可以通过叉乘(向量外积)计算误差5. exInt = exInt + ex * Ki; eyInt = eyInt + ey * Ki; ezInt = ezInt + ez * Ki;对误差进行积分 6. gx = gx + Kp*ex + exInt; gy = gy + Kp*ey + eyInt; gz = gz + Kp*ez + ezInt;进行pi滤波7 q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT; q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT; q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT; q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;对四元数进行跟新,这里用的是方程的数值解法,求得的解释近似解,总之就是跟新了四元数8 norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3); q0 = q0 / norm; q1 = q1 / norm; q2 = q2 / norm; q3 = q3 / norm;对四元数进行规范化,即化为模长为1,因为只有规范化的四元数才能表示刚体旋转。9 Q_ANGLE.Y = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; / pitch Q_ANGLE.X = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; / roll仍旧一一对应关系发现2(q1q3 -q0q2)刚好跟欧拉角法的对应,由此利用自带库函数即可求得俯仰角,横滚角类似,偏航角由于没有罗盘进行校正求没有意义,控制中采用采用PD控制。补充,由于陀螺仪会有零点漂移开始一定要进行补偿。这段是在mpu6050.c中程序,对直流偏执进行了补偿。MPU6050_ACC_LAST.X=(int16_t)mpu6050_buffer0) 8) | mpu6050_buffer1) - ACC_OFFSET.X;MPU6050_ACC_LAST.Y=(int16_t)mpu6050_buffer2) 8) | mpu6050_buffer3) - ACC_OFFSET.Y;MPU6050_ACC_LAST.Z=(int16_t)mpu6050_buffer4) 8) | mpu6050_buffer5) - ACC_OFFSET.Z;MPU6050_GYRO_LAST.X=(int16_t)mpu6050_buffer8) 8) | mpu6050_buffer9) - GYRO_OFFSET.X;MPU6050_GYRO_LAST.Y=(int16_t)mpu6050_buffer10) 8) | mpu6050_buffer11) - GYRO_OFFSET.Y;MPU6050_GYRO_LAST.Z=(int16_t)mpu6050_buffer12) 8) | mpu6050_buffer13) - GYRO_OFFSET.Z;这里还要说一点,这里加速计的数据用的是滑动平均值滤波法void Prepare_Data(void)static uint8_t filter_cnt=0;int32_t temp1=0,temp2=0,temp3=0;uint8_t i;MPU6050_Read();MPU6050_Dataanl();ACC_X_BUFfilter_cnt = MPU6050_ACC_LAST.X;ACC_Y_BUFfilter_cnt = MPU6050_ACC_LAST.Y;ACC_Z_BUFfilter_cnt = MPU6050_ACC_LAST.Z;for(i=0;iFILTER_NUM;i+)temp1 += ACC_X_BUFi;temp2 += ACC_Y_BUFi;temp3 += ACC_Z_BUFi;ACC_AVG.X = temp1 / FILTER_NUM;ACC_AVG.Y = te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 思维训练的幼儿园数学试题与答案
- 2025东航招聘英语试题及答案
- 失眠药物治疗试题及答案
- 艺术市场数字化交易平台在艺术品市场交易市场开发中的应用报告
- 广西区考申论试题及答案
- 节奏与旋律相互影响的探索试题及答案
- 知晓创业扶持政策试题及答案
- 城市供水设施建设风险分析报告:2025年社会稳定风险评估与政策建议
- 物理实验中数据处理与分析试题及答案
- 湘潭医卫职业技术学院《当下文艺现象述评》2023-2024学年第一学期期末试卷
- 功能材料概论-课件
- XX单线铁路隧道施工设计
- 叶曼讲《道德经》讲义第1~10章
- 地下车库地坪施工工艺工法标准
- 生物化学工程基础(第三章代谢作用与发酵)课件
- 国家开放大学一网一平台电大《可编程控制器应用实训》形考任务1-7终结性考试题库及答案
- 农村户口分户协议书(6篇)
- (部编版一年级下册)语文第七单元复习课件
- SQ-02-绿色食品种植产品调查表0308
- 丽声北极星分级绘本第二级上Dinner for a Dragon 教学设计
- 活跃气氛的开场小游戏「培训破冰前必备」
评论
0/150
提交评论