2015-07-09 49 views
0

我將開發基於CoreMotion和行人航位推測算法的iPhone應用程序。 我正在經歷一些讀取陀螺儀和加速度數據(設備:iPhone 5s)的奇怪行爲。 這裏是我的代碼:如何使用CoreMotion訪問原始數據

motionManager = [[CMMotionManager alloc] init]; 

motionManager.deviceMotionUpdateInterval=0.008; 

[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion * motion, NSError *error) 
{ 
    NSString *Acc_x = [[NSString alloc] initWithFormat:@"%f ",motion.userAcceleration.x]; 
    NSString *Acc_y = [[NSString alloc] initWithFormat:@"%f ",motion.userAcceleration.y]; 
    NSString *Acc_z = [[NSString alloc] initWithFormat:@"%f ",motion.userAcceleration.z]; 

    NSData *AccData_x = [Acc_x dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *AccData_y = [Acc_y dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *AccData_z = [Acc_z dataUsingEncoding:NSUTF8StringEncoding]; 

    NSString *Gyro_x = [[NSString alloc] initWithFormat:@"%f ",motion.rotationRate.x]; 
    NSString *Gyro_y = [[NSString alloc] initWithFormat:@"%f ",motion.rotationRate.y]; 
    NSString *Gyro_z = [[NSString alloc] initWithFormat:@"%f ",motion.rotationRate.z]; 

    NSData *GyroData_x = [Gyro_x dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *GyroData_y = [Gyro_y dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *GyroData_z = [Gyro_z dataUsingEncoding:NSUTF8StringEncoding]; 


    [HandleAcc seekToEndOfFile]; 
    [HandleAcc writeData:AccData_x]; 
    [HandleAcc writeData:AccData_y]; 
    [HandleAcc writeData:AccData_z]; 
    [HandleAcc writeData:GyroData_x]; 
    [HandleAcc writeData:GyroData_y]; 
    [HandleAcc writeData:GyroData_z]; 


    NSDate *DataOra = [NSDate date]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm:ss\r\n"]; 


    NSString *dataString = [dateFormatter stringFromDate:DataOra]; 
    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; 
    [HandleAcc writeData:data]; 
} 
]; 

這裏是我的日誌:

acc_x acc_y acc_z  gyro_x gyro_y gyro_z time 
0.006040 0.003147 -0.011406 0.001642 0.002079 -0.000864 01:04:40 
0.006472 0.000715 -0.008345 -0.003239 -0.001569 -0.000839 01:04:40 

後,我試着與其他來自Adafruit的的10DOF IMU相比iPhone的IMU數據,我得到這個日誌:

acc_x  acc_y  acc_z gyro_x gyro_y gyro_z time 
-4.773060 -1.769106 8.427839 -0.030030 0.022133 0.002239 0.008333 
-4.789249 -1.741337 8.442565 -0.028949 0.009581 0.000027 0.016667 

我在做什麼錯? iPhone數據有偏差嗎?如果是這樣,我應該訪問公正的數據? 希望有人會幫助。謝謝,賈科莫。

+0

你期望得到哪個結果? userAcceleration存在偏見。 – Mats

+0

我期待像Adafruit的IMU這樣的原始數據。有沒有辦法訪問公正的數據? –

回答

0

CMMotionManager有很多不同的東西可以衡量。我認爲除了你正在使用的那個都沒有偏見。

創建CMMotionManager的一個實例後,應用程序可以利用它來接收四個類型的運動:原始加速度計數據,原始陀螺儀數據,生磁力計數據,並處理裝置運動數據(包括加速度計,旋轉速率和姿態測量)。

如果您想要公正的數據,請結合gravityuserAcceleration記錄或直接測量加速度。