GPS + Магнитометр автопилот на Arduino
- Войдите на сайт для отправки комментариев
Добрый день.
Пытаюсь реализовать минимальный функционал для автопилота на карповый кораблик с помощью GPS NEO-7m + MPU-9250 в качестве акселерометра и компаса. Прошу помощи в каком направлении копать и по этапам реализации.
Что пытаюсь сделать :
1. Есть координата которая заносится в EEPROM ардуинки, на основании этих координат необходимо рассчитать азимут.
2. Точка из которой выходит кораблик, с помощью компаса устанавливается ориентировочное направление на сохраненную в EEPROM координату.
3. На половинной скорости происходит движение в сторону координаты основываясь на показателях компаса с компенсацией по данным от гироскопа и акселерометра от колебаний по X/Y
4. Сверка текущих координат от заданных и внесение поправки в направление по компасу, т.е. основное движение происходит по компасу а координаты сверяются с некой периодичностью и вносится корректировка в направление.
Несколько вопросов:
1. Правильна такая концепция или нет?
2. Как рассчитать азимут по координатам от гироскопа что-бы понимать направление, сейчас у меня компас показывает географический север (не магнитный).
3. Есть проблема с показаниями компаса при наклонах по X/Y при этом есть довольно точные показания гироскопа и акселерометра, как бы все это дело компенсировать? По MPU-9250 за отправную точку брал вот эту статью - https://www.instructables.com/id/Tilt-Compensated-Compass/ но так и не смог понять как компенсировать.
концептуально совершенно негодная идея при любом небольшом волнении
А если компенсировать показания магнитометра с помощью гироскопа?
Сейчас выглядит вот так
М.б. кто-то может написать формулу для компенсации? Изменения тут не линейные, а т.к. в школе учился плохо то .... из-за дурной головы, ногам тяжело...
подсмотрите, проект Mission Planner открытый )))
Инерционные системы навигации требуют понимания кватернионов и теории управления с составлением реалистичной модели лодки. Пытаться такое изобрести самому без соответствующей вышки нет никакого смысла. Тем более, когда по только GPS будет ходить ничем не хуже.
подсмотрите, проект Mission Planner открытый )))
Рассматривал этот вариант, но уже как готовое решение, но тут уже проще сразу купить)) единственное он заточен под полеты а не под лодку и там есть нюансы при возврате ну и нет возможности как я понял задать некий набор действий при выходе на заданные координаты.
а если направление ветра не совпадает с курсом, то ходить надо галсами )))
Окей, понял )) что задача очень и очень, тогда упростим, возьмем например ровную поверхность, пусть будет стоянка возсле супермаркета, возьмем координату, сохраним ее в EEPROM отойдем метров на 200, и попытаемся приехать на точку.
Компас в данном случае необходим как ориентир в пространстве, в каком положении судно\автомобиль относительно заданных координат. Потому как если ориентироваться только на GPS то нам стартовая локация потребуется довольно большая, там точность 5 метров радиус вроде как, либо сразу ручками установить лодку в нужном направлении.
подсмотрите, проект Mission Planner открытый )))
Рассматривал этот вариант, но уже как готовое решение, но тут уже проще сразу купить)) единственное он заточен под полеты а не под лодку и там есть нюансы при возврате ну и нет возможности как я понял задать некий набор действий при выходе на заданные координаты.
для набора действий ардуино нано в помощь, для запоминания мест прикормки - программа tower под андроид, у гугла её вычистили, но найти можно, прошивку ровера заливать надо...
A = вектор текущего направления по компасу
B = вектор текущего направления по GPS (разница между текущими и предыдущими координатами, хорошо отфильтрованная)
С = реальный вектор направления = A * 0.8 + B * 0.2 (коэффициенты подбираются соответственно достоверности информации с датчика)
D = расстояние до точки по GPS
Роботом управляет 2 П-регулятора: один рулит направлением по вектору C, другой рулит скоростью движения по D. Это для машинки или танка с широким допуском по конечным координатам. С лодкой это всё превращается в кошмар из-за ветров, течений, и общей нестабильности воды.
A = вектор текущего направления по компасу
B = вектор текущего направления по GPS (разница между текущими и предыдущими координатами, хорошо отфильтрованная)
С = реальный вектор направления = A * 0.8 + B * 0.2 (коэффициенты подбираются соответственно достоверности информации с датчика)
D = расстояние до точки по GPS
Роботом управляет 2 П-регулятора: один рулит направлением по вектору C, другой рулит скоростью движения по D. Это для машинки или танка с широким допуском по конечным координатам. С лодкой это всё превращается в кошмар из-за ветров, течений, и общей нестабильности воды.
вся эта математика имеет смысл, если ходим в бассейне, а при ветре ходят на волну и галсами, то-есть кораблик не приплывёт на место никогда