LINUX.ORG.RU

QAaccelerometer в Qt. Что замеряет акселерометр в Android?

 


0

1

Вот я читаю документацию:

http://doc.qt.io/qt-5/qaccelerometerreading.html

Там написано, что акселерометр замеряет линейное ускорение по осям X, Y, Z.

Вопрос: а можно ли в принципе определить вращение устройства на определенный угол с помощью акселерометра, в градусах?

★★★★★

Аккселерометр тебе покажет где низ. Производная тебе даст угловую скорость.

morse ★★★★★
()

а можно ли в принципе определить вращение устройства на определенный угол с помощью акселерометра, в градусах?

QGyroscope не это ли делает? Или вопрос принципиально о акселерометре?

xaizek ★★★★★
()
Ответ на: комментарий от Xintrea

Что именно ты хочешь подробнее? Смотришь направление вектора сейчас, смотришь через секунду, разница между этими направлениями - это и есть то, насколько за секунду повернули устройство. Делишь, получаешь среднюю угловую скорость.

morse ★★★★★
()
Ответ на: комментарий от morse

Я думал об этом, но у людей это не получается. Максимум что могут сделать, что определить вращение с дополнительным использованием магнитного датчика:

https://stackoverflow.com/questions/12066422/get-tilt-angle-from-the-android-...
http://www.ahotbrew.com/how-to-detect-forward-and-backward-tilt/

Да и как ты определишь вращение вокруг осей телефона, если акселерометр может стоять в разных частях смартфона, ведь он предназначен для определения _линейного_ ускорения.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

А, ну да, с помощью аккселерометра ты не определишь вращение вокруг самой оси вектора. То есть только наклоны устройства, но не плоское вращение. А то, в каком месте стоит сенсор никого не волнует. Если устройство наклоняется, то оно наклоняется все целиком, и одинакого.

morse ★★★★★
()
Ответ на: комментарий от xaizek

QGyroscope не это ли делает? Или вопрос принципиально о акселерометре?

Вопрос о том, возможно ли определение угла на таком устройстве:

Акселерометр - есть
Гироскоп - отсутсвует
Магнитометр - отсуствует.

http://i.piccy.info/i9/67d307584241e1be4d74ff0ceb3bc450/1521471851/219571/120...

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Смотря для каких целей.

Для чего-то требующего точности не подойдёт — слишком быстро накапливается ошибка.

a1batross ★★★★★
()
Ответ на: комментарий от morse

А, ну да, с помощью аккселерометра ты не определишь вращение вокруг самой оси вектора.

А мне нужно определять вот такие вращения:

http://i.piccy.info/i9/5704cc9cb926ff6956131792e23f3bbf/1521473530/77164/1230...

То есть, акселерометр такие вращения не поймет?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от a1batross

Для чего-то требующего точности не подойдёт — слишком быстро накапливается ошибка.

Да даже демонстрационно. Акселерометр будет работать только при широких движениях с одновременным наклоном устройства. Ширина движений должна быть, как минимум, больше корпуса устройства. Если просто крутить устройство вокруг какой-нибудь оси, ничего толком не определишь. Хотя бы потому, что сам акселерометр может быть в разных местах на разных устройствах.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Кто-то пытался акселерометр использовать для мобильного VR. Поищи примеры, там должен быть как раз матан который тебе нужен.

a1batross ★★★★★
()
Ответ на: комментарий от a1batross

Чудес не бывает. Судя по тому какие вращения нужны ТС их с акселеромртра не получит. Плюсом учитывай неизвестность расположения датчика.

pat_minus
()
Ответ на: комментарий от Xintrea

вокруг какой-нибудь оси

вращение вокруг двух осей определить точно можно, на примере с твоей картинкой это x и z. вокруг y - нет.

anonymous
()
Ответ на: комментарий от anonymous

вращение вокруг двух осей определить точно можно, на примере с твоей картинкой это x и z. вокруг y - нет.

Определить факт вращения, или определить угол вращения - это разные вещи.

Xintrea ★★★★★
() автор топика

Трехстепенный акселерометр показывает ускорение по осям. Если рассматривать неподвижное состояние гиросистемы, то можно сказать что вектор g имеет примерно 9.8 по вертикали и примерно по нулям по двум другим проекциям (примерно, потому что там не ноль, матрицу вектора g можно нагуглить). Если начать вращать устройство - то по вертикали значение будет уменьшатся, а по другим проекциям увеличиваться - решая эту геометрическую задачу можно найти углы относительно вертикали. Пока мы стоим на месте или движемся равномерно - то мы можем решать задачу, но как только мы начнём двигаться - у нас появляется ускорение, а так как мы не знаем какое - то мы не можем рассчитать углы. Для уверенной навигации как минимум к акселерометрам еще нужен трехстепенный гироскоп.

Silerus ★★★★
()
Последнее исправление: Silerus (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Ты совершенно не представляешь, как работает акселерометр в смартфоне :-)

Он даёт не совсем ускорение. Он даёт сумму всех ускорений, кроме ускорения свободного падения. А какая сила помимо силы тяжести действует почти на все предметы? Сила реакции опоры (если только телефон не падает)!

Так что акселерометр в покое выдаёт вектор, равный ускорению 9.8 м/с2 направленный перпендикулярно плоскости Земли в координатах устройства. 9.8м/с2 это очень много - телефон так ускоряется очень редко и крайне кратковременно, так что большинство настоящих ускорений вносят не очень большую погрешность (а поскольку ускорения короткие, ошибку можно хорошо снизить усреднением) и можно для простоты принять, будто бы акселерометр чувствует только силу реакции опоры.

Что делать с вектором, почти всегда перпендикулярным Земле и измеренном в координатах устройства? Вспомнить тригонометрию и найти наклоны по 2 осям из 3. Для 3-ей оси потребуется компас.

При этом абсолютно неважно, где в девайсе стоит акселерометр, главное чтобы он поворачивался одновременно с ним. Интегральная ошибка отсутствует как класс, только систематическая погрешность пропорциональная линейным ускорениям девайса.

А вот гироскоп выдаёт угловые ускорости. Их приходится интегрировать и ошибка всегда растёт, поэтому в идеале как раз нужно в краткосрочной перспективе полагаться на гироскоп (неподвержен влиянию линейных ускорений), а в долгосрочной на акселерометр (в среднем он абсолютно прав). Такое достигается, комплиментарным фильтром.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от a1batross

С одним только гироскопом - не проще. Без акселетрометра точность будет даже ниже, чем с ним из-за интегральной ошибки. Плюс где взять начальный угол для интегрирования...

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

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

Silerus ★★★★
()
Ответ на: комментарий от Silerus

Речь идёт в треде о MEMS-сенсорах, которые ставят в смартфоны, а не о механических гироскопах с рамками и вращающимся грузом.

KivApple ★★★★★
()
Ответ на: комментарий от Xintrea

можно и то и другое

// pft,fkf 'nf rfgxf e`,boyfz

anonymous
()
Ответ на: комментарий от Silerus

Что? GPS и GLONASS дадут тебе координаты с погрешностью несколько метров. Это, конечно, хорошо и тоже бывает нужно, но ТС вроде хочет углы. Тут есть только 3 варианта:

1) акселерометр + гироскоп + компас. Идеальный вариант. Позволит выжать максимум точности (конечно, датчики в смартфонах не идеальны, но для бытовых задач должно хватить более чем). Если лень самому что-то придумывать, просто загуглить MadgwickAHRS и скопипастить код.

2) акселерометр + компас. Простая тригонометрия (хватит нескольких вызовов сишной функции atan2). В движении будет заметная погрешность, в покое нормально, если усреднять значения за какое-то время, чтобы избавиться от шума.

3) акселерометр. Простая тригонометрия, как и в прошлый раз. Погрешности те же, но плюс можно нормально определить только 2 угла из 3.

KivApple ★★★★★
()

Акселерометр измеряет ускорение...

Не?

Serg_HIS
()
Ответ на: комментарий от KivApple

Из GPS И глонас тоже можно выжать углы, но при движение. Погрешность да +-7-15 метров, но никто не говорит что надо использовать только ее. С тем что на борту устройства - там все плохо с точностью на самом деле и уходить оно будет минут за 15 (малые массы), надо постоянно корректировать. Потому только совместно.

Silerus ★★★★
()
Ответ на: комментарий от morse

Производная тебе даст угловую скорость.

Может интеграл?

Silencer
()
Ответ на: комментарий от KivApple

Так что акселерометр в покое выдаёт вектор, равный ускорению 9.8 м/с2 направленный перпендикулярно плоскости Земли в координатах устройства. 9.8м/с2 это очень много - телефон так ускоряется очень редко и крайне кратковременно, так что большинство настоящих ускорений вносят не очень большую погрешность (а поскольку ускорения короткие, ошибку можно хорошо снизить усреднением) и можно для простоты принять, будто бы акселерометр чувствует только силу реакции опоры.

Что делать с вектором, почти всегда перпендикулярным Земле и измеренном в координатах устройства? Вспомнить тригонометрию и найти наклоны по 2 осям из 3.

Вот смотри, я накопал, такие формулы (4) и (5):

https://webhamster.ru/mytetrashare/index/mtb0/1521475705p9iby2mbjn

Ниже формул сделал небольшое описание. В описании все верно написано?

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.