Garmin 0 September 28, 2025 Posted September 28, 2025 · Report post Сделал для себя стенд с двумя IMU датчиками MPU6500. Один датчик закреплён по осям тестовой платформы, другой нет. Я хочу преобразовать данные акселерометра датчиков к системе координат тестовой платформы. Я собрал доступные мне данные по кватернионам, нашёл библиотеку для микроконтроллера, поддерживающую кватернионы. Последовательность моих действий: 1) устанавливаю платформу в исходное положение, ось z вертикальна. Калибрую датчики по оси z - есть калибровочный вектор положения zero_g {0.0.1} и вектор текущего положения по данным акселерометров current_g {x, y, z}. Я вычисляю кватернион поворота от текущего вектора к калибровочному вектору - calibration_z {x, y, z, w}. Затем я его нормирую. Как я понял, при применении этого вектора поворота к данным гироскопа или акселерометра я получу совмещение осей z датчиков с осью z платформы, но, поскольку этот поворот минимален, то оси x и y в общем случае совмещены не будут. 2) Вторым этапом получения кватерниона поворота является получение поворота данных датчиков относительно оси z. Для этого я устанавливаю платформу осью y вниз, и калибрую датчики по двумерному вектору zero {0, 1} и вектору текущего положения по данным акселерометров {x, y, z}. Я получаю кватернион положения current_g {x, y, z, 0}, нормализую его, применяю к нему кватернион поворота к оси z: calibration_z * current_g * calibration_z^-1. Из полученного кватерниона положения выделяю двумерный вектор current_z {x, y}, и вручную определяю синусы и косинусы половинного угла поворота current_z к zero, получая кватернион поворота относительно оси z для совмещения осей y датчика и платформы calibration_y {0, 0, sin(a/2), cos(a/2)}. Теперь, если перемножить слева calibration_y * calibration_z, я должен получить кватернион поворота датчиков к системе координат платформы. Для данных акселерометров вроде бы так и происходит, но для данных гироскопов это не так. Если кто-нибудь может мне подсказать, что я делаю не так, буду благодарен. Quote Share this post Link to post Share on other sites More sharing options...
Zeal0t 0 September 28, 2025 Posted September 28, 2025 (edited) · Report post попробуйте использовать фильтр Маджвика. в свое время, для аналогичной задачи, мне подошел этот вариант. Edited September 28, 2025 by Zeal0t Quote Share this post Link to post Share on other sites More sharing options...
Garmin 0 September 28, 2025 Posted September 28, 2025 · Report post Спасибо за предложение, но у меня другая задача. Мне нужно не определять положение объекта, а привести данные произвольно расположенного сенсора к координатам объекта. Quote Share this post Link to post Share on other sites More sharing options...
Zeal0t 0 September 28, 2025 Posted September 28, 2025 · Report post 1 hour ago, Garmin said: Спасибо за предложение, но у меня другая задача. Мне нужно не определять положение объекта, а привести данные произвольно расположенного сенсора к координатам объекта. я видел постановку задачи. я предложил использовать фильтр как преобразование значений акселерометра и гироскопа в промежуточные результаты и уже с этими результатами работать далее Quote Share this post Link to post Share on other sites More sharing options...
Garmin 0 September 28, 2025 Posted September 28, 2025 · Report post В данном примере показания акселерометра используются лишь однажды при калибровке для определения положения сенсора в пространстве. Я бы очень хотел обойтись только переходом из одной системы координат в другую. Quote Share this post Link to post Share on other sites More sharing options...
Палыч 21 September 29, 2025 Posted September 29, 2025 · Report post В 28.09.2025 в 11:30, Garmin сказал: Для данных акселерометров вроде бы так и происходит, но для данных гироскопов это не так. Непонятно: откуда вдруг взялись гироскопы? Вы акселерометры заменили гироскопами? Или датчики тестовой платформы? Акселерометр и гироскоп приборы разного принципа действия: акселерометр "привязан" к вектору ускорения свободного падения, гироскоп - не "привязан" ни к чему. Почему методика для акселерометров должна давать тот же результат для гироскопов? Quote Share this post Link to post Share on other sites More sharing options...
Garmin 0 September 29, 2025 Posted September 29, 2025 · Report post Датчики MPU6500 имеют на борту три акселерометра и три гироскопа. Они расположены по осям x, y, z. Соответственно, когда сенсор расположен горизонтально, то его акселерометр z будет показывать 1g, и гироскоп z будет показывать вращение относительно оси z. В случае, когда гироскоп установлен не по осям тестовой платформы, я хочу преобразовать вращение относительно локальных осей гироскопа к вращению относительно осей тестовой платформы. Для определения положения датчика я фиксирую платформу в заранее известном положении, и вектор ускорения свободного падения в сенсорах акселерометра покажет реальное положение датчика. Спасибо, такие вопросы позволяют мне самому лучше разобраться в теме. Quote Share this post Link to post Share on other sites More sharing options...
dOb 10 September 30, 2025 Posted September 30, 2025 · Report post Это слишком грубый гироскоп - вращение Земли им не измерить. Так что гирокомпас не получится. Единственное - поставить на платформу и потом во включенном состояние за короткое время повернуть. Quote Share this post Link to post Share on other sites More sharing options...
amaora 34 September 30, 2025 Posted September 30, 2025 · Report post По акселрометрам можно откалибровать взаимное расположение в нескольких положениях. Но методику я не очень понял, или вопрос шире и нужно предложить методику? В общем случае надо записывать уравнения в каждом положении и потом решать всю систему, предварительно убедившись в достаточной обусловленности. По гироскопам тоже можно, согласованием векторов угловой скорости или счислением ориентации от одного положения к другому, но надо помнить про вращение Земли для методической точности. Quote Share this post Link to post Share on other sites More sharing options...