Ориентация акселерометра (LIS3DH)
Новичок здесь! Я пытаюсь сделать карманный уровень с помощью LIS3DH, но не знаю, как “сбросить” всю ось, чтобы начать чтение с определенной ориентации, так как мой LIS3dh не будет установлен ровно и будет часто меняться. В идеале всякий раз, когда начинается уровень, он начинает читать все на 0, независимо от ориентации. Я уверен, что это всего лишь математика, но это слишком далеко от моей головы, чтобы начать ее понимать.
Начиная с абсолютных основ, я использую библиотеку adafruit lib. Я могу легко получить все показания, и я понимаю, что это ускоряющие силы. Но как мне начать их все с 0?
Сначала я думал взять самое первое чтение и сохранить его, а затем добавить или вычесть новые показания из оригиналов в зависимости от того, выше или ниже новые цифры оригинала (субъективно), но это работает только в некоторых случаях, а это означает, что это не было хорошим решением.
У меня нет конкретного кода для совместного использования, так как я использую пример adafruit LIS3DH.
Вот показания этого датчика он не плоский
X: -11408 Y: -3152 Z: 10560 X: -6.87 Y: -1.87 Z: 6.27 м/с^2
А вот показания приборов ближе к плоской поверхности
X: -80 Y: 704 Z: 16176 X: -0.02 Y: 0.46 Z: 9.86 м/с^2
@CarmexLover13, 👍0
Обсуждение1 ответ
Подумайте о том, чтобы взять на себя этот проект в нескольких шагах. Некоторые вы можете сделать сейчас, а другие позже, если это необходимо
Во-первых, акселерометры обычно не нуждаются в выравнивании. Но если точность и воспроизводимость важны, проект может выиграть от нахождения любого смещения, которое может потребоваться одному акселерометру, и от нахождения любых корректировок величины между тремя акселерометрами. Используя гравитацию, вращайте каждый акселерометр через их максимальные отрицательные и положительные значения. Используйте эти значения, чтобы найти такое смещение, чтобы абсолютные значения были равны для каждого отдельного акселерометра. Затем выберите один акселерометр в качестве базиса и найдите соответствующие коэффициенты для нормализации двух других акселерометров таким образом, чтобы абсолютные значения всех максимумов и минимумов были равны. Как уже было намекнуто, это один из шагов, который вы можете пропустить позже, если это необходимо. Если вам нужно более подробное объяснение, вы можете найти его в разделе 2 этого документа STMicro.
Чтобы найти углы, лучше всего рассмотреть классический пример самолета, где тангаж (нос вверх или вниз) и крен (вращение вокруг оси, проходящей через нос и хвост). Вот хороший погружной проект Arduino, который стоит рассмотреть. В этом проекте ось Z акселерометра направлена вниз, а ось X-в сторону. Чтобы найти КРЕН, автор вычисляет обратную касательную отрицательного отношения ускорения в направлении X к ускорению в направлении Z.
Расчет высоты тона немного сложнее. Это можно найти, взяв обратный тангенс ускорения в направлении Y над квадратным корнем из суммы квадратов ускорения X плюс Y.
С этим покончено, а теперь подумайте, как обнулить углы. Сначала решите, будете ли вы регулировать крен или тангаж. Давайте рассмотрим случай с рулоном. Запишите текущий угол крена и вычтите его из текущего расчетного угла крена, прежде чем отображать его как ноль. Теперь поверните акселерометр так, чтобы он вращался вокруг оси Y (помните, что мы рассматриваем только случай крена и не хотим изменять показания акселерометра Y!). Если вы сделали математику правильно, то отображаемый угол будет разницей между тем, когда вы начали и закончили вращение.
Теперь подумайте, что произойдет, если вы повернете свой акселерометр в положение крена, где ускорение в направлении Z упадет до нуля. Ваша тригонометрическая обратная касательная функция для крена уйдет в бесконечность! В физическом мире, где карданы используются для воздушной и космической навигации, это называется карданным замком!
Что делать с карданным замком?! Ну, это история, которая начинается в 1843 году (да, это действительно звучит странно, не правда ли, WRT air and space navigation). Короче говоря, если вы перестанете использовать классическую тригонометрию для преобразования ускорения в угол и начнете использовать кватернионы, то полностью избежите блокировки кардана. Кватернионы используют комплексные числа для описания вращения в трехмерном пространстве. Люди, которые пишут 3D-игровые программы, просто обожают, как кватернионы упрощают их работу. Это еще один из тех шагов, которые вам не нужно делать. Но это сделает ваш проект еще более надежным.
(Кстати, это технический паспорт STMicro LIS3DH.)
Ты новенькая @CarmexLover13. Если приведенные выше ответы на ваш вопрос, выберите его как правильный ответ. Если вы хотите подождать и попробовать, чтобы проверить, работает ли он, это тоже нормально. Или напишите комментарий/вопрос здесь, если что-то не ясно, и я отредактирую ответ. Не стесняйтесь также редактировать свой вопрос, если вы обнаружите, что забыли задать что-то конкретное., @st2000
Я не намеренно игнорирую. Я пытаюсь понять достаточно тригонометрии, чтобы иметь возможность проверить это ... в настоящее время это выше моего понимания, ха., @n1nja
Я исправил ссылку на 1-й документ STMicro. Может быть, это поможет. Просмотрите круг единиц измерения. Почувствуйте, как соотносятся угол, Грех и Cos. Загар-это просто Грех/Потому что. После того, как вы обдумаете это, вы сможете попробовать преобразовать показания акселерометра в углы., @st2000
Если вы хотите, вы можете пропустить [тригонометрию](https://en.wikipedia.org/wiki/Trigonometry) и перейти к [кватерниону](https://en.wikipedia.org/wiki/Quaternion). Кроме того, вы используете чип STMicro IMU. Если вы также используете процессор STMicro, вы можете просто пропустить все это, используя инструменты разработки STMicro и готовые библиотеки compass. Было бы еще лучше, если бы вы использовали последние винтажные платы разработки STMicro. Но справедливое предупреждение, в отличие от инструментов Arduino, это сложные инструменты, предназначенные для развития предприятия., @st2000
Я должен был отметить, что подача и крен рассчитаны. Сброс начального выравнивания или учет блокировки карданного подвеса, я считаю, являются единственными задержками сейчас, и они используют одно и то же решение. Кроме того, в настоящее время я использую arduino uno, а не на основе stmicro, я не верю Я вернусь, когда немного больше пойму кватернионы, @n1nja
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Можно ли измерить скорость акселерометром? Насколько точно?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как получить уникальный идентификатор для всех плат Arduino?
- Как очистить буфер FIFO на MPU6050?
- OVF в последовательном мониторе вместо данных
- Элегантное решение для обновления содержимого TFT-дисплея
Возьмите начальное чтение. Преобразуйте это в 3D-вектор. Приведи его в норму. Это "ноль". Возьмите любое другое чтение. Преобразуйте его в 3D-вектор. Приведи его в норму. Угол между этими двумя векторами является углом уровня. Это математика, а не Arduino., @Majenko
"вычесть новые показания из оригиналов [...] работает только в некоторых случаях" - это именно то, что вы должны сделать. Когда это не работает?, @Sim Son
Последние 3 числа из примера Adafruit выглядят как гироскоп. Если вы не делаете что-то вроде отслеживания движения (например, 3D-игры) или "очень реактивного" компаса наклона, вам не нужно беспокоиться об этом., @st2000