Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удалить постояную составляющую
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
inventor
К сожалению я плохо разбираюсь в математике, но школьну программу немного помню.
У меня задача с помощью акселерометра-компаса-гироскопа вычислить скорость/перемещение
к-л объекта.
Это вообще возможно?
Я пока не хочу буриться в кватернионы и прочие прелести (это на потом останеца когда буду все это понимать)
для меня сейчас интересна вот такая задача:
положим: я получил ускорения от акселерометра
получил значения магнитного поля, по этим данным я расчитал наклоны по осям X и Y
и поворот вокруг оси с помошью данных от акселерометра=магнетометра.
само собой акселерометр показывает мне ускорение G = 9.8 (на самом деле чуть больше - примерно 1006 G
но это вероятно зависит от калибровки)

Из курса школы помню что скорость - это интеграл от ускорения по времени (были в алгебре какие то "материальные точки"),
то есть в самом простом случае я могу суммировать с накоплением отсчеты акселеромера
по осям, ну а потом так же с помошью тригонометрии вычислить вектор этой скорости
ну а если взять еще один интеграл от скорости по времени - то получу пройденный путь.
У меня есть данные: отсчеты акселерометра, дискреты таймера - по готовности этого акселерометра - положим раз в секунду.
То есть если я тупо буду отсчитывать :
Vx += ax * dt
Vy += ay * dt
Vz += az * dt

То смогу получить скорость моего устройства
То же самое я могу проделать и для расстояния.
Но вот самая неприятная вешь - как мне убрать из показаний акселерометра
что бы он не показывал мне G.
Ну то есть чтобы я мог "вычесть" из значения по оси Z 9.8
ну и соответственно из других координат то,
что вектор свободного падения наплодил проекцией на эти оси
Как это правильно сделать?




serjj
Почитайте вот эту тему.

Цитата
получил значения магнитного поля, по этим данным я расчитал наклоны по осям X и Y
и поворот вокруг оси с помошью данных от акселерометра=магнетометра.

Погуглите на тему совместного использования акселерометра и гироскопа для определения углового положения твердого тела. Акселерометр и магнетометр дадут вам зашумлённую оценку, которая будет фатально зависеть от вибраций и флуктуаций вектора ускорения, связанные с изменением скорости твердого тела. Вам нужно научиться комбинировать данные от датчиков для получения правильной оценки. Начните читать с комлпементарного фильтра, там всё просто.

Цитата
...
То смогу получить скорость моего устройства
То же самое я могу проделать и для расстояния.
...

Вы можете, найдя угловое положение твердого тела, оценить составляющую вектора ускорения в плоскости oXY Земной системы координат. Эта составляющая не содержит ускорения свободного падения, т.к. гравитация в системе координат Земли направлена всегда вниз. Таким же образом вы можете найти oZ компоненту вектора ускорения в Земной системе координат. Z составляющую линейного ускорения тела можно оценить, вычтя из этой проекции 9,8. Переход осуществляется либо через матрицу вращений либо через умножение вектора ускорения в связанной системе координат (то что намерял акселерометр) на сопряжённый кватернион вращений.. В приведённой выше ссылке вроде бы всё это есть. Но я вам подробнее рассказывать не стану (в формулах), т.к. это не будет работать. Алгоритм получается неустойчивым, значительные шумы акселерометра и его ненулевое смещение дадут при интегрировании большую ошибку вычисления скорости, которая даст в свою очередь ещё большую ошибку вычисления перемещения (ещё одно интегрирование очевидно). Для того, чтобы это работало вам нужен ещё один источник информации о положении тела, который не подразумевает интегрирования (например GPS). Всё тоже самое как и для нахождения углового положения. Собственно в теме под ссылкой в одном из сообщений приведена ссылка на статью, где предлагается использовать упрощенный фильтр Калмана для определения линейного перемещения объекта по данным от измерителя скорости (интегральная часть) и измерителя положения (пропорциональная часть).

Успехов.
inventor
До кватернионов я не добрался пока, хочу просто научиться делать простые математически действия,
предположим, я получил углы с помошью акселерометра и компаса
мне нужно из полученных "сырых" X и Y удалить постоянную составляющую
я умножаю 1G на синус угла отклонения по X - получаю компоненту G для оси X
и вычитаю ее из компоненты акселерометра X
я умножаю 1G на синус угла отклонения по Y - получаю компоненту G для оси Y
и вычитаю ее из компоненты акселерометра Y
Правильно я рассуждаю?

Tarbal
Цитата(inventor @ Aug 6 2015, 12:37) *
До кватернионов я не добрался пока, хочу просто научиться делать простые математически действия,
предположим, я получил углы с помошью акселерометра и компаса
мне нужно из полученных "сырых" X и Y удалить постоянную составляющую
я умножаю 1G на синус угла отклонения по X - получаю компоненту G для оси X
и вычитаю ее из компоненты акселерометра X
я умножаю 1G на синус угла отклонения по Y - получаю компоненту G для оси Y
и вычитаю ее из компоненты акселерометра Y
Правильно я рассуждаю?


Ну да. Измеряете начальное положение, тем самым определяете значение постоянной составляющей. В математике тоже так: константа интегрирования определяется начальными условиями.
Этот процесс называют калибровкой.
inventor
Цитата(Tarbal @ Aug 17 2015, 15:58) *
Ну да. Измеряете начальное положение, тем самым определяете значение постоянной составляющей. В математике тоже так: константа интегрирования определяется начальными условиями.
Этот процесс называют калибровкой.


я немного по другому сделал - просто умножил вектор ускорений на матрицу поворота
осталось только на Z 9.8 - на X и Y остался только шум.
serjj
Цитата
я немного по другому сделал - просто умножил вектор ускорений на матрицу поворота
осталось только на Z 9.8 - на X и Y остался только шум.

Всё так, но когда вы перейдёте от ускорения к скорости и от скорости к перемещению путём интегрирования, вы получите ошибку, растущую со временем. Как вы думаете её компенсировать?
alexPec
Цитата(inventor @ Aug 6 2015, 12:37) *
До кватернионов я не добрался пока, хочу просто научиться делать простые математически действия,
предположим, я получил углы с помошью акселерометра и компаса
мне нужно из полученных "сырых" X и Y удалить постоянную составляющую
я умножаю 1G на синус угла отклонения по X - получаю компоненту G для оси X
и вычитаю ее из компоненты акселерометра X
я умножаю 1G на синус угла отклонения по Y - получаю компоненту G для оси Y
и вычитаю ее из компоненты акселерометра Y
Правильно я рассуждаю?

Но ведь это все в статике, в реальности, при движении тела, точный угол вы не определите из-за ускорений тела. Вы будете мерить сумму векторов гравитации и ускорения тела. И это будет уже не 9.8м/с2. Как собираетесь при этом угол вычислять? Без гироскопа сложно будет...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.