2013-05-17 15 views
5

Używam w mojej aplikacji coreMotion do wykrywania ruchu urządzenia iOS. Wiem, jak uzyskać dane różnych czujników od coreMotion. Dostaję roll, pitch i dane Yaw jak wynika z deviceMotion:Jak używać wartości postawy urządzenia DeviceMotion (rolka, skok i odchylenie) do wykrywania ruchu

float pitch = (180/M_PI)*self.manager.deviceMotion.attitude.pitch]; 
float roll = (180/M_PI)*self.manager.deviceMotion.attitude.roll]; 
float yaw = (180/M_PI)*self.manager.deviceMotion.attitude.yaw]; 

Jak mogę korzystać z tych danych w celu wykrywania ruchu? Jakie są potrzebne obliczenia?

+0

Panie, Co chcesz zrobić z tymi wartościami? Jeśli próbujesz monitorować te wartości, gdy urządzenie się porusza, możesz je wyświetlić jako etykiety. – iSeeker

Odpowiedz

7

Stosunek wartości muszą aktualizacje ruchu, urządzenie należy rozpocząć jak:

startDevicemotionUpdates 

Aby monitorować wartości nastawienie gdy porusza się urządzenia, należy użyć wartości postawy mają być wyświetlane w etykietach:

[self.cmMotionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *devMotion, NSError *error) { 

float pitch = (180/M_PI)*self.manager.devMotion.attitude.pitch]; 
float roll = (180/M_PI)*self.manager.devMotion.attitude.roll]; 
float yaw = (180/M_PI)*self.manager.devMotion.attitude.yaw]; 

self.rollLabel.text = [NSString stringWithFormat:@"%f", roll]; 
self.pitchLabel.text = [NSString stringWithFormat:@"%f",pitch]; 
self.yawLabel.text = [NSString stringWithFormat:@"%f",yaw]; 
} 

także lepiej nie używać rolki, tonu i odchylenia (inaczej Kątów Eulera). Użyj macierzy kwaternionowych lub obrotowych dla lepszej dokładności. Kąty Eulera mają tendencję do występowania w sytuacji zwanej z blokadą kardana, która powoduje nierzetelne dane.

Proszę sprawdzić ten link, jak korzystać kwaternion i przekonwertować tę wartość do rzutu, skoku i odchylenia wartości: SO link

Powiązane problemy