Потребность вычислить вектор вращения от Датчика. Данные TYPE_ORIENTATION

Я должен вычислить вектор вращения из данных, которые я получаю от Датчика. TYPE_ORIENTATION.

Данные датчика определяются как это:

  • значения должны быть повторно вычислены для становления корректным 3-м положением: значения [0]: Азимут, удите рыбу между магнитным северным направлением и осью Y вокруг оси Z (от 0 до 359). 0=North, 90=East, 180=South, 270=West
  • values1: Подача, вращение вокруг оси X (-180 к 180), с положительными значениями, когда ось z перемещается к оси y.
  • значения [2]: Список, вращение вокруг оси Y (-90 к 90), с положительными значениями, когда ось X переезжает от оси z

Мне нужны все три значения как значение оси Z (от 0 до 360 градусов). Я попробовал много, но фигура наклона, как сделать этот:/

(редактирование: Для наблюдения идеи позади в рабочем коде смотрят на класс ActionWithSensorProcessing платформы DroidAR там, Вы видите, как различные типы событий могут быть обработаны.)

я также пытался использовать Датчик. TYPE_ACCELEROMETER и Датчик. TYPE_MAGNETIC_FIELD для вычисления этого 3-го вектора самостоятельно. вот код:

final float[] inR = new float[16];
// load inR matrix from current sensor data:
SensorManager.getRotationMatrix(inR, null, gravityValues, geomagneticValues);
float[] orientation = new float[3];
SensorManager.getOrientation(inR, orientation);
mapMagAndAcclDataToVector(orientation); //here i do some *360 stuff
orientetionChanged(orientation); //then the correct values are passed (in theorie)

Но это не работало, и я думаю, что это очень к сложному. Таким образом, я держал пари, что существует простое решение как к recalc значения ensor. TYPE_ORIENTATION для создания их 3-м вектором вращения но я просто не знаю, как сделать это. Если Вы знаете ответ, скажите мне.

Править: я должен добавить, что хочу передать туда значения OpenGL для выравнивания его к оси как это:

gl.glRotatef(values[1], 1, 0, 0);
gl.glRotatef(values[2], 0, 1, 0);
gl.glRotatef(values[0], 0, 0, 1);

но из-за странных диапазонов значений я, очевидно, наклон делают это. та же проблема со значениями от SensorManager.getOrientation, потому что они зеркально отражают также, когда Вы передаете строку горизонта..

другое решение состояло бы в том, чтобы вычислить углы с помощью inR матрицы, но я думаю, что должно быть более легкое решение (?)

8
задан Simon 9 October 2013 в 08:35
поделиться

2 ответа

Хорошо, теперь у меня есть решение, вы должны выполнить ротацию openGl в следующем порядке:

gl.glRotatef(values[2], 0, 1, 0);
gl.glRotatef(values[1], 1, 0, 0);
gl.glRotatef(values[0], 0, 0, 1);

используйте это в сочетании с SensorManager.getOrientation, и он будет работать. если кто-то знает, как это сделать с данными Sensor.TYPE_ORIENTATION, дайте мне знать.

4
ответ дан 5 December 2019 в 10:40
поделиться

Это должно работать (с использованием входов Sensor.TYPE_MAGNETIC_FIELD и Sensor.TYPE_ACCELEROMETER)

switch (event.sensor.getType()) {
    case Sensor.TYPE_MAGNETIC_FIELD:
        magnitude_values = event.values.clone();
        sensorReady = true;
        break;
    case Sensor.TYPE_ACCELEROMETER:
        accelerometer_values = event.values.clone();
    }   

    if (magnitude_values != null && accelerometer_values != null && sensorReady) {
        sensorReady = false;

        float[] R = new float[16];
        float[] I = new float[16];

        SensorManager.getRotationMatrix(R, I, this.accelerometer_values, this.magnitude_values);

        float[] actual_orientation = new float[3];
        SensorManager.getOrientation(R, actual_orientation);
 }

Поместите этот conde в свой onSensorChanged. В actual_orientation у вас будет вектор, указывающий на север относительно вашего фактического положения.

если вы хотите определять север с точки зрения камеры, вам нужно изменить последнюю строку кода следующим образом

float[] outR = new float[16];
SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
SensorManager.getOrientation(outR, actual_vals); 
12
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: