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

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

<< < (18/35) > >>

EDM electronics:
Като излезе вълна и почне да ме лашка ляво-дясно, мести ме сравнително лесно, защото лодката ми е с много плитко газене, чудя се дали алгоритъма на juliang ще се справи ли с усредняването на стойност, вероятно направление?

dmitarp:
Именно това 0.7 ти е косинуса от северната ширина, по точно е около 0.72, 0.75, за цялата територия на България от юг към север и тогава ще имаш допустима грешка от половин метър на 50 метра, което не е проблем защото може да се коригира. А дали ще работиш с цели числа или не точността ще е една и съща, само че с цели числа може би скоростта ще е по голяма. Тествах на Due, времето е 60 микросекунди, което е само с 10 микросекунди по-малко това с използване на формулата която предложих.Контролера се затруднява не само от тригонометричните функции, но и от корен втори, повдигане на квадрат. Ако махна косинуса и сложа дефинирано число, в опростената формула също ще получа това време, но с по-добра точност. От друга страна, ако сложа косинус от средната ширина във формулата на Юлиан, също ще постигна такава точност каквато и стандартната формула. За мен извода е един, няма как да се спести значително време за изчисление, а и за една лодка със сравнително бани реакции това не е необходимо.

EDM electronics:
Не само не е необходимо, но и вредно. Дори да измерва бързо, ако това бързо са отрази на руля, той ще полудее - шум, разход на батерия. По принцип смятам руля да не се движи пропорционално на отклонението от направлението, а в граници и така не е необходимо и бързо измерване и той няма да работи постоянно. Това вероятно ще доведе до зиг-заг, но колко да се тия граници ще се установява опитно.

dmitarp, изпробвах ти скеча, но не знам защо не ми дава реален мисля резултат. Знам едно място разстоянието е горе долу около 300 м, ми го дава 1 326,24 м.

Не мога да разбера как се измерваше разстоянието с гугал-мапса или ще търся друга програма Еарт и пак ще пиша.

Иначе разбрах, мериш времето на изчисление - пускаш таймер преди уравнението и мериш след него.

EDM electronics:
Направих ново измерване:
Координати в точки 1. 42.587797 и 25.933175 и 2. 42.589446 и 25.937853
С Гугал мапса дава 424,57 м с формулата на dmitarp дава 424,86 м.
Разликата е само 29 см - една подметка разстояние грешка на 425 м :D
Не е зле, никак не е зле, бачка си формулката, бачка си...   ;)

juliang:

--- Цитат ---d = 2 * r * sqrt(pow((phi2 - phi1) / 2, 2) + pow(cos((phi2 + phi1)/2), 2) * pow((l2 - l1) / 2, 2));
--- Край на цитат ---
От малък са ме учили да не ползвам функцията pow когато става въпрос за квадрат. Още повече че според документацията на ардуино

--- Цитат ---pow() can be used to raise a number to a fractional power
--- Край на цитат ---
което ми говори че вдигането на дадена степен не е реализирано с многократно умножние.
Аз бих направил нещо подобно:

--- Цитат ---double ph2ph1 = (ph2 - ph1) /2;
double cosph = cos((phi2 + phi1) / 2);
double l2l1 = (l2 - l1) / 2;
d = 2 * r * sqrt(ph2ph1 * ph2ph1 + cosph * cosph * l2l1 * l2l1);
--- Край на цитат ---

ще ми е интересно колко микросекунди ще се икономисат (ако изобщо се икономиса нещо :) )
А, да и ... като константа може да се укаже директно диаметъра на Земята а не радиуса, така че и едно умножение по две ще отпадне :)

И имай предвид че тая сметка ще е една нищожна част от целия алгоритъм за взимане на решение кое колко да се завърти или увеличи, за да се постигне желаното позициониране.  Така че микросекунда тук, микросекунда там... може да се окаже че всяка оптимизация е важна.


--- Цитат на: EDM electronics в Февруари 17, 2020, 10:36:17 pm ---Не само не е необходимо, но и вредно. Дори да измерва бързо, ако това бързо са отрази на руля, той ще полудее - шум, разход на батерия. По принцип смятам руля да не се движи пропорционално на отклонението от направлението, а в граници и така не е необходимо и бързо измерване и той няма да работи постоянно. Това вероятно ще доведе до зиг-заг, но колко да се тия граници ще се установява опитно.

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

Навигация

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

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

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

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