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.

Author: Kyoung-Rok Jang, 2011-04-07

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 .]

 15
Author: Ali,
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/

 1
Author: nak,
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);
 0
Author: Kirill Kulakov,
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