Справочници, схемотехника, теория > Програмиране на микроконтролери, програматори, цифрови проекти
GPS-автопилот - алгоритъм
EDM electronics:
--- Цитат на: van в Февруари 07, 2020, 02:20:58 pm ---Па направете ме модератор и за един ден аз сам ще почистя насраното. Г*за си с рози накичи насраното да не мирише.
Да по-лесно е да сереш на метеното отколкото да метеш насраното. - Паубло Куельо от Перник.
--- Край на цитат ---
Ще говоря със собственика на форума, но те предупреждавам, че се изисква медицинско свидетелство за психично здраве, за да станеш модератор. Като се сдобиеш с такова, обади се, ще лобирам за теб, направо да заемеш моето място, че аз не съм голям фен на модераторството.
И те моля да престанеш да пишеш в тази тема за неща, които не я касаят. Мисля, че достатъчно внимание ти се обърна.
Радико:
ЕДМ очевидно си пропуснал тази публикация за математика и инжинера. Ето ще я пусна още веднъж, мисля че ще е от полза:
--- Цитат --- Добре някаква специална проучвателна комисия вика един математик и един инжинер. Като за целите на проучването си им предлага следното в една стая има легло и на него млада манекенка готова на всичко за тях. Има само едно условие за да се еъзползват: от вратата до манекенката има точно 5 метра. Човека влиза в стаята и застава до вратата чака 5 мин. и има право да преполови разстоянието до нея. След още пет отново преполовява разстоянието. При което математикът заявява:
Вие подигравате ли ми се или какво, аз категорично отказвам да участвам. Инжинара обаче заявява:
Чудесно аз съм съгласен викайте манекенката.
Математикът си тръгва и казва на инжинера:
Ти луд ли си бе не е ли ясно, че никога няма да достигнеш до нея.
На което инжинера отвръща:
А то няма и нужда, само след 30 минути разстоянието ще е достатъчно за постигане на поставените цели.
--- Край на цитат ---
ndm:
Възможно ли е да допуснем и следната ситуация? Написан е възможно най-добрия код, всичко е изпробвано в градски условия и работи безотказно. Вече сме в голям источнородопски язовир, слънчево и безоблачно време. Но как и не странно, десетките сателити кръжащи над главата ни не могат да ни открият и съответно не можем да пуснем автопилота. Това не навсякъде е така в 40 километровия воден басейн, има и много места на проблясъци от страна на сателитите. Не знам защо, но такива ситуации се случват не само по язовирите. Та въпроса е какво правим при това положение, и не е ли язък за хубавия алгоритъм?
С тези писания вече съм в друга графа, но кво да правя юнашко сърце не трае….
juliang:
--- Цитат на: EDM electronics в Февруари 07, 2020, 09:14:40 am ---Ако вятъра издуха лодката от позицията странично и компаса запази своето положение, т.е. азимута, то GPS-точката ще се промени в ляво или дясно от закованата точка. Тогава се нарушава баланса на алгоритъма и той ще се стреми да върне кармата обратно в GPS-точката. Като тръгне това да се случва обаче, ще се промени положението на лодката спрямо севера и компаса ще го отчете. Той от своя страна също ще се стреми да изправи разбалансирането на алгоритъма и така заедно, смесено ще се прави корекция от двигателя.
--- Край на цитат ---
Точно това ти обяснявам - за да компенсираш страничното изместване, лодката трябва да направи маневра, включваща преместване напред-назад и завой. В единия случай алгоритъма нарушава едното твое изискване - лодката да е непподвижна. В другия сучай алгоритъма нарушава друго твое изискване - носа да сочи в определена посока. Колкото по-строго е условието за отклонение от дадена точка, толкова повече трябва да се пренебрегне условието за поска на носа, т.е. лодката трябва да маневрира с остри завои. Ако условието за направлението на носа е по-строго, то лодката ще трябва да прави маневри с по-малки завои, но за сметка на това ще трябва да се движи на по-големи разстояния напред-назад.
Третия вариант е "малки придвижвания с малки отклонения на руля", което води до вероятна невъзможност да се компенсира влиянието на вятъра, щото корекциите ще са малки и бавни.
И тук идва ролята на възложителя на задачата, който трябва да заяви кое от взаимно изключващите се изисквания каква тежест има. Т.е. ти самия трябва да кажеш кое ти е по-важно. Моята задача като програмист е да ти обясня че е невъзможно да имаш всичките 'убавини на тоя свят. Или да ти кажа да си намериш друг програмист, който би могъл да съвмести взаимоизключващите се изисквания (или поне да ти обещае че ще го направи, а после резултата да те разочарова).
Излизайки от контекста на поставената задача, поглеждайки я от необичаен ъгъл, бих те посъветвал да сложиш още един мотор отпред на лодката. Прибиращ се, който ще се ползва само в режим на "кибичене". С 2 мотора можеш да постигнеш исканото от теб. Лодката ще може да се върти на място, ще може да се придвижва настрани без да нарушава посоката в която е... и алгоритъма ще е значително по-елементарен.
Не случайно големите пътнически кораби имат такива помощни двигатели помагащи им да се пришвартоват на малки кейове, или да правят невероятни маневри в претъпкани пристанища. Така че решението не е ново, не е и мое. Просто трябва да знаеш че го има.
И още нещо - алгоритъма за управлението на руля и мотора е в порядъци по-сложен от това да намериш позицията си и направлението си, или от този който да ти каже на какво разстояние и в каква посока се намираш от дадена точка. Просто идея си нямаш в какви л*йна нагазваш... :)
Само да вметна някои мои притеснения:
- най-вероятно нямаш обратна връзка от мотора и руля - нито знаеш в какво положение/обороти са, нито колко още имаш като възможност за въздействие от тяхна страна
- преди да пуснеш лодката на вода няма да знаеш как влияе положението на руля върху скоростта, както и как влияе скоростта върху възможността на руля да промени посоката. Щото влияние ще има, и то няма да е линейно. А като и не знаеш положението на руля и оборотите на мотора нещата стават още по-забавни... :)
- пак задавам въпроса "как алгоритъма да вземе решение дали да корогира отклонението с "пълен ляв на руля и 1/3 напред на мотора" или "пълен десен на руля и 1/3 реверс на мотора"? И при това без да знае нищо за характеристиката на лодката - примерно дали напред и назад лодката изисква една и съща енергия за движение... дали напред и назад завива по един и същ начин (а това май зависи къде си седнал в нея, което също няма как да го знае програмата...)
valex:
Не само големите кораби имат носови движители. Говорих с едни приятел, който има 15 метрова моторна яхта. Има си режим на подържане на позиция. НО това се постига с управлението на двата задни двигателя и носов реверсивен двигател. При този режим той казва, че около яхтата ври буквално от движение на водата. Иначе си стои на едно място. Изрично се забранява да се плува около яхтата при тази режим.
Мисля, че с един двигател и ако трябва да се подържа позиция може да се изпълнява алгоритъм за 'успоредно паркиране' за да се придвижи странично лодката.
Винаги съм се чудел как им остава време да описват в интернет!
https://www.instructables.com/id/Boat-Autopilot/
Навигация
[0] Списък на темите
Премини на пълна версия