Определение курса в инерциальных навигационных системах

У меня вопрос по инерциальной навигации с мобильного устройства. Я использую планшет Android для разработки, но я думаю, что вопрос связан со всеми типами (даже с лучшими датчиками) аппаратного обеспечения.

Самый основной вопрос при разработке инерциальной системы — как определить направление движения носителя. Даже если предположить, что показания магнитометра точны на 100% (а это явно не так!) остается вопрос ориентации прибора относительно пользователя.

Простой пример — если пользователь идет на север, но держит устройство так, чтобы ось Y устройства указывала на северо-восток (ссылка на изображение другой оси: http://developer.android.com/reference/android/hardware/SensorEvent.html) Тогда магнитометр будет указывать на северо-восток. Как мы можем определить, в каком направлении на самом деле движется пользователь? (То же самое будет, если мы используем и магнитометр, и гироскоп для определения курса)

Возможным решением будет использование показаний акселерометра по оси Y и оси X. Что-то в сторону использования arctan(aY/aX) (например - если пользователь держит устройство идеально ровно, то ось X ничего не покажет...) Но так как показания Акселерометра не стабильны, то это не так легкий...

Кто-нибудь знает алгоритм, который действительно работает? Я уверен, что это известная проблема, но я не могу найти ссылки на решения...

Заранее спасибо!

Ариэль


person Ariel    schedule 03.06.2012    source источник
comment
К сожалению, задал тот же вопрос несколько недель назад, ни одного ответа. вектор" title="как получить вращение между осью акселерометра и вектором движения"> stackoverflow.com/questions/10207044/   -  person PeterGriffin    schedule 04.06.2012


Ответы (2)


См. этот ответ для идеи: получив значений ускорения относительно земли, вы можете использовать функцию atan2 для вычисления фактического направления.

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

Таким образом, в случае изменения ориентации вы должны -isnt">вызовите remapCoordinates() соответственно, чтобы исправить полученные показания.

ПРИМЕЧАНИЕ. Вы также можете использовать getOrientation() соответственно, а первое поле представляет направление движения.

person ravemir    schedule 22.04.2013

Действительно правильный ответ — оставить устройство там на некоторое время, определить вращение Земли, а затем вычислить истинный север исходя из этого. К сожалению, гироскопы в мобильном телефоне недостаточно точны для этого...

person Martin    schedule 30.10.2013
comment
Это на самом деле не отвечает на вопрос - не так ли? - person Josh Crozier; 30.10.2013