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

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

<< < (27/35) > >>

EDM electronics:
Алгоритъма е готов изцяло. Вече намира най-малката точка и адреса й - точката от маршрута. Допуснал съм очевидна грешка, чак сега я видях, затова не се получаваха нещата. Втората точка от маршрута от 5 точки е най-късото разстояние.

dist.  424.86  d_min  424.86  point 0  smal_point 0
dist.  424.86  d_min  424.86  point 1  smal_point 0
dist.  396.27  d_min  396.27  point 2  smal_point 2
dist.  809.99  d_min  396.27  point 3  smal_point 2
dist.  1085.41  d_min  396.27  point 4  smal_point 2
dist.  2133.37  d_min  396.27  point 5  smal_point 2

juliang:
Да, това ми е идеята, само можеш да почнеш цикъла от втора точка - първа вече си я сметнал извън него :). То се вижда и как повтаря резултата ..

for ( int i = 1; i < 60; i++) { 

EDM electronics:

--- Цитат на: juliang в Март 01, 2020, 11:58:20 am ---Да, това ми е идеята, само можеш да почнеш цикъла от втора точка - първа вече си я сметнал извън него :). То се вижда и как повтаря резултата ..

for ( int i = 1; i < 60; i++) {

--- Край на цитат ---
juliang , вече го направих, работи идеално.
Изглежда така:
int j = 0;
while ( j < Route_1) {
    addressW2 = j * 8;               
    addressL2 = addressW2 + 4;
    if (d_min != 0) j++;
    EEPROM.get(addressW2, W2);
    EEPROM.get(addressL2, L2);
   
    // point 2
    W2 = W2 * pi / 180;
    L2 = L2 * pi / 180;
   
    d = 2 * r * sqrt(pow((W2 - W1) / 2, 2) + pow(cos((W2 + W1)/2), 2) * pow((L2 - L1) / 2, 2));
    if ( j == 0) d_min = d;
    if ( d < d_min ) {
    d_min = d;
    cPoint = j;
   }
}

Записът  if (d_min != 0) j++; кара цикъла да не брои, докато не се зареди първото уравнение d_min = d;. След това започва отново броене от нула и до края на цикъла. В предния пост е видно, нулата на j се повтаря два пъти заради първоначалното зареждане на стойност за сравнение на if ( d < d_min ) .

Продължавам нататък.

EDM electronics:
Доста напреднах с автопилота, почти е готов скеча. Остана ми само алгоритъма за котвата, но не съм го мислил още. Чакам и да ми пристигне компаса - датчика за абсолютна ориентация. Всичко останало - магнитометри не става. Само магнитометър за нищо не става, защото комбинирания датчик има компенсация от жироскопа при наклон, не се мени ъгъла на компаса и няма никакъв дрейф, кове.

За GPS използвах една стара библиотека и заема много малко ресурс, защото на мен ми трябват само 3-4 параметъра от приемника. Така мисля, че ще успея да кача абсолютно целия проект в едно Ардуино Нано. Но ще го дублирам и в STM32. Проблема с този процесор е, че няма апаратно ЕЕПРОМ, а трябва да се емулира от флаша. Не съм правил още такава гимнастика, но е голяма боза и после по-трудно се работи с ардуинската библиотека, става сложно.

Скеча досега е от 850 реда без библиотеките и заема около 70-80% от паметта. Ако не се събере, защото още не съм включвал компаса, може двата датчика да отидат на отделен контролер, т.е. да стане с два. Ако е само автопилота ще се събере на един, но с котвата е под въпрос.

Направих около 15 менюта, които се избират и програмират с многофункционален енкодер. Но той може да се замени и с 4 бутона.

EDM electronics:
,

Навигация

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

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

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

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