Multiwii by MIS AIRPLANE
Moderatorzy: moderatorzy2014, moderatorzy
Powinno wystarczyć, choć myślałem nad bardziej szprytnym sposobem, który będzie robił zejście proporcjonalnie do odległości od bazy, aby ładnie i płynnie schodził podczas całego powrotu.
Co do Twojego sposobu, musiało by być jeszcze jednorazowe przypisanie do AltHold aktualnej wysokości z alt.EstAlt w momencie załączenia F/S. Dopiero potem cykliczne odejmowanie.
No i odejmując 1 dostaniesz opadanie 0.5m/sek.
Co do Twojego sposobu, musiało by być jeszcze jednorazowe przypisanie do AltHold aktualnej wysokości z alt.EstAlt w momencie załączenia F/S. Dopiero potem cykliczne odejmowanie.
No i odejmując 1 dostaniesz opadanie 0.5m/sek.
Pzdr. -----MIŚ-----
Faktycznie
Ale generalnie przydało by się bardziej sprytny kod troche skromniejszy jak Twoje inteligętne Failsave
Kod: Zaznacz cały
if(alt.EstAlt > conf.rth_altitude) {
if(AltHold < alt.EstAlt)AltHold = alt.EstAlt;
AltHold -= FS_SLOW_RATE; // Jesli aktualna wysokosc > RETURN_ALTITUDE = powolne opadanie
}else {
AltHold = conf.rth_altitude; // Return Altitude in cm above home point
}
Pozdrawiam Piotr.
YouTube
YouTube
Może coś takiego (wymyślone na szybko :
Kod: Zaznacz cały
#if defined(FAILSAFE) && defined(FIXEDWING)
static uint16_t fs_started; // hold distance from base during FS start
if(f.FAILSAFE_ON) {
rcOptions[BOXANGLE] = 1; // ACC ON
rcOptions[BOXPASSTHRU] = 0; // Passthru off
#if MAG
rcOptions[BOXMAG] = 0; // MAG OFF
rcOptions[BOXHEADFREE] = 0; // HeadFree off
f.MAG_MODE = 0;
#endif
#if BARO
rcOptions[BOXBARO] = 0; // No height stabilisation without GPS or Home FIX
#endif
#if GPS
rcOptions[BOXGPSHOLD] = 0; // GPS hold off
if(fs_started == 0) {
AltHold = alt.EstAlt;
fs_started = GPS_distanceToHome;
}
if(f.GPS_FIX_HOME) { // Allow RTH if valid home is saved
rcOptions[BOXGPSHOME] = 1; // GPS Return to home ON
AltHold = conf.rth_altitude; // Return Altitude in cm above home point
if(alt.EstAlt > conf.rth_altitude) {
AltHold += ((uint32_t)GPS_distanceToHome * alt.EstAlt) / fs_started;
}
#if BARO
rcOptions[BOXBARO] = 1; // baro ON
#endif
} else {
rcCommand[THROTTLE] = MINTHROTTLE; // No home saved, glide without engine
}
#else // NO GPS
rcCommand[THROTTLE] = MINTHROTTLE;
#endif
} else fs_started = 0;
#endif
Pzdr. -----MIŚ-----
Oczywiście że jest. Do tego służą PID'y od ALT. PID ALT D jest ogranicznikiem wychylenia steru wysokości, a PID ALT P jest... jak sama nazwa wskazuje współczynnikiem proporcjonalnym (czyli wzmocnieniem) korekcji wysokości.Tsyvin pisze:Chyba, że gdzies indziej jest ograniczenie na prędkość schodzenia, czy coś takiego?
W poprzedniej wersji sterowanie kazało samolotowi natychmiastowo wrócić do wysokości przelotowej, a ograniczenie tej "natychmiastowości" było jedynie tymi właśnie PID'ami.
Teraz, to w górę ograniczają te PIDY, a w dół, czyli opadanie jest (a właściwie powinno być) proporcjonalne do odległości od bazy, ale nie większe niż ustawione PID'ami i nie niżej niż zadeklarowana wysokość powrotu.
Ale uwaga, bo teoria jest piękna, powinna działać, ale... Trzeba testów, bo moja łepetyna mogła przeoczyć coś istotnego (choć mam nadzieję że nie).
Dla dociekliwych, jak to powinno działać:
W momencie uruchomienia F/S zapamiętywana jest odległość do bazy w zmiennej "fs_started", oraz wysokość utrzymywana jest ustawiana na aktualną wysokość.
Potem podczas powrotu liczone jest ile % dystansu do bazy przebyto, i o tyle samo % zostaje zmniejszona zadana wysokość lotu. Oczywiście robione to jest tylko wtedy gdy wysokość jest większa niż ustawiona wysokość przelotowa. Jeśli jest mniejsza, to stara się utrzymać przelotową.
Jak F/S jest wyłączony, to zmienna "fs_started" dostaje wartość 0, co oznacza że nie zapisano jeszcze odległości od bazy i pozwala na odróżnienie momentu złapania F/S (któremu towarzyszy zapis odległości od bazy) od kontynuacji lotu na F/S.
Jeśli chodzi o same obliczenia, to "GPS_distanceToHome" oraz "fs_started" jest w metrach, a wysokość aktualna i utrzymywana w centymetrach, ale to nie istotne, bo mnożnik formuły jak i dzielnik są w tych samych jednostkach, tak samo jak wysokość aktualna i oczekiwana.
Ufff, ale się naprodukowałem
Pzdr. -----MIŚ-----