GPS + Магнитометр автопилот на Arduino

ZigZag
Offline
Зарегистрирован: 06.03.2020

Добрый день. 

Пытаюсь реализовать минимальный функционал для автопилота на карповый кораблик с помощью 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/  но так и не смог понять как компенсировать.

 

 

 

Izvekoff
Offline
Зарегистрирован: 02.03.2020

концептуально совершенно негодная идея при любом небольшом волнении

ZigZag
Offline
Зарегистрирован: 06.03.2020

А если компенсировать показания магнитометра с помощью гироскопа?

ZigZag
Offline
Зарегистрирован: 06.03.2020

Сейчас выглядит вот так

Изменения показаний компаса при наклоне по X Ось X (угол относительно горизонта)
145 0,8
146 1,2
147 2
151 3
157 4,4
162 5,6
168 6,6
171 7,6
176 8,8
183 10
186 11,3
195 12,1
200 13,1
203 14,1
208 14,9
209 15,7
213 16,5
215 17,3
218 18
222 18,8
223 19,6
225 20,5
227 21,5
231 22,7
234 23,7
237 24,6
237 25,6
238 26,2
240 27
242 27,6
241 28,2
242 29
244 29,8
246 30,5
247 31,4
249 31,9
249 32,5
249 33
250 33,6
250 33,9
250 34,3
251 34,8
252 35,3
252 35,7
253 36
253 36,4
253 36,9
254 37,5
255 38
255 38,6
256 39
256 39,4
255 39,9
256 40,5
258 41,3
259 41,8
258 42,4
259 43
259 43,6
260 44,2
260 44,6
260 45,1
260 45,5
261 45,7
261 46
261 46,5
261 46,7
262 46,5
262 46,4
262 46,2
262 45,8
261 45,3
261 45
261 44,9
260 44,8
260 44,9
261 45
261 45
261 45,1
260 45,3
261 45,5
261 45,7
261 45,7
261 45,7
260 45,7
261 45,7
261 45,6
261 45,6
260 45,7
261 45,7
261 45,8
261 45,8
261 45,9
261 46
261 46,1
261 46,1
261 46,2
262 46,1
261 46,2
261 46,2
261 46,2
260 46,2
261 46,2
261 46,1
261 46,2
261 46,2
261 46,2
261 46
261 45,8
261 45,1
260 43,8
259 42,1
257 40,3
256 38,8
254 37,3
252 35,4
250 33,4
248 31,2
246 28,8
242 26,3
237 24,1
233 22,3
228 20,2
222 17,7
214 15,3
205 13,2
196 10,9
182 8,2
169 5,6
161 3,1
149 1,6
145 0,9

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

подсмотрите, проект Mission Planner открытый )))

rkit
Offline
Зарегистрирован: 23.11.2016

Инерционные системы навигации требуют понимания кватернионов и теории управления с составлением реалистичной модели лодки. Пытаться такое изобрести самому без соответствующей вышки нет никакого смысла. Тем более, когда по только GPS будет ходить ничем не хуже.

ZigZag
Offline
Зарегистрирован: 06.03.2020

ua6em пишет:

подсмотрите, проект Mission Planner открытый )))

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а если направление ветра не совпадает с курсом, то ходить надо галсами )))

ZigZag
Offline
Зарегистрирован: 06.03.2020

Окей, понял )) что задача очень и очень, тогда упростим, возьмем например ровную поверхность, пусть будет стоянка возсле супермаркета, возьмем координату, сохраним ее в EEPROM отойдем метров на 200, и попытаемся приехать на точку.

Компас в данном случае необходим как ориентир в пространстве, в каком положении судно\автомобиль относительно заданных координат. Потому как если ориентироваться только на GPS то нам стартовая локация потребуется довольно большая, там точность 5 метров радиус вроде как, либо сразу ручками установить лодку в нужном направлении.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ZigZag пишет:

ua6em пишет:

подсмотрите, проект Mission Planner открытый )))

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

для набора действий ардуино нано в помощь, для запоминания мест прикормки - программа tower под андроид, у гугла её вычистили, но найти можно, прошивку ровера заливать надо...

rkit
Offline
Зарегистрирован: 23.11.2016

A = вектор текущего направления по компасу
B = вектор текущего направления по GPS (разница между текущими и предыдущими координатами, хорошо отфильтрованная)
С = реальный вектор направления = A * 0.8 + B * 0.2 (коэффициенты подбираются соответственно достоверности информации с датчика)
D = расстояние до точки по GPS

Роботом управляет 2  П-регулятора: один рулит направлением по вектору C, другой рулит скоростью движения по D. Это для машинки или танка с широким допуском по конечным координатам. С лодкой это всё превращается в кошмар из-за ветров, течений, и общей нестабильности воды.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

rkit пишет:

A = вектор текущего направления по компасу
B = вектор текущего направления по GPS (разница между текущими и предыдущими координатами, хорошо отфильтрованная)
С = реальный вектор направления = A * 0.8 + B * 0.2 (коэффициенты подбираются соответственно достоверности информации с датчика)
D = расстояние до точки по GPS

Роботом управляет 2  П-регулятора: один рулит направлением по вектору C, другой рулит скоростью движения по D. Это для машинки или танка с широким допуском по конечным координатам. С лодкой это всё превращается в кошмар из-за ветров, течений, и общей нестабильности воды.

вся эта математика имеет смысл, если ходим в бассейне, а при ветре ходят на волну и галсами, то-есть кораблик не приплывёт на место никогда