Easyelectronics.ru

Электроника для всех
Текущее время: 11 июл 2020, 05:05

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: Получение координат устройства в пространстве
СообщениеДобавлено: 24 сен 2018, 02:02 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
Здравствуйте.
Есть устройство с акселерометром, гироскопом и магнитометром на борту. Нужно в течение небольшого промежутка времени получать относительные координаты при перемещении устройства (в начальный момент времени оно неподвижно).
Определение ориентации происходит с помощью фильтра Маджвика, на выходе которого получаем углы Эйлера (крен, тангаж, рысканье). Дальше возникает вопрос: как перейти от этих углов к углам относительно земли? Нужно найти углы между вектором g и устройством.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 24 сен 2018, 08:51 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Обычная школьная геометрия. Ну и немного со школьной же физикой. Глава "Перемещение тела в пространстве".
Акселерометром замеряем вектор g, его проекцию по осям координат акселерометра. Разумеется, в неподвижном устройстве, ибо любое перемещение повлияет на акселерометр, на отклонение вектора g. Угол вычисляется как арктангенс проекций, сначала в плоскости X-Y, затем в плоскости Z-полученный вектор. Получаем ориентацию тела в пространстве. Но одна из осей может находиться строго вдоль вектора g. Поэтому, вычислить ориентацию в горизонтальной плосткости ("рыскание") поможет компас (магнетометр). Кстати, он может быть трехосевым, что тоже неплохо. Однако, магнетометр может иметь весьма значительную погрешность из-за внешних магнитных полей. Поэтому, калибровку магнетометра поводят поворотом устройства на 180°, 360° или 720° вокруг себя. Если магнетометр 3-х осевой, то калибруют поворотом в двух перпендикулярных плоскостях.
Такой способ калибровки применяется в дронах.
Гироскоп замеряет угловую скорость вращения по трем осям.
Далее, траекторию вам надо вычислять векторы перемещения в пространстве, ориентируясь на показания всех трех датчиков. Причем, каждый из них служит для взаимной корректировки двух остальных.
И учитывайте, что со временем у них накапливается погрешность.

https://habr.com/post/255661/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 16:13 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Уточняющий вопрос:
Что понимается под углом между вектором и устройством?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 16:40 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2035
1. https://en.wikipedia.org/wiki/Dead_reckoning
2. https://y1cj3stn5fbwhv73k0ipk1eg-wpengi ... ote_r0.pdf

Читайте и будет вам счастье.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 18:04 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 817
Алгоритм для подобного логгера выходит за рамки простых вопросов. Всё что лежит бесплатно в интернете - требует серьёзной доработки напильником.
Могу подсказать неожиданное препятствие - точности встроенных тригонометрических функций GCC недостаточно, даже с учётом шума датчика - ошибка вычислений будет намного выше. Можно считать в двойной точности, и многократно потерять в быстродействии.
Мне пришлось переписывать стандартные функции только для уменьшения ошибки.
А сам алгоритм да, простая школьная геометрия. Если догадаешься как его сделать проще - то повысишь точность.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 18:08 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Mirmik писал(а):
Что понимается под углом между вектором и устройством?

Угол между вектором земного ускорения g при неподвижном устройстве и базовой плоскостью устройства. Базовой плоскостью может быть например нижняя опорная поверхность устройства. Этот угол определяет наклон устройства (его базовой плоскости) к горизонту, по осям X-Y. Ориентация относительно вертикальной оси Z будет определяться скомпенсированным магнетометром. Скомпенсированным - это потому, что надо отстроиться от местных возмущений магнитного поля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:01 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
BusMaster писал(а):
Mirmik писал(а):
Что понимается под углом между вектором и устройством?

Угол между вектором земного ускорения g при неподвижном устройстве и базовой плоскостью устройства. Базовой плоскостью может быть например нижняя опорная поверхность устройства. Этот угол определяет наклон устройства (его базовой плоскости) к горизонту, по осям X-Y. Ориентация относительно вертикальной оси Z будет определяться скомпенсированным магнетометром. Скомпенсированным - это потому, что надо отстроиться от местных возмущений магнитного поля.


Код:
    *y = acos(1-2*(q1*q1 + q2*q2));

Собственно, где q1 и q2 - соответствуют коэфициентам при i и j.

Это угол из системы поворотов ZYZ:
Код:
void Madgwick::getRotZYZ(float *z, float *y, float *z2) {
    *z = atan2(q2*q3-q1*q0, q1*q3+q2*q0);
    *y = acos(1-2*(q1*q1 + q2*q2));
    *z2 = -atan2(q2*q3+q1*q0, q1*q3-q2*q0);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:10 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Так вначале надо найти первоначальную ориентацию.
Вот например у меня есть квадрокоптер, и у него процедура запуска состоит вначале из калибровки датчиков. Держим его горизонтально, потом вертикально. Потом поворачиваемся с ним вокруг на 2 оборота, держа его сначала горизонтально, потом вертикально. После этого коптер сориентирован и готов выполнять полет. Без этой процедуры он взлетать откажется.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:16 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Это пусть ТС разбирается. По сформулированному им условию мэджвик налажен и работает. Конкретный вопрос, конкретный ответ.

А все эти пространные рассуждения, в каком порядке надо проводить ритуал, - это всё от лукавого.
Если окажется, что угол не тот, свистните, я другую формулу напишу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:22 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Ну, знаете ли, без этих рассуждений про начальную ориентацию, толку от ваших формул не больше, чем от вашего вопроса про "угол между устройством и вектором g".

И "ритуал" тоже не спроста описан у дрона. Калибровка трехосевого магнитометра, понимаете ли. Без калибровки он может показывать куда угодно, только не на север. Поворот на 180° устраняет постоянное магнитное смещение. А 4 раза по 180 - чтобы найти среднее.


Последний раз редактировалось BusMaster 25 сен 2018, 19:25, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:25 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Я думаю, ТС все это знает. Не зачем вновь и вновь повторять прописные истины.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:26 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Хм. Ну не читайте, коль не хотите. Вас никто не заставляет. А то вы сначала не знаете, что за угол такой, а потом, когда объяснили, заявляете, что это "прописные истины".
Если бы ТС знал, он бы не спрашивал. Кагбе тут само собой видно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 25 сен 2018, 19:40 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Я уточнил угол, чтобы быть уверенным, что мы будем говорить про один и тот же угол. Не более того. Конкретный вопрос. Конкретный ответ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 01 окт 2018, 01:06 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
Mirmik писал(а):
Я уточнил угол, чтобы быть уверенным, что мы будем говорить про один и тот же угол. Не более того. Конкретный вопрос. Конкретный ответ.

Говоря про угол, имел ввиду следующее:
Изображение
Оси Х, Y, Z совпадают с осями акселерометра. Нужно найти проекции g на эти оси и вычесть их. После этого уже можно будет считать перемещение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 07 окт 2018, 01:37 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Используя формула поворота вектора, перенесите показания акселерометра в земную систему координат и выполните векторное вычитание с теоретическим ускорением свободного падения. Получите ускорения в земной системе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 07 окт 2018, 01:51 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Вообще, вы немного сути не уловили... У вас есть кватернион. Это самая удобная форма для работы с вращениями пространств. Вам не нужны углы для векторной алгебры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 07 окт 2018, 02:19 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Поддерживаю насчет кватернионов. Я когда-то пытался решать похожую задачу, тоже с углами Эйлера. Вроде как "проще" и ближе к школьной тригонометрии. Натр@хался знатно. Решил попробовать кватернионы (в вышке были только комплексные числа, которые я помнил так себе и относился с предубеждением). Что я хочу сказать. После вдумчивого чтения нужных вещей я понял и про кватернионы и (наконец-то!) закрыл гештальт с комплексными числами. В общем, оно того стоило.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 11 окт 2018, 00:02 
Только пришел

Зарегистрирован: 02 июн 2018, 20:03
Сообщения: 7
Хорошо, с помощью кватернионов мы, получается, сможем определить ориентацию тела. Как в этой математике перейти к перемещениям?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 15 окт 2018, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Цитата:
Используя формула поворота вектора, перенесите показания акселерометра в земную систему координат и выполните векторное вычитание с теоретическим ускорением свободного падения. Получите ускорения в земной системе.


Но я должен предупредить, что ошибка интегрирования будет невъебенная.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получение координат устройства в пространстве
СообщениеДобавлено: 15 окт 2018, 15:02 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Формула вращения вектора:

V = qvq*
где
V - результирующий вектор
v - поворачиваемый вектор
q - кватернион ориентации.
q* - инверсный кватернион.

умножение в данном случае соответствует кватернионному умножению. (q0 + q1*i + q2*j + q3*k) * (v1*i + v2*j + v3*k) * (_q0 + _q1*i + _q2*j + _q3*k)
При выполнении этой операции свободный коэффициент обязан оказаться равным нулю.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB