首页 > 编程知识 正文

lf205-s,六轴姿态传感器

时间:2023-05-04 20:26:46 阅读:174270 作者:1618

1姿势检测

1.1 Roll-Pitch-Yaw模型和姿态计算是表示飞机当前飞行姿态的常用模型之一,建立下图所示坐标系,用Roll表示绕x轴旋转,用pitch表示绕y轴旋转,用yaw表示绕z轴旋转。

MPU6050可以获得3个轴方向的加速度,而地球的重力长期存在,永远垂直向下,所以可以以重力加速度相对于芯片的方向为基准计算出现在的姿势。

为了方便起见,芯片正面朝下固定在上图的飞机上,坐标系和飞机坐标系完全一致,以3个轴方向的加速度为成分,可以构成加速度矢量a(x,y,z )。 假设当前码片处于等速直线运动状态,a垂直于地面,即指向z轴负方向,模长为|a|=g=sqrt{X^ 2 Y^ 2 z^ 2}。 当芯片(坐标系)旋转时,加速度向量a仍然垂直向上,因此z轴的负方向不再与a重合。 请参照下图。

为了方便,上图坐标系的z轴正方向(机腹及芯片正面)向下,x轴正方向)飞机前进方向)向右。 此时,芯片的滚转角是加速度矢量与投影在XZ平面上的) x、0、z )所成的角,俯仰角)绿色)与投影在YZ平面上的) 0、y、z )所成的角。 要计算两个向量之间的角,请将点乘以表达式。 通过简单的推导就可以得到。

然后呢

请注意,arccos函数只返回正角度,因此在某些情况下需要为角度取正值和负值。 如果y值为正,则滚动角为负值,如果x轴为负,则俯仰角为负值。

1.2 Yaw角问题由于没有参考量,无法求出现在的Yaw角的绝对角度,只能得到Yaw的变化量,即角速度GYR_Z。 当然,通过对GYR_Z进行积分可以推测当前的Yaw角,但是由于测量精度的问题,推测值会发生漂移,过了一段时间就完全失去了意义。 但是,在很多APP应用中,如无人机,获取GRY_Z就可以了。

在必须获得绝对的Yaw角度的情况下,必须选择被称为MPU9250的9轴运动跟踪芯片。 这可以提供额外的三轴指南针数据,这可以从地球磁场方向计算Yaw角度。 具体方法在此不赘述。

在2 MPU-6050 1,16位ADC中,每轴输出的数据是2^16,也就是-32768 — 32768

2、高达400kHz的高速I2C或高达20MHz的SPI串行主机接口

2.1陀螺灵敏度可测量范围dps灵敏度LSB25013150065.5100032.8200016.4设置为250,-32768 —- 32768表示-250 — 250

角速度数据 = (pi/180) * 轴原始数据 / 加速度灵敏度 (rad/s)

Data=数据前8位|数据后8位

Pi=3.1415926;

=(pi/180 )数据/16.4 ) rad/s )

2.2加速度灵敏度可测量范围g灵敏度LSB2163844819284096162048http://www.Sina.com /

Data=数据前8位|数据后8位

a=9.8*data/2048(m/s^2) )

3 LSM6DS3

从传感器获取的数据以LSB为单位,需要转换单位

3.1加速度加速度数据 = 轴原始数据 / 加速度灵敏度

2g时,加速度数据=轴元数据* 0.061 (切换单位为mg )/1000 (切换单位为g ) )

换算后如下。

加速度数据 = 轴原始数据 * Typ / 1000

可测量范围g灵敏度LSB216393.4448196.7284098.36162049.183.2陀螺仪*角速度数据=(pi/180轴原始数据* Typ/1000

125时,加速度数据=(pi/180 )轴元数据) * 4.375 )切换单位为mbps )/1000 )切换单位为bps )

换算后如下。

*角速度数据=(pi/180 )轴原始数据/加速度灵敏度

可测范围dps灵敏度LSB125228.57250114.2950057.14100028.57200014.29校准是一项比较简单的工作,晃动的数据只需要找到中心点。 举例来说,当芯片处理静止状态时,理论上该读数必须为0,但经常存在偏移。 例如,在以10ms的间隔读取10个值的情况下,如下。

-158.4、-172.9、-134.2、-155.1、-131.2、-146.8、-173.1、-188.6、-142.7和-179.5这10个值的平均值,即此读数的偏移当然,这个偏移量是估计值,相对准确的偏移量需要统计大量的数据才能知道。 数据量越大越准确,但统计所需的时间也越慢。 一般的校准可以在每次启动系统时进行

进行,那么你应当在准确度和启动时间之间做一个权衡。

算法求欧拉角 四元数法

可通过软件实现,六个数据转化成四元数(q0、q1、q2、q3),然后四元数转化成欧拉角(P、R、Y 角)
芯片自身也带这个功能,通过配置DMP可以快速获取欧拉角(P、R、Y 角)

// 变量定义 #define Kp 100.0f // 比例增益支配率收敛到加速度计/磁强计#define Ki 0.002f // 积分增益支配率的陀螺仪偏见的衔接#define halfT 0.001f // 采样周期的一半 float q0 = 1, q1 = 0, q2 = 0, q3 = 0; // 四元数的元素,代表估计方向float exInt = 0, eyInt = 0, ezInt = 0; // 按比例缩小积分误差 float Yaw,Pitch,Roll; //偏航角,俯仰角,翻滚角 //加速度单位g,陀螺仪rad/svoid IMUupdate(float gx, float gy, float gz, float ax, float ay, float az){ float norm; float vx, vy, vz; float ex, ey, ez; // 测量正常化 norm = sqrt(ax*ax + ay*ay + az*az); ax = ax / norm; //单位化 ay = ay / norm; az = az / norm; // 估计方向的重力 vx = 2*(q1*q3 - q0*q2); vy = 2*(q0*q1 + q2*q3); vz = q0*q0 - q1*q1 - q2*q2 + q3*q3; // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和 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; // 调整后的陀螺仪测量 gx = gx + Kp*ex + exInt; gy = gy + Kp*ey + eyInt; gz = gz + Kp*ez + ezInt; // 整合四元数率和正常化 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; // 正常化四元 norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3); q0 = q0 / norm; q1 = q1 / norm; q2 = q2 / norm; q3 = q3 / norm; Pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch ,转换为度数 Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // rollv //Yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //偏移太大,等我找一个好用的}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。