Справочници, схемотехника, теория > Програмиране на микроконтролери, програматори, цифрови проекти
GPS-автопилот - алгоритъм
dmitarp:
Това е възможно, но все пак сам се убеждаваш, че ъглите трябва да се отчитат с голяма точност. След това има различни подходи, но това което предлагаш изисква много сложен код, едва ли си заслужава след като контролера има способности на точности до 1х10-6. Това нещо се прави ако искаш да смяташ със точност отвъд преките възможности на контролера. Например числото пи е сметното далеч далеч отвъд точността на който и да е компютър но за целта се прави специален софтуер. Освен това при 8 битовите контролери тази точност така или иначе се постига софтуерно, но за това се грижи компилатора. А аз смятам, без да съм специалист в това, че компилатора доста добре оптимизира смятането, аз не съм в състояние да го направя по-добро.
valex тази схема на алгоритъма е предложи и julian, според мен има един недостатък, ако първоначлно тръгнеш в грешната посока (защото поската на тръгване този алгоритъм не ти е гарантира), то компенсацията ще е трудна, и докато компенсираш траекторията, вече може да си подминала следващата точка от траекторията.
EDM electronics:
Затова каква точност е нужна за следването на маршрута:
Трябва да се има предвид, че при наближаването на т.Б, ако не съвпаднат напълно свръх прецизните координати от GPS-а за ширина и дължина с 5-6 знака след запетаята, което ще е в 99,9% от случаите, лодката ще подмине точката и ще следва завой отвъд маршрута и множество неуспешни опити в кръжене около тая точка. При втория опит я улучи пак, я не, щото атмосферните условия ще са неподходящи. Затова мисля, че за нуждите на точното изчисление е нужно голяма точност и използването на 32 битово число, но после това число или трябва да се ограничи така, че точността да е 1-2 м. около т. Б, т.е. дори да мине близо до т. Б, програмата да отчете достигането й и да задейства брояч, който да смени адреса на четене от ЕЕПРОМ следващата точка, макар и реално да минава покрай нея на 1-2 метра. Това е нужно, още повече, че тази точност 1-2 м е половината размер на лодката. Другия вариант е да се ползва това число със стотни, но да се постави условие за + и - еди колко си, да отчете достигната точка и да револвира адреса на четене от паметта.
В момента ардуиното изчислява двете формули за общо 1 mS. Като се добави останалата част от кода за управление на руля, паметта, енкодерите, дисплея, библиотеките и т.н., предполагам времето на един цикъл ще стане 2-2,5 mS. Това ще рече изчисление 400-500 пъти в секунда. Пре-пре-достатъчно.
Радико:
--- Цитат --- Трябва да се има предвид, че при наближаването на т.Б, ако не съвпаднат напълно свръх прецизните координати от GPS-а за ширина и дължина с 5-6 знака след запетаята, което ще е в 99,9% от случаите, лодката ще подмине точката и ще следва завой отвъд маршрута и множество неуспешни опити в кръжене около тая точка.
--- Край на цитат ---
Това, че джипиеса ще даде координати със пет знака въобще не значи, че ардуиното е длъжно да прочете и да се съобрази със всичките знаци. Можеш да му укажеш да прочете само до цели числа или до два, до три знака, до колкото искаш ти.
EDM electronics:
Вместо координатите за ширина и дължина е по-добре да се следи разстоянието между т.А и т.Б. поставя се условие, когато то стане по-малко от примерно 3 м и да преминава от т. Б към т. В. Така все едно точката е с радиус 3 м. Още повече може лесно да се промени, дори като опция за програмиране от енкодера.
Иван Димов:
EDM electronics, следя темата отгоре-отгоре за обща култура. Като смяташ математиките, не бързай, проверявай по няколко пъти. На третия ред видях, че имаш грешка. В дробта под в.с знаменателят трябва да е 4, а ти си написал 2. По-надолу не съм гледал. Аз точно такива програми не съм правил, но мисля, че и тук важат принципите на последователност на смятането. Първо са функциите, корените, степените, после се смята умножение, деление и чак накрая събиране, изваждане. Затова трябва да се внимава и да се слагат скоби, когато изразът е по-дълъг. Защото компютърът е "прост" и не може да се сети сам как да смята. Трябва всичко да му е точно подредено за да го "преглътне". :)
п. п. Като се загледах по-надолу ... коренът не си го премахнал правилно. Опресни си математиката, явно ще ти трябва и за в бъдеще.
Навигация
[0] Списък на темите
Премини на пълна версия