Převod hodnot z joysticku na diferenciální řízení
Převod hodnot z joysticku na diferenciální řízení
Zdravím,
potřebuji trochu nakopnout (myšleno obrazně )
Mám hodnoty z joysticku (x a y) a potřebuji je nějak inteligentně převést na hodnoty pro diferenciální řízení. V podstatě si můžete představit tank, jehož pásy se mohou pohybovat vpřed i vzad různou rychlostí. Zatáčet je tedy možné buď tím, že se jeden pás pohybuje rychleji, nebo tak, že jeden pás stojí a nebo také tak, že se pásy pohybují různým směrem.
Mno a já si teď lámu hlavu s tím, jak to udělat co nejlépe/nejpřirozeněji/nejplynuleji z pohledu obsluhy joysticku.
Můžete mi někdo poradit?
Pokud se to podaří, tak výsledek v sobotu přitáhnu na RoboDoupě
potřebuji trochu nakopnout (myšleno obrazně )
Mám hodnoty z joysticku (x a y) a potřebuji je nějak inteligentně převést na hodnoty pro diferenciální řízení. V podstatě si můžete představit tank, jehož pásy se mohou pohybovat vpřed i vzad různou rychlostí. Zatáčet je tedy možné buď tím, že se jeden pás pohybuje rychleji, nebo tak, že jeden pás stojí a nebo také tak, že se pásy pohybují různým směrem.
Mno a já si teď lámu hlavu s tím, jak to udělat co nejlépe/nejpřirozeněji/nejplynuleji z pohledu obsluhy joysticku.
Můžete mi někdo poradit?
Pokud se to podaří, tak výsledek v sobotu přitáhnu na RoboDoupě
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Převod hodnot z joysticku na diferenciální řízení
Fígl je v orientaci joysticku:
V téhle konfiguraci ovládáš rychlost otáčení každého motoru samostatně a závislost vzniká díky mechanice joysticku.
Nápad pochází ze starého článku na webu LetsMakeRobots, ale už se - bohužel - nedá najít.
V téhle konfiguraci ovládáš rychlost otáčení každého motoru samostatně a závislost vzniká díky mechanice joysticku.
Nápad pochází ze starého článku na webu LetsMakeRobots, ale už se - bohužel - nedá najít.
jrt
Re: Převod hodnot z joysticku na diferenciální řízení
Tohle použít nemůžu, protože můj joystick je virtuální (dotykový). To jsem nezmínil
Můžu dostávat hodnoty např. -128 až 128 pro x a analogicky pro y. Rozsah mohu nastavit tj. může to být klidně i -256 až 256.
Pak ještě mohu číst hodnoty vyjadřující vzdálenost od středu (poloměr) (0 až 100%) a úhel 0 až 360 st.
Můžu dostávat hodnoty např. -128 až 128 pro x a analogicky pro y. Rozsah mohu nastavit tj. může to být klidně i -256 až 256.
Pak ještě mohu číst hodnoty vyjadřující vzdálenost od středu (poloměr) (0 až 100%) a úhel 0 až 360 st.
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Převod hodnot z joysticku na diferenciální řízení
Ale transponovat by jsi to dokázal ne?
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Re: Převod hodnot z joysticku na diferenciální řízení
Jo to asi jo Jen přemýšlím, jestli to jako mají být poloviny rozsahů těch os nebo je to jen takový obrázek?
Nejdříve jsem hledal na internetu, ale nic moc kloudného jsem zatím nenašel. Většinou se jen určité rozsahy hodnot na osách kombinují se statickou rychlostí a směrem motorů a to je pro děcka
Nejdříve jsem hledal na internetu, ale nic moc kloudného jsem zatím nenašel. Většinou se jen určité rozsahy hodnot na osách kombinují se statickou rychlostí a směrem motorů a to je pro děcka
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Převod hodnot z joysticku na diferenciální řízení
Ta traspozice - podívej se na to takhle:
Když jdeš prostředkem dopředu, tak jedou oba pásy stejně rychle dopředu nebo dozadu. Takže můžeš počítat že oba pásy jedou stejně rychle takovou rychlostí, jako je posun Y.
Pokud se posouváš doprava nebo doleva, tak očekáváš, že se tank otáčí doprava nebo doleva na místě. Takže pravej pás kopíruje osu X a levej pás je opak osy X.
No a teď to stačí sečíst a máš co potřebuješ.
Když jdeš prostředkem dopředu, tak jedou oba pásy stejně rychle dopředu nebo dozadu. Takže můžeš počítat že oba pásy jedou stejně rychle takovou rychlostí, jako je posun Y.
Pokud se posouváš doprava nebo doleva, tak očekáváš, že se tank otáčí doprava nebo doleva na místě. Takže pravej pás kopíruje osu X a levej pás je opak osy X.
No a teď to stačí sečíst a máš co potřebuješ.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Re: Převod hodnot z joysticku na diferenciální řízení
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
D = (1 - abs(X)/2) * Y
L = D + X/2
P = D - X/2
Re: Převod hodnot z joysticku na diferenciální řízení
Mno něco takového jsem hledal. Díky Martine!
Právě to, že to není úplně triviální, jsem zjistil taky, když jsem nad tím začal přemýšlet. Tohle zkusím, ale pokud máte někdo ještě lepší nápad, sem s ním
Právě to, že to není úplně triviální, jsem zjistil taky, když jsem nad tím začal přemýšlet. Tohle zkusím, ale pokud máte někdo ještě lepší nápad, sem s ním
"all your robots are belong to us"
robodoupe.cz
robodoupe.cz
Re: Převod hodnot z joysticku na diferenciální řízení
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: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
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.
Re: Převod hodnot z joysticku na diferenciální řízení
Tak já k tomuto tématu také něco napíši i když jen tak obecně a s odkazy na pana Černého protože stejně jako asi on jsem modelář (sice na baterky ale o to ted nejde ).
V předchozím příspěvku je správně napsáno, že to hodně záleží na tom co se na tom podvozku bude pohybovat. Pokud to bude rychlý transporter něco jako Pandur s pásy tak je to homogenní struktura s těžištěm uprostřed a pak může být vše podstatně rychlejší. Pokud to bude například jeřáb nebo nesymetricky co do těžiště vytvořený model pak bude na místě podstatně pomalejší konstrukce.
Hlavně jsem však chtěl předchozí příspěvek doplnit o to že na vysílačkách jsou trimy což je vlastně dolaďování jednotlivých bloků řízení (metematicky nebo jen prostě přičítáním konstant) a to je velmi podstatné. Protože i když se něco vymodeluje a udělá proto základní struktura v matematickém vzorci, bude tam hned několik konstant, které je pak možno právě těmi trimy dle chování reálného modelu upravovat (proporcionalita řízení odchylky na jednotlivých motorech, rychlost záběru - v případě pásu druhého pro otáčení v závislosti na tom prvním co ještě jede dopředu a výchylce kniplu atd).
Tedy pokud bych to dělal já tak rozhodně nezapomenu na možnost tlačítky vytrimovávat správné úrovně, protože realný model oproti matematickému bude o dost jinde.
V předchozím příspěvku je správně napsáno, že to hodně záleží na tom co se na tom podvozku bude pohybovat. Pokud to bude rychlý transporter něco jako Pandur s pásy tak je to homogenní struktura s těžištěm uprostřed a pak může být vše podstatně rychlejší. Pokud to bude například jeřáb nebo nesymetricky co do těžiště vytvořený model pak bude na místě podstatně pomalejší konstrukce.
Hlavně jsem však chtěl předchozí příspěvek doplnit o to že na vysílačkách jsou trimy což je vlastně dolaďování jednotlivých bloků řízení (metematicky nebo jen prostě přičítáním konstant) a to je velmi podstatné. Protože i když se něco vymodeluje a udělá proto základní struktura v matematickém vzorci, bude tam hned několik konstant, které je pak možno právě těmi trimy dle chování reálného modelu upravovat (proporcionalita řízení odchylky na jednotlivých motorech, rychlost záběru - v případě pásu druhého pro otáčení v závislosti na tom prvním co ještě jede dopředu a výchylce kniplu atd).
Tedy pokud bych to dělal já tak rozhodně nezapomenu na možnost tlačítky vytrimovávat správné úrovně, protože realný model oproti matematickému bude o dost jinde.