You are on page 1of 81

PANEURÓPSKA VYSOKÁ ŠKOLA

FAKULTA INFORMATIKY

FI-100785-12534

Manipulačný robot

Diplomová práca

2020
Bc. Áron Mészáros
PANEURÓPSKA VYSOKÁ ŠKOLA
FAKULTA INFORMATIKY

Manipulačný robot
Diplomová práca
Áron Mészáros

Študijný program: Aplikovaná informatika

Študijný odbor: Informatika

Školiace pracovisko: Ústav aplikovanej informatiky

Školiteľ: prof. Ing. Štefan Kozák, PhD.

Bratislava 2020
ZADANIE DIPLOMOVEJ PRÁCE

Meno a priezvisko študenta: Bc. Áron Mészáros


Evidenčné číslo diplomovej práce: FI-100785-12534
Študijný odbor: informatika
Študijný program: Aplikovaná informatika
Forma a metóda štúdia: denná prezenčná
Vedúci diplomovej práce: prof. Ing. Štefan Kozák, PhD.
Konzultant diplomovej práce: prof. Ing. Štefan Kozák, PhD.
Ústav/katedra: Ústav aplikovanej informatiky
Dátum zadania diplomovej práce: 25. 03. 2020

Názov: Manipulačný robot

Anotácia: Cieľom riešenia diplomovej práce je návrh manipulačného robota pre účely riadenia
vybraných procesov.

Body zadania :

1. Navrhnite SW a HW komponenty manipulačného robota.


2. Ovládanie manipulačného robota realizujte prostredníctvom grafického používateľ-
ského rozhrania.
3. Overte komplexný návrh manipulačného robota v prostredí Matlab – Simulink.

................................................................ ................................................................

prof. Ing. Štefan Kozák, PhD. prof. RNDr. Frank Schindler, PhD.
vedúci práce vedúci ústavu
Poďakovanie

Rád by som vyjadril svoje ocenenie a vďaku vedúcemu práce prof. Ing. Štefanovi Kozákovi,
PhD., za venovaný čas a pomoc s cennými radami a pripomienkami pri vypracovaní
diplomovej práce.
Čestné prehlásenie

Čestne vyhlasujem, že prácu „ Manipulačný robot “ som vypracoval samostatne, pomocou


uvedenej literatúry.

..................................................
Abstrakt

Cieľom diplomovej práce je návrh softvérových a hardvérových komponentov pre riadenie


pohybu manipulačného robota v prostredí Matlab s využitím robotického operačného
systému ROS. Realizovaný manipulačný robot bude schopný sa pohybovať vo svojom
záberovom priestore a prenášať predmety. Interakcia s robotom je realizovaná
prostredníctvom vytvoreného grafického používateľského rozhrania na počítači.

Kľúčové slová: Robotika, Priemyselný robot, Paralelný robot, CDPR (Káblovo hnaný
paralelný robot), Matlab-Simulik, Arduino, Raspberry Pi, ROS, Linux
Abstract

The aim of the diploma thesis is the design of software and hardware components for
controlling the movement of a manipulation robot in the MATLAB environment and using
the ROS operating system for robots. The implemented handling robot will be able to
move in its working environment and transfer objects. The interaction with the robot is
realized through a graphical user interface on a computer.

Keywords: Robotics, Industrial Robot, Parallel Robot, CDPR (Cable Driven Parallel
Robots), Matlab-Simulik, Arduino, Raspberry Pi, ROS, Linux
Obsah

ÚVOD .................................................................................................................................................................9
ZOZNAM SKRATIEK, ZNAČIEK A SYMBOLOV ..................................................................................10
1. ÚVOD DO ROBOTICKÝCH SYSTÉMOV .............................................................................................11
1.1 MECHANICKÉ ŠTRUKTÚRY ROBOTOV ......................................................................................................11
1.2 HARDVÉROVÁ TOPOLÓGIA ROBOTA ........................................................................................................13
1.3 OVLÁDANIE ROBOTA ...............................................................................................................................16
1.4 RIADENIE POHYBU (MOTION CONTROL) .................................................................................................17
1.4.1 Plánovač trasy (Path-Planner) .......................................................................................................17
1.4.2 Priama kinematika (Forward Kinematics) .....................................................................................18
1.4.3 Inverzná kinematika (Inverse kinematics) ......................................................................................20
1.4.4 Výpočet dráhy .................................................................................................................................23
1.4.5 Generovanie trajektórii (Trajectory Generation)...........................................................................25
1.5 KÁBLOVO HNANÉ PARALELNÉ ROBOTY (CDPR) .....................................................................................26
2. NÁVRH MANIPULAČNÉHO ROBOTA ................................................................................................30
2.1 NÁVRH KONFIGURÁCIE ROBOTA..............................................................................................................30
2.2 RIADENIE ROBOTA...................................................................................................................................31
2.2.1 Simulácia pomocou CASPR (Cable Analysis and Simulation of Parallel Robots) ........................31
2.2.2 Robotický operačný systém (ROS) ..................................................................................................34
2.3 HARDVÉROVÁ TOPOLÓGIA ROBOTA ........................................................................................................35
3. KONFIGURÁCIA MANIPULAČNÉHO ROBOTA ...............................................................................37
3.1 CASPR....................................................................................................................................................37
3.2 INŠTALÁCIA ROS ....................................................................................................................................43
3.2.1 Spojenie s CASPR ...........................................................................................................................43
3.2.2 CNC uzol.........................................................................................................................................44
3.3 HARDVÉROVÉ ZAPOJENIE ........................................................................................................................51
3.3.1 Konfigurácia ...................................................................................................................................53
3.4 ZOZNAM POUŽITÉHO HARDVÉRU .............................................................................................................57
3.5 TEST ROBOTA ..........................................................................................................................................58
3.5 VYHODNOTENIE ......................................................................................................................................64
4. ZÁVER .........................................................................................................................................................65
LITERATÚRA ................................................................................................................................................66
OBRÁZKY .......................................................................................................................................................70
PRÍLOHY ........................................................................................................................................................71
PRÍLOHA 1: HLAVNÝ ROS UZOL PRE GENEROVANIE KROKOVÝCH PRÍKAZOV NA ZÁKLADE DÁT SO
SIMULÁTORA CASPR.................................................................................................................................... 71
PRÍLOHA 2: KÓD PRE RIADENIE MIKROKONTROLÉRA ....................................................................................73
PRÍLOHA 3: SÚBOR BODIES.XML ...................................................................................................................75
PRÍLOHA 4: SÚBOR CABLES.XML ...................................................................................................................76
PRÍLOHA 5: TRAJECTORIES.XML ....................................................................................................................78
Úvod

Vývoj metodológie riadenia výrobných procesov v súčasnosti značne urýchlil a zefektívnil


kvalitu mnohých priemyselných procesov, v čom zohrali veľkú úlohu moderné metódy a
algoritmy riadenia. Je to zásluhou najmä vývoja riadiacich systémov, snímačov a
komunikačných systémov ktoré sú schopné optimálne riadiť priemyselné procesy v reálnom
čase s vysokou presnosťou a kvalitou. Dôležitú súčasť rozvoja výroby tvorí robotika. Robot
je umelý agent, čo znamená, že slúži ako náhrada osoby, pričom robí veci, pre ktoré je
určený. Slovo „robot“ sa prvýkrát objavil v roku 1920 v dráme českého prozaika Karla
Čapka s názvom „Rossumovi univerzální roboti“. (Matt Simon, Apríl 2020) Aj keď
v beletrii roboty zvyčajne vyzerajú ako ľudia, v skutočnosti väčšina robotov tak nevyzerá,
ale sú to stroje riadené počítačovým programom a elektronickými obvodmi.
Roboty sú v priemysle mimoriadne užitočné a potrebné, pretože robia veľa opakujúcich sa
úkonov, nebezpečné a únavné práce namiesto ľudí. Sú zložité systémy, ktoré vyžadujú
takmer všetky odvetvia informačných technológií a elektrotechniky, aby správne fungovali.
Moderné komponenty riadiacich systémov a algoritmy riadenia umožnili robotike výskum
a vývoj takých robotov, ktoré majú širokospektrálne využitie v rôznych oblastiach
priemyslu. Robotika sa objavuje okrem priemyselnej výroby aj v zdravotníctve, vo
výskume, vo filmovej produkcii, pri stavbách a aj v domácnostiach.
Táto práca sa sústredí na typy robotov, ktoré sú najmä používané v priemysle a majú
mechanickú štruktúru vhodnú na manipuláciu s predmetmi. Takéto druhy robotov nazývame
priemyselnými robotmi. Práca predstaví čo je to robotika, aké mechanické štruktúry robotov
existujú a ako sú riadené. Budú uvedené základné postupy k vypočítaniu matematických
modelov, ktoré riadia robotov a postupy konfigurácie hardvérovej štruktúry pre ovládanie
mechanických častí.
Jednou z podnetných oblastí vývoja a aplikácie robotických systémov sú paralelné roboty,
ktoré používajú káble pre dosiahnutie pohybu. Táto práca dáva príležitosť nahliadnuť hlbšie
do témy týchto druhov robotov, aké sú ich výhody oproti iným typom manipulátorov a akým
výzvam čelia. Pre praktickú časť tejto práce bol vybraný robot tohto druhu. Na poskladanie
takého robota boli použité ľahko dostupné softvérové a hardvérové komponenty.
Diplomová práca sa skladá z troch kapitol. Prvá časť sa zaoberá rôznymi robotickými
systémami. Opisuje pohyb robota s výpočtom jeho kinematického modelu a ako vykonať
z inštrukcií pohyb v reálnom svete na hardvéri. Druhá časť diplomovej práce sa zaoberá
návrhom robota, ktorý je “poháňaný ôsmimi káblami” na základe softvérovej a hardvérovej
podpory. Tretia kapitola je zameraná na konfiguráciu robota pre jeho nasadenie v prevádzke.
Realizované merania budú uvedené v grafickej forme, z ktorej bude možné určiť presnosť
činnosti robota. V závere práce sú uvedené teoretické a praktické poznatky, ktoré súvisia s
výhodami aplikácie takéhoto robota.

9
Zoznam skratiek, značiek a symbolov

IK Inverse Kinematics Inverzná kinematika

GUI Graphical User Interface Grafické používateľské


rozhranie

API Application Program


Interface

DOF Degrees of freedom Stupne voľnosti

TCP Tool Center Point Koncový efektor

EE End Effector Koncový efektor

SBC Single board computer Jednodoskový počítač

PLC Programmable logic Programovateľný logický


controller automat

PTP Point to point Z bodu do bodu

10
1. Úvod do robotických systémov

Roboty môžeme chápať ako mechanicko-elektrické systémy ovládané elektrickými servo


motormi, riadené a naprogramované tak, aby vykonávali konkrétnu úlohu. Obvykle sa
jedná o pravidelne sa opakujúce úkony, pre ktoré sú roboty často spoľahlivejšie než ľudia.
Mechanický aspekt robota mu pomáha plniť úlohy v prostredí, pre ktoré je navrhnutý.
Roboty môžu vykonávať vysokorýchlostné a veľmi presné pohyby. Nemusia odpočívať a
zriedka potrebujú údržbu. Ich mechanické štruktúry sú veľmi pevné a sú vyrábané a
dodávané v rôznych veľkostiach v závislosti od aplikácií. Menšie roboty dokážu
manipulovať napr. iba s 1-2 kilogramovým nákladom, väčšie môžu ľahko prenášať náklad
presahujúci aj tri či štyri sto kilogramov.
Roboty v dnešných dňoch sa nachádzajú vo väčšine moderných tovární, vyskytujú sa
najmä v automobilovom priemysle, zdravotníctve a v oblastiach, kde vykonávajú rezanie,
zváranie, lakovanie, ošetrovanie a diagnostiku. V iných odvetviach vykonávajú napríklad
baliace práce alebo paletizáciu a všeobecnú manipuláciu s tovarom. (Fabrizio Frigeni,
2019)

1.1 Mechanické štruktúry robotov

Roboty sa vyrábajú a dodávajú v rôznych mechanických konfiguráciách. Jednou z


charakteristík, v ktorej sa roboty líšia, je počet stupňov voľnosti objektu, s ktorým
manipulujú. Stupne voľnosti alebo DOF (skratka pre degrees of freedom) znamená počet
súradníc (kĺbov), ktoré môže robot ovplyvniť. (Latha Nagendran, 2019) Existuje 6 možných
DOF pre manipuláciu s predmetmi. Je to pohyb a otáčanie sa po osi x, y a z. (Marian Mach,
Január. 2017) Ako príklad môžeme uviesť, stupne voľnosti, ktoré používa auto a lietadlo.
Auto (Obr.1.1) má 3 DOF lebo sa môže pohybovať iba po 2D rovine po osi x a y a otáčať sa
po osi z, kým lietadlo má kontrolu nad všetkými uhlami a osami (6 DOF).

11
Obrázok 1.1 DOF auta a lietadla [6]

V tejto práci skratka pre degrees of freedom „DOF“ sa viackrát vyskytne.


Avšak bez ohľadu na DOF je možné jasne rozlíšiť dve triedy robotov podľa ich mechanickej
konfigurácie: roboty so sériovou a paralelnou kinematikou. Sériová kinematika pozostáva z
otvoreného reťazca väzieb. (Kevin M. Lynch, Frank C. Park, 2017, strana 2.) Je to podobne
ako ľudská ruka ktorá má viacero spojov od ramena po lakte, až po zápästie a prsty. Zvyčajne
sa používajú na manipuláciu s ťažšími predmetmi a sú flexibilnejšie. Flexibilita robotov sa
meria podľa dostupných stupňov voľnosti DOF.

Obrázok 1.2 Otvorené a uzatvorené kinematické reťazce

Sériová kinematika (Obr.1.2) umožňuje väčšie pracovné priestory, čo znamená, že môžu


dosiahnuť objekty vzdialenejšie od základne robota, ale majú aj dve hlavné nevýhody. Sú
pomalšie a menej presné ako väčšina paralelných robotov. Dôvodom je skutočnosť, že

12
každý kĺb po reťazi pridáva nepresnosti, takže celková chybovosť sa zvyšuje počtom
kĺbov. V ideálnom prípade môžeme vytvoriť robot s ľubovoľným počtom kĺbov (Obr.1.3),
ale jeho ovládanie je tým ťažšie. (Kevin M. Lynch, Frank C. Park, 2017, strany 12-21)
Mnohé aplikácie vyžadujú paralelné roboty, ktoré požívajú paralelnú kinematiku, to
znamená, že majú uzavreté kinematické reťazce. Zvyčajne pozostávajú z niekoľkých spojení
pripevnených k základni a druhým koncom pripojení ku koncovému efektoru. Na rozdiel od
sériovej kinematiky majú paralelné roboty obmedzený pracovný priestor, ale dokážu sa
pohybovať oveľa rýchlejšie a ponúkajú vyššiu presnosť, pretože chyby sa nepridávajú medzi
spojmi. Sú bežne používané v priemyselnom prostredí pre aplikácie, kde je prenášaná
hmotnosť nižšia a kde požadované DOF je iba 3 alebo 4, čo je pozícia a prípadne obmedzená
orientácia okolo jednej osi. Existujú samozrejme aj paralelné roboty, ktoré môžu zniesť aj
vysoké zaťaženie a majú 6 úplných stupňov voľnosti, napr. platforma Stewart. (Kevin M.
Lynch, Frank C. Park, 2017, strana 22)

Obrázok 1.3 Stewart platforma[1]

1.2 Hardvérová topológia robota

V tejto časti bude vysvetlené, akou formou sa vykonávajú pohyby robota z hardvérového
hľadiska. Existujú 3 hlavné vrstvy na ovládanie a vykonávanie robotického pohybu. V

13
každej vrstve sú hardwarové produkty na rôzne účely. Zvyčajne v topológii s vertikálnymi
usporiadanými vrstvami majú vrchné úlohy kontrolu nad komponentami v spodných
vrstvách. Pri pohybe nadol sú predstavené komponenty určené na vykonanie úloh až po
najnižšiu úroveň, kde sa uskutočňuje samotné fyzické vykonávanie. Na nasledujúcom
obrázku 1.4 bude predstavená hardvérová topológia vykonávania robotického pohybu, v
ktorej každá vrstva obsahuje potrebný hardvér určený pre úlohu vrstvy, v ktorom sa
nachádza.

Obrázok 1.4 Hardvérová topológia robotického systému

Riadiaca jednotka predstavuje mozog robota v ktorom bežia programy pre riadenie pohybov
jednotlivých častí a celá logika fungovania. To čo všetko sa odohráva v tomto komponente
bude rozobrané v ďalších častiach. Riadiaca jednotka môže byť od jednoduchého SBC
(Single-Board Computer) cez PLC (Programmable Logic Controller) až po robustný

14
industriálny počítač. Vytrvorený a naprogramovaný kód je nasadený vo vnútri riadiacej
jednotky a neustále beží počas operácie robota. Interakcia s jednotkou na poslanie príkazov
a konfigurácie od operátora je umožnená pomocou pripojeného používateľského rozhrania.
(Walker, Mark John, 2012) (Diamond Systems Corporation)

Toto rozhranie (interface) môže bežať na to určenom HMI (Human-Machine Interface)


hardvéri alebo môže fungovať ako oddelený softvér bežiaci zvlášť na počítači či tablete.
Rozhranie obsahuje panel s nástrojmi na ovládanie daného robota pomocou tlačidiel alebo
iných grafických nástrojov. Panel tiež ponúka spätnú väzbu o stave fungovania robota,
najčastejšie pomocou grafických znázornení a grafov. Komunikácia rozhrania s riadiacou
jednotkou nie je časovo kritická a môže byť realizovaná pomocou TCP/IP alebo API
protokolmi aj cez sieťový kábel (Mark W. Spong, Seth Hutchinson, M. Vidyasagar. 2005)

Ak riadiaca jednotka prijala príkaz na pohyb robota, na základe bežiaceho programu začne
generovať pozície pre jednotlivé spoje či kĺby robota. Hodnoty vygenerovaných pozícii sú
poslané na jednotlivé servo pohony elektrických motorov. Existujú aj servo pohony, ktoré
sú schopné riadiť viac elektromotorov naraz. Je to energeticky ekonomickejšie lebo
používajú spoločný zdroj energie avšak treba dbať na kompatibilitu s motormi.
Komunikácia medzi servo pohonom a riadiacou jednotkou musí prebiehať v reálnom čase.
Dôraz nie je kladený na rýchlosť komunikácie ale na synchronické riadenie všetkých servo
pohonov aby elektromotory dostávali žiadané pozície v požadovanom čase. Ak každý motor
dostane pozíciu v inom čase tak pohyb robota nebude správny. (Kevin M. Lynch, Frank C.
Park, 2017, strana 407) Na uskutočnenie takejto komunikácie sa používa aplikačná zbernica
alebo tzv. Fieldbus, je to protokol priemyselnej počítačovej siete na nižšej úrovni
zabezpečujúci odolnosť proti rušeniu a deterministické správanie. Požíva sa aj pri pripojení
komponentov ktoré robia samotnú prácu ako senzory, akčné členy, prepínače, ventily atď.
(FieldComm Group, 2017)

Servo pohony sú ďalej pripojené k elektromotorom, poskytujú im elektrickú energiu a riadia


ich pomocou impulzov pre nastavenie uhla, rýchlosti a smeru otáčania. Zvyčajne pri closed
loop systémoch alebo iným názvom feedback-loop systémoch elektromotor posiela naspäť
jeho pozíciu riadiacej jednotke pomocou snímačov ktoré sledujú súčasnú pozíciu motora.
Ak dôjde k nezhode, alebo motor nestíha vykonať daný pohyb, riadiaca jednotka na to vie
zareagovať. Elektrické motory sú umiestnené na robote, každý na svojom mieste a vďaka

15
tejto architektúre riadenia je robot schopný vykonávať zložité pohyby. (Karl Johan Aström,
Richard M. Murray, 28 September 2012)

Každý robot má určitú úlohu, ktorú zvyčajne spĺňa pomocou namontovaného nástroja.
Tieto nástroje sú tiež pripojené a riadené riadiacou jednotkou ako vstupno-výstupné
zariadenia (I/O moduly). Takto riadené nástroje môžu plniť úlohy ako otváranie
a zatváranie robotického chápadla, zapnutie a vypnutie zváracej pištole či meranie
povrchovej presnosti laserom. (Fabrizio Frigeni, 2019)

1.3 Ovládanie robota

Táto časť práce sa zameriava na riadenie pohybu robotov. Pre správne riadenie pomocou
riadiacej jednotky je potrebné použiť rôzne algoritmy a matematické modely. Výstupom
neviditeľnej, softvérovej časti sú polohové pokyny pre motory robota, ktoré umožnia aby
bol žiadaný pohyb v reálnom svete vykonaný. Uvedené princípy budú následne uplatnené
pri návrhu riadiaceho softvéru pre robota tohto projektu.
Ako už bolo spomenuté, existuje niekoľko druhov robotov s rôznymi mechanickými
štruktúrami, avšak pohyb väčšiny z nich sa sústreďuje na to, ako sa posledná časť robota,
ktorá pôsobí na prostredie pohybuje z jednej polohy do druhej. Túto časť robota budeme
nazývať koncovým efektorom a často ho budeme označovať ako TCP (Tool Center Point).
(Kevin M. Lynch, Frank C. Park, 2017, strana 4)

Jeden zo spôsobov riadenia pohybu robota je pohyb od bodu k bodu (point-to-point PTP).
Pri tomto pohybe koncový efektor sa posúva z určitej východiskovej polohy do požadovanej
tak, že všetky spoje robota sú nastavené do ich cieľovej pozície. Výsledkom riadenia je
rýchly posun, ktorý je výpočtovo menej náročný. Avšak týmto spôsobom nie je známy
geometrický tvar dráhy koncového efektora. To znamená, že v konečnom dôsledku koncový
efektor sa síce premiestni do cieľovej pozície, ale spôsob akým to vykoná, tvar dráhy po
ktorom sa pohybuje, nie je známy. Ak operácia robota vyžaduje aby sledovala istý tvar dráhy
v priestore, napríklad aby sa presúval po priamej čiare z jedného bodu do druhého, tak sa
vyžaduje aby bol vypočítaný interpolovaný pohyb. Pri definovaní dráhy sa používajú
najčastejšie 3 typy pohybu: čiara, kruh a krivka. Ďalší parameter ktorý treba brať do úvahy
pri pohyboch je rýchlosť a akcelerácia. V ďalšej časti sa budeme zaoberať plánovaním
pohybu robota. (Kevin M. Lynch, Frank C. Park, 2017, strany 327-328)

16
1.4 Riadenie pohybu (Motion Control)

Riadenie pohybu pozostáva z troch hlavných operácii: Interpretácia (Interpreting),


Plánovanie trasy (Path-planning) a Generovanie trajektórie (Trajectory Generation).
Cyklus vykonania pohybu sa začína definovaním pohybu od operátora. Na toto je potrebné
poskytnutie jednoduchého rozhrania, aby operátor mohol zadať pokyny pre všetky možné
pohyby. Tieto pokyny sa zadávajú väčšinou pomocou počítačového kódu. Túto časť
nazývame programovanie robota. Programovanie robotov je implementované vo svojom
vlastnom jazyku, zvyčajne veľmi intuitívnym, vyšším programovacím jazykom, ktorý
definujú výrobcovia robotov. V priemysle v skutočnosti neexistuje žiadny štandard, aj keď
jazyky sú si navzájom veľmi podobné. Môžu to byť aj samozrejme známe jazyky ako C
alebo C++ či Python. Spoločne zdieľajú niekoľko hlavných príkazov pri programovaní.
Pohyb môže byť lineárny alebo nasleduje istú plánovanú krivku. Takéto pohyby sú
definované bodmi v priestore a rýchlosťou presunu koncového efektora medzi nimi. Ďalšie
príkazy môžu byť: návrat do východiskovej polohy, čakanie, ovládanie náradia a podobné.
Po zadefinovaní postupnosti pohybových príkazov a po naprogramovaní žiadanej operácie
v kóde, nasleduje skompilovanie riadiacou jednotkou. Prekladač (Interpreter) v riadiacej
jednotke spracuje prijatý kód a premení ho na postupnosť inštrukcii pre robota. Inštrukcie
sa načítajú do zásobníka pohybov a sú im pridelené čísla podľa poradia v akom majú byť
vykonané. (Fabrizio Frigeni, 2019)

1.4.1 Plánovač trasy (Path-Planner)

Každý zadaný pohyb zo “zásobníka” je načítaný plánovačom trasy, ktorý vypočíta


trajektóriu pohybu - dráhu, čiže určí jeho geometrické vlastnosti v priestore. Takéto
vlastnosti sú napríklad dĺžka trasy medzi dvoma bodmi, tvar trasy, orientácia cieľového
bodu, generovanie jednotlivých medzi-bodov na krivke pohybu a ďalšie parametre.
Plánovač má svoje vlastné indexy poradia a nasleduje tie priradené k inštrukciám
v zásobníku. Ďalšia úloha plánovača je aby po vypočítaní trasy zistil či počas plánovaného
pohybu nedochádza ku kolízii s inými predmetmi v pracovnom priestore (Workspace
monitoring).
Úlohou plánovača je vypočítať podľa kinematického modelu orientáciu dvoch rôznych
pozícii robota a vyriešiť jeho pohyb tak aby sa robot posunul medzi nimi po geometrickej

17
krivke čo nazývame trasou. Existujú dve funkcie v kinematickom modely, priama
kinematika a inverzná kinematika. (Kevin M. Lynch, Frank C. Park, 2017, strana 357.)

1.4.2 Priama kinematika (Forward Kinematics)

Priama kinematika alebo často nazývaná ako priama transformácia, je proces výpočtu
polohy a orientácie koncového efektora vzhľadom na aktuálne hodnoty osi kĺbov. Ak
poznáme polohy kĺbov získané zo snímačov pripojených elektromotorov, môžeme vypočítať
priamou kinematikou polohu koncového efektora X,Y,Z a jeho orientáciu A,B,C v priestore.
Uvedieme ďalej akú úlohu spĺňajú rámce pri výpočte kinematických modelov v robotike.
Rámec je súradnicová sústava so špecifickou polohou a orientáciou v priestore. V robotike
rozlišujeme 4 hlavné rámce:
- GCS (Global Coordinate system) – Globálny súradnicový systém určuje
východiskový bod celého priestoru alebo ‘‘sveta“. Je to najviac užitočný vtedy
ak je na pracovisku viacero robotov a tak môžu o sebe vedieť kde sa nachádzajú
v rámci tohto rámca.
- MCS (Machine Coordinate system) Súradnicový systém robota je jeho vlastný
lokálny súradnicový systém umiestnený zvyčajne na mieste kde sa nachádza
základňa robota, ktorá sa nehýbe. Ostatné časti robota berú tento bod ako
referenciu pre vypočítanie ich polohy.
- TCS (Tool Coordinate system) Súradnicový systém nástroja je vlastne rámec
umiestnený v pozícii koncového efektora, ktorého súčasťou môžu byť nástroje.
- WCS (Workpiece coordinate system) Súradnicový systém obrobku predstavuje
východiskový bod pracovného priestoru, v ktorom má robot vykonávať určitú
úlohu.
V kinematických rovniciach je potrebné vykonávať operácie s rámcami. Ak je známa
pozícia bodu v danom rámci a chceme zistiť jeho polohu z iného rámca, musíme použiť
niekoľko transformácii. Prvým a najjednoduchším spôsob je lineárny posuv, ktorý je
realizovaný ako jednoduchý súčet s ofsetom. Ofset označujeme s D = {dx, dy, dz}, určuje
polohu druhého rámca relatívne od prvého. Bod v prvom rámci označujeme ako P0 = [x0 ,
y0, z0] a P1 je poloha P0 z druhého rámca. Jeho výpočet vyzerá nasledovne:
𝑥1 = x0 + dx
𝑃1 {y1 = y0 + dy (1.1)
𝑧1 = z0 + dz

18
Ak sa rámy navzájom otáčajú, musíme použiť rotačnú maticu, ktorá je vytvorená ako
kombinácia rotácií okolo jednotlivých osí. Rotačná matica má 3 riadky a 3 stĺpce.
V nasledujúcich rovniciach bude ukázaný tvar rotačnej matice v prípadoch otáčania okolo
jednotlivých osí, to znamená okolo osi x,y a z).
1 0 0
𝑅𝑥 (𝜃) = [0 cos 𝜃 −sin 𝜃] (1.2)
0 sin 𝜃 cos 𝜃
cos 𝜃 0 sin 𝜃
𝑅𝑦 (𝜃) = [ 0 1 0 ] (1.3)
−sin 𝜃 0 cos 𝜃
cos 𝜃 −sin 𝜃 0
𝑅𝑧 (𝜃) = [ sin 𝜃 cos 𝜃 0] (1.4)
0 0 1

Ak daná operácia vyžaduje rotáciu a aj transláciu, ako je to v prípade väčšiny robotických


osí, potom môžeme použiť homogénnu transformačnú maticu, ktorá kombinuje tieto dve
operácie do jednej viď rovnicu 1.5.
𝑅 ∆
𝑇=[ ] (1.5)
0 1
Homogénna transformačná matica T, kombinuje rotačnú maticu R a transláciu delta (D) do
jednej matice. Rotačná matica v prípade otáčaní po osi z by vyzeral tak ako je to vidno
z nasledujúcej rovnice, viď rovnicu 1.6.
cos 𝜃 − sin 𝜃 0
𝑅𝑧 (𝜃) = [ sin 𝜃 cos 𝜃 0] (1.6)
0 0 1
Translácia, čiže ofset delta, z rovnice 1.7 bude umiestnená vedľa rotačnej matice.
𝛿𝑥
∆= {𝛿𝑦 (1.7)
𝛿𝑧
Homogénna transformačná matica vyzerá nasledovne(rovnica 1.8).
cos 𝜃 − sin 𝜃 0 𝛿𝑥
sin 𝜃 cos 𝜃 0 𝛿𝑦
𝑇=[ ] (1.8)
0 0 1 𝛿𝑧
0 0 0 1

Kombinácia týchto dvoch matíc vytvorí jednu maticu so 4 riadkami a 4 stĺpcami s nulami
pod rotačnou maticou a s jednotkou pod translačným posunom. Kombináciou týchto dvoch
operácií môžeme súčasne vykonať transláciu aj rotáciu rámca. Je to jednoduché násobenie
súčasnej pozície P0 s homgénnou maticou T. Výsledkom je žiadaná pozícia a orientácia P1.

19
𝑃1 = 𝑃0 𝑇 (1.9)

Vráťme sa k úvodnej problematike určenia polohy, kde treba pomocou priamej


transformácie nájsť polohu X,Y,Z a orientáciu A,B,C koncového efektora na základe pozícii
kĺbov (J1,J2,...Jn), (Obr..1.5) Výpočet, sa vykonáva pomocou jednoduchej transformácie
medzi dvoma rámcami. Je to transformácia zo základného rámca, typicky z MCS, do rámca
koncového efektora. To, čo tu chceme použiť, je veľmi všeobecné pravidlo na vyriešenie
akéhokoľvek sériového kinematického reťazca bez ohľadu na to, koľko máme kĺbov.
Konečná transformačná matica predstavuje homogénnu transformáciu a závisí od všetkých
kĺbových pozícií a mechanických parametrov robota. Je to dosiahnuté tým, že je zostavený
reťazec rámcov, prekladov a rotácií od základne k TCP. Konečný bod P1 môže byť potom
vyjadrený ako násobok bodu P0 s homogénnou transformáciou rámcov.

Obrázok 1.5 Reťazec transformácii rámcov


Všetky rotácie sú vyvolané pohybmi kĺbov od prvého kĺbu po kĺb N. Tieto nie sú časovo
konštantné, menia sa podľa pohybov motorov. Na rozdiel od parametrov rotácie sú
parametre translácie v skutočnosti konštantné, pretože mechanické vlastnosti robota sa
nemenia.

1.4.3 Inverzná kinematika (Inverse kinematics)

O inverznej kinematike je možné povedať, že je opakom priamej kinematiky. Kým priama


kinematika zistí polohu koncového efektora na základe hodnoty kĺbov, inverzná

20
kinematika sa používa na nájdenie hodnôt osí kĺbov vzhľadom na polohu a orientáciu
koncového efektora.

Obrázok 1.6 Cieľ inverznej kinematiky


Pozícia koncového efektora je vyjadrená homogénnou maticou, čo vyjadruje jeho polohu
od základne robota. Pomocou inverznej kinematiky sú vypočítané uhly jednotlivých kĺbov
(J1, J2,...Jn).
Vždy dokážeme zistiť aktuálnu polohu osí z motorov, teda cieľ inverznej kinematiky je aby
pracoval s budúcimi hodnotami na základe toho kam chceme premiestniť TCP. Roboty sú
programované operátorom v súradniciach XYZ, ktoré sú známe, ale softvér pre pohyb riadia
priamo motory, ktoré hýbu kĺbmi robota. Potrebujeme určiť spôsob, ako vypočítať z trasy
kĺbové príkazy. Je to podobné ako pri hýbaním ľudskou rukou. Ak človek chce niečo chytiť,
vidí cieľovú polohu v priestore, ale nevie, aké sú požadované uhly jeho kĺbov (od ramena
cez lakeť až k zápästiu). Pre sériovú kinematiku je problém riešenia inverzných
transformácií zvyčajne oveľa ťažší ako priame transformácie, avšak pri väčšine robotov
paralelnej kinematiky je to menej zložitý problém (ďalej to bude detailne rozoberané).
Pri inverznom kinematickom probléme neexistuje všeobecný prístup k výpočtu osi kĺbov.
Závisí to od mechanickej štruktúry robota, môžu sa však vyskytnúť situácie, keď pre danú
pozíciu TCP neexistuje žiadne riešenie alebo je ich viac. V každom prípade je snaha
minimalizovať potrebný pohyb a nájsť optimálne riešenie pre premiestnenie TCP do
najpresnejšej možnej polohy. (Fabrizio Frigeni, 2019), (Steven M. LaValle, 2006. strany 104
až 110)
Súradnice koncového efektora (TCP) sú vyjadrené vzhľadom na základný rámec. Výpočet
kĺbov sa začína tiež od prvého kĺbu J1 až po Jn. Každý výpočet uhla kĺbu je jednoznačný. Pri
každom výpočte sa musí zohľadniť geometrická štruktúra robota, do akých smerov je možný

21
kĺb ohýbať a ako jeho pohyb ovplyvní pozíciu TCP. Výsledkom výpočtu jedného kĺbu je
uhlová odchýlka od nultej polohy motora. Vo väčšine prípadov sa pri výpočte osi dá toto
zadanie zjednodušiť na dvojrozmernú úlohu, pričom sa nájde trojuholník medzi rôznymi
kĺbmi. Nasledujúci príklad ukáže, ako vyriešiť problém inverznej kinematiky pre
jednoduchý model robota iba s dvoma kĺbmi (Viď obrázok 1.7). Bude týmto ukázaný
všeobecný princíp o výpočte kĺbov pomocou inverznej kinematiky.

Obrázok 1.7a Jednoduchá robotická ruka

Obrázok 1.7b Inverzná kinematika


Dĺžka prvého ramena je označená ako a, a dĺžka ramena označená ako b, sú známe
z parametrických rozmerov robota. Známe sú ešte pozície základného rámca a TCP.
Vzdialenosť týchto dvoch rámcov po osi x je označená písmenom l a vzdialenosť po osi y
značený písmenom h. Hľadané sú uhly J1 a J2 , ktoré predstavujú uhlové odchýlky od
nultej polohy motorov. Problematiku možno vyriešiť pomocou vlastnosti trojuholníka

22
abcD, ktorého strany sú vytvorené z ramien robota (a a b), zatiaľ čo jeho uhlopriečkou je
vzdialenosť medzi základným rámcom a TCP (c). Na základe uvedených informácií
môžeme potom vypočítať uhly J1 a J2 nasledujúcim vzťahom:

𝑐 = √𝑙 2 + ℎ2 (1.10)

𝛼 = atan (ℎ, 𝑙) (1.11)

𝑐 2 +𝑎2 −𝑏2
cos 𝛽 = (1.12)
2𝑐𝑎

𝑎2 +𝑏2 −𝑐 2
cos 𝛾 = (1.13)
2𝑎𝑏

𝜋
𝐽1 = −𝛼− 𝛽 (1.14)
2

𝐽2 = 𝜋 − 𝛾 (1.15)

Uhly J1 a J2 je možné ľahko transformovať na zrozumiteľný príkaz pre príslušné


elektromotory robota. Avšak na to existujú aspoň dva spôsoby a nasledujúca časť sa bude
zaoberať práve touto úlohou.

1.4.4 Výpočet dráhy

Na základe znalosti kinematických modelov, môžeme zrealizovať pohyb koncového


efektora z istej východiskovej polohy do žiadanej. Ako sme už uviedli najľahší spôsob
vykonania pohybu je od bodu k bodu (PTP). Je to najrýchlejší spôsob kde jednotlivé kĺby
robota J1,J2...Jn sa nastavia lineárne do cieľovej polohy J1‘,J2‘...Jn‘ pre dosiahnutie cieľovej
pozície.

23
Obrázok 1.8 Pohyb typu z bodu k bodu (PTP)
Avšak táto metóda neumožňuje kontrolu nad tvarom trasy. Ak je potrebné vedieť počas
pohybu kde sa robot práve nachádza, je možné cyklicky pomocou dopytov zisťovať pozíciu
robota prostredníctvom priamej kinematiky.
Ak chceme aby koncový efektor sledoval určitú dráhu, napríklad čiaru medzi dvoma bodmi,
môžeme použiť vzťah z rovnice 1.16.

P = P0(1-t) + P1t kde tÎ[0,1] (1.16)

Koncový efektor z východiskového bodu P0 je presunutý do cieľového bodu P1, kde t


predstavuje časový posun, ktorého hodnota sa presúva od 0 do 1. Pozícia robota môže byť
vypočítaná na ľubovoľnom bode dráhy nasledujúcim spôsobom:

𝑥 = 𝑥0 (1 − 𝑡) + 𝑥1 𝑡
𝑃 = {𝑦 = 𝑦0 (1 − 𝑡) + 𝑦1 𝑡 (1.17)
𝑧 = 𝑧0 (1 − 𝑡) + 𝑧1 𝑡

Uhly robota v pozícii P sú vypočítané pomocou inverznej kinematiky.


Interpolácia orientácie, je realizovaná pomocou kvaterniónov. Kvaternióny nám umožňujú
vyjadriť orientáciu; podobne ako rotačná matica. Kvaternióny budú ďalej rozoberané iba
do tej miery, do akej je potrebné porozumieť ako pomáhajú nájsť spôsob zmeniť orientáciu
robota. Kvaternión vyjadrujeme v tvare, ktorý nájdeme v rovnici 1.18.

24
q = xi + yj +zk + w
kde x,y,z,w Î R a platí, že i2 = j2 = k2 = -1 (1.18)

Vzťah 1.18 predstavuje vyjadrenie unikátnej orientácie v priestore a je jednoduchšia ako


rotačná matica. Pre definovanie orientácie stačia 4 vstupné parametre na rozdiel od rotačnej
matice ktorá potrebuje 9; ( z uvedených dôvodov sú kvaternióny výpočtovo menej náročné
pre počítače). Podobne, ako bola vypočítaná pozícia robota v ktoromkoľvek bode jeho
dráhy, tak isto môže byť počítaná aj orientácia v ktorejkoľvek časti rotácie s použitím
rovnice slerp. Slerp (Spherical Linear Interpolation) predstavuje spôsob výpočtu rotácie
z jednej orientácie do druhej podľa nasledujúceho vzťahu:

sin(𝛼(1−𝑡)) sin(𝛼𝑡)
𝑞= 𝑞1 + 𝑞2 (1.19)
sin 𝛼 sin 𝛼

1.4.5 Generovanie trajektórii (Trajectory Generation)

Generovanie trajektórii (Obr.1.9) predstavuje posledný krok pred poslaním motorových


príkazov. Je to proces ktorý už čiastočne bol spomínaný v predošlej časti pri výpočte pozícií
a orientácií po dráhe. Tento proces generuje body popri dráhe pre ktoré sú vypočítané osi
kĺbov pomocou inverznej kinematiky. Čím hustejšie sú body, tým presnejší pohyb môže byť
dosiahnutý. Okrem presnosti dôležitú rolu hrá aj čas; presnejšia rýchlosť a akcelerácia. Čím
ďalej sú body od seba o to bude pohyb rýchlejší. Na generovanie kde, koľko a ako majú byť
umiestnené body môžu byť požité rôzne algoritmy, ktoré vyhodnocujú fyzickú
uskutočniteľnosť pohybu tak aby neporušili obmedzenie rýchlosti, zrýchlenia a krútiaceho
momentu motorov.

Obrázok 1.9 Body generované pozdĺž dráhy

25
Výsledkom generovania trajektórie sú osi kĺbov v jednotlivých bodoch. Tieto osi môžu byť
v takom poradí ako sú umiestnené na krivke poslané priamo do elektromotorov aby
vykonali rotácie.

Obrázok 1.10 Pohyb kĺbov po lineárnej dráhe použitím inverznej kinematiky a trajektórie
Tento model pohybu je nelineárny. Ak sa koncový efektor pohybuje lineárne pozdĺž
priamky, to neznamená, že kĺbové osi sa budú tiež pohybovať lineárne. Pohyby jednotlivých
kĺbov sú nelineárne ako je to vidieť z obrázku 1.10.

1.5 Káblovo hnané paralelné roboty (CDPR)

Výskum paralelných robotov, alebo paralelných manipulátorov, je jeden zo zvláštnych


oblastí robotiky, ktorá je pod stálym vývojom už desaťročia a má veľa druhov. Jeden taký
druh paralelného robota zaujíma zvláštne miesto medzi nimi. To sú roboty u ktorých pevné
spojenia boli nahradené káblami. Nazývajú sa káblovo hnané paralelné roboty alebo CDPR
(Cable Driven Parallel Robot). Ich koncový efektor je paralelne podporovaný viacerými
káblami, ktoré sú ovládané zvyčajne s navijakmi. Navijaky alebo iné akčné členy, ktoré
spôsobujú ťah a napätie v kábloch, umožnia pohyb koncového efektora. Pohyb je potom
generovaný nastavením dĺžky káblov. Tento typ robota využíva výhody z oboch tried
robotov. (Franklin Okoli, Yuchuan Lang, Olivier Kermorgant, Stéphane Caro. 3 Apríl 2018),
(Jingli Du, Sunil K. Agrawal. Apríl 2015)

26
Obrázok 1.11 [3]
CDPR sú štrukturálne podobné paralelným robotom, ale v porovnaní s inými klasickými
paralelnými robotmi majú ďalšie výhody, ako napríklad veľký pracovný priestor,
manipulácia s ťažkými predmetmi pričom váha samotného robota je ľahká. Ich akčné členy
sú upevnené na ráme, takže majú iba málo pohyblivých častí, preto sú veľmi stabilné a
presné. Tiež sú ľahko transportovateľné a ekonomicky výhodné. Možno ich klasifikovať ako
„úplne zviazané“ a „čiastočne zviazané“ podľa rozsahu, v akom je koncový efektor
obmedzený a ovládaný káblami. Obrázoky 1.12a a 1.12b zobrazujú príklad týchto dvoch
typov. (XueJun Jin , Dae Ik Jun , Andreas Pott , Sukho Park , Jong-Oh Park a Seong Young
Ko. október 20-23, 2013)

Obrázok 1.12a [4]

27
Obrázok 1.12b [5]
Existujú ešte planárne káblové roboty, ktoré aj keď sú poháňané iba troma alebo štyrmi
káblami, sú veľmi napnuté a sú určené na pohyb a prácu v rovine.
CDPR majú širokú škálu aplikácií vrátane manipulácie s predmetmi, simulácie pohybu,
exoskeletónov a muskuloskeletálnych robotov. Ich unikátnou vlastnosťou je, že káble môžu
prenášať sily iba v ťahoch. To vytvára mnoho jedinečných výziev pri modelovaní, dizajne,
inverznej kinematike, priamej kinematike a riadení pohybu. Pri výpočte motorových
príkazov pre pohyb káblového robota treba brať do úvahy niekoľko faktorov ako hmotnosť
koncového efektora, napnutie a kmit káblov, rýchlosť navíjania atď. Preto takýto robot sa
vyžaduje veľmi dobre navrhnutý algoritmus aby výsledok bol čím presnejší. Presnejší
výsledok je dosiahnutý ak je dopredu definované aké pohyby má robot predviesť a nie
v reálnom čase. Takto môžu byť brané do úvahy viaceré fyzikálne faktory, ktoré hoci
vyžadujú náročnejšie výpočty ale prinesú presnejšie výsledky. V poslednom desaťročí sa
uskutočnilo veľa výskumov na štúdium súvisiacej teórie a implementácie týchto robotov.
Jedným príkladom káblového robota, ktorý sa bežne používa je Skycam. Viac o káblových
robotoch bude uvedené v ďalšej kapitole.

28
Obrázok 1.13 SKYCAM [2]

29
2. Návrh manipulačného robota

Nasledujúce dve kapitoly sa budú zaoberať konfiguráciou konkrétneho robota. Na túto


časť diplomovej práce bol vybraný čiastočne zviazaný manipulačný robot poháňaný
ôsmimi káblami. Pokračujeme popisom aké sú očakávania týkajúce sa prevádzky robota a
aké technologické možnosti sú nám k dispozícii k jeho konfigurácii. Dôvod výberu istých
softvérových a hardvérových riešení bude vysvetlený a zdôvodnený. Posledná kapitola sa
zaoberá jednotlivými krokmi montáže robota. Pomocou gyroskopu bude meraný kmit a
schopnosť robota udržať sa vo vodorovnej polohe počas jeho presunu do cieľovej polohy.

2.1 Návrh konfigurácie robota

Káblový robot používa osem nylonových káblov na ktorých visí koncový efektor. Má osem
elektromotorov pričom každý z nich ovláda dĺžku jedného kábla. Káble alebo struny majú
byť pripevnené ku koncovému efektoru v takom usporiadaní, aby zachoval jeho orientáciu
vo väčšine prípadov jeho presunu v rámci jeho pracovného priestoru.
Rozmery robota, celého rámu na ktorý budú navijaky a motory pripevnené budú mať (šírku,
dĺžku a výšku) približne jeden meter, viď obrázok 2.1. Maximálna navrhnutá nosnosť robota
s ktorou by mal zvládnuť manipuláciu sú približne dva kilogramy. Jeho úlohou bude
vykonávanie pohybov stanovené operátorom a ovládanie z grafického rozhrania.

30
Obrázok 2.1 Konštrukcia robota

2.2 Riadenie robota

Pre riadenie robota potrebujeme vytvoriť jeho kinematický model; teda aspoň jeho
inverznú kinematiku. Potom potrebujeme vybrať spôsob akým budú vypočítané hodnoty
poslané k jednotlivým motorom, čiže pripojiť výstupy kinematického modelu k istej sieti.
Pri zvažovaní spôsobu akým to bude dosiahnuté, je dobré vykonať náležitý prieskum
dostupných možností. V ďalšej časti sa ukáže aké výsledky boli nájdené pri hľadaní
riešení.

2.2.1 Simulácia pomocou CASPR (Cable Analysis and Simulation of Parallel Robots)

Dôležitou fázou pri návrhu CDPR je simulácia. Simulátory nám umožňujú rýchlo otestovať
nový návrhy a zistiť, ako táto implementácia vyhovuje návrhu ešte predtým ako začneme
náročnú prácu konštruovania skutočného robota. Môže to byť rizikové pre roboty, ak

31
návrhár navrhol špecifikáciu modelu, ktorý nebol testovaný v simulácii. Robot môže byť
nespoľahlivý, ak sa nezohľadnili niektoré parametre.

Na štúdium planárnych a priestorových CDPR boli vyvinuté rôzne softvérové platformy,


väčšina z nich používa riadiaci a simulačný softvér MATLAB / Simulink. Takéto existujúce
platformy sú napríklad ARACHNIS a WireCenter. Tieto platformy nie sú flexibilné pre
možnosť pridania vlastných káblových robotov rôzneho typu a nie je možné ich rozšíriť
ďalšími algoritmami. Avšak CASPR (Cable Analysis and Simulation of Parallel Robots),
ďalšia simulačná platforma založená na MATLABe pre štúdium CDPR umožňuje
vytvorenie a analýzu ľubovoľného CDPR s možnosťou prispôsobiť algoritmy. (D. Lau, J.
Eden, Y. Tan and D. Oetomo, 2016)
Aktuálna verzia platformy obsahuje analytické nástroje pre každú z nasledujúcich oblastí:

• Dynamika a riadenie
• Ovládanie pohybu
• Kinematika
o Priama kinematika
o Inverzná kinematika
• Analýza pracovného priestoru
• Optimalizácia dizajnu

Pre komplexné riešenie tiež ponúka grafické rozhranie, čím výber daného robota
a kinematického modelu ako aj ovládanie a spustenie pohybov je veľmi jednoduché.

32
Obrázok 2.2 Grafické rozhranie simulátora CASPR
Nový model CDPR môže byť pridaný do CASPR špecifikovaním v súboroch XML:
Sú 3 hlavné XML súbory, bodies.xml, cables.xml a trajectories.xml. Bodies.xml definuje
prostredie a telo CDPR. Cables.xml obsahuje sadu usporiadaní káblov, ich miesta pripojenia
a vlastnosti. Na záver, trajectories.xml je sada trás čiže pohybov pre ktoré môžeme
realizovať simuláciu. Simulácia môže mať viac výsledkov. Najzaujímavejší výsledok, ktorý
môžeme použiť pre hardvérovú implementáciu je vygenerovaná dĺžky káblov v daných
časových bodoch počas pohybu robota. Dĺžky káblov sú vygenerované pomocou inverznej
kinematiky. Simulátor pre každú pozíciu robota počas vykonávania trajektórie vypočíta
dĺžky jeho káblov a uloží ich do tabuľky v časovom poradí.
CASPR je primárne simulačná platforma a neponúka hardvérovú implementáciu, avšak
ponecháva priestor aby tak mohol byť rozšírený. Ponúka v zdrojovom kóde metódy
a protokoly, s ktorými môžu komunikovať vývojári a tak použiť výsledky simulácie na
skutočné nasadenie do existujúceho robota. ROS (Robot Operating System) predstavuje
jeden z najlepších existujúcich prostriedkov na prepojenie robotického hardvéru, ktorý

33
poskytuje dobre podporované rozhranie na rozšírenie a integráciu s CASPR. Týmto
spôsobom je možné nastaviť ľahko použiteľný robotický hardvér a využiť flexibilitu
a robustnosť CASPR.

2.2.2 Robotický operačný systém (ROS)

V riešení diplomovej práce pre implementáciu hardvéru bude použitá platforma ROS. Týmto
spôsobom využívame objektovo orientované princípy CASPR na spoluprácu s ROS.
Robot Operating System (ROS) je flexibilný framework pre vytvorenie robotického
softvéru. (Open Robotics, 2007) Je kompatibilný s väčšinou robotov a používajú to aj
v priemysle napríklad roboty od firmy ABB. Je to zbierka nástrojov a knižníc, ktorých
cieľom je zjednodušiť úlohu vytvárania komplexných a robustných robotických správaní
a robotických architektúr. Jeho architektúra pozostáva z mnohých uzlových bodov, ktoré
navzájom komunikujú. (Anil Mahtani, Luis Sánchez, Enrique Fernández, and Aaron
Martinez, 2016)
ROS (Obr.2.3) vytvára sieť, v ktorej sú spojené všetky procesy. Ktorýkoľvek uzol v
systéme má prístup k tejto sieti, môže pracovať s inými uzlami, zobraziť informácie, ktoré
odosielajú, a posielať údaje do siete.

Obrázok 2.3 Jednoduchá architektúra ROS


Uzly predstavujú procesy, v ktorých sa vykonáva výpočet. Zvyčajne bude mať systém
početných uzlov na riadenie rôznych funkcií. Je lepšie mať veľa uzlov, ktoré poskytujú iba
jednu funkciu, ako mať jeden komplexný uzol, ktorý vytvára všetko v systéme. Uzly sa
zapisujú pomocou klientskej knižnice ROS roscpp alebo rospy. Hlavný uzol nazývaný ako

34
Master node poskytuje registráciu mien a vyhľadávaciu službu pre ostatné uzly. Nastavuje
spojenia medzi uzlami umožňuje ich vzájomnú komunikáciu. Hlavný uzol slúži iba na tento
účel a neobsahuje program na daný projekt napísaný programátorom. Uzly spolu
komunikujú prostredníctvom správ. Správa obsahuje údaje, ktoré poskytujú informácie
iným uzlom. ROS má veľa typov správ, ktoré môžu obsahovať napríklad čísla, text, boolean,
pole ale aj triedy. Je možné vyvinúť aj vlastný typ správy pomocou štandardných typov
správ. Každá správa musí mať názov, na ktorý má smerovať sieť ROS. Keď uzol odosiela
správy, hovoríme, že uzol publikuje topic. Uzol môže prijímať takzvaný topic z iných uzlov
jednoduchým prihlásením sa na tento topic. Ak je uzol prihlásený na jeden topic tak neustále
čaká na správu ktorú keď dostane tak vykoná s ňou istú operáciu pomocou zadefinovanej
funkcie. Je dôležité, aby názvy topic-ov boli jedinečné, aby nedošlo k problémom a zámene
medzi topic-mi s rovnakým názvom.
V našom prípade bude simulátor CASPR fungovať ako jeden uzol, ktorý bude posielať
dĺžky káblov ako správu na topic s názvom cables na ďalší uzol, ktorý ich premení na
motorové príkazy. Viac o tom bude uvedené v ďalšej kapitole.

2.3 Hardvérová topológia robota

Pre návrh hardvérovej topológie robota bol použitý model opísaný v predošlej časti. Do
riešenia sú navrhované ľahko dostupné a ekonomicky výhodné hardvérové komponenty.
V navrhovanom riešení bolo potrebné rozdeliť úlohu jedného komponentu do dvoch alebo
viac hardvérov, ktoré spolupracujú ako jeden. Nasledujúca tabuľka (Viď obrázok 2.4)
zobrazuje hardvérovú topológiu vrátane použitého hardvéru, rozdelenú do úloh, ktoré budú
plniť.

35
Obrátok 2.4 Hardvérová topológia robota tohto projektu
Riadiaca jednotka pozostáva zo stolného počítača pripojeného k sieti a jednodoskového
počítača Raspberry Pi. Stolný počítač je ovládaný operátorom, ktorý definuje činnosť robota.
Raspberry Pi je pripevnený k rámu robota. Simulátor CASPR je ovládaný prostredníctvom
stolného počítača v prostredí Ubuntu (Linux). ROS uzol z tohto počítača posiela vypočítané
motorové príkazy pre uzol bežiaci na Raspberry Pi v prostredí Ubuntu Mate (Linux).
Raspberry Pi s pripojeným mikrokontrolérom Arduino vykoná získané motorové príkazy
pomocou DRV8825 servo pohonmi, ktoré ovládajú 8 krokových motorov typu Nema17.
Viac informácií o zapojení a fungovaní robota po hardvérovej a softvérovej stránke bude
uvedené v ďalšej kapitole.

36
3. Konfigurácia manipulačného robota

Táto kapitola podrobne prejde cez rôzne fázy konfigurácie robota. Konfigurácia sa začína
s nainštalovaním potrebného softvéru na počítače, potom so spojením softvéru
s hardvérovými komponentmi a nakoniec opíše kľúčové časti mechaniky robota. Na záver
sa vykonajú experimenty s robotom, aby sa otestovala jeho funkčnosť, výsledky budú
prezentované na grafoch a prediskutované.

3.1 CASPR

Pre nainštalovanie simulačnej platformy CASPR je potrebné najprv sfunkčniť verziu


Matlabu s ktorým bude kompatibilný. CASPR je kompatibilný so všetkými verziami
Matlabu na operačných systémoch Windows a Linux. Vzhľadom na to, že ROS funguje
najstabilnejšie v Linuxovom prostredí, Matlab ako aj CASPR bude nainštalovaný s použitím
tohto operačného systému. Tým, že zdrojový kód CASPR je prístupný verejnosti (open-
source) a zverejnený na stránke GitHub, ponúka tak možnosť na stiahnutie ako aj na
klonovanie. Kvôli neustálemu vývoju simulátora ju môže používateľ po zverejnení každej
novej a funkčnej verzie stiahnuť na počítač a tak mať prístup k najnovším funkciám a
algoritmom. Simulátor môže byť spustený z Matlabu pomocou inštalačného skriptu
initialise_CASPR.m.
Ako už bolo spomenuté, nový robot môže byť vytvorený a nakonfigurovaný pomocou
XML súborov. XML, je univerzálny a otvorený formát elektronických dokumentov
(podobne ako napr HTML, CSV, DOC, PDF, XLS, atď). XML je jednoduchý formát,
ktorý nenesie informáciu o vzhľade dokumentu, ale iba o jeho obsahu. K nemu ale
umožňuje pripojiť tzv. značky (preto značkovacie), teda označenie toho, čo jednotlivé dáta
znamenajú (napr. dátum, nadpis atď).“... ,,K popisu dát sa využíva DTD alebo XML
schéma“... ,,XML sa používa pre výmenu dát a dokumentov medzi rôznymi aplikáciami.“
(Management Mania. November 2016)
Fyzikálne vlastnosti prostredia a tela robota sú zadefinované v súbore bodies.xml.
V nasledujúcom kóde bude ukázaná základná štruktúra súboru bodies.xml s vloženými
údajmi káblového robota tejto práce, viď obrázok číslo 3.1.

37
Obrázok 3.1 bodies.xml
Obsah súboru bodies.xml je uzatvorený so značkou bodies_systems čo obsahuje aspoň
jednu linku značenú so značkou links. Pod linkom sa tu rozumie prostredie simulovaného
robota. Vo vnútri značky sa udávajú rozmery, v ktorom sa môže robot pohybovať. Ďalšie
značky definujú vlastnosti koncového efektora ako jeho minimálnu a maximálnu možnú
orientáciu, jeho hmotnosť a počiatočnú polohu.
Polohy a vlastnosti káblov sú definované v súbore cables.xml. Je potrebné definovať presnú
polohu koncových bodov každého kábla. Bod, z ktorého daný kábel opúšťa navijak a bod v
ktorom je pripevnený ku koncovému efektoru. Definuje sa aj maximálna nosnosť káblov
a tiež minimálna sila, ktorá musí byť vynaložená na kábel. V nasledujúcom kóde je uvedená
štruktúra takého súboru, ktorý konfiguruje prvý a ôsmy kábel robota tohto projektu. Viď
obrázky 3.2a a 3.2b.

38
Obrázok 3.2a

Obrázok 3.2b
Súbor presne definuje pomocou niekoľkých značiek usporiadanie káblov. Vo vnútri
značiek cables a cable_set sú určené polohy káblov. Každý kábel má svoju vlastnú značku
cable_ideal a ďalšie povinné značky v sebe, ktoré určujú jeho vlastnosti. Takéto povinné
vlastnosti sú: maximálna nosnosť káblov (force__max), minimálna sila vynaložená na
kábel (force_min), poloha kábla pripevnená k rámu (location vo vnútri značky link
s hodnotou 0) a poloha káblu pripevnená ku koncovému efektoru (location vo vnútri
značky link s hodnotou 1).

39
Tieto súbory opisujúce model robota, musia byť správne nastavené aby mohol byť model
robota vložený do simulátora. To či bol model správne zadefinovaný môžeme skontrolovať
v Matlabe. Po každej inicializácii simulátora sa načítajú dostupné modely robotov. Cez
grafické rozhranie CASPR_GUI môžeme zvoliť model robota s ktorým chceme pracovať
podľa mena, ktoré sme zadali do súboru (Viď číslo 1 na obrázku). V oblasti kde je
robotický model vyobrazení je možné rýchlo skontrolovať či boli zadané informácie
správne.

Obrázok 3.3 označené grafické rozhranie CASPR


Predtým, ako postúpime k riešeniu kinematiky, je potrebné najskôr definovať aspoň jednu
dráhu, čiže trajektóriu robota. Môžeme tak urobiť v súbore trajectories.xml. Viď obrázok
3.5.

40
Obrázok 3.4 trajectories.xml
V súbore trajektories.xml je možné manuálne naprogramovať trajektóriu, čiže pohyb robota.
Vo vnútri značky trajectories môžu byť zadefinované viaceré trajektórie, každá pod svojim
vlastným menom. Určenie jednej trajektórie je možné vo vnútri značky
quantic_spline_trajectory (sú aj ďalšie typy, ale táto je najjednoduchšia). Tu sú zadané
jednotlivé body do ktorých musia byť vložené polohy x, y a z, respektíve orientácia a,b a c.
Tieto body sú vo vnútri značky point a hodnoty v značke q. Pridaním hodnoty s atribútom
time do značky point, je možné určiť, ako dlho má robot prejsť z jedného bodu do druhého.
V ukážke kódu robot vychádza z počiatočného bodu a klesne 30 cm počas piatich sekúnd,
potom sa vráti do východiskovej polohy.
Trajektóriu pohybu je možné spustiť z grafického rozhrania. Ak je zvolená kinematika zo
zoznamu simulátorov (Viď číslo 2 z obrázku 3.4) objaví sa ďalšie okno zvlášť pre
kinematický simulátor (Viď obrázok 3.6).

41
Obrázok 3.5 Vypočítanie dĺžky jednotlivých káblov
V tomto okienku je možné zvoliť trajektóriu a nastaviť kinematický model. Tiež v okienku
„Plot Settings“ je zobrazená možnosť akú vlastnosť chceme v simulácii preskúmať.
V tomto projekte uvedieme ako vygeneruje simulátor dĺžky káblov pomocou inverznej
kinematiky. Preto zvolíme možnosť Inverse kinematics a na zobrazenie dĺžky káblov
plotCableLengths. Tlačidlom Run je program spustený a na vygenerovanom grafe môžeme
preskúmať ako boli zmenené káble počas chodu robota. Hodnoty ôsmich káblov v každom
časovom okamihu sú uložené do tabuľky cable_lengths ako reťazce s ôsmimi členmi.
Predtým ako bude CASPR nastavený a spojený s platformou ROS, nasledujúca časť nás
prevedie spustením tejto platformy na operačnom systéme.

42
3.2 Inštalácia ROS

Nainštalovanie prostredia ROS je možné pomocou príkazového riadku. V tomto projekte


bude ROS nainštalovaný na dva operačné systémy v oboch prípadoch na Linux (Ubuntu
a Ubuntu Mate). Po inštalácii sú dostupné hlavné ROS knižnice a nástroje. Ak boli správne
nakonfigurované nastavenia podľa návodu z oficiálnej stránky tak by mal byť spustiteľný
hlavný uzol. Hlavný alebo kmeňový uzol sa púšťa pomocou príkazu roscore.

Obrázok 3.6
Tento uzol môže bežať v sieti iba na jednom počítači a väčšinou je to počítač robota ako aj
v tomto projekte. Počítač robota je Raspberry Pi a pomocou jeho ip adresy zdieľa hlavný
uzol k čomu môžu byť pripojené ďalšie uzle buď priamo z tohto počítača alebo
z iného ľubovoľného zariadenia na sieti.

3.2.1 Spojenie s CASPR

43
CASPR má naprogramované rozhranie pre komunikáciu s ros prostredím.
CasprRVizConfig.mat je súbor v Matlabe, ktorý obsahuje premenné pre správnu
konfiguráciu rozhrania. ROS_MASTER_URI je ip adresa hlavného ros uzla a ROS_IP je ip
adresa počítača na ktorom je CASPR nainštalovaný. Pomocou týchto údajov je schopný
CASPR vytvoriť ďalšie uzle, počúvať a posielať správy v prostredí ros. CASPRRViz slúži
na vizualizáciu pohybu káblových robotov pričom posiela niekoľko správ o momentálnych
fyzických vlastnostiach káblového robota ako aj jeho káblové dĺžky. V tomto projekte bude
použitý CASPRRViz pre posielanie káblových dĺžok do prostredia ros. V budúcnosti môže
byť zhotovené optimálnejšie riešenie s naprogramovaním vlastného hardvérového rozhrania
vo vnútri CASPR čo by posielal iba jednu správu a dal by priestor na vytvorenie
uzatvoreného systému (closed-loop system) podobného ako PID regulátor pomocou
počúvania senzorických dát od motorov robota. Avšak spomenuté riešenie s CASPRRViz
spĺňa všetky očakávania aby robot správne fungoval. Na grafickom rozhraní kinematického
simulátora sa nachádza tlačidlo RViz. Viď obrázok 3.8.

Obrázok 3.7
Stlačením tlačidla sa spustí uzol, ktorý začne posielať dĺžky káblov ako ros správu.
Posielanie týchto správ sa odohráva v takých intervaloch a v rýchlosti aby bol totožný
s časom v simulácii a aby sa pohyby vykonávali v takom istom tempe v reálnom svete.

3.2.2 CNC uzol

V robotike, vo výrobe alebo aj v iných oblastiach CNC (Computer Numerical Control) je


Vo všeobecnosti „ činnosť číslicového počítača pri riadení fyzikálnych veličín. U
výrobného stroja ide konkrétne o riadenie procesu obrábania na základe údajov v číslicovej

44
(numerickej) forme.“(Peter Demeč) Na tento účel slúžia viaceré častí softvérovej
architektúry tohto projektu. Nasledujúci uzol môže byť takto nazvaný lebo funguje priamo
na počítači namontovaného k robotu a logicky spája všetky ostatné uzly aby mohol riadiť
robota pomocou pre to nevyhnutných numerických výpočtov. Tento uzol generuje krokové
príkazy pre osem motorov. Vypočíta ich podľa káblových dĺžok, parametrov motora
a fyzických rozmerov navijaku koľko krokov je potrebných aby robot vykonal v danom
časovom intervale. Informácie o dĺžke káblov dostáva so simulátora CASPR. Ďalej bude
ukázané a vysvetlené ako prebiehajú spomínané výpočty pomocou ukážky zdrojového
kódu uzla. Kód bol napísaný v jazyku C++. Uzol sa nazýva CNC (Computer Numeric
Control) a definuje triedu SubscribeAndPublish.

Obrázok 3.8
V konštruktore triedy sú vytvorené dve premenné, jedna pre počúvanie ros správ z uzla,
ktorá poskytuje vypočítané káblové dĺžky zo simulátora a druhá, ktorá posiela krokové
polohy motorov. Po každej prichádzajúcej správe je volaná metóda ChatterCallback ktorá
spracuje správu a vykoná výpočty.

Obrázok 3.9
V triede sú uvedené dôležité premenné pre výpočty a fungovanie uzlu. Je pozoruhodná
premenná, ktorá definuje počiatočné káblové dĺžky (initial_cl). Tieto dĺžky boli vypočítané
pomocou priamej kinematiky. Robot sa musí vždy nachádzať v tejto referenčnej polohe na

45
začiatku programu, inak by došlo k nekalibrovaným pohybom a robot by fungoval
nesprávne. Význam ďalších premenných bude vysvetlený nižšie.

Obrázok 3.10
Metóda ChatterCallback je volaná po každej priatej správe. Najprv spracuje správu.
Prichádzajúca správa je jedno pole so 48 hodnotami. Každý kábel má svoju polohu určenú
na jeho začiatku a konci. Dôvod prečo sú káble poslané v takomto tvare je, že takto je
možné vytvoriť pravidlá a jednoduché výpočty aby sa zabránilo kolízii káblov s nejakým
objektu v pracovnom priestore. Ďalej môže byť táto informácia použitá aj pre 3D vizuálnu
reprezentáciu pohybu robota. Poloha pozostáva z x,y a z súradníc, čiže informácia o polohe
jedného kábla zahŕňa prvých 6 hodnôt správy. Údaje zo správy sú získané pomocou
nasledovného kódu: „msg->data[i]“, kde i je pozícia jednej hodnoty v reťazci. Pre
vypočítanie dĺžky kábla (cable_length) je použitá funkcia „distance“, ktorá jednotlivo zistí
pre každý kábel vzdialenosť medzi navijákom a robotom. Aby bolo možné vypočítať
žiadanú krokovú pozíciu motora, pri každom výpočte treba poznať počiatočnú dĺžku
každého kábla ktorá je definovaná na začiatku programu. Počiatočné dĺžky káblov sú
uložené do premennej i_cl. Žiadaná pozícia motora je vypočítaná na základe rozdielu
počiatočnej a žiadanej dĺžky kábla. Ak je výsledok negatívny motor sa bude točiť v smere
hodinových ručičiek a ak pozitívny tak v opačnom smere. Táto vzdialenosť musí byť ďalej

46
preložená na konkrétnu uhlovú polohu motora; pri krokových motoroch sa môžeme
rozprávať o krokovej pozície. To koľko krokov je potrebných na jedno otočenie závisí od
typu motora a od toho v akom krokovom režime sa práve nachádza. Túto informáciu
obsahuje premenná MOTOR_STEPS. V tomto príklade je motor v ½ krokovom režime
(half-stepping), to znamená, že na jednu otáčku sú potrebných 400 krokov. Požadované
kroky sa vypočítavajú pomocou pomeru obvodu navijaka CIRCUMFERENCE
k MOTOR_STEPS. Tento pomer sa vynásobí vzdialenosťou potrebnou na predĺženie alebo
skrátenie kábla. Výsledkom je žiadaná kroková poloha, ktorá je poslaná ďalej ako správa
pomocou kódu ,,pub.publish(steps)“, kde steps je 8 miestne pole s hodnotami nových
krokov.

Obrázok 3.11
V hlavnej metóde ,,main()“ sa inicializuje ros uzol s názvom cnc a je deklarovaná trieda
SubscribeAndPublish. Pred koncom metódy, pomocou kódu ,,ros::spin()“, sa opakovane
volajú dopyty na počúvanie a posielanie správ v ros prostredí.
Aby ros správy mohli byť spracované mikrokontrolérom, treba použiť knižnicu Rosserial.
Rosserial umožní aby mohol byť vytvorený ros uzol na mikrokontroléri pripojenom
k počítaču. Sám v sebe mikrokontroléry nemajú dostatočne veľa operačnej pamäte
a ostatné hardvérové požiadavky aby mohli zvládnuť riadenie ros uzla, preto potrebujú byť
pripojené k počítaču. Ros uzol beží vlastne na počítači a komunikuje s mikrokontrolérom
cez sériovú komunikáciu (Zbyšek Voda, November 2014). Avšak samotný kód je na
mikrokontroléry pre riadenie ros uzla, pre prijímanie správ a riadenie napätia na jeho
konektoroch. Pre túto komunikáciu a vykonanie pohybu elektromotorov bol vytvorený

47
nový uzol, ktorý požíva Rosserial. Nižšie uvedený kód poskytne viac informácií o
fungovaní uzla. Kód na mikrokontroléry bol naprogramovaný v jazyku C++.

Obrázok 3.12
Aby mohol kód pracovať s ros prostredím, je nevyhnutné aby bola vložená knižnica ros
pomocou kódu ,,#include <ros.h>“. Ďalšia dôležitá knižnica je AccelStepper ktorá umožní
aby mohli byť elektromotory ľahko ovládateľné pomocou objektovo-orientovaného
programovania.

Obrázok 3.13
Uzol je deklerovaný pomocou triedy NodeHandle a motory pomocou AccelStepper. Do
vstupu konštruktora treba vložiť spôsob pripojenia elektromotoru (v tomto prípade bude
cez servo pohon) a dve čísla konektorov, ktoré budú servo pohon ovládať. Jeden konektor
na ovládanie krokov (STEP) a druhý na ovládanie smeru otáčania(DIR).

48
Obrázok3.14
Objekt slúžiaci na počúvanie ros správ je deklarovaný tak, aby počúval správy z prostredia
ros názvom stepping. Tieto správy prichádzajú v takých istých intervaloch ako sú poslané
riadiacim uzlom CNC. Po každej prijatej správe je volaná funkcia ,,moveWinches()“. Táto
funkcia rozbalí správu, ktorá obsahuje krokové pozície jednotlivých motorov, a uloží ich
do poľa s názvom ,,Step_positions[i]“, kde i je číslo navijaku.

Obrázok 3.15
Kód na mikrokontroléri kopíruje štruktúru a syntax v akom sú Arduino programy
naprogramované. Arduino kód má dve hlavné metódy, z ktorých prvá sa nazýva setup.
Kód v ňom sa spustí iba raz keď sa program naštartuje. V tejto časti je inicializovaný ros

49
uzol a je nastavený aby počúval prichádzajúce správy podľa už určených nastavení. Tu sú
tiež nastavené maximálne a predvolené rýchlosti navijakov.

Obrázok 3.16
Druhá hlavná metóda sa nazývaná ,,loop“. Je to slučka ktorá sa opakovane volá do
nekonečna kým program aktívne beží. V rámci tejto funkcie je napísaný hlavný kód.
V tejto časti sú priradené k jednotlivým navijakom ich krokové hodnoty na ktoré sa majú
nastaviť. Pomocou funkcie navijakov ,,moveTo()“ sú priradené hodnoty krokov. Hodnota
krokov pre určitý navijak je získaný z premennej ,,Step_positions[i]“ kde i je číslo
navijáku. Funkcia ,,moveTo()“ automaticky nastavý rýchlosť navijákov podľa veľkosti
cieľového uhlu. Avšak pri robotoch je dôležité aby všetky žiadané pohyby boli vykonané

50
na motoroch naraz aby boli pripravené prijať ďalší príkaz. Preto je potrebné manuálne
nastaviť tieto rýchlosti na základe rozdielu cieľovej a súčasne polohy krokového motora.
Rozdiel je vypočítaný s odpočítaním cieľovej pozície X od súčasnej pozície
(,,winchX.currentPosition()“), výsledok je vydelený s frekvenciou posielania nových
príkazov. Celkový výsledok sa rovná rýchlosti potrebnej na dosiahnutiu cieľovej polohy
práve v čas. Pohyb motora na zadanú krokovú polohu je vykonaný volaním funkcie
,,runSpeedToPosition()“.

3.3 Hardvérové zapojenie

Káblový robot pozostáva z ôsmich navijakov, každý ovláda dĺžku práve jedného kábla.
Táto podkapitola ukáže ako môžu byť nastavené krokové polohy s reálnymi motormi. Na
tento projekt bol zvolený servo pohon typu DRV8825, ktorý je kompatibilný s väčšinou
krokových motorov so štyrmi zapojeniami. Rám robota má štyri rohy. V každom rohu sú
potrebné dva navijaky a k tomu dva servo pohony. Je dôležité, aby boli krokové motory
blízko pripojené k svojim servo pohonom s čím kratším káblom. Ak by káble boli príliš
dlhé, mohlo by dôjsť ku skoku napätia a to by znefunkčnil celý motor a tak celého robota.
Nasledujúci obrázok ukáže hardvérové zapojenie motorov so servo pohonmi a s riadiacou
jednotkou. Viď obrázok 3.18.

Obrázok 3.17

51
Riadiaca jednotka Raspberry Pi (1.) komunikuje s mikrokontrolérom(2.) pomocou USB
kábla. Na projekt bol použitý ľahko dostupný open-source mikrokontrolér Arduino Mega.
Arduino Mega je ideálny pre robotické projekty, podporuje veľa komunikačných rozhraní
ako USB, SPI, ICSP, I²C a 4 UART. Tiež má 54 vstupno-výstupných konektorov a pamäť
s veľkosťou 256Kb. Je programovateľný v jazyku C a C++ a podporuje komunikáciu s ros
prostredím. Pomocou rosserial umožňuje stálu komunikáciu s riadiacou jednotkou
a nastavuje napätia na jeho konektoroch podľa prichádzajúcich správ z ros. Poskytuje 5
voltov pre mikrokontrolér servo pohonov (3.) a dve zapojenia pre riadenie krokových
pohybov motora (STEP značený fialovou čiarou) a ich smeru (DIR značený modrou
čiarou). Servo pohony potrebujú na pohon motorov napätie medzi 8.2 a 45 voltov.
Potrebné napätie poskytuje 12 voltový konektor napojený priamo zo zástrčky a pre
zachovanie tohto napätia bol použitý 100 uF, mikrofaradový, kapacitor. Servo pohon bolo
treba nastaviť podľa hardverovej špecifikácie motorov. Motory (4.) typu Nema
s veľkosťou 17 v tomto projekte používajú 0.9 ampérov na efektívne fungovanie. Servo
pohon je možné správne nastaviť otáčaním potenciometra na voltovú hodnotu značenú ako
VREF podľa nasledujúceho vzorca uvedeného v špecifikácii motora:
limit elektrického prúdu motora
𝑉𝑅𝐸𝐹 =
2
Čiže v tomto prípade sa bude VREF rovnať 0.45 voltov. Hodnotu je možné skontrolovať
s použitím multimetra. Presné spojenie medzi motorom a servo pohonom v režime
,,FULLWIRE“ je znázornené na nasledujúcom obrázku: Viď obrázok 3.19.

Obrázok 3.18 Diagram zapojenia motoru so servo pohonom DRV8825

52
Servo pohony boli umiestnené do plastových krytov primontované do každého rohu rámu.
Viď obrázok 3.20. Táto architektúra má ľavé a pravé krídlo. Všetky Prepojovacie káble
vychádzajú z Arduino a sú rozdelené do krídiel, do každého krídla vchádza 12 káblov.

Obrázok 3.19 Pohon motorov


Prvý kryt použije 6 káblov a ďalších 6 káblov pustí do krytu ležiaceho vedľa neho. Každý
kryt prijíma napätie 12 voltov pre motory cez elektrický kábel z jedného napájacieho
zdroja. Pretože sa servo pohony môžu počas prevádzky veľmi rýchlo a v značnej miere
zahriať, pridali sa do hornej časti krytu 5-voltové malé ventilátory, aby sa komponenty
udržali v chlade.

3.3.1 Konfigurácia

Nasledujúca podkapitola sa bude zaoberať s najvýznamnejšími fyzickými a mechanickými


časťami robota, s jeho dizajnom a s hlavnými krokmi ako bol poskladaný. Bude uvedené
prečo boli vyrobené niektoré časti na zákazku a aké technológie boli k tomu potrebné
použiť.
Rám na ktorý sú navijaky pripevnené musel byť navrhnutý tak aby sa nehýbal.
Najvýznamnejšou časťou rámu je jeho horná časť štvorcového tvaru. Ak sa veľkosť alebo
tvar tohto štvorca deformuje, môže nežiadúco ovplyvniť orientáciu robota. Preto musí byť

53
rám pevný. Pevnosť rámu zaručujú tyče z hliníka, ktoré sú v rohoch spojené so
spojovacími článkami vyrobené zo železa a spevnené so skrutkami. Viď obrázok 3.21.

Obrázok 3.20
Jednou z najväčších výziev, ktorej inžinieri pri navrhovaní častí káblového robota čelia, sú
navijaky. Sú to ovládače, ktoré musia uvoľniť alebo ťahať káble takým spôsobom, aby
poskytovali dostatočnú presnosť, rýchlosť a silu na vykonanie požadovaných pohybov.
Kvôli nedostatku dostupných navijakov pre tieto aplikácie inžinieri a tímy najčastejšie
navrhujú svoje vlastné navijaky pre ich projekty. V tejto práci bol navijak tiež navrhnutý
a namodelovaný v CAD softvéri Autodesk Fusion 360 a vyrobený pomocou 3D tlačiarne
z plastu typu PLA. Počas modelovania bol kladený dôraz na to, aby každá rotácia navijaku
zmenila presne takú istú vzdialenosť kábla. 3D model navijaka je uvedený na obrázku
nižšie. Viď obrátok 3.22.

54
Obrázok 3.21
Navijak bol navrhnutý tak, aby držal elektrický motor veľkosti Nema17. Toto teleso je pevne
primontované k rámu robota a na jeho konci je otvor odkiaľ vychádza kábel vedúci ku
koncovému efektoru. Do závitu na konci telesa je možné vložiť valcovitú rúrku, okolo ktorej
je navinutý kábel. Kábel je vedený v ryhách, ktoré ho oddeľujú od zvyšku kábla tak, aby sa
navzájom neprepletávali. Táto ryha tvorí závit, ktorú je možné vložiť do závitu na telese
primontovanej k rámu. Počas otáčania sa hriadeľ posúva pozdĺž závitu smerom von
a dovnútra v závislosti od toho, v akom smere sa točí. Tento systém zaisťuje, že každá rotácia
navijaku zhromaždí alebo stratí takú dĺžku lana, ktorá sa rovná obvodu hriadeľa po vyrytej
trase. Priemer hriadeľa bol navrhnutý tak aby bolo možné so zvoleným elektromotorom
vykonať takú rýchlosť otáčania aby neporušoval maximálny krútiaci moment motora
a pritom mohol byť dosiahnutý dostatočne rýchly pohyb koncového efektora.
Koncový efektor s robotickým chápadlom bol tiež vytlačený pomocou 3D tlačiarne.
Koncový efektor má 8 bodov na ktoré sú upevnené nylónové káble prichádzajúce
z navijakov. Na kábloch sú prichytené malé závažia aby boli káble pod stálym ťahom
a neboli vytlačené z ryhy navijaka keď je vo voľnom stave. Tiež pomáha udržiavať
vodorovnú polohu koncového efektora.

55
Obrázok 3.22 Koncový efektor s káblami
Do vnútornej časti môžu byť vkladané objekty na prevážanie alebo primontovaný nejaký
nástroj do jeho spodnej časti. Na úchop a udržanie objektov bolo zvolené robotické
chápadlo so 4 ramenami, ovládané pomocou káblov. Chápadlo bolo vyrobené pomocou 3D
tlačiarne s použitím flexibilného materiálu typu TPU aby zaručil flexibilitu ramien.

Obrázok 3.23

56
Posledná časť, ktorá bude vyzdvihnutá v tejto kapitole je dokovacia stanica koncového
efektora, ktorá zaručuje kalibráciu robota. Ako bolo spomenuté v predošlej časti, v kóde
treba poznať počiatočné dĺžky káblov a polohu koncového efektora pre nábeh programu.
Aby bola táto informácia známa a platná, najjednoduchší spôsob je, aby bola zvolená jedna
stála pozícia v ktorej sa bude robot vždy nachádzať ešte pred zapnutím elektromotorov.
Dokovacia stanica je pripevnená k stredu jednej dosky, ktorá premosťuje celú konštrukciu
robota v strede. Stanica je znížená od dosky tak aby bola o približne 20 cm nižšie od
roviny ktorú tvoria polohy navijakov. Tento bod je považovaný v simulátore ako
východiskový bod s nulovou polohou na každej osi [0,0,0]. Prvý krok kalibrácie je, že
k dokovacej stanici je dočasne pripevnený koncový efektor. Potom sa natiahnu všetky
káble tak aby boli rozdelené sily pôsobiace na neho v každom smere. Ak je koncový
efektor stabilne upevnený a vo vodorovnom stave, môžu sa odstrániť nástroje slúžiace na
upevnenie. Potom môže byť odstránená aj celá dokovacia stanica spolu s doskou ku ktorej
je pripevnená aby netvorila prekážku. Vďaka tejto operácii je robot nastavený na
počiatočný bod a pripravený na správnu prevádzku.

3.4 Zoznam použitého hardvéru

• 8ks krokový motor NEMA17


• 8ks DRV8825
• 1ks Arduino Mega
• 2ks Raspberry Pi 3 Model B+
• 1ks MPU6050
• 200ks Káble
• 200ks Konektory
• 80ks Piny
• 16ks Nepájivé pole
• 1ks Nylónové lano (100 metrov)
• 1ks počítač
• 4ks Zdroj napájania 12V
• 4ks ventilátory
• 12ks tyče z hliníka
• 110ks skrutky

57
• 12ks Spojovacie články
• 4ks háčiky
• 1x servo motor
• Približne 350g materiálu do 3D tlačiarne (pre koncový efektor, navijaky a iné)

3.5 Test robota

V tejto časti budú predstavené výsledky, ktoré boli dosiahnuté s robotom. Bude uvedené ako
boli naplánované pohyby, ako ich dokázal vykonať a ako vedel zachovať svoju vodorovnú
orientáciu. Budú prezentované aj hodnoty na grafe získané z namontovaného gyroskopu
umiestneného na koncovom efektore.
Simulátor CASPR pomocou súboru trajectories.xml dáva možnosť aby robot vykonal
ľubovoľný pohyb v pracovnom priestore pri rešpektovaní hraníc priestoru. Programovanie
pohybu robota pozostáva uvedením polohy bodov a orientácii. Robot prejde na definované
pozície podľa poradia, v ktorom boli polohy napísané. Tieto pohyby môžu nastať lineárne,
to znamená že robot sa bude pohybovať konštantnou rýchlosťou pri čom zvolí najkratšiu
lineárnu dráhu medzi dvoma bodmi, alebo podľa iných nastavení podľa parametrických
rovníc simulátor vyhladí cestu, pričom berie do úvahy aj nasledujúci bod a vytvorí hladkú
dráhu medzi nimi. Pri takomto pohybe sa robot postupne zrýchľuje a pri zmene rýchlosti
spomaľuje. Výhoda takého pohybu je, že sú minimalizované nepriaznivé sily na robota ktoré
spôsobujú kmit a preto môže byť robot stabilnejší. Na druhej strane je dôležité správne
nastaviť takýto pohyb, pretože ak robot chce vykonať pohyb pod ostrým uhlom, dráha by sa
mohla skresliť natoľko, že by robot buď príliš vzdialil od pôvodnej dráhy alebo by
nedosiahol plánovanú pozíciu a tak celá trajektória by nebola presná.

Obrázok 3.24

58
Pohyb po kruhovej dráhe sa dá dosiahnuť definovaním najmenej štyroch bodov. Medzi
bodmi bude dráha pod správnymi nastaveniami vyhladená tak, že vytvorí kruh, avšak čím
viac bodov je definovaných, tým menej náročné bude nastavenie pohybovej interpolácie.

Obrázok 3.25
Medzi týmito bodmi ako sme už uviedli, simulátor vygeneruje trajektóriu a rozmiestni viac
bodov po dráhe. Pri generovaní pohybu treba nastaviť jednu dôležitú značku na začiatku
trajektórie, ktorá nastaví ako často je plánované aby boli posielané motorové príkazy. Táto
značka je time_step. Hodnota tejto značky ovplyvňuje hustotu vygenerovaných bodov po
dráhe. Výhodou častého posielania je presnejší pohyb avšak príliš časté posielanie dát môže
narušiť spojenie s mikrokontrolérom, ktorý nevie dostatočne rýchlo spracovať motorové
príkazy a pôsobí nepriaznivo na celú funkciu robota. Preto je dôležité rozhodnúť sa, aké
presné musia byť pohyby, ako rýchlo budú vykonané a podľa toho nastaviť hodnotu
time_step.
Na nasledujúcich príkladoch bude ukázané ako bola zadefinovaná trajektória robota, aké
nastavenia boli použité a aké výsledky dosiahol.
Robot bude testovaný vykonaním pohybu po kružnici s polomerom 20 centimetrov. Kruh
má definovaných 12 bodov medzi ktorými sa bude robot prechádzať. Tento pohyb bude
testovaný na 3 rôznych výškach. Výška prvého kruhu je v rovine východiskového bodu
robota, to znamená, že pozícia robota sa bude meniť iba v jeho x a y súradniciach pričom
hodnoty po osi z zostanú na 0. Ďalší kruh bude o 10cm nižšie a tretí o 20cm. Tvar
a umiestnenie týchto dráh je možné spozorovať na obrázku 3.26.

59
Obrázok 3.26 Kruhové Trajektórie
Na začiatku každej trajektórie sa robot nachádza vo východiskovej pozície. Z tejto pozície
sa premiestni na jeden bod z kruhu a začne sa pohybovať po kružnici. Po dokončení kruhu
sa vráti na východiskový bod a tým sa celá trajektória skončí.
Po zbehnutí simulácie v CASPR boli vypočítané dĺžky káblov prezentované v grafe.
Výsledky z každých troch trajektórii je možné spozorovať na obrázku 3.27.

60
Obrázok 3.27
Na hornú časť koncového efektora bol pripevnený gyroskop typu MPU6050. Gyroskop
ukladal namerané dáta do lokálnej časovo orientovanej databázy, kde každá nameraná
hodnota dostala časovú pečiatku. Gyroskop meral náklon robota okolo osi x a y. Hodnoty
boli merané každých 0.05 sekúnd. Následne tieto hodnoty boli vizualizované do grafu.
Počas trajektórie robota boli paralelne ukladané jeho polohy x,y a z do ďalšej databázy. Na
nasledujúcich garfoch je možné spozorovať hodnoty z obidvoch databáz.

61
Obrázok 3.28 Poloha koncového efektora (x,y,z) a súčasne hodnoty z gyroskopu (x,y)
(Prvá trajektória)
Na hornom grafe sú zobrazené zmeny súradníc robota počas celej trajektórie, hodnoty sú
dané v metroch ( x – červená farba, y - zelená farba, z – modrá farba). V prvej trajektórie
sa výška robota nemenila preto hodnota z je nemenná. Na dolnom grafe sú hodnoty
získané z gyroskopu (x – červená farba, y - zelená farba ). Maximálny dosiahnutý uhol
sklonu počas prvej trajektórie bol okolo 4.5 stupňa okolo každej osi. Podľa získaných dát
je možné spozorovať, že robot sa v istej miere nakláňa do stredu konštrukcie čo je logické
lebo čím dlhší je kábel, tým menej pôsobí na robota, preto časť robota ktorá je najďalej od
k nemu pripojenému navijaku bude o niečo nižšie a preto bude tým smerom robot čosi
naklonený. Tento jav je najviac spozorovateľný, keď je robot na svojej maximálnej
hodnote na osi každej súradnice. Pre lepší prehľad budú ďalej prezentované výsledky
z ostatných trajektórii.

62
Obrázok 3.29 Poloha koncového efektora (x,y,z) a súčasne hodnoty z gyroskopu (x,y)
(Druhá trajektória)
Druhá trajektória sa odohrávala o 10cm nižšie od východiskovej polohy ako je to viditeľné
zo zmenenej hodnoty z. Maximálny dosiahnutý uhol sklonu v tejto výške bol 5 stupňov
okolo y-ovej osi a 3 stupňov okolo x-ovej osi.

Obrázok 3.30

63
Tretia trajektória potvrdila konklúzie z predchádzajúcich dvoch, že robot je vždy trochu
naklonený do stredu. V prípade tretej trajektórie, ktorá bola vykonaná v -20cm výške,
maximálny sklon okolo x-ovej osi bol 3.5 stupňov a okolo y-ovej 5 stupňov. Ďalšie
zistenie z meraní je, že čím voľnejšie sú káble, tým je robot menej stabilný a naopak čím
sú káble pevnejšie, tým je robot stabilnejší. Preto je pohybovanie robota v nižších výškach
menej stabilný.

3.5 Vyhodnotenie

Správna kalibrácia má značný vplyv na celkové fungovanie robota. So zvolením


precíznejšieho spôsobu kalibrácie by mohol bť robot ešte stabilnejší. Trenie a ohýbanie, ku
ktorému dochádza v bode kde kábel opúšťa navijak, má tiež významný vplyv na trasenie, a
tým na stabilitu. S menšími úpravami na hardvérovej stránke by mohol byť takýto robot
ešte viac stabilný a tak vhodný aj pre činnosti ktoré vyžadujú presnejšie pohyby, napríklad
pre výrobu štýlom 3D tlačiarne. Zatiaľ je takýto robot vhodný na premiestnenie menších
predmetov, čo môže byť v priemysle užitočné na balenie, triedenie, manipuláciu s
objektmi, kontrolu a ďalšie automatizačné procesy.
Interface robota by mohol byť rozšírený aby mohol priať príkazy s viacerými formami
napríklad cez API, GCODE alebo by mohol byť ovládaný aj pomocou konzoly v reálnom
čase, kedy by simulácia prebiehala pre každý prichádzajúci presun.

64
4. Záver

Táto práca predstavila základy robotiky, riadenie a ovládanie robotov, ktoré sa často
používajú v priemysle. Uviedol dva hlavné typy robotov, so sériovou kinematikou a s
paralelnou kinematikou. Stručne bolo vysvetlené, aké matematické operácie sa používajú
pri vypočítaní kinematických modelov a to v prípade inverznej a priamej kinematiky.
Ďalšia dôležitá téma, o ktorej sa diskutovalo bolo generovanie trajektórie, aby mohli byť
pohyby uskutočniteľné s reálnym robotom.
V ďalších častiach sa sústreďovalo na konkrétny robotický projekt, kde bol zvolený
paralelný robot, ktorý je poháňaný káblami. Bolo vysvetlené z čoho sa skladá, ako funguje
a aké výhody a nevýhody prináša takýto robot. Návrh konfigurácie robota opísal zvolené
softvérové a hardvérové riešenia, s ktorými je možné poskladať takéhoto robota.
Tretia časť nás previedla cez rôzne fázy konfigurácie robota, najprv z hľadiska softvéru,
kde bola nastavená simulácia v prostredí Matlab a v prostredí ROS boli vypočítané a
odoslané motorové príkazy na hardvér. Následne pri riešení hardvérovej časti bolo
prezentované hardvérové zapojenie jednotlivých riadiacich častí a niektoré časti
konštrukcie robota. Na konci práce boli vyvodené závery z vykonaných testov na robote,
kde bol podrobený meraniu jeho náklon počas pohybu po dráhe.
Robotický priemysel už urobil obrovské kroky. Od najhlbších miest oceánov až po
vzdialený vesmír sa nachádzajú roboty vykonávajúce úlohy, ktoré by človek bez nich
nevedel vykonať. Roboty sú schopné vykonávať komplexné úlohy a veľa z týchto funkcií
je využiteľných aj pre verejnosť. Tým, že hardvérové komponenty sú cenovo čoraz viac
dostupné, ľudia môžu aj za domácich podmienok pracovať na robotických projektoch a tak
si postupne osvojiť znalostí z oblasti robotiky. Robotika je naozaj súčasťou budúcnosti
každodenného života. Ak však chceme mať účinné a cenovo dostupné roboty, ktoré nám
budú pomáhať pri vykonávaní ťažkých a nudných prác, je potrebných viac vývojárov
robotov. Budúcnosť robotiky je v rukách ľudstva a môže k jej pozitívnemu vývoju
prispieť dobrým nápadom ktokoľvek.

65
Literatúra

Anil Mahtani, Luis Sánchez, Enrique Fernández, and Aaron Martinez. December 28, 2016
12:00. ROS Architecture and Concepts. In: © Packt Publishing Ltd. [online]. [citované
2020-28-02]. Dostupné na internete: <https://hub.packtpub.com/ros-architecture-and-
concepts/>

Anis Koubaa. December 2019. ROS for Beginners: Basics, Motion, and OpenCV. In:
Udemy. [online]. Dostupné na internete: <https://www.udemy.com/course/ros-essentials/>

D. Lau, J. Eden, Y. Tan and D. Oetomo, "CASPR: A comprehensive cable-robot analysis


and simulation platform for the research of cable-driven parallel robots," 2016 IEEE/RSJ
International Conference on Intelligent Robots and Systems (IROS), Daejeon, 2016, pp.
3004-3011.

Diamond Systems Corporation. COM-Based SBCs: The Superior Architecture


for Small Form Factor Embedded Systems. [online]. Dostupné na internete:
<http://whitepaper.opsy.st/WhitePaper.diamondsys-combased-sbcs-wpfinal-.pdf>

Fabrizio Frigeni, September. 2019. Industrial Robotics. In: Industrial Robotics:


Mathematical models and practical applications. [online]. In: Udemy. September. 2019.
[citované 2020-14-02]. Dostupné na internete: <https://www.udemy.com/course/industrial-
robotics/>.

FieldComm Group. October 16, 2017. In: HART® Technology: A Technical Overview.
Austin. Marec 2018. strana 1-10, ISBN-10: 1549862278.

Franklin Okoli, Yuchuan Lang, Olivier Kermorgant, Stéphane Caro. 3. Apríl 2018. Cable-
Driven Parallel Robot simulation using Gazebo and ROS. [online] The 22nd CISM
IFToMM Symposium on Robot Design, Dynamics and Control, Jun 2018, Rennes, France.
Dostupné na internete: < https://hal.archives-ouvertes.fr/hal-01757531>. <hal-01757531>

66
Jingli Du, Sunil K. Agrawal. Apríl 2015 New York. Dynamic Modeling of Cable-Driven
Parallel Manipulators With Distributed Mass Flexible Cables. [online]. Columbia
University. Dostupné na internete:
<https://vibrationacoustics.asmedigitalcollection.asme.org>

John J. Craig. 2005. Introduction to Robotics:Mechanics and Control. Pearson Education,


Inc, Pearson Prentice Hall Pearson Education, Inc, Upper Saddle River. 2005. ISBN 0-13-
123627-6.

Karl Johan Aström, Richard M. Murray, 28 September 2012. An Introduction for


Scientists and Engineers. In: Feedback Systems. [online]. Princeton University Press,
Princeton and Oxford. [citované 2020-20-03]. strana 219. Dostupné na internete: <
http://www.cds.caltech.edu/~murray/books/AM08/pdf/am08-complete_28Sep12.pdf>.
ISBN 978-0-691-13576-2

Kevin M. Lynch, Frank C. Park, 2017. Modern Robotics: Mechanics, Planning, and
Control. [online]. Cambridge University Press. Dostupné na internete:
<http://hades.mech.northwestern.edu/index.php/Modern_Robotics>. ISBN
9781107156302

Latha Nagendran. Október 4, 2019. What are degrees of freedom in FEM?. In: Quora.
[online]. 2019, [citované 2020-21-02]. Dostupné na internete:
<https://www.quora.com/What-are-degrees-of-freedom-in-FEM>

Management Mania. November 2016. XML (Extensible Markup Language). [online].


Management Media. 14.11.2016. [citované 2020-30-02]. Dostupné na internete:
<https://managementmania.com/sk/xml-extensible-markup-language>.

Marian Mach, Január. 2017. Kinematika: kĺbové štruktúry. In: Servisná robotika. [online].
Január. 2017. [citované 2020-14-02]. Dostupné na internete:
<http://people.tuke.sk/marian.mach/presentations/sr/sr-kinematika-klby-2.ppt>.

Mark W. Spong, Seth Hutchinson, M. Vidyasagar. 2005. Robot Modeling and Control.
Wiley. 2005. ISBN 0471649902

67
Matt Simon, Apríl 2020, The WIRED Guide to Robots. In: Wired. [online]. Dostupné na
internete: <https://www.wired.com/story/wired-guide-to-robots/>

Michal Adamík, Andrej Babinec. 2017. Generovanie trajektórií pre robotický manipulátor
na báze vektorovej grafiky. In: Automa. [online]. 2017, [citované 2020-28-01]. Dostupné
na internete: <https://www.automa.cz/Aton/FileRepository/pdf_articles/9855.pdf>

Nextech. Jún 2016. ARDUINO - programujeme mikrokontroléry. Dostupné na internete:


<https://www.pcrevue.sk/a/ARDUINO---programujeme-mikrokontrolery-1-cast>

Open Robotics, 2007. About ROS. In: ROS. [online], [citované 2020-5-02]. Dostupné na
internete: <https://www.ros.org/about-ros/index.php>

Peter Demeč, Číslicové riadenie obrábacích strojov: Základné pojmy a definície. [online].
Technická univerzita v Košiciach Strojnícka Fakulta Katedra výrobnej techniky a robotiky.
[citované 2020-30-02]. Dostupné na internete:
<http://www.myinfo.sk/download/SKOLA/006-CNC_Zakladne_Pojmy_a_Definicie.pdf>.

Steven M. LaValle, 2006. Planning Algorithms. [online]. Illinois: Cambridge University


Press, 2006. [citované 2020-25-01]. Dostupné na internete: <http://planning.cs.uiuc.edu/>.
ISBN-10: 0521862051.

Tang, Xiaoqiang, Dengfeng Sun, and Yuanying Qiu. "Advances in Cable-Driven


Parallel Manipulators." (2014).

Walker, Mark John. 2012. The programmable logic controller: its prehistory, emergence
and application. [online]. PhD thesis The Open University. [citované 2020-18-03]
Dostupné na internete: <http://oro.open.ac.uk/54687/1/594090.pdf>.

Xue Jun Jin , Dae Ik Jun , Andreas Pott , Sukho Park , Jong-Oh Park and Seong Young Ko.
október 20-23, 2013 v Kimdaejung Convention Center, Gwangju, Korea. Four-cable-
driven parallel robot. [online] In: 2013 13th International Conference on Control,

68
Automation and Systems (ICCAS 2013). Dostupné na internete:
<https://www.academia.edu/17743103/Four-cable-driven_parallel_robot>

Zbyšek Voda. November 2014. Sériová komunikácia a cykly. [online]. In: Arduino.cz.
Dostupné a internete: < https://arduino.cz/seriova-komunikace-a-cykly/>

69
Obrázky

[1] <https://www.mrmoco.com/wp/wp-content/uploads/2012/08/motion-base-overview-
1.jpg>

[2]<https://cdn.newsday.com/polopoly_fs/1.35346800.1566414241!/httpImage/image.jpg_
gen/derivatives/landscape_1280/image.jpg>

[3]<https://www.intechopen.com/books/parallel_manipulators_new_developments/wire_ro
bots_part_i__kinematics__analysis___design>

[4] < https://www.researchgate.net/figure/Cable-driven-robot-geometry-Example-of-a-


suspended-CDPR-The-same-geometric-description_fig2_263714205>

[5] < https://www.mdpi.com/1424-8220/18/7/2392>

[6] < https://www.researchgate.net/figure/The-three-axes-of-rotation-of-an-


aircraft_fig1_328772327>

70
Prílohy

Príloha 1: Hlavný ROS uzol pre generovanie krokových príkazov na základe dát so
simulátora CASPR.

//Computer Numeric Control


#include <mutex>
#include <tf/transform_broadcaster.h>
#include <tf/tf.h>
#include <visualization_msgs/Marker.h>
#include <std_msgs/Float32MultiArray.h>
#include <geometry_msgs/Vector3.h>

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <std_msgs/Float64.h>
#include <std_msgs/Int32.h>

#include "std_msgs/MultiArrayLayout.h"
#include "std_msgs/MultiArrayDimension.h"
#include "std_msgs/Int32MultiArray.h"

class SubscribeAndPublish
{
public:
SubscribeAndPublish()
{
//Topic you want to publish
pub = node.advertise<std_msgs::Int32MultiArray>("stepping", 1000);

//Topic you want to subscribe


sub = node.subscribe("cable", 1000, &SubscribeAndPublish::ChatterCallback, this);
}

//Topic messages callback

void ChatterCallback(const std_msgs::Float32MultiArray::ConstPtr &msg)


{
//lock_guard<mutex> lock(mux);
//cable_start.clear();
//cable_end.clear();
int n;
double cable_length;
int cable_id;
int cl, i_cl;
steps.data.clear();

for (n = 0; n < 10; n++){


printf( "\n\n\n\n\n\n\n\n\n\n" );
}

71
for (uint i = 0; i < msg->data.size() / 6; i++) {
i_cl = initial_cl[i]*10000;
tf::Vector3 start_point = tf::Vector3(msg->data[i*6],msg->data[i*6+1],msg-
>data[i*6+2]);
//cable_start.push_back(start_point);
tf::Vector3 end_point = tf::Vector3(msg->data[i*6+3],msg->data[i*6+4],msg-
>data[i*6+5]);
//cable_end.push_back(end_point);
cable_length = start_point.distance(end_point);
cable_length = round( cable_length * 10000.0 ) / 10000.0;
cable_id = i+1;
//ROS_INFO("Cable %d length: %f\n", cable_id, cable_length);

//Calculate steps
cl = cable_length*10000;
steps.data.push_back(((i_cl-cl)*MOTOR_STEPS)/1150);//Circumference
multiplied by 10000 is 1150
ROS_INFO("Calculated Steps: %d\n", steps.data[i]);
}

pub.publish(steps);

private:
ros::NodeHandle node;
ros::Publisher pub;
ros::Subscriber sub;

double initial_cl[8] = {0.680,0.715,0.677,0.708,0.684,0.715,0.684,0.712};//Had been


modified to SpiderBot2.0
int MOTOR_STEPS = 400;//IMPORTANT //was 1600 changed to 400 for 1/2 stepping
int CIRCUMFERENCE = 0.115;
std_msgs::Int32MultiArray steps;

};//End of class SubscribeAndPublish

int main(int argc, char** argv)


{
//initialise a new node
ros::init(argc,argv,"cable_length_listener_and_publisher");

//Create an object of class SubscribeAndPublish that will take care of everything

SubscribeAndPublish SAPObject;

//Create a nodehandler
//ros::NodeHandle node;

//Craete a subscriber
//ros::Subscriber sub = node.subscribe("cable",1000,ChatterCallback);

//Enter a loop, pumping callbacks


ros::spin();

72
return 0;
}

Príloha 2: Kód pre riadenie mikrokontroléra

#include <ros.h>
#include <std_msgs/MultiArrayLayout.h>
#include <std_msgs/MultiArrayDimension.h>
#include <std_msgs/Int32MultiArray.h>
#include <std_msgs/Bool.h>
#include <Servo.h>

//Library for the stepper motors


//#include <DeclareWinches.h>
#include <AccelStepper.h>

//Using 200 step motor


//Configure Pins

ros::NodeHandle nh;

//Declare stepper and its pins (STEP,DIR)


AccelStepper winch1(AccelStepper::DRIVER, 10, 11);
AccelStepper winch2(AccelStepper::DRIVER, 4, 5);
AccelStepper winch3(AccelStepper::DRIVER, 24, 25);
AccelStepper winch4(AccelStepper::DRIVER, 22, 23);
AccelStepper winch5(AccelStepper::DRIVER, 26, 27);
AccelStepper winch6(AccelStepper::DRIVER, 28, 29);
AccelStepper winch7(AccelStepper::DRIVER, 8, 9);
AccelStepper winch8(AccelStepper::DRIVER, 6, 7);

//Variables
int Step_positions[] = {0,0,0,0,0,0,0,0};
int Target_pos[] = {0,0,0,0,0,0,0,0};
float time_step = 1;
int time_idle = 0;
int i,n;

//Callback function
void moveWinches(const std_msgs::Int32MultiArray& steps){
//Stepper motor control loop has to be called for each step
for(i=0;i<=7;i++){
Step_positions[i] = steps.data[i];
}
time_idle = 0;
digitalWrite(40,HIGH);
digitalWrite(41,HIGH);
}

ros::Subscriber<std_msgs::Int32MultiArray> arduino1("stepping", &moveWinches);

void setup() {
//Sleep pin

73
pinMode(LED_BUILTIN, OUTPUT);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(40, LOW);
digitalWrite(41, LOW);

// put your setup code here, to run once:


/*
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(home_switch_power, OUTPUT);
pinMode(home_switch, INPUT);
*/
//Stepper Speed
winch1.setMaxSpeed(1000);
winch2.setMaxSpeed(1000);
winch3.setMaxSpeed(1000);
winch4.setMaxSpeed(1000);
winch5.setMaxSpeed(1000);
winch6.setMaxSpeed(1000);
winch7.setMaxSpeed(1000);
winch8.setMaxSpeed(1000);
winch1.setSpeed(0);
winch2.setSpeed(0);
winch3.setSpeed(0);
winch4.setSpeed(0);
winch5.setSpeed(0);
winch6.setSpeed(0);
winch7.setSpeed(0);
winch8.setSpeed(0);

nh.initNode();

nh.subscribe(arduino1);

void loop() {
// put your main code here, to run repeatedly:
nh.spinOnce();
time_idle++;
if(time_idle == 20000){digitalWrite(40,LOW);digitalWrite(41,LOW);}

winch1.moveTo(Step_positions[0]*(-1));
winch2.moveTo(Step_positions[1]);
winch3.moveTo(Step_positions[2]*(-1));
winch4.moveTo(Step_positions[3]);
winch5.moveTo(Step_positions[4]);
winch6.moveTo(Step_positions[5]*(-1));
winch7.moveTo(Step_positions[6]);
winch8.moveTo(Step_positions[7]*(-1));

74
if(Target_pos[0] != Step_positions[0] || Target_pos[1] != Step_positions[1] || Target_pos[2] !=
Step_positions[2] || Target_pos[3] != Step_positions[3] || Target_pos[4] != Step_positions[4] ||
Target_pos[5] != Step_positions[5] || Target_pos[6] != Step_positions[6] || Target_pos[7] !=
Step_positions[7]){
winch1.setSpeed((Step_positions[0]*(-1)-winch1.currentPosition())/(time_step));
winch2.setSpeed((Step_positions[1]-winch2.currentPosition())/(time_step));
winch3.setSpeed((Step_positions[2]*(-1)-winch3.currentPosition())/(time_step));
winch4.setSpeed((Step_positions[3]-winch4.currentPosition())/(time_step));
winch5.setSpeed((Step_positions[4]-winch5.currentPosition())/(time_step));
winch6.setSpeed((Step_positions[5]*(-1)-winch6.currentPosition())/(time_step));
winch7.setSpeed((Step_positions[6]-winch7.currentPosition())/(time_step));
winch8.setSpeed((Step_positions[7]*(-1)-winch8.currentPosition())/(time_step));
for(n=0;n<=7;n++){
Target_pos[n] = Step_positions[n];
}
}

winch1.runSpeedToPosition();
winch2.runSpeedToPosition();
winch3.runSpeedToPosition();
winch4.runSpeedToPosition();
winch5.runSpeedToPosition();
winch6.runSpeedToPosition();
winch7.runSpeedToPosition();
winch8.runSpeedToPosition();

delay(5);
}

Príloha 3: Súbor bodies.xml

<?xml version="1.0" encoding="utf-8"?>


<!DOCTYPE bodies_system SYSTEM "../../../../templates/bodies.dtd">
<bodies_system>
<links display_range="-0.55 0.55 -0.55 0.55 -0.75 0.2" view_angle="113 48">
<link_rigid num="1" name="SpiderBotEndEffector">
<joint type="SPATIAL_EULER_XYZ" q_initial="0.0 0.0 0.0 0 0 0" q_min="-0.4 -0.4 -0.7 -
0.7853 -0.7853 -0.7853" q_max="0.4 0.4 0.15 0.7853 0.7853 0.7853"/>
<physical>
<mass>0.4</mass>
<com_location>0.0 0.0 0.0</com_location>
<end_location>0.0 0.0 0.0</end_location>
<inertia ref="com">
<Ixx>0.083333</Ixx>
<Iyy>0.083333</Iyy>
<Izz>0.8</Izz>
<Ixy>0.0</Ixy>
<Ixz>0.0</Ixz>
<Iyz>0.0</Iyz>
</inertia>
</physical>
<parent>
<num>0</num>
<location>0.0 0.0 0.0</location>

75
</parent>
</link_rigid>
</links>
</bodies_system>

Príloha 4: súbor cables.xml

<?xml version="1.0" encoding="utf-8"?>


<!DOCTYPE cables SYSTEM "../../../../templates/cables.dtd">

<cables default_cable_set="original">
<cable_set id="original">
<cable_ideal name="cable 1" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>-0.395 0.533 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>0.058 0.060 0.049</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 2" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>-0.536 0.397 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>-0.057 -0.054 -0.046</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 3" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>-0.527 -0.392 0.231</location>
</attachment>

76
<attachment>
<link>1</link>
<location>-0.057 0.060 0.049</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 4" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>-0.391 -0.528 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>0.058 -0.054 -0.046</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 5" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>0.402 -0.528 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>-0.057 -0.054 0.049</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 6" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>0.537 -0.393 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>0.058 0.060 -0.046</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 7" attachment_reference="joint">

77
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>0.537 0.397 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>0.058 -0.054 0.049</location>
</attachment>
</attachments>
</cable_ideal>
<cable_ideal name="cable 8" attachment_reference="joint">
<properties>
<force_min>0.1</force_min>
<force_max>1000</force_max>
</properties>
<attachments>
<attachment>
<link>0</link>
<location>0.397 0.533 0.231</location>
</attachment>
<attachment>
<link>1</link>
<location>-0.057 0.060 -0.046</location>
</attachment>
</attachments>
</cable_ideal>
</cable_set>
</cables>

Príloha 5: trajectories.xml

<?xml version="1.0" encoding="utf-8"?>


<!DOCTYPE trajectories SYSTEM "../../../../templates/trajectories.dtd">
<trajectories>
<joint_trajectories>
<linear_spline_trajectory id="Circle1" time_definition="relative" time_step="1">
<points>
<point>
<q>0.0 0.0 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.0 0.0 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="200.0">
<q>0.054 0.2 0.0 0.0 0.0 0.0</q>

78
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>-0.054 0.2 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>-0.146 0.146 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>-0.200 0.054 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>-0.200 -0.054 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>-0.146 -0.146 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>-0.054 -0.200 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.054 -0.200 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.146 -0.146 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.200 -0.054 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.200 0.054 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.146 0.146 0.0 0.0 0.0 0.0</q>

79
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="60.0">
<q>0.054 0.2 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
<point time="240.0">
<q>0.0 0.0 0.0 0.0 0.0 0.0</q>
<q_dot>0.0 0.0 0.0 0.0 0.0 0.0</q_dot>
<q_ddot>0.0 0.0 0.0 0.0 0.0 0.0</q_ddot>
</point>
</points>
</linear_spline_trajectory>
</joint_trajectories>
</trajectories>

80

You might also like