一、获取初始数据
void mpu_get_data()
{
mpu_read_bytes(MPU6500_ACCEL_XOUT_H, mpu_buff, 14);
mpu_data.ax = mpu_buff[0] << 8 | mpu_buff[1];
mpu_data.ay = mpu_buff[2] << 8 | mpu_buff[3];
mpu_data.az = mpu_buff[4] << 8 | mpu_buff[5];
mpu_data.temp = mpu_buff[6] << 8 | mpu_buff[7];
mpu_data.gx = ((mpu_buff[8] << 8 | mpu_buff[9]) - mpu_data.gx_offset);
mpu_data.gy = ((mpu_buff[10] << 8 | mpu_buff[11]) - mpu_data.gy_offset);
mpu_data.gz = ((mpu_buff[12] << 8 | mpu_buff[13]) - mpu_data.gz_offset);
memcpy(&imu.ax, &mpu_data.ax, 6 * sizeof(int16_t));
imu.temp = 21 + mpu_data.temp / 333.87f;
imu.wx = mpu_data.gx / 16.384f / 57.3f;
imu.wy = mpu_data.gy / 16.384f / 57.3f;
imu.wz = mpu_data.gz / 16.384f / 57.3f;
}
二、更新数据
void imu_ahrs_update(void)
{
float norm;
float hx, hy, hz, bx, bz;
float vx, vy, vz, wx, wy, wz;
float ex, ey, ez