Android Tilt issue with Accelerometer and Magnetometer -
i trying detect yaw, pitch & roll using following code:
@override public void onsensorchanged(sensorevent event) { if (event.sensor == maccelerometer) { system.arraycopy(event.values.clone(), 0, mlastaccelerometer, 0, event.values.length); mlastaccelerometerset = true; } else if (event.sensor == mmagnetometer) { system.arraycopy(event.values.clone(), 0, mlastmagnetometer, 0, event.values.length); mlastmagnetometerset = true; } if (mlastaccelerometerset && mlastmagnetometerset) { sensormanager.getrotationmatrix(mr, null, mlastaccelerometer, mlastmagnetometer); sensormanager.getorientation(mr, morientation); morientation[0] = (float) math.todegrees(morientation[0]); morientation[1] = (float) math.todegrees(morientation[1]); morientation[2] = (float) math.todegrees(morientation[2]); mlastaccelerometerset = false; mlastmagnetometerset = false; managesensorchanges(); } }
this works fine apart 1 issue;
when phone up-side-down or starts go up-side-down (even if tilted little forward in portrait mode), angles go haywire ... spitting out random angles!
why happening - , - solution this?
in case 1 stuck issue:
strange behavior android orientation sensor
in summary, trouble use of eulers angle - there little can done sort above issue @ extreme angles of device ... apart using quaternions (which suitable opengl or 3d projections).
i using 2d drawing on app (to create parallax effect), ended using accelerometer values (range -9.8 9.8) ... works , annoyingly easy solution crude needs. technique not acceptable 3d projection... if needing precise measurements, see https://bitbucket.org/apacha/sensor-fusion-demo.
Comments
Post a Comment