MartinL píše:Kdysi jsem si s tím hrál a udělat to, aby se to chovalo přirozeně a přitom to využívalo celý rozsah rychlostí není úplně triviální. Nakonec jsem dospěl k řešení, kde využívám plný rozsah pro pohyb vpřed/vzad a maximálně polovinu rychlosti pro otáčení. Výsledné vztahy pro výpočet jsou následující (v normalizovaném tvaru pro rozsahy X, Y, L, P = -1..1, pro reálný rozsah je nutno upravit).
D = (1 - abs(X)/2) * Y
L = D + X/2
P = D - X/2
Zásadní otázka je, co je to "přirozeně", respektive pro co konkrétně to má sloužit. Tento problém se běžně řeší při nastavování mixerů na modelářských vysílačích a žádná univerzální transformace není. Uvedu pár příkladů z pohledu modeláře:
1/ Velmi pomalý tank, pásový podvozek jeřábu nebo rypadla. Určitě chci plně využít rychlost vpřed/vzad i otáčení, takže žádné využívání poloviny rychlosti pro otáčení, prostě jen sečíst a odečíst (a vydělit dvěma). V bodě 0,5 / 0,5 (0,5 / -0,5 , .....) ovladače se podvozek otáčí na místě kolem osy procházející pásem.
2/ Rychlostní člun se dvěma motory. 0 - vpřed plný výkon buď lineárně nebo lépe s progresivní "S"charakteristikou (blízko středu je řízení asi 2x méně citlivé než u kraje výchylky). 0 - vzad omezení výkonu na cca 20 procent (jinak ta loď zajede po ocase pod hladinu a už ji nikdo nenajde) a lineární průběh. Váha účinnosti pro otáčení cca 10 až 15 procent (!!) (jinak to v plné rychlosti nezatočí, ale po strane vyskočí do vzduchu a metá kozelce). Otáčet na místě (no skoro) to může, ale jen s nepatrným zlomkem výkonu obou pohonů.
3/ Vzducholoď s bočními motory, výzkumné ponorky s bočními pohony (tady se to používá jako podpora nebo náhrada směrového kormidla pro vychýlení v horizontální rovině bez příčného náklonu, NE jako hlavní prostředek k řízení, i když některé malé hračky letadélek se právě dvěma motory skutečně řídí). Výstup z ovladače není jen na motory, ale také na směrové kormidlo. Při malé rychlosti vpřed/vzad do cca 30 procent výchylky se řízení děje víceméně přes motory, kormidlo je téměř neúčinné. Při velké rychlosti se fakticky řídí kormidlem, rozdíl tahu motorů je vedlejší. Nejjednodušší funkce pro tento případ je ( pro jednu osu nikoli (X+Y)/2 ) ale min (X+Y, 1) respektive max (X+Y, -1).
Obecně se v modelářských vysílačích používají tři úrovně (stupně, vrstvy) matematických úprav:
1/ transformace na vstupu - nějaký rozsah údajů z ovladače převedu na požadovaný rozsah (lineárně, nelineárně, s posunutým neutrálem, různě pro kladnou nebo zápornou výchylku, ....) - vše se děje jen na jediném údaji z ovladače bez vlivu čehokoli jiného. Je snaha pracovat s co největšími výchylkami aby se omezily chyby z rozlišení (u souprav které pracují s 4000 kroky na rozsah to moc nehraje roli, ale bývaly kdysi i jen osmibitové převodníky a 256 kroků fakt není moc). Pak přijde
2/ mixování - už upravené údaje z ovladačů sečtu, odečtu, možno v závislosti na velikosti některého z nich (pro pohyb vpřed se mixuje, pro pohyb vzad ne ...) - výsledkem jsou výstupy, jeden pro každý ovládaný prvek (pohon nebo typicky servo). No a pak přijde
3/ transformace na výstupu - pracuje jen s jediným údajem, který přichází z předchozího zpracování a postará se o rozsah tak, aby daný regulátor nebo servo využíval přesně to co má. Případně se zavede nelineární průběh (kompenzace průběhu momentu motoru proti šířce PWM pulzu), zavede se zpomalení náběhů (hlavně omezení rozběhových proudů, částečně simulace setrvačnosti) a doběhů (simulace setrvačnosti), zpoždění před změnou směru otáčení, nastavení brzdy pohonu po určitou dobu nebo trvale v zastavení, ....
No a je to "přirozené". Jenže pokaždé to znamená něco úplně jiného.