UM6传感器的互补滤波器问题。 (偏航不过滤) [英] Problem with Complementary filter for UM6 sensor. (yaw does not filter )

查看:83
本文介绍了UM6传感器的互补滤波器问题。 (偏航不过滤)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Data.Roll -= ((float)Data.Gyro_Raw[0] / GYROSCOPE_SENSITIVITY) * dt;    // Angle around the Y-axis

Data.Pitch += ((float)Data.Gyro_Raw[1] / GYROSCOPE_SENSITIVITY) * dt; // Angle around the X-axis

Data.Yaw += ((float)Data.Gyro_Raw[2] / GYROSCOPE_SENSITIVITY) * dt;

									 
roll =     sqrt(((float)Data.Accel_Raw[0]*(float)Data.Accel_Raw[0])+((float)Data.Accel_Raw[2]*(float)Data.Accel_Raw[2]));

pitch = sqrt(((float)Data.Accel_Raw[1]*(float)Data.Accel_Raw[1])+((float)Data.Accel_Raw[2]*(float)Data.Accel_Raw[2]));

yaw = sqrt(((float)Data.Accel_Raw[0]*(float)Data.Accel_Raw[0])+((float)Data.Accel_Raw[1]*(float)Data.Accel_Raw[1]));
									
int forceMagnitudeApprox = abs(Data.Accel_Raw[0]) + abs(Data.Accel_Raw[1]) + abs(Data.Accel_Raw[2]);
if (forceMagnitudeApprox > 8192 && forceMagnitudeApprox < 32768)
	{

// Turning around the Y axis results in a vector on the X-axis
rollAcc = atan2f((float)Data.Accel_Raw[1], roll) * 180 / M_PI;
Data.Roll = (Data.Roll) * 0.98f + rollAcc * 0.02f;
cout <<Data.Roll<<"\t";
				
// Turning around the X axis results in a vector on the Y-axis
pitchAcc = atan2f((float)Data.Accel_Raw[0], pitch) * 180 / M_PI;
Data.Pitch = (Data.Pitch) * 0.98f + pitchAcc * 0.02f;
cout <<Data.Pitch<<"\t";

yawAcc = atan2f(yaw, (float)Data.Accel_Raw[2]) * 180 / M_PI;
Data.Yaw = (Data.Yaw) * 0.98f + yawAcc * 0.02f;
cout <<Data.Yaw<<"\t\n";
				
}





加速计传感器的灵敏度为1 mg / LSB +/- 2g



Accelerometer sensor has sensitivity 1 mg/LSB with +/- 2g

推荐答案

这篇关于UM6传感器的互补滤波器问题。 (偏航不过滤)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆