Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone gyroscope - why is YAW and PITCH connected?

I have a very simple application where I am trying to use the gyroscope thru core motion.

At this point, for test purposes, I am just grabbing the values of roll, pitch and yaw and printing on screen. According to the picture below and as far as I know, roll, pitch and yaw correspond to the red, green and blue axis, right?

OK. When I put the iphone on a table resting on its left side (home button on the right), perfectly at 90 degrees in relation to the table plane, these are the values I read for roll, pitch and yaw: -90, 0, 0. Then I start to rotate the iPhone according to the table's vertical axis in an anti-clockwise fashion, that would be on the positive direction according to the table vertical axis. On the iPhone, that would mean a pitch rotation, but as I rotate, pitch remains constant and YAW is the one that changes!!!!!

If the iPhone is resting on its left side on the table, the green axis (pitch) is vertical. If I am rotating the device anti-clockwise (positive) on X, I should see an increase on the pitch angle, not yaw.

The only explanation I have for this is, the gyroscope axis don't rotate when you rotate the device. So, if I am using the default attitude reference, the iPhone considers that the face up resting position is the default and the blue axis (yaw) will always be the vertical one. Is this correct?

This is the code I am using...

on the main code

motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0/60.0; //60 Hz
[motionManager startDeviceMotionUpdates];


timer = [[NSTimer scheduledTimerWithTimeInterval:(1.0/60.0) 
          target:self
    selector:@selector( readIt )
userInfo:nil
 repeats:YES]
 retain];

the remaining code

#define degrees(x) (180.0 * x / M_PI)

- (void) readIt {

//  CMAttitude *referenceAttitude;
    CMAttitude *attitude;

    CMDeviceMotion *motion = motionManager.deviceMotion;        
    if (!motion) {
        return;
    }

    attitude = motion.attitude;

    NSLog(@"roll = %f... pitch = %f ... yaw = %f", degrees(attitude.roll), degrees(attitude.pitch), degrees(attitude.yaw));


}

enter image description here

like image 452
Roger Avatar asked Mar 05 '11 20:03

Roger


People also ask

Does iPhone have gyro sensor?

Used on iPhone, iPad, and iPod touch. Gyroscope: A three-axis gyroscope was included starting with the iPhone 4, the 4th Gen. iPod touch, and the iPad 2. By combining the gyroscope with the accelerometer, this sensor can operate on six axes.

How to enable gyroscope in iPhone?

The feature can be found on your iPhone or iPad, in Settings > Safari > Privacy & Security > Motion & Orientation Access, and it's disabled by default.


1 Answers

Check out my question and the selected answer for some more information on this. I think the answer, in particular, tells you why the two are connected.

like image 144
donkim Avatar answered Oct 15 '22 19:10

donkim