inventor 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба К сожалению я плохо разбираюсь в математике, но школьну программу немного помню. У меня задача с помощью акселерометра-компаса-гироскопа вычислить скорость/перемещение к-л объекта. Это вообще возможно? Я пока не хочу буриться в кватернионы и прочие прелести (это на потом останеца когда буду все это понимать) для меня сейчас интересна вот такая задача: положим: я получил ускорения от акселерометра получил значения магнитного поля, по этим данным я расчитал наклоны по осям X и Y и поворот вокруг оси с помошью данных от акселерометра=магнетометра. само собой акселерометр показывает мне ускорение G = 9.8 (на самом деле чуть больше - примерно 1006 G но это вероятно зависит от калибровки) Из курса школы помню что скорость - это интеграл от ускорения по времени (были в алгебре какие то "материальные точки"), то есть в самом простом случае я могу суммировать с накоплением отсчеты акселеромера по осям, ну а потом так же с помошью тригонометрии вычислить вектор этой скорости ну а если взять еще один интеграл от скорости по времени - то получу пройденный путь. У меня есть данные: отсчеты акселерометра, дискреты таймера - по готовности этого акселерометра - положим раз в секунду. То есть если я тупо буду отсчитывать : Vx += ax * dt Vy += ay * dt Vz += az * dt То смогу получить скорость моего устройства То же самое я могу проделать и для расстояния. Но вот самая неприятная вешь - как мне убрать из показаний акселерометра что бы он не показывал мне G. Ну то есть чтобы я мог "вычесть" из значения по оси Z 9.8 ну и соответственно из других координат то, что вектор свободного падения наплодил проекцией на эти оси Как это правильно сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 4 августа, 2015 Опубликовано 4 августа, 2015 (изменено) · Жалоба Почитайте вот эту тему. получил значения магнитного поля, по этим данным я расчитал наклоны по осям X и Y и поворот вокруг оси с помошью данных от акселерометра=магнетометра. Погуглите на тему совместного использования акселерометра и гироскопа для определения углового положения твердого тела. Акселерометр и магнетометр дадут вам зашумлённую оценку, которая будет фатально зависеть от вибраций и флуктуаций вектора ускорения, связанные с изменением скорости твердого тела. Вам нужно научиться комбинировать данные от датчиков для получения правильной оценки. Начните читать с комлпементарного фильтра, там всё просто. ... То смогу получить скорость моего устройства То же самое я могу проделать и для расстояния. ... Вы можете, найдя угловое положение твердого тела, оценить составляющую вектора ускорения в плоскости oXY Земной системы координат. Эта составляющая не содержит ускорения свободного падения, т.к. гравитация в системе координат Земли направлена всегда вниз. Таким же образом вы можете найти oZ компоненту вектора ускорения в Земной системе координат. Z составляющую линейного ускорения тела можно оценить, вычтя из этой проекции 9,8. Переход осуществляется либо через матрицу вращений либо через умножение вектора ускорения в связанной системе координат (то что намерял акселерометр) на сопряжённый кватернион вращений.. В приведённой выше ссылке вроде бы всё это есть. Но я вам подробнее рассказывать не стану (в формулах), т.к. это не будет работать. Алгоритм получается неустойчивым, значительные шумы акселерометра и его ненулевое смещение дадут при интегрировании большую ошибку вычисления скорости, которая даст в свою очередь ещё большую ошибку вычисления перемещения (ещё одно интегрирование очевидно). Для того, чтобы это работало вам нужен ещё один источник информации о положении тела, который не подразумевает интегрирования (например GPS). Всё тоже самое как и для нахождения углового положения. Собственно в теме под ссылкой в одном из сообщений приведена ссылка на статью, где предлагается использовать упрощенный фильтр Калмана для определения линейного перемещения объекта по данным от измерителя скорости (интегральная часть) и измерителя положения (пропорциональная часть). Успехов. Изменено 4 августа, 2015 пользователем serjj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 6 августа, 2015 Опубликовано 6 августа, 2015 · Жалоба До кватернионов я не добрался пока, хочу просто научиться делать простые математически действия, предположим, я получил углы с помошью акселерометра и компаса мне нужно из полученных "сырых" X и Y удалить постоянную составляющую я умножаю 1G на синус угла отклонения по X - получаю компоненту G для оси X и вычитаю ее из компоненты акселерометра X я умножаю 1G на синус угла отклонения по Y - получаю компоненту G для оси Y и вычитаю ее из компоненты акселерометра Y Правильно я рассуждаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 17 августа, 2015 Опубликовано 17 августа, 2015 · Жалоба До кватернионов я не добрался пока, хочу просто научиться делать простые математически действия, предположим, я получил углы с помошью акселерометра и компаса мне нужно из полученных "сырых" X и Y удалить постоянную составляющую я умножаю 1G на синус угла отклонения по X - получаю компоненту G для оси X и вычитаю ее из компоненты акселерометра X я умножаю 1G на синус угла отклонения по Y - получаю компоненту G для оси Y и вычитаю ее из компоненты акселерометра Y Правильно я рассуждаю? Ну да. Измеряете начальное положение, тем самым определяете значение постоянной составляющей. В математике тоже так: константа интегрирования определяется начальными условиями. Этот процесс называют калибровкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 18 августа, 2015 Опубликовано 18 августа, 2015 · Жалоба Ну да. Измеряете начальное положение, тем самым определяете значение постоянной составляющей. В математике тоже так: константа интегрирования определяется начальными условиями. Этот процесс называют калибровкой. я немного по другому сделал - просто умножил вектор ускорений на матрицу поворота осталось только на Z 9.8 - на X и Y остался только шум. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 19 августа, 2015 Опубликовано 19 августа, 2015 · Жалоба я немного по другому сделал - просто умножил вектор ускорений на матрицу поворота осталось только на Z 9.8 - на X и Y остался только шум. Всё так, но когда вы перейдёте от ускорения к скорости и от скорости к перемещению путём интегрирования, вы получите ошибку, растущую со временем. Как вы думаете её компенсировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 25 августа, 2015 Опубликовано 25 августа, 2015 · Жалоба До кватернионов я не добрался пока, хочу просто научиться делать простые математически действия, предположим, я получил углы с помошью акселерометра и компаса мне нужно из полученных "сырых" X и Y удалить постоянную составляющую я умножаю 1G на синус угла отклонения по X - получаю компоненту G для оси X и вычитаю ее из компоненты акселерометра X я умножаю 1G на синус угла отклонения по Y - получаю компоненту G для оси Y и вычитаю ее из компоненты акселерометра Y Правильно я рассуждаю? Но ведь это все в статике, в реальности, при движении тела, точный угол вы не определите из-за ускорений тела. Вы будете мерить сумму векторов гравитации и ускорения тела. И это будет уже не 9.8м/с2. Как собираетесь при этом угол вычислять? Без гироскопа сложно будет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться