Dziwne zachowanie z czujnikiem orientacji Androida
Obecnie próbuję obrócić kostkę 3D używając wartości czujnika orientacji, używając metody getRotation () . Niektóre nieoczekiwane zachowania są obserwowane, gdy urządzenie z Androidem jest obracane powyżej pewnych granic. Na przykład, jeśli sprawię, że urządzenie "wstanie", wartość "rolki" po prostu stanie się szalona.
Również doświadczam zjawiska podobnego do tzw. gimbal-lock. Jedyną różnicą jest to, że doświadczam tego samego problemu nawet przed zastosowaniem wartości czujnika do 3D obrót. Kiedy próbuję zmienić wartość "pitch", obracając urządzenie tylko wokół osi "pitch", wartość " yaw " również zmienia się w zależności od obrotu skoku. Wydaje mi się to całkowicie nierozsądne.
Mógłby mi ktoś pomóc?? Utknąłem w tym problemie na miesiąc.
3 answers
Jest to częsty problem z odchylaniem, rzucaniem i obracaniem. Nie można się go pozbyć tak długo, jak używasz yaw, pitch and roll (kąty Eulera ). Ten film wyjaśnia dlaczego.
Używam macierzy rotacji zamiast kątów Eulera w mojej aplikacji wykrywania ruchu. Na wstępie do macierzy rotacyjnych polecam:
Macierz cosinusa kierunku IMU: teoria
Macierze rotacyjne działają jak czar.
Czwartorzędowe są również bardzo popularny i podobno najbardziej stabilny.
[ta odpowiedź została skopiowana z tutaj .]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:38
Użycie czwartorzędów do obliczenia YPR nie pomoże rozwiązać żadnego problemu. Problem blokady gimbal (który w pobliżu skoku + / -90 może prowadzić yaw and roll - właściwie yaw-roll na Biegunie Północnym - zwariować pod niewielkimi zmianami / hałasem w podstawowym czwartorzędu).
Jednakże, jeśli używasz wartości odchylania i obrotu do wykonywania obrotu obiektu 3D nie powinny wykazywać żadnych dziwnych zachowań w pobliżu pozycji blokady gimbal. Tylko, że amibguity w yaw and roll powstają i duże różnice w odchylaniu i rzucaniu nie oznaczają, że rzeczywista orientacja szaleje - tylko, że orientacja jest niewrażliwa na duże zmiany w odchylaniu w pobliżu skoku 90.
Ale należy również pamiętać, że Telefony i przeglądarki dla HTML5 Nie poprawnie zaimplementować yaw, pitch i roll na konwencje dla Androida. Oto dobry blog dla odniesienia:
Http://www.sensorplatforms.com/understanding-orientation-conventions-mobile-platforms/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-26 02:06:50
Oto podstawowy przykład, który zwróci wektor grawitacji. Zauważ, że możesz zmienić typ czujnika i prędkość próbkowania, więcej szczegółów Tutaj
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
double total = Math.sqrt(x * x + y * y + z * z);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, sensor, SensorManager.SENSOR_DELAY_FASTEST);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-17 20:43:43