新手四旋翼算法总结_贪心算法学习总结

2020-02-27 其他工作总结 下载本文

新手四旋翼算法总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“贪心算法学习总结”。

新手四旋翼算法总结 一.姿态结算(匿名版程序)

首先,程序中一般用了两种求解姿态的方法,一种为欧拉角法,一种为四元数法

(1)欧拉角法静止状态,或者总加速度只是稍微大于g时,由加计算出的值比较准确。

使用欧拉角表示姿态,令Φ,θ和Φ代表ZYX 欧拉角,分别称为偏航角、俯仰角和横滚角。载体坐标系下的 加 速 度(axB,ayB,azB)和参考坐标系下的加速度(axN, ayN, azN)之间的关系可表示为(1)。其中 c 和 s 分别代表 cos 和 sin。axB,ayB,azB就是mpu读出来的三个值。

这个矩阵就是三个旋转矩阵相乘得到的,因为矩阵的乘法可以表示旋转。

ccaxBayBcsssc azBsscsccsccssssccsssaxNayN(1)scccazNaxN0ayN0(2)azNg飞行器处于静止状态,此时参考系下的加速度等于重力加速度,即

把(2)代入(1)可以解的arctg(axBaa2yB2zB)(3)

arctgayB(4)azB即为初始俯仰角和横滚角,通过加速度计得到载体坐标系下的加速度即可将其解出,偏航角可以通过电子罗盘求出。

(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*(q1q3q1q1az*vy);

//向量外积在相减得到差分就是误差

ey =(az*vxay*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*gxq3*gz)*halfT;

q1 = q1 +(q0*gx + q2*gzq1*gz + q3*gx)*halfT;

q3 = q3 +(q0*gz + q1*gy2 * 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 * q1q0q2);

/

vy = 2*(q0q1 + q2q3);

vz = q0q0q2q2 + 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*vzax*vz);

ez =(ax*vyq2*gyq3*gy)*halfT;

q2 = q2 +(q0*gyq2*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 * q1ACC_OFFSET.X;MPU6050_ACC_LAST.Y=((((int16_t)mpu6050_buffer[2])

这里还要说一点,这里加速计的数据用的是滑动平均值滤波法 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_BUF[filter_cnt] = MPU6050_ACC_LAST.X;ACC_Y_BUF[filter_cnt] = MPU6050_ACC_LAST.Y;ACC_Z_BUF[filter_cnt] = MPU6050_ACC_LAST.Z;for(i=0;i

temp1 += ACC_X_BUF[i];

temp2 += ACC_Y_BUF[i];

temp3 += ACC_Z_BUF[i];}

ACC_AVG.X = temp1 / FILTER_NUM;ACC_AVG.Y = temp2 / FILTER_NUM;ACC_AVG.Z = temp3 / FILTER_NUM;filter_cnt++;if(filter_cnt==FILTER_NUM)filter_cnt=0;

GYRO_I.X += MPU6050_GYRO_LAST.X*Gyro_G*0.0001;GYRO_I.Y += MPU6050_GYRO_LAST.Y*Gyro_G*0.0001;GYRO_I.Z += MPU6050_GYRO_LAST.Z*Gyro_G*0.0001;} 资料在附带文件中。

四旋翼产品说明书稿

2012年辽宁省普通高等学校大学生 机械设计大赛参赛作品说明书参赛单位:辽东学院 设计课题:四轴碟形飞行器参赛学生:吴家帅、李成祥、石 岩、祁 勇、杨惠麟 指导教师:刘 瀛、刘广......

纸旋翼

《纸飞机》教学设计教学目标:1、初步了解影响纸飞机留空时间长短的因素;2、初步掌握调整纸飞机中的方法。4、发展观察、分析思考、动手实验、改进创新的能力;5、进一步激发学生......

纸旋翼

《纸飞机》教学设计教学目标:1、初步了解影响纸飞机留空时间长短的因素;2、初步掌握调整纸飞机中的方法。4、发展观察、分析思考、动手实验、改进创新的能力;5、进一步激发学生......

关于四旋翼飞行器的心得

关于四旋翼飞行器的心得对于飞行器或者航模之类的映像,是在高中时期,学校有航模小组,经常可以看到拿着航模的学生在进行试飞,当时心中感觉“航模”是非常有意思并且“高科技”。......

四旋翼飞行器的稳定悬停与飞行设计论文

刀豆文库小编为你整合推荐4篇四旋翼飞行器的稳定悬停与飞行设计论文,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......

《新手四旋翼算法总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
新手四旋翼算法总结
点击下载文档
相关专题 贪心算法学习总结 算法 新手 旋翼 贪心算法学习总结 算法 新手 旋翼
[其他工作总结]相关推荐
[其他工作总结]热门文章
下载全文