Převod hodnot z joysticku na diferenciální řízení

Uživatelský avatar
Dex
Administrátor
Příspěvky: 886
Registrován: 16 úno 2013, 14:26

Převod hodnot z joysticku na diferenciální řízení

Příspěvek od Dex » 06 lis 2016, 15:25

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ě :D
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
jrt
Příspěvky: 1334
Registrován: 17 úno 2013, 17:13

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od jrt » 06 lis 2016, 16:47

Fígl je v orientaci joysticku:
Joystick.jpg
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
hobbyrobot.cz, profirobot.cz
edurobot.cz, robodoupe.cz

Uživatelský avatar
Dex
Administrátor
Příspěvky: 886
Registrován: 16 úno 2013, 14:26

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od Dex » 06 lis 2016, 17:25

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.
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
fulda
Příspěvky: 618
Registrován: 04 led 2016, 17:18

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od fulda » 06 lis 2016, 18:14

:) Ale transponovat by jsi to dokázal ne?
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Uživatelský avatar
Dex
Administrátor
Příspěvky: 886
Registrován: 16 úno 2013, 14:26

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od Dex » 06 lis 2016, 19:38

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 :)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
fulda
Příspěvky: 618
Registrován: 04 led 2016, 17:18

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od fulda » 06 lis 2016, 20:38

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š.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

MartinL
Příspěvky: 119
Registrován: 24 úno 2013, 14:13

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od MartinL » 06 lis 2016, 20:57

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

Uživatelský avatar
Dex
Administrátor
Příspěvky: 886
Registrován: 16 úno 2013, 14:26

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od Dex » 06 lis 2016, 21:11

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 :)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

micer
Příspěvky: 127
Registrován: 12 čer 2014, 19:14

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od micer » 07 lis 2016, 10:22

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.

daton
Příspěvky: 441
Registrován: 16 bře 2013, 16:12

Re: Převod hodnot z joysticku na diferenciální řízení

Příspěvek od daton » 07 lis 2016, 11:47

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host