Professional Documents
Culture Documents
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
Bratislava 2020
ZADANIE DIPLOMOVEJ PRÁCE
Anotácia: Cieľom riešenia diplomovej práce je návrh manipulačného robota pre účely riadenia
vybraných procesov.
Body zadania :
................................................................ ................................................................
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
..................................................
Abstrakt
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
9
Zoznam skratiek, značiek a symbolov
10
1. Úvod do robotických systémov
11
Obrázok 1.1 DOF auta a lietadla [6]
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)
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.
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)
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)
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)
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)
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.)
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
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)
20
kinematika sa používa na nájdenie hodnôt osí kĺbov vzhľadom na polohu a orientáciu
koncového efektora.
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.
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)
𝑐 2 +𝑎2 −𝑏2
cos 𝛽 = (1.12)
2𝑐𝑎
𝑎2 +𝑏2 −𝑐 2
cos 𝛾 = (1.13)
2𝑎𝑏
𝜋
𝐽1 = −𝛼− 𝛽 (1.14)
2
𝐽2 = 𝜋 − 𝛾 (1.15)
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.
𝑥 = 𝑥0 (1 − 𝑡) + 𝑥1 𝑡
𝑃 = {𝑦 = 𝑦0 (1 − 𝑡) + 𝑦1 𝑡 (1.17)
𝑧 = 𝑧0 (1 − 𝑡) + 𝑧1 𝑡
24
q = xi + yj +zk + w
kde x,y,z,w Î R a platí, že i2 = j2 = k2 = -1 (1.18)
sin(𝛼(1−𝑡)) sin(𝛼𝑡)
𝑞= 𝑞1 + 𝑞2 (1.19)
sin 𝛼 sin 𝛼
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.
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)
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
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
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.
• 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.
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.
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.
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
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.
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
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.
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.
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()“.
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.
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.
3.3.1 Konfigurácia
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.
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é)
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
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/>
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>
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>
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>
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>.
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>
70
Prílohy
Príloha 1: Hlavný ROS uzol pre generovanie krokových príkazov na základe dát so
simulátora CASPR.
#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);
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;
SubscribeAndPublish SAPObject;
//Create a nodehandler
//ros::NodeHandle node;
//Craete a subscriber
//ros::Subscriber sub = node.subscribe("cable",1000,ChatterCallback);
72
return 0;
}
#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>
ros::NodeHandle nh;
//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);
}
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);
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);
}
75
</parent>
</link_rigid>
</links>
</bodies_system>
<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
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