2011-09-29 66 views
0

我正在創建接收陀螺儀俯仰,滾動和偏航的測試應用程序。陀螺儀更新無法啓動

,因爲我認爲這將這段代碼不起作用:

- (void) enableGyro { 
    motionManager.deviceMotionUpdateInterval = 1.0/30.0; 
    if (motionManager.gyroAvailable) { 
     [motionManager startGyroUpdates]; 
    } 
    NSLog(@"Gyro Available? %@", (motionManager.gyroAvailable ? @"YES" : @"NO")); 
    NSLog(@"Gyro Active? %@", (motionManager.gyroActive ? @"YES" : @"NO")); 
} 

的輸出是

2011-09-29 16:37:08.070 Gyro2[4014:607] Gyro Available? YES 
2011-09-29 16:37:08.074 Gyro2[4014:607] Gyro Active? NO 

我不明白爲什麼,當我開始陀螺儀的更新,它並沒有真正開始。

+0

對不起,夥計們,我不確定問題是什麼,但我只是重寫了測試項目,它的工作。我基於它從這個網站的代碼:http://cs491f10.wordpress.com/2010/10/28/core-motion-gyroscope-example/ – SamB

回答

0

如果你真的想使用原始公正的傳感器數據,你必須單獨設置每個傳感器的更新間隔,儘管它們往往會是相同的值:

motionManager.gyroUpdateInterval = myGyroInterval; 
motionManager.accelerometerUpdateInterval = myAccelerometerInterval; 

deviceMotionUpdateInterval勢必唯一設備運動。

大多數人不想用卡爾曼濾波器等處理傳感器數據處理,而只是設備的當前方向。如果是這種情況,請看 Simple iPhone motion detect

當我看到CMMotionManager的xxxActive方法的值時,沒有報告正確的狀態的唯一情況是將應用程序置於後臺並在自己的NSThread中完成運動處理時再次激活它。我認爲這與操作系統完成的某些操作可能與賽車狀況相結合。接下來的技巧是釋放CMMotionManager實例並分配一個新實例。

0

根據文檔(http://developer.apple.com/library/ios/#DOCUMENTATION/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html),gyroActive只會是真實的,如果你已經叫startGyroUpdatesToQueue:withHandler:startGyroUpdates。儘管startDeviceMotionUpdates使用陀螺儀,但它不會設置gyroActive

+0

我也改變了它的帖子 – SamB