Как откалибровать акселерометр?
Меня смущают несколько моментов о том, как лучше всего откалибровать акселерометр, данные которого будут использоваться в алгоритме слияния датчиков ориентации.
Таким образом, наиболее распространенные подходы, которые я видел, заключаются в измерениях в 6 различных ориентациях (1G in +x, -x, +y, -y, +z, -z), чтобы затем получить максимальное и минимальное измеренное значение. Затем смещения вычисляются как средние значения: (max - min)/2
. А затем вычисляется коэффициент масштабирования. Есть несколько аспектов этого, которые мне неясны, и я надеялся, что можно задать один вопрос, поскольку они связаны.
1) примеры вычисляют среднее значение, как написано выше, а не суммируют все vals / N vals
. Разве такой подход не более подвержен ошибкам?
2) должно ли смещение по оси вычисляться один раз для каждой ориентации, а затем суммироваться?
3) каков наилучший подход к вычислению смещения шкалы?
Пример 1 (псевдокод):
chordlengthX = (max - min)/2
chordlengthY = (max - min)/2
chordlengthZ = (max - min)/2
avg_rad = (chordlengthX + chordlengthY + chordlengthZ)/3
scaleX = avg_rad/chordlengthX
calibratedX = (x - offset)*scaleX
Пример 2:
rawrange = max - min
refrange = refmax - refmin // 1G??
calibratedX = (((x - min)*refrange)/rawrange) +refmin
Что-то совсем другое (как вы, вероятно, можете сказать, мне нужно пересмотреть свою математику)?
4) если моя поверхность не полностью ровная, я не могу доверять своим измерениям, так как моя ссылка 1G не точна?
1 ответ
Лучший ответ:
Большинство акселерометров можно использовать прямо из коробки. (Именно магнитометры трудно использовать без калибровки.)
Тем не менее, пример 1 выглядит хорошо до последней строки. Вам нужно x-смещение, которое представляет собой просто разницу между x-максимумом и x-минимумом.
Рассмотрим, как выглядели бы координаты значений X, Y и Z акселерометра, если бы они были нанесены в трехмерном пространстве. Тот, который идеально выровнен, будет казаться сферическим. Но если один из датчиков более чувствителен, чем другие, 3D - график может принять форму яйца. Вы исправили это в первых 5 строках примера 1.
Теперь, если один из датчиков не центрирован, 3D-график будет смещен от точки 0,0,0 3D-графика. Вы можете исправить это, найдя x-смещение, y-смещение и z-смещение.
Вам не нужно будет находить значение для 1G. Вам не нужно будет искать идеально ровную поверхность. Для калибровки необходимо плавно вращать акселерометр вокруг его центра. Следите за тем, чтобы во время калибровки акселерометр не подвергался воздействию более 1G. Вращайте акселерометр случайным образом, пока не убедитесь, что все 3 датчика испытали свои самые отрицательные и самые положительные значения.
- Можно ли измерить скорость акселерометром? Насколько точно?
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
- OVF в последовательном мониторе вместо данных
- Построение графика данных датчика Arduino в реальном времени на Processing, MatLab или Python
- Как связаться с датчиком через порты RX/TX Arduino?
- Линейное ускорение от MPU 6050
- Как правильно определить крен, тангаж, перемещение?
- Правильный способ получить значения крена, тангажа и перемещения
Спасибо, что нашли время ответить. Прошу прощения за то, что я тупой, но все еще смущен парой моментов. В чем ошибка в последней строке примера 1? Насколько я понимаю ваше объяснение, оно должно быть правильным. Мы вычитаем смещение, а затем умножаем на чувствительность? Наверное, я что-то упустил. Во-вторых, если датчик движется, то разве максимум и минимум не будут просто диапазоном из таблицы данных, например, если я дергаю его довольно быстро?, @Zhelyazko Grudov
Было бы хорошо, если бы вы тщательно выбирали имена переменных. Даже в фальшивом коде. Легко было предположить, что 6 значений "max" и "min" на самом деле были "x-maximum", "x-minimum", "y-maximum", "y-minimum" и т. Д. Но я не знал, что такое "x" в последней строке примера 1. Если бы мне нужно было угадать, я думаю, что последняя строка является примером того, как использовать 2 калибровочных значения, которые вы ищете. И может быть написано: "calibratedX = (x-raw - x-offset) * scaleX". Следите за плавным вращением акселерометра во время калибровки. Не подвергайте его воздействию > 1G, дергая его вокруг себя. Опять же, калибровка может и не понадобиться., @st2000
Еще раз спасибо, что нашли время помочь мне. Я действительно ценю это. Я проверю это завтра и посмотрю, как все пойдет. :), @Zhelyazko Grudov