Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vertical wind velocity estimation #35

Open
kaklik opened this issue Aug 13, 2021 · 9 comments
Open

Vertical wind velocity estimation #35

kaklik opened this issue Aug 13, 2021 · 9 comments
Labels
enhancement New feature or request help wanted Extra attention is needed stale

Comments

@kaklik
Copy link
Member

kaklik commented Aug 13, 2021

Při diskusi s @povik jsme přišli na to, že TECS regulátor. Zřejmě obsahuje hodnotu kompenzace vertikální rychlosti. Hodnotě odpovídá integrace ve větvi označené jako Throttle compensation na následujícím diagramu.

TECS_throttle 149666ed

Tato integrace se počítá na tomto řádku TECS regulátoru.

V případě vyvedení této hodnoty do uORB zprávy bychom mohli

  • Určit rychlost vertikálního proudění v prostoru
  • Změřit rychlost opadání vírníku během ustáleného letu (aerodynamickou účinnost).

Trochu problematické bude hodnotě "throttle_compensation" přiřadit fyzikální rozměr [m/s]. @povik si ale myslí, že správná cesta by měla vést přes přenásobení konstantou K_D, s tím že je potřeba uvažovat časovou odezvu regulátoru. Dynamika regulátoru tak převod komplikuje.

@kaklik kaklik added enhancement New feature or request help wanted Extra attention is needed labels Aug 14, 2021
@povik
Copy link
Member

povik commented Aug 16, 2021

Nevím, do jaké míry diagram odpovídá kódu v TECS.cpp, protože v kódu do integrace vstupuje (po škálování) _STE_rate_error, ale podle diagramu bych čekal spíš _STE_error. Nic to ale na té původní úvaze, ze které vyšlo, že "throttle compensation" obsahuje zajímavou informaci, nemění.

@kaklik
Copy link
Member Author

kaklik commented Oct 22, 2021

K vyřešení tohoto issue, by zřejmě kromě vygenerování nové uOrb zprávy bylo potřeba, ještě naplnit hodnotou parametry "Z" MavLink zprávy WIND_COV.

Tato zpráva se z autopilota sice odesílá, ale pro hodnoty Z obsahuje nulové hodnoty

image

Zpráva se plní v této části kódu, kde jsou skutečně pro vertikální hodnoty hardcodované nulové hodnoty.

@kaklik
Copy link
Member Author

kaklik commented May 3, 2022

Tak jsem u tohoto issue chtěl přidat logování throttle_compensation. A když jsem to začal dělat, tak jsem si všiml, že už existuje uOrb zpráva , která stejnou hodnotu obsahuje.

Při posledním letu z platformy je v ní tohle:

image

Vzniká z toho tak graf o kterém moc nevím co přesně znamená. Hlavně mi jsou podivné ty nespojistosti. Část toho grafu tak zřejmě obsahuje informaci o vertikálním proudění, ale zároveň chybí vazba, která by umožnila konkrétní interpretaci.

@kaklik
Copy link
Member Author

kaklik commented May 4, 2022

Tak nespojistosti viditelné v grafu lze vysvětlit chybějícími daty. V režimu Stabilized TECS vůbec nefunguje a když se mód letu přepne ze Stabilized, do Position, tak se ta naintegrovaná hodnota vynuluje. Takže validní hodnoty jsou jen v Position, Loiter a částečně v Mission těsně po startu. Tam to je ale ještě pořád takeoff, takže záleží na tom, jak s tou naintegrovanou hodnotou zachází kód od @roman-dvorak. Aktuální mód je poznamenán ve zprávě vehicle_status/nav_state

Pokud se ale provede průzkum delšího letu, kde se mezi módy nepřechází. Tak hodnota throttle_integ od nějaké fáze letu spojitě roste. Zde je například záznam letu ze Silvestrovského meření prachu. Je vidět, že ke kontinuálnímu nárůstu throttle_integ dojde dříve než v maximální výšce letu. Zároveň ale bod začátku stoupání throttle_integ nelze jednoduše vysvětlit například poklesem napětí akumulátoru (pokud regulátor nemá nějaký zvláštní treshold v účinnosti a napájecím napětí).

image

image

image

@kaklik
Copy link
Member Author

kaklik commented May 6, 2022

Nevím, do jaké míry diagram odpovídá kódu v TECS.cpp, protože v kódu do integrace vstupuje (po škálování) _STE_rate_error, ale podle diagramu bych čekal spíš _STE_error. Nic to ale na té původní úvaze, ze které vyšlo, že "throttle compensation" obsahuje zajímavou informaci, nemění.

Prošel jsem znovu kód a diagram a mám z toho dojem, že použití _STE_rate_error místo _STE_error je chyba. Nedává mi to smysl a je podivné že to nyní funguje.

Zároveň jedinné místo v kódu TECS, kde se používá _STE_error je řešení "uncommanded descent" Tedy propadání vlivem požadavku na nesplnitelnou rychlost letu.

Při průzkumu hodnot _throttle_integ_state ze záznamů více našich letů se ukazuje, že hodnota od nějaké fáze letu spojitě roste. Přesná příčina tohoto jevu zatím není známa, ale je dost možné, že se jedná o nějaký problém s pohonnou soustavou.

Celkový závěr ale je že hodnota "throttle compensation" respektive _throttle_integ_state možná obsahuje informaci o vertikální rychlosti proudění okolo vírníku včetně informace o propadání vírníku. Pokud tam ale taková informace je, tak je skryta mezi jinými "steady state errors", které je těžké separovat. Respektive nemám nápad jak to udělat.

Zkoušel jsem hledat jinde a například u Ardupilota podobnou problematiku řeší pouze za vypnutého motoru. Navíc mají předem změřené parametry rychlostní poláry, což úlohu značně zjednodušuje.

@povik nemáš náhodou nějaký další nápad, jak by se tohle dalo vyřešit?

@kaklik
Copy link
Member Author

kaklik commented May 6, 2022

Na letu provedeném 16.9.2021 jsem zjistil, že hodnota throttle_integ může být i záporná

image

@kaklik
Copy link
Member Author

kaklik commented May 7, 2022

Nevím, do jaké míry diagram odpovídá kódu v TECS.cpp, protože v kódu do integrace vstupuje (po škálování) _STE_rate_error, ale podle diagramu bych čekal spíš _STE_error.

@povik našel tenhle pull-request, kde zřejmě došlo k těmto zásadním změnám v konstrukci TECS, které jsou v rozporu s dokumentací (která od té doby nebyla aktualizována).

@kaklik
Copy link
Member Author

kaklik commented May 12, 2022

Tak jsem překreslil TECS throttle controller podle aktuálního kódu. Moc to ale tohle issue k vyřešení neposunulo.

@kaklik
Copy link
Member Author

kaklik commented May 14, 2022

Ono to řešení extrakce účinnosti letu a měření externího vertikálního proudění je vlastně celkem přímočarý. Jde o to zjistit, jaká je ztráta (total energy rate) v čase samotným letem versus total energy rate, která přibývá motorem. Ten tok energie z motoru by se asi dal považovat za lineární funkci throttle. Jen chybí konstanta, kterou se throttle přepočítá na energy rate. (tím by zřejmě dokonce šlo měřit absolutní účinnost motoru).

Pak následně, když se bude měnit total energy a nebude za to moct throttle. Tak je to externí vliv, který zřejmě nemůže být jiný než vertikální proudění. Může se to ale možná zkomplikovat ještě tím, že převod mezi kinetickou energií a potenciální energií má ztráty. Ztráty by ale zas v nějakém rozumném rozsahu měly být funkcí kvadrátu rychlosti.

Tím by řešení uvnitř TECS potřebovalo během letu stále fitovat několik konstant, které by byly na počátku zinicializované parametrem. Jako je to například teď u převodu mezi throttle a energy rate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed stale
Projects
None yet
Development

No branches or pull requests

2 participants