Можно ли измерить скорость акселерометром? Насколько точно?

Я купил этот модуль

Модуль Kootek GY-521 MPU-6050 MPU6050 3-осевые аналоговые гироскопические датчики + 3-осевой модуль акселерометра

Мой проект предполагает прикрепить его к движущемуся объекту, движущемуся со скоростью от 0,1 до 1,0 метра в секунду.

Насколько я понимаю, этот модуль позволит мне определить вращение и ускорение, смогу ли я определить скорость?

На какую точность я могу рассчитывать?

, 👍8

Обсуждение

http://www.chrobotics.com/library/accel-position-velocity, @BrettAM

Попытка интегрировать скорость из ускорения приводит к интегрированию ошибки, т. е. ошибка быстро возрастает до такой степени, что результат расчета становится не столько «неточным», сколько «бессмысленным»., @Chris Stratton

@ChrisStratton Я обдумываю это как замену моего текущего прототипа, который представляет собой выдвижную веревку, прикрепленную к поворотному энкодеру. Вы утверждаете, что это неосуществимо?, @James Wierzba

Мне нужно быть точным в пределах 0,05 метра в секунду., @James Wierzba

Я не думаю, что это будет возможно. Если я правильно понимаю акселерометры, они измеряют ускорение. Тогда у вас есть ситуация, когда скорость постоянна. Ускорение = 0 по законам Ньютона. Вам придется отслеживать изменения ускорения, а затем выполнять математические действия для поддержания состояния. Как предполагает Крис Стрэттон, это приведет к продолжению интеграции ошибки в весьма вероятную ситуацию бессмысленного значения. Редактировать: однако я никогда раньше не работал с акселерометром, так что в определенной степени это возможно., @fabrosell

@fabrosell Это имеет математический смысл. Скорость, безусловно, является самой важной ценностью для моего проекта, так что, похоже, это будет жизнеспособно. Вы можете опубликовать свой ответ как ответ, и я приму его., @James Wierzba


5 ответов


Лучший ответ:

6

Сам по себе датчик не может предоставить вам скорость. Я использовал акселерометры в нескольких проектах, самый простой способ получить скорость — постоянно отслеживать изменения ускорения и мгновенно вычислять скорость.

Чтобы сделать это, следуйте этим инструкциям. Обратите внимание, что это только 1 ось считывания, в действительности вам придется выполнить это для всех трех осей, т.е. x, y и z.

Надеюсь, вы знакомы с уравнением движения (V = Vo + at)... Датчик предоставит вам значение ускорения в любой момент времени. Но ускорение может меняться довольно значительно в течение огромных временных интервалов, поэтому держите временные интервалы «t» небольшими. Допустим, t = 10 мс (зависит от вас). Поэтому вычисляйте V после каждого интервала в 10 мс, и это даст вам текущую скорость в любой момент времени. Но что насчет Vo? Как вы знаете, это называется начальной скоростью, поэтому вначале она будет равна 0. Сразу после первого показания, когда вы собираетесь снять второе показание, Vo изменится на предыдущее рассчитанное значение V и далее.

Это означает, что Vo в любом заданном интервале на самом деле является V, рассчитанным в предыдущем интервале.

Я попробовал этот метод в своем проекте при использовании акселерометра. Надеюсь, он поможет и вам.

,

Точно. Я забыл добавить вопрос Vo в свой предыдущий пост., @fabrosell

Насколько это было точно? Вы как-то проверяли или сравнивали?, @James Wierzba

И да, я могу правильно предположить начальную скорость V0 = 0 м/с, однако возможно, что объект может начать движение от 0 a,d, а затем остаться на некоторой скорости или близкой к ней и не ускориться очень сильно. Будет ли это проблемой?, @James Wierzba

Ну, пока ваши временные дельты (интервалы) достаточно коротки, это не будет проблемой. Так как это уравнение мгновенно даст вам скорость в любой момент времени. Если ускорение равно нулю в любой момент времени, это означает, что скорость будет такой, какой она была изначально., @Usama Zafar

@JamesWierzba Что касается точности. Это полностью зависит от вашего акселерометра. Я использовал несколько из них, но они давали довольно глючные значения, но они были самыми дешевыми из доступных. Если вы выберете что-то надежное, то результаты могут быть близки к 100% точности., @Usama Zafar

@UsamaZafar мне нужно увеличивать t на 10 мс каждый раз? Или t всегда будет 10?, @M-T-A


1

Я не думаю, что это будет возможно. Если я правильно понимаю акселерометры, они измеряют ускорение. Тогда у вас есть ситуация, когда скорость постоянна. Ускорение = 0, согласно законам Ньютона.

Вам придется отслеживать изменения в ускорении, а затем выполнять математические вычисления для поддержания состояния. Как предполагает @Chris Stratton, это приведет к тому, что ошибка будет постоянно интегрироваться в весьма вероятную ситуацию получения бессмысленного значения.

Однако я никогда раньше не работал с акселерометром, так что в определенной степени это возможно.

Было бы здорово услышать от кого-то, кто действительно это попробовал.

,

4

Я работаю с модулями автопилота на базе Arduino, которые обычно используют аналогичные датчики в дополнение к данным GPS для поддержания разумной оценки своего положения/скорости/ускорения. Если вы добавите другие датчики (например, GPS) в свой проект, возможно, стоит рассмотреть расширенные фильтры Калмана (https://github.com/simondlevy/TinyEKF), которые обычно способны обеспечить довольно точные результаты.

Если вы используете только акселерометр, EKF, вероятно, будет излишним, поэтому вы можете рассмотреть другие методы шумоподавления. Например, использование средневзвешенного значения двух последних показаний:

// альфа — это значение от 0 до 1
acceleration = alpha * readAccelerationSensor() + (1 - alpha) * lastSensorReading

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

,

Общее пройденное расстояние не превышает 1-2 метров в направлении +Z, поэтому GPS бесполезен. Вы предлагаете снимать 3 показания в один момент времени? Зачем? Неужели оборудование настолько непредсказуемо?, @James Wierzba

Акселерометры в целом несколько восприимчивы к шуму от механической вибрации вашего устройства, поэтому усреднение показаний датчика поможет уменьшить ошибку от высокочастотного шума. Является ли это существенной проблемой, будет зависеть от вашего приложения (насколько сильно ваше устройство вибрирует во время нормальной работы и какая точность вам нужна от измерения скорости)., @naiello


0

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

Однако, если вы пытаетесь рассчитать скорость, лучшим методом будет использование гироскопа, а не акселерометра.

Гироскопы были (есть?) тем, как подводные лодки ориентируются под водой. Для измерения ускорения с помощью гироскопических датчиков, конечно, это скорость изменения скорости. V = Vo + at и d = Vo.t + (at^2)/2 — две ваши самые важные формулы.

Что вы выберете, зависит от вашего приложения. Я бы выбрал любой из них, основываясь на том, что мое приложение скорее будет иметь постоянную скорость или частое ускорение и замедление. Возможно, даже и то, и другое...

Я не экспериментировал с цифровыми гироскопическими датчиками, но имейте в виду, что существует несколько плат расширения Arduino.

,

Гироскоп измеряет не ускорение, а вращение., @PimV

Вращение по определению есть ускорение. Вектор — это скорость плюс направление. Когда вы меняете что-либо, вы ускоряетесь. Так что гироскоп измеряет и скорость, и направление и предоставляет вам данные в трех измерениях., @Bryon

Гироскопы измеряют угловую скорость, а не линейную скорость воздуха. Когда вы ускоряете гироскоп по прямой, вы не получаете никакого выходного сигнала. Один гироскоп даст вам угловую скорость только в одном направлении (оси)., @PimV

Нам придется согласиться не соглашаться. Да, вы правы относительно угловой скорости, но она угловая по отношению к гравитации Земли. Поэтому любое движение запишет изменение. Это касается и прямой линии, касательной к Земле, и движения по окружности по дуге. (Я не уверен, как это работает при движении по прямой линии к центру массы Земли или от него.), @Bryon

Пояснение. Texas Instruments поставляет твердотельные гироскопы, работающие в трех измерениях, и в указаниях по применению указано, что они могут измерять движение по любой оси, поэтому перемещение непосредственно вдоль линии действия силы тяжести должно быть возможным., @Bryon

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

@PimV ладно. Я не из тех, кто стесняется признавать свою неправоту. Я путал это с использованием акселерометров с гиростабилизацией для поддержания постоянной ориентации X, Y и Z, чтобы вы могли отслеживать свое местоположение в трехмерном пространстве. Раздел о гиростабилизации — вот где я запутался. https://en.m.wikipedia.org/wiki/Inertial_navigation_system, @Bryon

Справедливо, дело закрыто!, @PimV


-1

Используйте компас + акселерометр. Используйте компас, чтобы исключить g из показаний

,

Пожалуйста, расширьте свой ответ, @Greenonline