Справочници, схемотехника, теория > Програмиране на микроконтролери, програматори, цифрови проекти

GPS-автопилот - алгоритъм

<< < (3/35) > >>

EDM electronics:

--- Цитат на: dmitarp в Февруари 06, 2020, 01:24:22 pm ---Ето формулите за намиране на ъгъла, между мередиана (севера), и отсечката от две gps точки, a и b (азимута, както ти го наричаш, но това не е азимут, азимута показва височината на точката, например на слънцето).
β = atan2(X,Y)

X = cos θb * sin ∆L

Y = cos θa * sin θb – sin θa * cos θb * cos ∆L.

Тук θa и θb са ширините на точките a  и b съответно, а ∆L е разликата между дължините.

Ако две точки имат еднакви ширини, ягълът е 90 градуса, а ако имат еднакви дължини, ъгълът е 0 градуса

--- Край на цитат ---
Не съм точен вероятно с понятието азимут, но да речем, че е ъгъла между меридиана и той сочи север.
Точно тази формула ми трябваше. Ако може малко пояснение на формулата β = atan2(X,Y)?
β ъгъла ли е, "азимута"?
atan2 какво е?
(X,Y) какъв е тоя запис със запетая?
Останалото е ясно.



--- Цитат на: juliang в Февруари 06, 2020, 01:42:35 pm ---Не ти трябват тангенси и разни сложни сметки.

Има точка 1 с координати X1 и Y1. Имаш т. 2 с X2 и Y2. Съотношението (x2 - x1) / (y2 - y1) ти дава ... абе наклона на правата която следва да поддържаш.
Тръгваш от т.1, стигаш до точка n  и смяташ това съотношение - (Xn - X1) / (Yn - Y1).

Ще е хубаво да сложиш един PID който да прави корекцията с малко изпреварване, щото иначе ще кривуличиш леко. Входа е 0-1000, изхода е 0-1000, изчислява I и D коефициентите въз основа на измерванията до 50 стъпки назад...

--- Край на цитат ---
Не съм запознат с PID регулатора, хептен ми се усложнява задачата. Но ми се струва че по тези формули ще върви постоянно в зиг-заг, в направление, но зиг-заг. То дори не ми трябва и компас, но ако ме обърне вълна или течение в обратна на направлението посока, не знам как ще се справи този алгоритъм.



--- Цитат на: plcsoft в Февруари 06, 2020, 01:43:59 pm ---За алгоритъма на управление може да мислиш едва като уточниш какви модули ще използваш и какви параметри ще гониш с каква комуникация ще кореспондират помежду си модулите, не ти трябва предварителна формула защото като работиш с предварително уточнени координати можеш дори и карта на релефа да заложиш, ако имаш такава информация, разбира се.

--- Край на цитат ---
Всички датчици даван еднакви данни. GPS а дава ширина и дължина, компаса дава ъгъл. Няма никакво знамение какъв датчик ще ползвам. Другите данни от датчиците не касаят алгоритъма за автопилота.



--- Цитат на: montanar в Февруари 06, 2020, 01:53:25 pm ---EDM electronics абсолютна загуба на време е да почваме от АБ - ама ако ти е мерак занивмавай се - аз никога не бих тръгнал да си губя времето да пиша нещо от 0 ако има вариант да адаптирам готово решение.


--- Край на цитат ---

Ще разгледам и готови решения, не ги отхвърлям като опция, да видя да ли се движа в правилната посока, но няма как да направя нещо, като папагал без да разбера как аджеба работи. Аз ако знаех, нямаше да питам и да отворя дискусия.

montanar:
http://www.math.bas.bg/infos/files/2011-09-20-algoritm_geometry_7.pdf

dmitarp:
atan2, e аркус тангес, намира ъгълът и е стандартна функция в повечето езици

montanar:
Тия неща с папагалския подход действително не биха се получили но като набиеш малко око в програмирането после като погледнеш  скриптовете не трябва много да разбереш кое как и от къде става - а че ма много хитри конструкций де си трябва време да се схванат също си е в реда на нещата.

juliang:

--- Цитат на: EDM electronics в Февруари 06, 2020, 02:26:41 pm ---Не съм запознат с PID регулатора, хептен ми се усложнява задачата. Но ми се струва че по тези формули ще върви постоянно в зиг-заг, в направление, но зиг-заг. То дори не ми трябва и компас, но ако ме обърне вълна или течение в обратна на направлението посока, не знам как ще се справи този алгоритъм.

--- Край на цитат ---
Да, можеш да минеш и без компас. С Питагоровата теорема ще можеш да изчислиш разстоянието (хипотенузата) между точката до която искаш да стигнеш и точката в която си в момента. Ако при следващото засичане хипотенузата (разстоянието) е по-голямо - значи вървиш в обратна посока.
Ще върви по зиг-заг точно щото нямаш "предсказване", което може да ти осигури ПИД-а. Корекцията която ще получаваш ще означава "кривни за малко (примерно 1 секунда) руля и след това го изправи". Прави корекция, променя правата по която се движи и след това вижда дали тази права е успоредна на правата свързваща го с целта (т.е. този "коефициент на наклона" е еднакъв за двете прави). ПИД-а просто ще дава командата за корекция малко по-рано. Дълго е да ти го обясня, виж някое видео в тубата за това как работи този контролер. Най-грубо ти трябва черната линия. Червената е "прекалено нервно управление", а синята е "прекалено бавна реакция"

Представи си че караш кола. На пътя се появява препятствие. Ако реагираш прекалено бързо и рязко колата ще завие преди препятствието, но ще се насочиш към канавката и ще трябва да връщаш траекторията, и ако е пак толкова бързо, ще отидеш към другата канавка и пак, и пак... Ако пък си прекалено бавен... колата няма да завие достатъчно бързо и ще се удариш. Трябва ти премерена реакция, която да предвиди колко да завъртиш волана така, че хем да избягаш препятствието, хем да не отидеш в канавката...
Задачата се усложнява и от това, че реакцията на лодката не е мигновена - нито при започване на завоя, нито при завършването му. Ако няма ПИД, лодката ще продължи да завива след маневрата, и следващаат корекция ще трябва да я връща обратно, но и там ще "предобри" работата и ще се получи като червената линия.
Харакеристиката на ПИД-а се определя от 3 коефициента и 2 времена, които описват неговото поведение и тези 5 числа се подбират опитно за всяко едно приложение.

1. Пропорционален коефициент - най-грубо "при 1 градус отклонение от курса завърти руля на еди-колко си градуса". Можеш да искаш руля да се завърти на 1 градус, може и на 20 градуса - зависи от размера на руля, скоростта и от желанието ти колко бързо да се извърши корекцията. Той реално е основния коефициент, определящ размера и посоката на въздействие.
2. Интегрален коефициент - той помага да се коригират малки отклонения, коитопроп. коефициент не хваща. Най-грубо "последните 10 пъти отклонението беше +0.1 градуса. Малко е за корекция по проп. коеф., но щом 10 пъти все сме наляво, може би е добра идея да "чукнем" мъничко надясно?"
3. Диференциаен коефициент - най-грубо "в моменат вървим под ъгъл който е грешен с +10 градуса. предния път вървяхме с курс който е грешен с +20 градуса. Все още сме на "+" (пропорционалния коефициент все още крещи като обезумял "ДАВАЙ ОЩЕ В "-") , но дали не е време да го озаптим малко с един мъничък "+", щото ако така продължаваме, като стигнем "0", ще я подминем и ще трябва да се връщаме... (случая с червената линия)"
Двете времена са съответно за интегралния и диференциалния коефициент. Те указват колко време назад да се "следи историята на пътуването" и да се види как е протичал процеса, и съответно дали не е добре да се предприемат някакви изпреварващи или доуточняващи корекции.

Навигация

[0] Списък на темите

[#] Следваща страница

[*] Предходна страница

Премини на пълна версия