- Home /
Gyroscope Tilting Rotation. Quaternions T_T Help.
Hi there, I'm using the gyroscope to get rotation data so I can find out when my mobile is being tilted up/down & left/right. This works well. But as soon as you lets say rotate to the left in your chair. Up and Down Become the Left and Right tilt and Left and Right tilt become the up and down. If you did a 180 in your chair everthing becomes inverted. Up becomes down. vice versa.
I need Up and Down to always be up and down, and left and right to always be left and right tilt.
My current code:
private Gyroscope gyro;
public Quaternion rotation = Quaternion.identity;
private Quaternion initialGyroRotation;
private Quaternion initialRotation;
private Quaternion baseRotation;
void Start ()
{
gyro = Input.gyro;
gyro.enabled = true;
initialRotation = transform.rotation;
baseRotation = transform.rotation;
initialGyroRotation = Quaternion.identity;
transform.rotation = gyro.attitude;
Screen.orientation = ScreenOrientation.Portrait;
}
void Update ()
{
#if UNITY_IOS
Quaternion attitudeFix = new Quaternion (gyro.attitude.x, gyro.attitude.y, gyro.attitude.z, gyro.attitude.w);
#endif
#if UNITY_ANDROID
Quaternion attitudeFix = new Quaternion (gyro.attitude.x, gyro.attitude.y, -gyro.attitude.z, -gyro.attitude.w);
#endif
Quaternion offsetRotation = Quaternion.Inverse (initialGyroRotation) * attitudeFix;
rotation = initialRotation * offsetRotation;
transform.rotation = rotation;
}
Answer by raynertanxw · May 06, 2016 at 01:48 AM
I think you need an additional quaternion rotated 90˚ in the x - axis.
rotation = initialRotation * Quaternion.Euler(90.0f, 0.0f, 0.0f) * offsetRotation;
transform.rotation = rotation;
Try that, it should solve that issue where the axis screws up when you turn left or right.
Didn't work $$anonymous$$eep in $$anonymous$$d that I need it to work in all directions. That code I posted is complete. If you have an andoird or IOS give it a test. Put a light or something (lights easiest) in with this script. $$anonymous$$ake it the child of a gameobject rotated 90* on x. and have a camera that is looking down at the zx axis and youll have the same scene as I do.
Well you didn't say that you had a parent transform with the 90˚ on x, so I wouldn't have known. Anyways, for me that 90˚ solved it.
Hope someone else can help you.
Unsure how you solved it. I put the line in my code. And the light went all screwey. I just need the rotations to stay the same not based on the phones position in the world.
This worked for me! I was having the same problem as OP's, and adding that additional quaternion solved it here.
Your answer
Follow this Question
Related Questions
Gyro Sensor based on Euler angles? 0 Answers
Headlight rotation issue when moving the camera 0 Answers
How to use gyrostabilizer to rotate the camera 0 Answers
quaternion - rotate camera based on original facing at scene start? 0 Answers
Gyroscope smooth transitions (minimizing jerk from tiny movements) 1 Answer