Пример кода дополненной реальности с использованием гироскопа - PullRequest
6 голосов
/ 06 марта 2011

Утро,

Я искал около StackOverFlow около часа и нашел много примеров кода (в основном, github) для создания приложений дополненной реальности, которые отображают, где второе местоположение относительно вашего текущего местоположения (например, НовоеЙорк).

Однако я заметил, что ни один из них не использует функциональность гироскопа, предоставляемую в iPhone 4, которая дает гораздо более плавный опыт конечным пользователям.

Кто-нибудь знает, если такой пример образцакод существует?

Ура,

Чарли

Ответы [ 3 ]

3 голосов
/ 14 марта 2011

Вы можете попробовать использовать CMMotionManager методы экземпляра

startDeviceMotionUpdatesToQueue:withHandler: или startGyroUpdatesToQueue:withHandler:

 [CMMotionManagerObject startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^ (CMDeviceMotion *devMotion, NSError *error)
         {   
             CMAttitude *currentAttitude = devMotion.attitude;
             xRotation = currentAttitude.roll*180/M_PI;
             yRotation = currentAttitude.pitch*180/M_PI;
             zRotation = currentAttitude.yaw*180/M_PI;
         }];

Если вы используете startGyroUpdatesToQueue:withHandler:, вы можете получить результат через свойство gyroData

3 голосов
/ 14 марта 2011

Вы можете использовать CoreMotion для получения данных от гироскопа. Основной подход состоит в том, чтобы получить CMAttitude.rotationMatrix и умножить его обратное (транспонировать) на исходную матрицу, которую вы изначально установили. Пример проекта Teapot на developer.apple.com демонстрирует базовый подход к работе с CoreMotion.

Для настоящего приложения дополненной реальности вам необходимо создать модель с использованием OpenGL ES. Я лично нашел v1.1 более надежным на iOS после того, как попробовал GL ES 2.0. Образец чайника также использует GLES 1.1.

Использование гироскопа намного точнее и «плавнее», чем использование магнитометра для получения вращения устройства вокруг своей оси отсчета. Хитрость заключается в том, как изначально откалибровать эталонную матрицу, чтобы получить истинное «направление» устройства и расположить объекты модели GL ES в правильном положении вокруг камеры. После того, как вы достигли этого, вы можете повернуть свою модель в 3D, умножив viewMatrix GL на инверсию CMAttitude.rotationMatrix.

Наконец, если вы намереваетесь поддерживать iPhone 3Gs, не забудьте проверить свойство gyroAvailable CMMotionManager и предоставить альтернативную реализацию с использованием магнитометра.

0 голосов
/ 19 мая 2011

К сожалению, я не знаю ни одного примера кода.

Проблема, характерная для всех приложений AR, заключается в том, что вам необходимо выяснить ориентацию вашего устройства.Вы можете сделать это с помощью atan2 и акселерометра, но он имеет ужасное количество шума (как видно из примера проекта Apple AccelerometerGraph ).Если вы попытаетесь исправить это с помощью адаптивного фильтра низких частот, вы уменьшите шум, но при этом сделаете его менее отзывчивым.

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

...