Как я могу определить, что устройство было повернуто на 360 градусов с учетом (x,y,z) гироскопа?

Я использую response-native-sensor, чтобы получить необработанные данные с датчика.

setUpdateIntervalForType(SensorTypes.gyroscope, 100)

gyroscope.subscribe(({ x, y, z, timestamp }) => {
  let pitch = Math.atan2(-x, -z) * 180 / Math.PI;// In degrees
  let roll = Math.atan2(-y, -x) * 180 / Math.PI;// In degrees
  let yaw = Math.atan2(y, -z) * 180 / Math.PI;// In degrees
  
  this.setState({pitch: pitch, roll: roll, yaw: yaw})
})

Как узнать, что устройство раскручено на 360?

1 ответ

Решение

Немного теории

Вообще говоря, гироскопы измеряют вращательное движение. Большинство датчиков, которые есть в наших телефонах, специально измеряют угловую скорость. Это означает, что выходные данные в большинстве случаев будут описывать, насколько телефон повернулся с течением времени, и обычно выражаются в градусах в секунду (°/s).

Есть 3 оси, которые можно вращать: x, y и z. В документации MATLAB есть хорошее изображение:

Отображение осей телефона

Также есть 3 важных понятия (которые вы использовали в своем фрагменте): тангаж, крен и рыскание (или азимут). Опять же, документация MATLAB пригодится. Они очень хорошо описали это в разделе "Подробнее о", но я рекомендую прочитать статью целиком.

Запачкать руки

Насколько мне известно, библиотека https://react-native-sensors.github.io/ будет возвращать ровно градусы в секунду. Это означает, что, используя предоставленную временную метку, вы можете попытаться подсчитать, насколько телефон повернулся вокруг любой оси в пределах любой временной дельты. Вам просто нужно сохранить значения и временные метки, выполнить несколько преобразований, и вы получите результат. Однако это потребует дополнительного времени и памяти.

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

Кроме того, если вы используете библиотеку только для получения данных гироскопа, вы можете рассмотреть возможность определения ориентации устройства через веб-API. Это все еще экспериментальная функция, но она будет работать в большинстве современных браузеров.

Другие вопросы по тегам