SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement

Robotika – robot s kolesami Mecanum sa môže pohybovať všetkými smermi

Mikrokontroléry
0

V našom dlhodobom seriáli venovanom robotickým konštrukciám a podvozkom sme dosiaľ predstavili dva spôsoby manévrovania robotických podvozkov. Robotické podvozky ktoré majú dve samostatne poháňané kolesá + opornú guličku a robot mení smer zmenou rýchlosti a smeru ich otáčania a autíčko z Lega doplnené o servá a Micro:bit, ktoré mení smer zatáčaním predných kolies. K dispozícii sú však aj ďalšie možnosti, napríklad malé bágre majú štyri kolesá bez možnosti natáčania a smer menia zmenou smeru a rýchlosti otáčania, pričom niektoré z kolies preklzujú. To si však na niektorých povrchoch vyžaduje značný krútiaci moment. V článku ukážeme ešte zaujímavejší spôsob manévrovania štvorkolesového podvozku so štyrmi kolesami Mecanum, ktoré sú upevnené tak, že nemajú možnosť zatáčania a napriek tomu má podvozok bohaté možnosti manévrovania.  Tieto kolesá si právom zaslúžia prívlastok všesmerové. 

Princíp najlepšie pochopíte z videa

 

Kolesá Mecanum majú priemer 64 mm a po obvode majú šikmo umiestnené otočné valčeky.

Kolesá sú kompatibilné so stavebnicou LEGO Technic, majú otvory pre hriadele v tvare kríža takže sa dajú nasadiť priamo na Geek servá určené pre stavebnicu LEGO . V balení sú však aj redukcie aby bolo kolesá možné poháňať jednosmernými motormi TT alebo kontinuálnymi modelárskymi servami SG90. Aby podvozok mohol manévrovať, potrebujete mať možnosť otáčať všetkými štyrmi kolesami a to obidvomi smermi. 

Koleso Mecanum vynašiel inžinier švédskej firmy Mecanum AB Bengt Erland Ilon a v roku 1972 bol princíp kolesa patentovaný v USA.  Je to koleso s radom valcov pripevnených k jeho obvodu. Každý z týchto valcov má os rotácie pootočenú o 45° Striedaním kolies s ľavými a pravými valcami tak, že každé koleso pôsobí silou zhruba kolmo na diagonálu rázvoru kolies je vozidlo stabilné a môže sa pohybovať v ľubovoľnom smere a otáčať sa zmenou rýchlosť a smeru otáčania každého kolesa. Pohyb všetkých štyroch kolies v tom istom smere spôsobuje pohyb vpred alebo vzad, beh kolies na jednej strane v opačnom smere ako na druhej strane spôsobuje rotáciu vozidla a beh kolies na diagonále v opačnom smere ako na kolesách na druhej uhlopriečke spôsobuje pohyb do strany. Kombinácie týchto pohybov kolies umožňujú pohyb vozidla v ľubovoľnom smere s akoukoľvek rotáciou.

Na ovládanie využijeme rozširujúci modul Wukong popísaný v článku https://www.pcrevue.sk/a/Robotika--E2-80-93-ovladanie-modelov-LEGO-Technic-mikropocitacom-BBC-Micro-bit-2 Je konštruovaný tak, že sa dá zabudovať do platformy LEGO vybavené štandardným rámečkem 7 x 5. Vo vnútri platformy je 400 mAh akumulátor. Wukong dokáže ovládať dva jednosmerné motory a osem serv.

Môžete taktiež použiť ďalšie moduly s možnosťou pripojenia cez GVS, čiže tri vodiče: G – elektrická zem, V – napájacie napätie 3.3 V a S – signál z portu.

Alternatívne rozširujúce moduly pre Micro:bit. Vľamo Motor:bit, vpravo Modul Robit pre robotické podvozky

Pripojiť môžete aj OLED modul, prípadne rôzne snímače. Priamo na doske Wukong sú 4 RGB LED diódy navytváranie farebných efektov, 8 modrých LED na vytvorenie efektného podsvietenia a bzučiak napríklad pre funkciu trúbenie. Na pohon kolies Mecanum využijeme štyri kontinuálne 360° servá kompatibilné s Legom. Pripomenieme, že servo je k riadiacej jednotke pripojené pomocou troch vodičov. Na červenom vodiči je kladné napájacie napätie, na čiernom (niekedy hnedom) vodiči je zem a na oranžový vodič sa privádzajú signály. Oranžový vodič je vo vnútri serva pripojený na riadiacu elektroniku, nemá veľký prúdový odber, takže ho môžete pripojiť priamo na port. Ovláda sa pomocou PWM. Frekvencia impulzov privádzaných na oranžový vodič je 50 Hz, čo je čas trvania periódy 20 ms. Kontinuálne servomotory fungujú tak, že zmenou šírky impulzov v rozsahu 0.5 až 2.5 ms sa mení rýchlosť otáčania. Pri šírke 1.5 ms sa servo neotáča. Pri kratších impulzoch sa otáča na jednu a pri dlhších impulzoch na druhú stranu. Pomocou redukcií, ktoré sú súčasťou balenia štvorice kolies Mecanum môžete použiť aj štandardné servá, prípadne jednosmerné motory

Servomotory kolies sú v našej konštrukcii k doske Wukong pripojené takto:

  • Ľavé predné koleso – S0
  • Pravé predné koleso – S1
  • Ľavé zadné koleso – S2
  • Pravé zadné koleso – S3

Do prostredia MakeCode, je potrebné doinštalovať rozširujúcu knižnicu funkcií Wukong. Najnovšia verzia knižnice Wukong má aj podzložku Mecanum a v nej funkcie na ovládanie kolies. V ďalších príkladoch budeme tieto funkcie používať, ale prvý príklad urobíme všeobecný tak, že budeme ovládať priamo servá, aby kolesá Mecanum mohli použiť aj tí, čo použijú inú dosku, ktorá má GVS výstupy na servá, napríklad Motor:bit, Robit, ale aj dosku zo súpravy Smart Home Kit

Príklad s priamym ovládaním servomotorov

V prvom príklade sa budú všetky kolesá otáčať rovnakým smerom, aby sa robotický podvozok pohyboval dopredu. Kontinuálne servo sa z hľadiska knižničných funkcií ovláda ako normálne, čiže sa zadáva uhol v rozsahu 0 – 180°. Kľudový stav bude pri nastavenom uhle 90°. Pri uhloch väčších ako 90°sa bude servo otáčať na jednu stranu a čím bude uhol väčší, tým bude pohyb rýchlejší. Pri hodnote 180°sa bude servo otáčať najrýchlejšie. Pri uhloch menších ako 90°sa bude servo otáčať na jednu stranu a čím bude uhol menší, tým bude pohyb rýchlejší. Pri hodnote 0°sa bude servo otáčať najrýchlejšie.

Nakoľko smer otáčania hriadeľa serva závisí na tom ako a kde je servo namontované, bude potrebné zistiť pri akých hodnotách sa otáča každé koleso dopredu a pri akých dozadu a podľa toho napísať funkciu na ovládanie motorov. Funkciu na zastavenie všetkých štyroch motorov môžete napísať hneď, stačí pre všetky servomotory nastaviť uhol 90°. Pomocou jednoduchej programovej konštrukcie, kde necháme servo otáčať pri zadaní uhla napríklad 45°, aby sa neotáčalo príliš rýchlo vyplníme tabuľku

function ServoStop () {
    wuKong.setServoAngel(wuKong.ServoList.S0, 90)
    wuKong.setServoAngel(wuKong.ServoList.S1, 90)
    wuKong.setServoAngel(wuKong.ServoList.S2, 90)
    wuKong.setServoAngel(wuKong.ServoList.S3, 90)
}
 
wuKong.setServoAngel(wuKong.ServoList.S0, 43)
basic.pause(500)
ServoStop()

Tabuľka je o tom, že aby sa hriadele na protiľahlých servomotoroch, napríklad na ľavom prednom a pravom prednom kolese otáčali dopredu, v skutočnosti sa musia otáčať rôznym smerom

  • Ľavé predné koleso - 180° maximum dopredu, 0° maximum dozadu
  • Pravé predné koleso - 0° maximum dopredu, 180° maximum dozadu
  • Ľavé zadné koleso - 180° maximum dopredu, 180° maximum dozadu
  • Pravé zadné koleso - 0° maximum dopredu, 180° maximum dozadu

Podľa toho napíšeme funkcie a príklad ich volania, aby sa všetky kolesá pohybovali smerom dopredu

function PohybMotorov (lp: number, pp: number, lz: number, pz: number) {
    wuKong.setServoAngel(wuKong.ServoList.S0, 180 - lp)
    wuKong.setServoAngel(wuKong.ServoList.S1, pp)
    wuKong.setServoAngel(wuKong.ServoList.S2, 180 - lz)
    wuKong.setServoAngel(wuKong.ServoList.S3, pz)
}
function ServoStop () {
    wuKong.setServoAngel(wuKong.ServoList.S0, 90)
    wuKong.setServoAngel(wuKong.ServoList.S1, 90)
    wuKong.setServoAngel(wuKong.ServoList.S2, 90)
    wuKong.setServoAngel(wuKong.ServoList.S3, 90)
}
 
PohybMotorov(45, 45, 45, 45)
basic.pause(500)
ServoStop()

Príklady využívajúce knižnicu Wukong s podporou pre kolesá Mecanum 

Oveľa jednoduchšie budete môcť pohyb robotického podvozku s kolesami Mecanum ovládať pomocou knižnice Wukong, ktorá má v najnovšej verzii aj podporu pre tieto kolesá

Pripomenieme, že servovomotory kolies sú v našej konštrukcii k doske Wukong pripojené takto:

  • Ľavé predné koleso – S0
  • Pravé predné koleso – S1
  • Ľavé zadné koleso – S2
  • Pravé zadné koleso – S3

Podľa toho je potrebné nastaviť inicializačnú funkciu v bloku on start. Vyskúšame pohyb všetkými smermi. Po spustení zistíte, že robotický podvozok pri použití funkcií left a right sa natočí požadovaným smerom. Kód pre pohyb budeme pre čo najjednoduchšie ovládanie spúšťať buď hneď po štarte, alebo lepšie ť v obsluhe udalosti zatlačenia tlačidla A

wuKong.mecanumWheel(
wuKong.ServoList.S0,
wuKong.ServoList.S2,
wuKong.ServoList.S1,
wuKong.ServoList.S3
)
 
input.onButtonPressed(Button.A, function () {
    wuKong.mecanumRun(wuKong.RunList.Front)
    basic.pause(500)
    wuKong.mecanumStop()
    basic.pause(100)
    wuKong.mecanumRun(wuKong.RunList.rear)
    basic.pause(500)
    wuKong.mecanumStop()
    basic.pause(100)
    wuKong.mecanumRun(wuKong.RunList.left)
    basic.pause(500)
    wuKong.mecanumStop()
    basic.pause(100)
    wuKong.mecanumRun(wuKong.RunList.right)
    basic.pause(500)
    wuKong.mecanumStop()
})

Podľa toho aká je vaša konštrukcia veľká a ťažká je potrebné nastaviť pauzu po zastavení pohybu určitým smerom, aby sa podvozok prestal pohybovať zotrvačnosťou. Len vtedy budú na seba nadväzujúce pohyby presné. Na zvýšenie presnosti odporúčam občas očistiť gumené valčeky na kolesách.

V nasledujúcom príklade nahradíme funkcie left a right funkciami spin s parametrami left a right. Teraz sa robotický podvozok bude pohybovať kolmo doprava a doľava, čiže pohybom, ktorý je snom všetkých, čo chcú zaparkovať do medzeru kam sa vaše auto zmestí s toleranciou niekoľkých centimetrov 

wuKong.mecanumWheel(
wuKong.ServoList.S0,
wuKong.ServoList.S2,
wuKong.ServoList.S1,
wuKong.ServoList.S3
)
 
input.onButtonPressed(Button.A, function () {
    wuKong.mecanumSpin(wuKong.TurnList.Left)
    basic.pause(500)
    wuKong.mecanumStop()
    basic.pause(100)
    wuKong.mecanumSpin(wuKong.TurnList.Right)
    basic.pause(500)
    wuKong.mecanumStop()
})

V ďalšom príklade nahradíme funkciu spin funkciou drift, opäť ju spustíme postupne s parametrami left a right. Tentoraz sa bude robotický podvozok otáčať na mieste

input.onButtonPressed(Button.A, function () {
    wuKong.mecanumDrift(wuKong.TurnList.Left)
    basic.pause(2000)
    wuKong.mecanumStop()
    basic.pause(200)
    wuKong.mecanumDrift(wuKong.TurnList.Right)
    basic.pause(2000)
    wuKong.mecanumStop()
})
wuKong.mecanumWheel(
wuKong.ServoList.S0,
wuKong.ServoList.S2,
wuKong.ServoList.S1,
wuKong.ServoList.S3
)

V záverečnom príklade skombinujeme pohyb dopredu, dozadu, kolmo do obidvoch strán a napokon rotáciu podvozku na mieste okolo svojej osi obidvomi smermi.

input.onButtonPressed(Button.A, function () {
    wuKong.mecanumRun(wuKong.RunList.Front)
    basic.pause(500)
    wuKong.mecanumStop()
    basic.pause(200)
    wuKong.mecanumRun(wuKong.RunList.rear)
    basic.pause(500)
    wuKong.mecanumStop()
    basic.pause(200)
    wuKong.mecanumSpin(wuKong.TurnList.Left)
    basic.pause(1000)
    wuKong.mecanumStop()
    basic.pause(200)
    wuKong.mecanumSpin(wuKong.TurnList.Right)
    basic.pause(1000)
    wuKong.mecanumStop()
    basic.pause(200)
    wuKong.mecanumDrift(wuKong.TurnList.Left)
    basic.pause(2000)
    wuKong.mecanumStop()
    basic.pause(200)
    wuKong.mecanumDrift(wuKong.TurnList.Right)
    basic.pause(2000)
    wuKong.mecanumStop()
})
wuKong.mecanumWheel(
wuKong.ServoList.S0,
wuKong.ServoList.S2,
wuKong.ServoList.S1,
wuKong.ServoList.S3
)

V našich jednoduchých príkladoch boli ukázané možnosti pohybu robotického podvozku s kolesami Mecanum. V príklade sme úmyselne nepoužili funkcie, ani cykly, to necháme na vašu tvorivosť keď si osvojíte základné pohyby. V budúcom pokračovaní ukážeme diaľkové ovládanie podvozku s kolesami Macanum pomocou druhého Micro:bitu, ktorý bude komunikovať rádiovo s Micro:bitom v module Wukong, ktorý riadi robotický podvozok. 

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
Mecanum micro:bit BBC micro:bit robotika programovanie informatika

Pridať komentár