автопилот для корабля

teodor4ik
Offline
Зарегистрирован: 04.11.2013

Лампочками помигал, хело ворлд  в сериал вписал. Теперь я гуру :)

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

 

Есть:

- уно(в корабль) + мега(пульт).

- жпс GY-GPS6MV2

- пара приемопередатчиков на чипах NRF A24L01 2.4 гГц

- LCD keypad shield

- дальномер HC-SR04

- пара компасов (в пульт и в корабль) еще не пришли. 

- джойстик аналоговый ХУ+кнопка, провода(папа-папа, мама-мама), прототипка(тоже еще в пути), сд-слот.

 

Базовая идея состоит для начала в замене штатного пульта на "свой", потом поключить ЖПС, дальномер и компасы для автоматического управления. Доп. задача - отловить сигнал от поплавка эхолота (433 мГц) для возможности указания ЖПСу контрольных точек в интересующих местах.

Предполагаю что математикой и обработкой данных будет заниматся пульт. Корабль только собирает данные, отсылает, принимает команды и упрасляет исполнительными механизмами. Если не прав, то поправьте.

В общем готов к критике и наводкам на:

- работа с ЖПСом, получение данных.

- NRF A24L01 как поднять, проверить.

- формат принимаемых данных, передаваемых команд (ориентируюсь на 10-20 обновлений в секунду, 2400 бит/сек для макс.расстояний)

teodor4ik
Offline
Зарегистрирован: 04.11.2013

как править пост не понял, потому дописываю.

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

achest
achest аватар
Offline
Зарегистрирован: 01.10.2012

teodor4ik пишет:
Предполагаю что математикой и обработкой данных будет заниматся пульт. Корабль только собирает данные, отсылает, принимает команды и упрасляет исполнительными механизмами. Если не прав, то поправьте.

Я бы не стал полагаться на не надежный радиоканал. и все расчеты сделал бы на месте.  Вспомни про посаженный в Иране беспилотник...

На самом деле не понимаю, что за корабль ты делаешь. Вопрос размера. Гпс дает очень не точные данные для того, что бы вести мелкий корабль. Только разве что яхту или контейнеровоз. Тебе в любом случае нужен магнитный компас или гироскоп, по которому осуществляется точная наводка.  На каком расстоянии ты собираешься им управлять . Как-то оно не вяжется. Гпс точность -10метров, дальномер HC-SR04 - макс расстояние 2 метра... Тем более на воде... Он же вообще работать не будет, от волн звук тоже отражаться будет...

Автопилот? Или дистанционное управление? Это две взаимоисключающие вещи. В случае автопилота команда с пульта звучит: Курс 120, скорость 12.  Пожалуйста пришли актуальный курс, сигнал "курс достигнут"./ Паника, потерял курс, не знаю что делать...

В случае дист. управления:  руль +0.5, скорость 12, через секунду повтор. Скажи свой курс, положение руля и тп.

Наверное лучше предусмотреть оба варианта? Что бы переключать можно было...

И посмотри книжку по навигации: течения, снос ветром, ошибка магнитного компаса,   курс и скорость по компасу "относительно воды", курс и скорость через ГПС (относильно землей). Ой там математики, вернее сказать Исправления ошибок приборов....  Почитай как профи делают автопилот. Там не так все просто. Это я к тому, что человеку то с рулением не всегда можно справится. 

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

 

Клапауций
Offline
Зарегистрирован: 10.02.2013
получится так:
 
штурман(типо контроллер корапля): датчик доложил, что до столкновения 5,4,3... секунд
пульт корапля: спокуха пасаны - я рассчитываю курс, пока не получу данные GPS - разбейтесь об айсберг вдребезги, меня это мало волнует.
GPS: штурману - у нас туд данные пришли, что с ними делать?
датчик: плять! вы чем там все заняты?- мы разобъёмся через 0 сек!
пульт: датчик сказал, что мы уже утонули, но согласно GPS - курс парвильный и боевая задача выполнена.
...Наверх, вы, товарищи, все по местам!
Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Некоторая перекличка есть с этой темой:
Поисковый маяк и метеостанция для самолета
 

teodor4ik
Offline
Зарегистрирован: 04.11.2013

Суть идеи катамаран 70*50 весом 7-12 кг завозит снасть и прикорм в заданую точку(одну из точек), сбрасывает груз и возвращается. Т.к. расстояние 300-400м и скорость 4-6 км/ч, то рулить 10-15 мин. туда-назад напрягает. Штатный пульт не всегда удобен в использовании, да и быстро садит свои батареи, если его гасить на некритичных маневрах, то хватит на дольше.

Я бы не стал полагаться на не надежный радиоканал. и все расчеты сделал бы на месте.  Вспомни про посаженный в Иране беспилотник...

Этого я боюсь меньше всего :) Больше смущает постоянная прием-передача садящая батарею. Но я пока не представляю логики изменения управления на ручное. Получается всю автопилотную логику пихать в корабль, а на пульт только иногда сливать инфу что он делает + ожидать прерывания при переключении на ручное управление? Тогда уже и врубать паралельную логику откликов на управляющие команды.

Автопилот? Или дистанционное управление? Это две взаимоисключающие вещи. В случае автопилота команда с пульта звучит: Курс 120, скорость 12.  Пожалуйста пришли актуальный курс, сигнал "курс достигнут"./ Паника, потерял курс, не знаю что делать...

В случае дист. управления:  руль +0.5, скорость 12, через секунду повтор. Скажи свой курс, положение руля и тп.

Наверное лучше предусмотреть оба варианта? Что бы переключать можно было...

я вообще, в идеале, планировал 5 вариантов: 1. штатный пульт. 2. мой пульт(ручное). 3. мой пульт (авто). 4-5. Автовозврат на логике корабля при потере сигнала от пульта на 3-5 мин. (4 - при заданом "0" на жпс, 5 - без него по компасу), оба до появления сигнала от пульта. Приоритеты соотв. 1-2-3-4-5. Ручной пульт гасит мой одним из каналов механически переключая сервой управление каналами движка. 2-3 переключаются на моем пульте. 4-5 исходя из ситуации. Дальномер - прерывание для 2-3 во избежание: я рассчитываю курс, пока не получу данные GPS - разбейтесь об айсберг вдребезги, меня это мало волнует.

Некоторая перекличка есть с этой темой:

если вы имеете в виду готовые ардупилоты и т.д., то это несколько оверкил для данных задач. Да и, по хорошему, мне более интерен процесс, чем результат.

 

Пока потратив хдето 4-5 часов на чтение http://arduino.ru/forum/programmirovanie/nrf24l01 и походы по граблям удалось прилепить нрфл-ки к уне(10,11,12 ноги) и 2560(на SPI разьем) и заставить работать пинг из мирф библиотеки. Почему-то никто не сказал что клиента надо после открытия окна монитора ресетнуть :) иначе все было бы значительно проще. Шась лежат мигают весело лампочками. Пинг 11-12 :)

Теперь буду пробывать подключать к меге LCD шилд, для вывода этих пингов на экран.

Перекинул все на пины 48,49,50-52 т.к. шилд не одевался. Благо уже понял что раньше мешало их туда прилепить. Воткнул шилду, пробую понять как на экран вывести что-нибудь полезное.

понимаю что что-то не так, но: lcd.print(millis() - time) выдает резутат в хексе... А как его его в дек перевести?

 

 

Mastino
Offline
Зарегистрирован: 03.12.2011

есть готовый код со всеми яйцами..

Используем программу google earth на карте ставим точки маршрута до 200 точек (если надо можно больше 300-500). Сохраняем файл с маршрутом, специальным конвертером.  Записываем этот файл на SD карту. SD карту вставляем в лодку. Лодку управляем с помощью пульта например такого( http://www.hobbyking.com/hobbyking/store/__8991__Turnigy_9X_9Ch_Transmitter_w_Module_8ch_Receiver_Mode_1_v2_Firmware_.html ). Вперед, в лево в право, автопилот включается тумблером на пульте или если вы выключете пульт. Лодка поплывет к первой точке которую вы поставили на карте, потом ко второй, третьей и так далее. Когда она достигнет последнию точку(точку назначения) она будет ее удерживать до тех пор пока вы не включаете пульт. Пульт включили, тумблером выключаем автопилот и подгоняем лодку к себе.

На разработку ушли сотни часов и много $., по этому код за денежку.  Если что,пишите romanmastino@gmail.com

teodor4ik
Offline
Зарегистрирован: 04.11.2013

есть готовый код со всеми яйцами..

мне более интерен процесс, чем результат.

Но если упорюсь в корень буду обращатся. Задача стоит несколько другая: точек не более 8(+"база"). Мне не нужен круиз, нужен тупо подход, отработка, возврат. С возможностью смены точек на месте без ноутов и т.п. по показаниям эхолота (отдельное устройство в которое я не лезу). Удержание на прямой и прочие тонкости не интересуют. Только компенсация курса при сносе (ветер, волна, тачение), а кудой он туда попрет, просто пофигу.

Возможен вариант консультаций по граблям, если утомят?

teodor4ik
Offline
Зарегистрирован: 04.11.2013

подключил GPS Ublox  c библиотекой https://github.com/x-f/TinyGPS_UBX и ее же тестовым скетчем к уно и получил что-то такое на выходе:

$PUBX,00,071847.00,0000.00000,N,00000.00000,E,0.000,NF,5303457,3750110,0.000,0.00,0.000,,99.99,99.99,99.99,timeout

что бы это могло значить? vcc-3.3, Tx,Rx - 2,3 - cофтовые. Есть ли смысл пытаться прикрутить к аппаратному сериалу(1) меги? Хотя вроде как что-то получается, тоесть к сериалу вроде вопросов нету.

 

Mastino
Offline
Зарегистрирован: 03.12.2011
achest
achest аватар
Offline
Зарегистрирован: 01.10.2012

teodor4ik пишет:

мне более интерен процесс, чем результат.

Я тебя понимаю. просто автопилот это достаточно сложное задание для новичка. Если ты живешь на берегу этого озера и в состоянии оборудовать рядом лабораторию, то еще можно. В противном случае - едешь на озеро, теряешь корабль, ловишь его, едешь домой, по пути понимаешь,ч то забыл скомутировать один проводок и тп. Тут 3..4 часами не обойдешься.

Ты предлагаешь 5 вариантов управления... А как будет твоя ардуина решать какой  из них выбрать? Ведь связь по последовательному порту пропадает - узнаешь ты об этом только через TimeOut, т.е с задержкой . Не думаю что тебя это устроит.   Не перфекционируй. Делай все последовательно.

GPS Вещь очень не точная. Тебя круг диаметром 20м устроит? Если нет, то использовать GPS для управления! бесмыссленно. Только для телеметрии.

 

teodor4ik пишет:

. Удержание на прямой и прочие тонкости не интересуют. Только компенсация курса при сносе (ветер, волна, тачение), а кудой он туда попрет, просто пофигу.

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

teodor4ik пишет:

 С возможностью смены точек на месте без ноутов и т.п.

Мне кажется, что это как раз и есть наиболее сложная задача. Нет, не софт на лодке, а софт в передатчике. Даже не софт , а удобное GUI, что бы им можно было пользоваться. По моему опыту это не месяц работы.

 

Моя идея.

Итерация 1.  Ты покупаешь на Вышеуказанном сайте "навороченное" дистанционное управление, с переключением в автопилот. Подключаешь к приемнику на корабле Ардуину. У тебя 2 режима : Ручное управление, и автопилот.  Переключение со Штатного пульта. При переключении в автопилот, ардуина на месте перенимает на себя управление и поддерживает оригинальный курс. Ардуина может "прикидываться" серво , т.е. можешь ей подавать любые команды стандартным пультом, даже который не имеет разных режимов.  Используеешь на пример Канал 4  --0 - ручное управление 10-25 удержание курса,   50-90 "запомнить позицию" . Самое сложное будет сделать так, что бы в случае выхода из строя ардуино, все работало дальше. т.е. аппаратно надо менять направление прохождения сигнала. Или через  ардуину на серво, или напрямую. Это важно, потому, что первое время у тебя все время что-то будет падать....

идет обучение:- Аппатная часть. Серво. Чтение данных из акселерометра (GPS).Питание. Надежность. У меня на пример ардуина все время сбрасывается, если включать ЛЕВЫЙ мотор при чуть подсевших батарейках. Помог конденсатор на 2000мкф по 5 вольтам.

Итерация 2. В довесок к купленному в п1, ты делаешь телеметрию. Постарайся сделать ее сам.  У тебя на локальном ардуино высвечивается положение корабля, скорость,курс, GPS позиция .

В этой итерации ты учишься, как настроить канал, как обрабатывать данные, и как выводить их на экран.

Итерация 2.5 в довесок к 2 у тебя высвечивается показания эхолота.

Итерация 3. На локальном компе появится клавиатура и забить на SD Карту GPS Координат по нажатию кнопок.

 

И тп.

Иначе ты хочешь все сразу. Нет смысла отвечать на твои вопросы, потому, что это слижком сыро.

 

 

 

teodor4ik
Offline
Зарегистрирован: 04.11.2013

Интересно, но позже... Пока дурь другая... суть дури: на примерерах из тинижпс и тинижпс++ не инициализируется вообще. На тинижпс_ублокс находится, но выдает строку с 000.0000 в координатах, но время выводит. Вырвав тх или рх - уже нифига. Тоесть проводка вроде нормальная. Может его на 5в пересадить? Еще прикол в том что тестовый скетч ублокса заводится на 9600, потом командой переводит в 4800 и далее работает на 4800. Остальные стартуют на 4800, и такой же финт ушами не помогает.

#include "SoftwareSerial.h"

SoftwareSerial gps(2,3);

char data; 

void setup()

{

Serial.begin(9600);

gps.begin(9600);

} 

void loop()

{

if(gps.available() > 0) {

data = gps.read();

Serial.print(data);

}

}

нашел вот такой простенький скетчик... Вот результат... Походу модуль труп? Или только антена? Есть способы понять что происходит? GSV иногда один вроде видит... но чейта криво...

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GGL,,,,,*6
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
 

 

 

 

teodor4ik
Offline
Зарегистрирован: 04.11.2013

Я идиот... Ловил спутники в бетонном помещении :) На улице все разрулилось само собой.

Теперь буду пробывать показать на экране удаленной дуины координаты с гпса. Чую зароюсь...

aikijin
Offline
Зарегистрирован: 30.01.2017

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

У меня возник другой вопрос, даже два.
1. Нужен ли в этом случае гироскоп, чтобы он отслеживал направление на север? Или достаточно будет данных gps для хождения по координатам (вычисление угла наклона вектора)?

2.  Как я понимаю, угол поворота руля будет определяться углом наклона вектора. А как поступать в том случае, когда следующая точка находится в значениях "минус игрек" по отношению к текущей? Какой угол задать рулю, чтобы он вышел на нужное направление?

P.S. уровень тот же самый: лампочкой помигал, хеловорлд написал...

teodor4ik
Offline
Зарегистрирован: 04.11.2013

Если именно в режиме "Круг почета", то вам вполне подойдет Ardupilot готовый в версии "rover".

В реальной жизни рулит тупо дискретное рулевание (прямо/поворачиваем), пока не выйдет на курс +- пара градусов. Угол руля зависимо от скорости. Скорость зависимо от расстояния до цели.  Компас нужен для начального определения положения, да и это не важно особо. На ходу вещь бесполезная.

aikijin
Offline
Зарегистрирован: 30.01.2017

Мне кажется, что компас нужен для определения начального угла поворота. Т.к. реальное транспортное средство представляет аналог вектора и не может из заданной точки двигаться в любом направлении, то нужно изначально определить два направления: азимут направления носа корабля и азимут пункта назначения. Это нужно для того, чтобы как-то реализовывать движение, когда следующая точка находится в значениях "минус игрек", относительно текущего положения корабля, т.е. угол поворота составляет больше 90 градусов. 

 

P.S. teodor4ik,  удалось ли реализовать задуманное в начале этой темы?