Jochen Arndt
Это должно быть возможно путем периодического опроса датчика и сравнения данных датчика с данными предыдущего опроса. Однако опрос требует значительного количества системных ресурсов, когда он выполняется через короткие промежутки времени, которые необходимы для обнаружения коротких резких движений.
Большинство акселерометров имеют возможность генерировать прерывания в определенных условиях. Но для их использования требуется, чтобы устройство (MacBook) поддерживало их, а акселерометр можно было запрограммировать с помощью библиотеки (источники библиотеки должны показать, возможно ли это).
Если MacBook лежит на столе, данные датчика должны быть близки к нулю для осей X и Y и 1,0 для оси Z (или -1,0). Когда он будет перемещен, данные изменятся соответствующим образом.
Поскольку данные зашумлены, может возникнуть необходимость фильтровать их при обнаружении медленных и небольших движений. Простой фильтр использует коэффициент ниже 1,0 (для каждой оси):
filtered = actual_value * factor - prev_value * (1 - factor)
prev_value = filtered_value
Затем вы можете дополнительно рассчитать тангаж и крен:
x_norm = x / sqrt(x^2 + y^2 + z^2)
y_norm = y / sqrt(x^2 + y^2 + z^2)
pitch = asin(x_norm)
roll = asin(y_norm / cos(pitch))
Я предлагаю написать простое приложение, которое опрашивает датчик и распечатывает исходные и расчетные значения. Затем вы можете играть с ним, чтобы узнать необходимые ограничения при перемещении.
Taiming J
Не могли бы вы привести пример кода или образцы, чтобы сделать это?
Я буду очень благодарен, если вы его предоставите.
Спасибо