This site uses cookies for analytics, personalized content and ads. By continuing to browse this site, you agree to this use. Learn more

Forum› Xamarin.iOS
##
Quick Links

# Calculating Lean Angle with core motion of iOS device

ADeCraemer
USMember ✭✭

Hi all,

I am trying to calculate the lean angle/inclination of my iOS device. I did a lot of research and found a way how to give me the most accurate lean angle/inclincation. I used quaternion to calculate it.

This is the code that I use to calculate it.

` public void CalculateLeanAngle ()`

{ motionManager = new CMMotionManager (); motionManager.DeviceMotionUpdateInterval = 0.02; if (motionManager.DeviceMotionAvailable) { motionManager.StartDeviceMotionUpdates (CMAttitudeReferenceFrame.XArbitraryZVertical, NSOperationQueue.CurrentQueue, (data, error) => { CMQuaternion quat = motionManager.DeviceMotion.Attitude.Quaternion; double x = quat.x; double y = quat.y; double w = quat.w; double z = quat.z; double degrees = 0.0; //Roll double roll = Math.Atan2 (2 * y * w - 2 * x * z, 1 - 2 * y * y - 2 * z * z); Console.WriteLine("Roll: " + Math.Round(-roll * 180.0/Constants.M_PI)); degrees = Math.Round (-applyKalmanFiltering (roll) * 180.0 / Constants.M_PI); string degreeStr = string.Concat (degrees.ToString (), "°"); this.LeanAngleLbl.Text = degreeStr; }); }

`public double applyKalmanFiltering (double yaw)`

{ // kalman filtering if (motionLastYaw == 0) { motionLastYaw = yaw; } float q = 0.1f; // process noise float r = 0.1f; // sensor noise float p = 0.1f; // estimated error float k = 0.5f; // kalman filter gain double x = motionLastYaw; p = p + q; k = p / (p + r); x = x + k * (yaw - x); p = (1 - k) * p; motionLastYaw = x; return motionLastYaw; }This works perfect when you walk and tilt your device. But when I drive my car something happens that the quaternion isn't giving me the correct lean angle/inclincation. It just gives me 180°.. Or suddenly it shows me a totally wrong lean angle/inclination.. Like when I am standing still (at trafic lights) it shows me 23°... Then after driving a bit it works again or it shows again 180°.

Could it be that the quaternion is effected by the acceleration of my car? So that because my car is driving at a certain speed it isn't giving me the correct value?

Does anyone have any solution for this? I would like to calculate my lean angle/inclincation when I drive my bike/car. So I really want to know how to calulate the right lean angle/inclincation independent if I drive my car/bike or not.

Thanks in advance!!

Tagged:

1

## Answers

Hi there!

Was looking for a way to get the angle of a phone and saw many different ways online but none of them gave me exactly what I was looking for till I saw your post. I don't normally comment but I signed in this time just so I can saythis:

Thank you! Years later and your post helped someone else.Hope you found the solution to your problem eventually.