Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Определить координаты телефона, акселерометр


Автор: Logo 11.5.2012, 18:30
Акселерометр телефона по запросу выдает 3 значения, x, y, z - вектор гравитации - в milli http://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D0%B0%D1%8F (1000 единиц - 1 G)

Если положить телефон на стол экраном вверх, то ось z будет направлена снизу вверх, ось x справа налево, ось y от наблюдателя вперед.

Нужно
  • Запомнить положение телефона и его ориентацию, из предположения, что он находится неподвижно.
  • Отслеживать изменение положение телефона, и вычислять:
    •  Положение (Радиус-вектор) и ориентацию телефона в пространстве относительно исходной точки
    •  Вектор скорости телефона в данный момент времени относительно исходной точки
Если это возможно. Причем угловую скорость тоже хотелось бы считать.

Автор: nworm 11.5.2012, 18:40
Если акселерометр всё точно выдаёт, то радиус вектор находится вычитанием из координат текущей точки координат начальной.

Скорость - первая производная радиус-вектора.
Находится численным методом, например как центральная разностная производная.

Что Вы подразумеваете под угловой скоростью не ясно.

Автор: Logo 11.5.2012, 20:13
Цитата

Если акселерометр всё точно выдаёт, то радиус вектор находится вычитанием из координат текущей точки координат начальной.

Акселерометр не выдает координат начальной и конечной точки, он по сути выдает лишь вектор перегрузки. От которого и нужно посчитать радиус вектор. И ориентацию (наклон).

Цитата

Что Вы подразумеваете под угловой скоростью не ясно.

Скорость вращения телефона.

Автор: nworm 11.5.2012, 20:55
Что именно выдаёт акселерометр7
Что за вектор гравитации?

Автор: Logo 11.5.2012, 21:17
Цитата

Что именно выдаёт акселерометр7
Что за вектор гравитации? 

Вектор http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_(%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0), не знаю как точнее сформулировать.

3 числа (x y z). Если телефон лежит на столе экраном верх, то, в идеале
Код

0 0 -1000

То есть - вдоль оси Z 1000 milli G или 1G. Если его начать резко поднимать, значение возрастет.

Вот кстати девайс, на котором тестирую в данный момент http://wiki.maemo.org/N900_accelerometer

Автор: nworm 11.5.2012, 21:20
По ссылке в википедии скалярная величина. Надо знать что именно выдаёт акселерометр.

Автор: Logo 11.5.2012, 21:56
Там не совсем полная статья, вот еще http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_(%D0%B0%D0%B2%D0%B8%D0%B0%D1%86%D0%B8%D1%8F)
Цитата

Перегрузка — векторная величина, направленная в сторону изменения скорости.


Вот тут табличка, примеров значений акселерометра в зависимости от положения телефона http://wiki.maemo.org/N900_accelerometer#sysfs

Если он лежит на столе - x = 0, y = 0, z = -1000 -- 1G (ускорение свободного падения)
Если его отпустить падать (невесомость) x = 0, y = 0, y = 0
Если перевернуть, то тогда x = 0, y = 0, z = +1000 (то есть, вектор уже направлен _по_ оси Z, а не против)

Добавлено через 1 минуту и 29 секунд
Цитата

Перегрузка — векторная величина, направленная в сторону изменения скорости.

Только здесь получается вектор направлен в противоположную сторону.

Автор: nworm 11.5.2012, 22:04
Там надо более детально разбираться. Телефон лежит, изменение скорости 0, а перегрузка есть.

Автор: Logo 11.5.2012, 22:14
Да 1G.
Цитата

Перегрузка (авиация) --- Перегрузка в 1 единицу (или 1g) означает прямолинейный полет,

В норме перегрузка равна 1G.

Фактически выходит, что вектор, выдаваемый акселерометром, равен
 -(вектор ускорения телефона) + (вектор от силы тяжести, или ускорения свободного падения)
Где вектор ускорения свободного падения всегда направлен в сторону земли и равен по модулю 1G или 1000 mili G.

Автор: Logo 11.5.2012, 22:39
Или, если представить датчик акселерометра как некий шарик в нем, вектор показывает ускорение этого шарика относительно телефона, которое он бы получил, если бы его отпустили. Под действием сил тяжести и инерции.

Автор: maxim1000 12.5.2012, 09:08
по одному только вектору ускорения не получится, и проблема именно в поворотах

телефону можно придать горизонтальное и вертикальное ускорение так, что длина вектора ускорения останется 1G, а направление изменится

при повороте телефона будут те же показатели

нужна дополнительная информация (гироскоп, компас, второй акселерометр)

Автор: Logo 12.5.2012, 09:51
Да, прочитал статьи, походу с одним акселерометром не получится определять положение телефона, по крайней мере точно. Придется искать другую машинку.

Правда я не очень понял, почему.
Цитата

при повороте телефона будут те же показатели

При повороте, поидее, вследствии центробежной силы, кажущуюся ускорение должно быть больше 1G.

P.S.
Цитата

Вектор перегрузки, не знаю как точнее сформулировать.

Правильно называется кажущуюся ускорение, оказывается.

Добавлено через 4 минуты и 57 секунд
Цитата

Да, прочитал статьи, походу с одним акселерометром не получится определять положение телефона, по крайней мере точно. Придется искать другую машинку.

Можно, наверно, использовать камеру вместо гироскопа, но без готовой библиотеки замучаешься писать, да и костыль.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)