Какие движения дает именно iPhone SDK?
Я немного озадачен акселерометром iPhone и данными гироскопа. Я работал с SDK в iOS 3.x раз и, насколько я помню, он дает вращение только вокруг осей. Но с iPhone 4 я увидел, что у него есть гироскоп; который используется для вращения снова. Если гироскоп - это новая функция, какую информацию дает акселерометр? Я хочу поймать смещение iPhone / iPod (без вращения), есть ли способ уловить это с помощью какой-либо функции?
3 ответа
3D-акселерометр в iPhone 3G дает результаты, которые содержат сочетание ускорения и ориентации относительно силы тяжести. Это действительно не дает хорошего ответа ни для ускорения, ни для ориентации, пока телефон находится в режиме движения. Apple предоставила алгоритмы фильтрации только частично, чтобы отделить данные, поэтому каждый компонент может быть немного или сильно ошибочным. Вращение затем оценивается по любым изменениям в предполагаемом направлении силы тяжести (вектор вниз по отношению к устройству). И оценки могут быть неверными.
Core Motion API в iOS 4.x, в сочетании с 3-осевыми гироскопами в iPhone 4, использует фактические измерения вращения, чтобы попытаться вычесть вращение из потенциально перемешанных данных 3D-акселерометра, как правило, получая гораздо лучшие оценки ориентации, вращение и ускорение.
Смещение гораздо сложнее измерить, так как двойной интеграл ускорения суммирует столько шума в результате, что результат будет быстро расходиться, чтобы выйти за пределы парка.
Я думаю, вам все равно понадобится гироскоп, чтобы точно оценить ускорение пользователя и правильно отменить гравитацию. Как обычно, ваше движение будет происходить не только вдоль одной оси, но будет включать небольшое вращение в сочетании с небольшим смещением вдоль других осей.
Акселерометры измеряют поперечное ускорение, тогда как гироскопы измеряют относительное вращение.
Если переместить телефон вертикально вверх, не поворачивая его, вы увидите ненулевое значение ускорения на одной оси (при условии, что устройство перпендикулярно Земле), но гироскоп будет показывать 0. Похоже, вы хотите использовать только акселерометр данные.