/ Department of Mechanical Engineering Systems Engineering
Modelleren van een pick & place robot
M.R. Lammers
Where innovation starts
Modelleren van een pick & place robot Modelleren in CIF3
SE 420753
Michèl Lammers Technische universiteit Eindhoven – Systems Engineering groep
Begeleiders: Dr.ir. D.A. van Beek Dr.ir. M.A. Reniers E.G.J. de Koek B.Sc.
Samenvatting
Om het ontwerp proces van systemen te versnellen wordt er vaak gebruik gemaakt van simulatie modellen. Deze modellen zijn een valide en accurate representatie van het fysieke systeem. Een model met visualisatie geeft een nog duidelijker beeld van de simulatie. De system engineering groep is geïnteresseerd in een CIF3 model van een pick-and-place robot. Deze robot maakt gebruik van een derde-orde profiel waarbij de robot aangestuurd wordt door middel van de derde afgeleide van de positie, namelijk de jerk. Het model van deze robot wordt gevisualiseerd in InkScape, deze visualisatie wordt aangestuurd door een CIF3 model. De robot, die zich bevindt in een driedimensionale omgeving moet verschillende producten oppakken van variabele locatie en deze verplaatsen naar een nieuwe toegewezen locatie. Omdat de beweging van de robot wordt beschreven door een ideaal bewegingsprofiel, is een feedback controller niet nodig. Het model van de robot is tot stand gekomen door middel van tussentijdse simulaties met behulp van visualisatie. Door middel van deze simulatie is het eenvoudig te zien wanneer een model correct. Dit model gaat uit van ideale situatie, er wordt geen rekening gehouden met externe factoren en niet perfecte parameters. Het model bevat meerdere automaten die tegelijk samen moet werken om de robot vloeiend een product op te laten pakken. Het belangrijkste onderdeel van dit model is de automaat die het derde-orde profiel creëert. Deze berekend aan de hand van de robot paramaters een ideaal pad naar het gewenste setpoint. Dit profiel wordt bij de drie dimensies, rotatie, translatie en de hoogte toegepast. Om dit profiel is een controller die de dimensies in bepaalde volgorde aanstuurt. Deze loopt een programma af wat achtereenvolgens een product pakt, verplaatst en naar een nieuwe locatie brengt. Aan het model is een visualisatie gekoppeld. Deze bestaat uit een robot die zich in een tweedimensionale omgeving begeeft. In de buurt van deze robot bevinden zich producten die de robot op moet pakken en verplaatsen. Om het slechts een tweedimensionale omgeving is wordt de derde dimensie, de hoogte, weergegeven in vorm van getallen, meters en kleuren. Zowel de robot als de producten zijn zichtbaar en dynamisch in de visualisatie. De robot is in staat de producten van elke locatie in zijn bereik te pakken en te verplaatsen naar elke andere locatie in zijn bereik. Om een productflow te creëren is de robot in serie gezet met nog een robot. Deze tweede robot is identiek aan de eerste robot. Het idee van deze productflow is dat een product opgepakt wordt door de eerste robot, vervolgens op een gedeelde locatie neergelegd wordt, en daarna weer verplaatst wordt door de tweede robot. Hiervoor is een correcte samenwerking en communicatie tussen beide robots vereist. Om dit mogelijk te maken moet het model zo ontworpen zijn dat deze eenvoudig uit te breiden is indien er meerdere producten worden geplaatst, of zoals in het huidige geval, de robot geplaatst wordt in een groter geheel. Het model is geschreven met oog op uitbreiding zodat nieuwe producten eenvoudig toe te voegen zijn. Ook bij het plaatsen van extra robots is het model eenvoudig uit te breiden waar nodig. Voor meer informatie over dit onderwerp en over de modellen wordt u doorverwezen naar het complete verslag met bijbehorende modellen.
ii
Inhoud SAMENVATTING ..................................................................................................................................................... II HOOFDSTUK 1. INLEIDING ................................................................................................................................... 1 HOOFDSTUK 2. DRIEDIMENSIONALE ROBOT ....................................................................................................... 2
2.1 2.2 2.3
DE 3D-ROBOT .................................................................................................................................... 2 MODEL MET VISUALISATIE ..................................................................................................................... 2 GEWENSTE FUNCTIONALITEIT VAN HET MODEL MET VISUALISATIE .............................................................. 3
HOOFDSTUK 3. DERDE-ORDE BEWEGINGSPROFIEL ............................................................................................ 4
3.1 3.2
VERSCHILLENDE SITUATIES BIJ ACCELEREREN .......................................................................................... 4 FORMULES VAN HET DERDE-ORDE PROFIEL ............................................................................................ 5
HOOFDSTUK 4. OPBOUW VAN HET MODEL ........................................................................................................ 6
4.1 4.2 4.3 4.3.1 4.3.2 4.3.3 4.3.4
4.4 4.4.1 4.4.2
4.5 4.5.1 4.5.2 4.5.3
BEWEGING VAN DE ROBOT .................................................................................................................. 6 M ANUEEL EN AUTOMATISCH ................................................................................................................ 7 AUTOMATEN ....................................................................................................................................... 7 Coördinatie-controller ........................................................................................................................................ 8 Bewegingscontroller ........................................................................................................................................... 8 Bewegingsprofiel................................................................................................................................................. 9 Producten.......................................................................................................................................................... 11
FUNCTIES .......................................................................................................................................... 11 Profieltijd berekening ........................................................................................................................................ 11 Poolcoördinaten berekenen van de producten ........................................................................................... 13
GEBRUIKERSINTERFACE ...................................................................................................................... 13 Instellingen van de robot ................................................................................................................................. 13 Besturing gedurende de simulatie................................................................................................................... 14 Terugkoppeling gedurende de simulatie ....................................................................................................... 14
HOOFDSTUK 5. UITBREIDEN VAN HET MODEL ................................................................................................... 15
5.1 5.1.1 5.1.2 5.1.3
5.2
WIJZIGINGEN VAN DE AUTOMATEN .................................................................................................... 15 Coördinatie-controller ...................................................................................................................................... 15 Bewegingscontroller ......................................................................................................................................... 15 Derde-orde bewegingsprofiel ......................................................................................................................... 16
GEBRUIKERSINTERFACE ...................................................................................................................... 16
HOOFDSTUK 6. VISUALISATIE ............................................................................................................................. 17
6.1 6.2 6.2.1
6.3
VISUEEL MODEL VAN DE ROBOT ......................................................................................................... 17 AANSTURING VAN HET VISUELE MODEL ............................................................................................... 18 Translaties en rotaties........................................................................................................................................ 18
UITBREIDING MET MEERDERE ROBOTS .................................................................................................. 21
HOOFDSTUK 7. CONCLUSIES EN AANBEVELINGEN.......................................................................................... 24
7.1 7.2
CONCLUSIE ...................................................................................................................................... 24 AANBEVELINGEN .............................................................................................................................. 24
iii
Hoofdstuk 1. Inleiding Voor het model-based ontwerpen van high-tech embedded systemen is het essentieel om simulaties en visualisaties van het ongestuurde system te maken. Wanneer de simulatie een valide en accurate representatie is van het fysieke system, is het mogelijk om dit simulatiemodel te gebruik in vroege fasen van ontwerp proces. Dit simulatiemodel wordt gebruikt om een model van de software te testen waardoor deze in kortere tijd gemaakt kan worden. Een manier om deze simulatiemodellen is door middel van hybride automaten gemodelleerd in CIF 3. In deze modellen wordt het gedrag gemodelleerd aan de hand van differentiaalvergelijkingen. Deze vergelijkingen bevinden zich in autometen die in geheel het systeem representeren. Met behulp van interactieve ‘Scalable Vector Graphics (SVG)’ tekeningen, is het mogelijk het systeem te visualiseren. De system engineering groep is geïnteresseerd in een CIF 3 model van een Pick-and-Place robot, welk gebruik maakt van een derde-orde bewegingsprofiel. De robot bevindt zich in een driedimensionale omgeving met meerdere oppaklocaties voor de producten. Het CIF 3 model wordt gevisualiseerd in een tweedimensionale omgeving waarbij de derde dimensie op een duidelijke en overzichtelijke manier toegevoegd moet worden. Het CIF model beschrijft de beweging van de robot. Aan dit model wordt een visualisatie gekoppeld. Het model en de controller het model gaan uit van ideale situaties. Er wordt geen rekening gehouden met externe factoren en niet perfecte parameters. Het doel van dit project is een visualisatie te maken van deze robot met daarbij het benodigde model om tot deze visualisatie te komen. Een feedback controller wordt hier niet toegepast omdat de beweging beschreven wordt door een ideaal bewegingsprofiel. Als subdoel wordt de robot in combinatie geplaatst met nog eenzelfde robot, waardoor een correcte samenwerking voor de product flow, gerealiseerd moet worden. Het verslag is als volgt opgebouwd. In het 2e hoofdstuk wordt de driedimensionale robot ingeleid. De robotfunctionaliteiten worden behandeld en er worden eisen aan het model gesteld. In het 3e hoofdstuk wordt het bewegingsprofiel van de robot behandeld. Hoofdstuk 4 behandelt het model van de robot. Elke belangrijke automaat en functie wordt toegelicht. In hoofdstuk 5 wordt uitgelegd hoe het model uitgebreid kan worden tot en groter geheel. Als voorbeeld is de robot in serie gezet met eenzelfde robot waardoor een productflow ontstaat. Hoofdstuk 6 bespreekt de visualisatie van het model. De besturing, interface en uitbreidingen worden toegelicht. In hoofdstuk 7 wordt vervolgens de conclusie getrokken en worden aanbevelingen gegeven met oog op voortzetting van het project.
1
Hoofdstuk 2. Driedimensionale robot In dit hoofdstuk wordt de driedimensionale(3D) robot ingeleid. De robot is een zogenaamde pick-andplace machine. Deze pakt een product op van een (variabele) locatie, en legt deze op de nieuwe toegewezen locatie neer. Het doel en de subdoelen worden behandeld in termen van functionaliteit.
2.1
De 3D-robot
De 3D-robot beweegt, zoals de naam al zegt, in een driedimensionale omgeving. Deze robot beweegt volgens een bepaald bewegingsprofiel namelijk van de derde orde. Dit houdt in dat de robot vloeiend beweegt. Aan de hand van dit profiel kan er een model worden gemaakt. Dit model beschrijft dan slechts de beweging van de robot. Voor dit model wordt gebruik gemaakt van de taal CIF3. Dit model vormt de ondersteuning voor de visualisatie van de robot gemaakt in InkScape. Een visualisatie is gewenst tijdens het ontwerpen van modellen omdat dit een grote toevoeging heeft tijdens de ontwerpfase. Zo kan er door middel van een visualisatie sneller en eenvoudiger bekeken worden wanneer een model wel of niet correct werkt. In figuur 1 is de 3D-robot weergegeven.
Figuur 1: 3D-robot in het echt en in CIF3 (bovenaanzicht van de robot)
2.2
Model met visualisatie
Er wordt een model met een visualisatie gemaakt van de 3D-robot. Hier wordt de nadruk gelegd op de visualisatie. Het model is vereist om een kloppende visualisatie te creëren. De robot parameters zoals maximale versnelling, snelheid en jerk zijn bekend. Deze vormen de fysische eigenschappen van de robot. Aan de hand van deze parameters wordt een bewegingsprofiel opgesteld. De beweging van de robot wordt vooraf berekend in plaats van gebruik te maken van een feedback controller. De visualisatie is een belangrijk onderdeel van de opdracht. Zonder de visualisatie is het moeilijk te zien of het model klopt. Daarom is er al in een vroeg stadia een visualisatie ontwerpen en is deze uitgebreid naarmate het model vorderde.
2
2.3
Gewenste functionaliteit van het model met visualisatie
Het model met visualisatie moet dezelfde functionaliteit hebben als de echte robot. Als eerste betekend dit dat de robot in alle drie de dimensies moet kunnen bewegen. Dit moet duidelijk worden in de visualisatie. In figuur 2 zijn slechts twee dimensies weergegeven omdat InkScape geen 3D afbeeldingen ondersteund. Als de robot eenmaal in alle richtingen kan bewegen zijn er een aantal acties mogelijk. Dit betreft het oppakken en verplaatsen van producten. Verder moet het model zo ontworpen worden, dat deze later uitgebreid of geïmplementeerd kan worde in een groter systeem. Met oog op deze eisen worden er een aantal functionaliteiten opgesomd: •
• •
De drie dimensies moeten alle duidelijk gevisualiseerd worden. Omdat er in InkScape maar twee dimensies tot beschikking zijn moet er een oplossing worden gevonden voor de derde dimensie. De robot moet een product op elke locatie binnen zijn bereik kunnen pakken en plaatsen, zie figuur 2 Het model met visualisatie moet uit te breiden zijn tot een groter geheel, als subdoel wordt gesteld om de robot in combinatie te zetten met eenzelfde robot, waardoor er een productflow ontstaat.
Figuur 2: Robot in het werkveld met producten
3
Hoofdstuk 3. Derde-orde bewegingsprofiel De beweging van de 3D-robot volgt een derde-orde profiel. Bij aansturing met een verloopt elke beweging erg geleidelijk en is er geen sprake van directe versnelling. Dit wordt gerealiseerd door middel van de jerk aan te sturen. De jerk is de afgeleide van de versnelling en dus de derde afgeleide van de positie/verplaatsing van de robot. De formules die de verbanden definiëren tussen de jerk, versnelling, snelheid en verplaatsing zijn als volgt: = , = , = Door middel van de jerk te variëren wordt de versnelling opgebouwd in plaats van een blok golf. Als gevolg krijgt de grafiek van de snelheid een kwadratische vergelijking. Dit resulteert in een vloeiende en geleidelijke beweging van de robot.
3.1
Verschillende situaties bij accelereren
De jerk is ingesteld op een vaste waarde waardoor er drie mogelijkheden zijn namelijk: de maximale waarde Jmax, nul, of de negatieve waarde -Jmax. Om de robot correct aan te sturen krijgt deze, per bewegingsrichting ook een maximale acceleratie en snelheid toegewezen. Om een correct profiel te creëren moet er op de juiste tijdstippen gewisseld worden tussen de verschillende waardes van de jerk. Om de tijdstippen te bereken wordt er onderscheid gemaakt in vier profielen: 1) 2) 3) 4)
Zowel maximale snelheid als acceleratie wordt behaald; Maximale snelheid wordt niet behaald, acceleratie wel; Maximale acceleratie wordt niet behaald, snelheid wel; Zowel de maximale snelheid als acceleratie worden niet behaald.
In paragraaf 2.2 zijn de formules voor deze situaties weergegeven in een tabel. De jerk bepaald de afgeleide van de acceleratie, zie figuur 3. Hier is de acceleratie uitgesteld tegen de tijd. Bij een positieve jerk neemt de acceleratie toe, vervolgens wordt de jerk nul gemaakt en om de acceleratie weer op nul te krijgen wordt de jerk negatief gemaakt. Deze drie veranderingen in de jerk resulteert in de eerste drie lijnen van het figuur. De robot beweegt op dit moment met een constante snelheid.
Figuur 3: Profiel van de acceleratie als functie van de tijd 4
In figuur 3 is het profiel van de versnelling van een derde-orde bewegingsprofiel weergegeven. Omdat het versnellen en het vertragen een mooi symmetrische beweging is wordt er onderscheid gemaakt in slechts drie verschillende tijdsduren: -
tj ta tv
: Tijd om versnelling op of af te bouwen : Versnelling met constante versnelling : Bewegen met constante snelheid.
Deze tijden kunnen allen berekend worden aan de hand van de robotparameters en bovengenoemde eisen. De parameters van de robot zijn vaste constanten. Deze betreffen de maximale jerk(j), maximale versnelling(a) en de maximale snelheid(v). De af te leggen afstand is ‘s’. Met deze gegevens kunnen de tijden met behulp van de formules in tabel 1 worden berekend. Met deze tijden bekend kan er eenvoudig een CIF3 model worden geschreven dat op de juiste tijdstippen de waarde van de jerk veranderd. Dit wordt verder besproken in hoofdstuk 4.
3.2
Formules van het derde-orde profiel
De formules in tabel 4 zijn aangeleverd bij start van de opdracht. Uit simulatie is gebleken dat deze formules correct zijn. Deze formules komen overeen met de situaties besproken in paragraaf 3.1. Er moet van links naar rechts gelezen worden. De eerste voorwaarde is de acceleratie, vervolgens wordt gekeken naar de afstand. In de rechter kolom worden vervolgens de tijden voor deze voorwaarden berekend. Met de nummers wordt de situatie aangegeven. Acceleratie
Verplaatsing >
∙ +
< ∙ >
2
= − = 0
≥ ∙
3 + + 4 2
= 3
2 ≤
<2∙
Profiel tijd = = − = − − =
≥2∙
= 0
= 0 =
(2)
2
= 0
=
(1)
(4)
(3)
−2∙
Tabel 4: Formules om de tijden van het profiel te berekenen
5
Hoofdstuk 4. Opbouw van het model Het model maakt gebruikt van meerdere automaten die tegelijkertijd moeten kunnen werken om de robot vloeiende en achtereenvolgende bewegingen te kunnen laten maken. In dit hoofdstuk wordt uitgelegd hoe het model van de robot tot stand komt en welke automaten en functies hiervoor noodzakelijk zijn.
4.1
Beweging van de robot
Omdat de robot alleen rotatiepunten heeft en niet direct kan transleren wordt de beweging ook gerealiseerd door middel van rotaties. Als eerste kan de robot in zijn geheel om zijn middelpunt roteren. Zie figuur 5 de robot, weergegeven als de rode lijnen, heeft drie rotatiepunten. Het eerste rotatiepunt is de rotatie van de gehele robot om zijn middelpunt. Het tweede rotatie punt zorgt voor rotatie voor alle delen na dit punt, en het derde rotatiepunt roteert de gripper ten opzichte van de robot. Alle rotatiepunten werken samen om een translatie te realiseren. De positie van de gripper moet te allen tijde in een lijn blijven met de gehele rotatie van de robot, zoals te zien in de afbeelding. In het figuur zijn ook alle hoeken aangegeven met daarbij het nummer van het rotatiepunt welk deze hoek maakt. Met de klok met is positief. Hoek is de rotatie die de gehele robot maakt, hoek wordt berekend uit de te maken translatie. Bij een uitschuivende beweging, dus wanneer de translatie toe neemt, draait punt 1 , punt twee met twee
maal en punt drie met – . Deze moet namelijk compenseren voor de beweging van punt 2 om in een lijn te blijven. Punt 1 kan op elk moment met een hoek draaien omdat dit geen invloed heeft op de andere hoeken.
Figuur 5: Rotatiepunten van de robot In figuur 6 is de berekening in CIF3 weergegeven van de translatie naar de te maken rotatie , benodigd voor de rotatie van de arm en de gripper. Hier is phi (Angle) begrensd zodat dit geen problemen oplevert bij het berekenen en in een error resulteert. De totale translatie van de robot bestaat uit de som van de te berekenen translatie, de afstand tussen rotatiepunt 1 en rotatiepunt 3, en de lengte van de gripper.
alg real Angle
=
if (Translation.xx >= 0.4): acos(0.2/0.2) elif (Translation.xx <= -0.4): acos(-0.2/0.2) else acos((Translation.xx/2)/l) end; Figuur 6: Omrekenen van translatie naar rotatie
De visualisatie bestaat uit een 2D platform waarin de rotatie en de translatie van de robot te zien is. Omdat het niet mogelijk is om grafisch de derde dimensie te laten zien wordt deze weergegeven door middel van hoogtemeters. Meer informatie over dit onderwerp is te vinden in paragraaf 4.5.
6
4.2
Manueel en automatisch
Tijdens simulatie is het mogelijk om de robot manueel te bedienen of om het programma automatisch te laten verlopen. Wanneer er gekozen wordt voor manueel bedienen kan slechts de robot bestuurd worden in alle richtingen, maar kan er geen product worden gepakt. Deze functionaliteit is geïntroduceerd in de ontwerpfase van het model, met betrekking tot het ontwerpen van het bewegingsprofiel. Zoals eerder gesteld is een visualisatie tijdens de ontwerpfase een groot voordeel. Om het bewegingsprofiel correct te ontwerpen en deze in elke situatie te testen is het besturingspaneel geïntroduceerd. Met behulp van dit paneel kan de robot in elke mogelijke positie gezet worden zodat het profiel en model optimaal getest kan worden. Na het ontwerpen van dit profiel is besloten het besturingspaneel als optie in het model te houden, met oog op uitbreidingen van het model. Wanneer het model geplaatst wordt in een groter geheel kan dit een voordeel bieden tijdens de ontwerpfase.
4.3
Automaten
Er wordt zoveel mogelijk gebruikt gemaakt van definities en functies om de code zo kort mogelijk en leesbaar mogelijk te maken. In figuur 7 is de opbouw van de samenwerking van de automaten en de belangrijkste functies weergegeven.
Figuur 7: Opbouw van de besturing
7
De oranje blokken vertegenwoordigen instellingen zoals robotparameters en locaties van producten, die in de CIF3 code vóór de simulatie vereist zijn. De blauwe blokken vormen de gebruikersinterface, dit zijn knoppen beschikbaar tijdens simulatie. Een vereenvoudigde doorloop van het model is als volgt: •
Kies voor automatisch of manueel bedienen o Voor Manueel: Kies Robot om te besturen indien meer dan één robot aanwezig De state van de coördinatie-controller zorgt ervoor dat de positie van de gekozen richting(R,T,Z) een constante afgeleide (snelheid) krijgt o Voor automatisch kies product volgorde, dit wordt doorgeven aan de bewegingscontroller Volgorde en locaties van producten en robot parameters worden ingelezen Setpoints van de robot worden bepaald en gegeven aan de bewegingscontroller Indien meer dan één robot, taken van de robots worden individueel gestart door coördinatie-controller Taak robot # starten, ontvang setpoints uit producten en eindlocaties. Setpoint # en robotparameters gaan naar het bewegingsprofiel Richting bepalen en eventueel de huidige positie bijwerken Optimaal pad van de robot wordt berekend aan doorgegeven aan het SVG
4.3.1
Coördinatie-controller
De controller is het hoogste niveau van de besturing. In de controller wordt(en) de robot(s) gecoördineerd. De controller heeft één voorwaarde waar aan moet worden voldaan voor deze zijn programma start. Tijdens de simulatie kan gekozen worden voor automatisch bewegen of de robots individueel manueel besturen met behulp van besturingsknoppen. Indien gekozen wordt voor automatisch bewegen zal de robot zijn programma aflopen wat bestaat uit de producten oppakken en verplaatsen (pick-and-place). In de coördinatie-controller wordt echter alleen verteld wanneer een robot zijn opdracht mag uitvoeren. Dit signaal wordt doorgegeven aan de bewegingscontroller, zie figuur 7 Het is mogelijk om meerdere robots in serie te zetten. Deze uitbreiding wordt besproken in hoofdstuk 5. Wanneer er gekozen wordt om de robot(s) manueel te bedienen, moet deze bediend worden met de besturingsknoppen. Tijdens het manueel bedienen kan echter alleen de robot bewogen worden en is het niet mogelijk om producten op te pakken.
4.3.2
Bewegingscontroller
Kort gezegd zorgt de bewegingscontroller ervoor dat de robot naar de locatie gaat waar hij op dat moment moet zijn. De bewegingscontroller is een definitie gemaakt zodat deze gebruikt kan worden voor meerdere robots. De bewegingscontroller zorgt voor het setpoint voor de x-, y- en z-positie van de robots(s). Dit setpoint is afhankelijk van welk product er opgepakt moet worden en de staat waarin de robot zich bevind. Met de staat wordt er bedoeld of de robot aan het pakken of verplaatsen is. Het automatische programma, waarin de robot alle producten oppakt en verplaatst, wordt beschreven in de bewegingscontroller. Deze bestaat simpel gezegd uit verschillende locaties waar de robot achtereen volgens naar toe moet bewegen. Dit simuleert het oppakken van het product en het verplaatsen naar de toegewezen locatie. 8
Deze locaties zijn vooraf instelbaar door de gebruiker. Hierin wordt onderscheid gemaakt in: -
Initiële positie; Product locaties; Eindlocaties; Gemeenschappelijke locatie.
De initiële positie is de positie waarin de robot in rust is, of de positie waarin de robot mag roteren en in de hoogte mag bewegen. De gemeenschappelijke locatie is de locatie tussen twee robots in indien er twee of meer gebruikt worden. De locaties worden per robot toegewezen indien er meerdere robots aanwezig zijn. Er wordt onderscheid gemaakt tussen de robots door middel van een robotnummer die meegeven wordt aan de bewegingscontroller tijdens de instantiatie. Hoe de robot bij de locatie komt wordt berekend door het derde-orde bewegingsprofiel. De setpoints worden doorgegeven aan dit profiel. Dit profiel berekend aan de hand van de robot parameters een pad tot het setpoint. Dit pad wordt berekend aan de hand van afgeleiden van de jerk, de acceleratie en de snelheid met als resultaat een positie. Dit wordt in de tijd berekend zodat dit pad, de positie, direct doorgegeven wordt aan het SVG. Met behulp van het berekende pad van de robot wordt de visualisatie aangestuurd. Er worden twee booleans waar gemaakt op het moment dat de robot een product ‘vast heeft’, namelijk GrabProduct, en TranslateProduct. Bij de eerste boolean heeft de robot het product vast. De tweede boolean zorgt ervoor dat het product de translatie van de robot volgt. Zo bestaat er een boolean ‘GrabProduct’. Dit houdt in dat de robot gripper precies zich bij het product bevind en vanaf dat moment het product het pad van de gripper mee moet volgen. Voor meer informatie over de visualisatie van de producten, zie hoofdstuk 5.
4.3.3
Bewegingsprofiel
Het bewegingsprofiel is een derde-orde profiel, zie hoofdstuk 3. Omdat dit profiel voor een driedimensionale robot gebruikt wordt dit profiel voor alle richtingen (x,y,z) gebruikt. Door een definitie te maken van het bewegingsprofiel hoeft deze maar een keer gedefinieerd te worden en kan deze voor alle richtingen gebruikt worden. De tijden van het profiel worden berekend aan de hand van de formules uit paragraaf 3.2. Deze formules worden in een functie gezet die voor elke unieke situatie de correcte tijd weergeeft waarop de jerk gewisseld moet worden. Deze functie wordt dieper besproken in paragraaf 4.4.1. De volgorde van de tijden is vooraf bekend zoals besproken in paragraaf 3.1. Om het profiel te creëren moet de jerk op een aantal vooraf berekende tijdstippen veranderen. Zie figuur 8, het bewegingsprofiel is eenvoudig te implementeren in CIF3 wanneer de tijden van omschakelen bekend zijn. Merk op dat in de eerste state er aan twee eisen moet worden voldaan voor het profiel mag starten. De eerste eis is dat de robot op stand automatisch bewegen staat. Indien dit niet het geval zou zijn, zou de robot tegen gaan sturen wanneer deze manueel bestuurd wordt. De tweede eis zorgt ervoor dat het profiel niet start als de robot als bezig is. Dit zou betekenen dat er een dubbel profiel loopt en de robot dubbele waarden binnen krijgt. Wanneer de robot een opdracht krijgt en uitvoert krijgt deze de boolean ‘busy’. location Idle: initial; event calc when (Auto.automatic or Controller.Busy) do klok := 0.0, Setpoint := x_end, t := VAJtime(v_max,a_max,j_max,xx,x_end,theta) goto AccGain; location AccGain: 9
event swap when klok >= t[j] do klok location CstAccGain: event swap when klok >= t[a] do klok location DAccGain: event swap when klok >= t[j] do klok location CstSpeed: event swap when klok >= t[v] do klok location DAccBreak: event swap when klok >= t[j] do klok location CstAccBreak: event swap when klok >= t[a] do klok location AccBreak: event swap when klok >= t[j] do klok goto Stopped; location Stopped: event stop do xx := Setpoint, klok:=
:= 0.0 goto CstAccGain; := 0.0 goto DAccGain; := 0.0 goto CstSpeed; := 0.0 goto DAccBreak; := 0.0 goto CstAccBreak; := 0.0 goto AccBreak; := 0.0, aa:= 0.0, vv:= 0.0
0.0 goto Idle;
Figuur 8: Bewegingsprofiel in CIF3
Deze code laat de robot echter nog niet bewegen, Per state moet de jerk toegewezen worden en de daarbij horende versnelling, snelheid en positie. Deze wordt per state gedefinieerd, zie figuur 9. Hier wordt per state de jerk toegewezen bij het aanmaken van de variabelen, samen met de verbanden met de andere variabelen. Merk op dat hier ook rekening wordt gehouden met de richting waarop de beweging gemaakt moet worden. Clockwise wordt beschouwd als de positieve richting, dit wil zeggen: rechtsom, uitschuiven of omhoog. alg real jj = if t[clockwise]: if AccGain elif DAccGain else 0.0 end else //not clockwise if AccGain elif DAccGain else 0.0 end end; cont aa = 0.0 der jj; cont vv = 0.0 der aa; cont xx = 0.0 der vv end;
or AccBreak : j_max or DAccBreak : -j_max
or AccBreak : -j_max or DAccBreak : j_max
Figuur 9: Toewijzing van de jerk
10
4.3.4
Producten
Standaard liggen er drie producten in het werkveld. Ook dit stuk code is een definitie gemaakt om eenvoudig meerdere producten toe te kunnen voegen. Deze producten worden allemaal opgepakt en verplaatst. De producten zijn tijdens simulatie aan te klikken om een volgorde aan te geven waarin ze opgepakt moeten worden. Nieuwe producten worden geplaatst door middel van een x- en een ypositie in het veld. Deze worden omgerekend naar waarden waar de robot mee kan werken, namelijk poolcoördinaten. Poolcoördinaten bestaan uit de straal en de rotatie ten opzichte van het startpunt. Bij de robot komt het neer op de rotatie en de translatie die de rotatie moet maken om naar het product te bewegen. De combinatie van deze translatie en rotatie wordt het setpoint van de robot genoemd. Zoals eerder genoemd worden de producten in gekozen volgorde opgepakt. Wanneer op een product geklikt is, wordt dit tijdstip van klikken vastgelegd, Als alle producten aangeklikt zijn worden deze tijden met elkaar vergeleken om te bepalen in welke volgorde de producten aangeklikt zijn. Dit wordt bepaald door middel van een functie. Deze geeft per product terug op welke plaats deze in de lijst van volgorde staat.
4.4
Functies
In de besturing wordt veel gebruikt gemaakt van functies om hergebruik mogelijk te maken. Veel van deze functies zijn bedoeld om waarden om te rekenen bijvoorbeeld decimaal naar hexadecimaal of om te wisselen tussen poolcoördinaten en cartesische coördinaten. Echter bestaan er ook functies die noodzakelijk zijn voor een correct verloop van de besturing, welke een enigszins ingewikkeldere achtergrond hebben.
4.4.1
Profieltijd berekening
De formules uit hoofdstuk twee kunnen eenvoudig geïmplementeerd worden in CIF3 met behulp van een if-statement. In figuur 10 is als voorbeeld het deel weergegeven met als voorwaarde < ∙ . Voor de voorwaarde ≥ ∙ wordt soortgelijke code gebruikt met de daar bijbehorende formules. Deze formules zijn terug te inden in paragraaf 3.2. if a < sqrt(v*j): if s > ( (pow(v,2) / a ) + ((v * a) / j) ): tj := a/j; ta := v/a - a/j; tv := s/v - v/a - a/j; elif s > (2*pow(a,3)) / pow(j,2): tj := a/j; ta := (-(3*a)/(2*j)) + sqrt( pow(a,2)/ (4*pow(j,2)) tv := 0.0; elif s <= 2*pow(a,3)/pow(j,2): tj := pow( s/(2*j) , 1/3); ta := 0.0; tv := 0.0; end elif a >= sqrt(v*j):
+ s/a);
Figuur 10: Berekening van de profieltijden
11
Hieruit volgen de correcte tijden van het derde-orde profiel. Omdat dit profiel voor alle dimensies wordt gebruikt, moet er vooraf onderscheid worden gemaakt om welke dimensie het gaat. Dit heeft als reden dat de rotatie los staat van de translatie en hoogte regeling. De translatie en hoogte kunnen slechts beperkte waarden aan nemen. Wanneer bijvoorbeeld hun maximale waarde is bereikt kan er alleen nog terug geteld worden. Met de maximale waarde wordt de maximale hoogte of de maximale translatie bedoeld. Voor de rotatie geldt een ander verhaal. Wanneer er een complete rotatie gemaakt is bevind de robot zich weer op zijn begin punt. Dit heeft als gevolg dat een rotatie van 00, eenzelfde rotatie oplevert als 360o, 720o, etc., zie figuur 11.
Figuur 11: Rotatie van de robot
Het setpoint wordt altijd positief aangeleverd met een bereik van (0o,360o). Wanneer de huidige positie van de robot kleiner is dan het setpoint, levert dit weinig problemen op. De rotatie van de robot neemt, door middel van het bewegingsprofiel, toe of af tot deze het setpoint bereikt heeft. Op deze manier zal de robot echter in de meeste gevallen met de klok mee roteren. Om de robot optimaal te laten bewegen moet deze in alle gevallen de snelste route tot het setpoint nemen. Hier komt het probleem bij kijken dat de robot dus soms door het nulpunt gaat en de positie negatief zou worden. In figuur 12 zijn de mogelijkheden van robot-positie tot setpoint opgesomd. De rode lijn is het setpoint en de blauwe lijn is de robot.
Figuur 12: Rotatie mogelijkheden
12
In het geval van a en b is er geen probleem. De positie van de robot hoeft slechts toe of af te nemen om zich naar het setpoint te begeven. Bij c en d gaat de robot echter door het nulpunt. In het geval van c kan er niet eenvoudig opgeteld worden. De positie zal groter worden dan 360o en wordt uiteindelijk 360o groter dan het setpoint. Bij d geldt het omgekeerde. De positie van de robot zal negatief worden en komt op een positie 360o te weinig ten op zichtte van het setpoint. Om negatieve hoeken en hoeken groter dan één rotatie te voorkomen wordt hier op gelet voor de beweging gemaakt wordt. Dit wordt bepaald in de functie: hoek bijwerken.
4.4.2
Poolcoördinaten berekenen van de producten
De product locaties worden vastgelegd door middel van cartesische coördinaten. Deze gegevens worden gebruikt om de poolcoördinaten ten opzicht van het robot rotatiepunt te berekenen. Ook dit rotatie punt is bekend als cartesische coördinaat. Als eerste wordt gekeken in welk kwadrant het product ligt. Daarna wordt de hoek en translatie uitgerekend. Deze waarden zijn vervolgens een van de setpoints voor de robot(s).
4.5
Gebruikersinterface
Het model wordt voor en tijdens de simulatie bestuurd door de gebruiker. De gebruiker heeft een aantal instellingen en knoppen tot zijn/haar beschikking. Hiermee kan bijvoorbeeld de snelheid of de beweging van de robot veranderd worden.
4.5.1
Instellingen van de robot
Het model heeft meerdere instellingen die voor het programma gestart wordt, gekozen moeten/kunnen worden, zie de oranje blokken in figuur 7. Deze instellingen zijn te vinden bovenaan in de CIF3-code. Als eerste betreft dit de v,a,j-parameters van de robot. Deze parameters kunnen gewijzigd worden om het bewegingsprofiel van de robot te veranderen. In het veld worden producten geplaatst die de robot in de gekozen volgorde zal oppakken. De locaties van deze producten zijn variabel zolang deze in het bereik van de robot liggen. Dat wil zeggen, de producten moeten binnen de maximale straal van de robot liggen en buiten de straal van de eerste arm in verband met het bewegen van de robot, zie figuur 13. De robot kan geheel binnen de kleine cirkel bewegen door zijn arm in te schuiven. Elke positie tussen de twee cirkels is een mogelijke locatie voor een product. De locatie van de producten is gegeven in cartesische coördinaten. Dit zijn de coördinaten waar de SVG mee kan werken. Figuur 13: Bereik van de robot
13
4.5.2
Besturing gedurende de simulatie
Tijdens de simulatie wordt er onderscheid gemaakt tussen de robot manueel bedienen en het programma automatisch laten verlopen. Tijdens het manueel bedienen kan slechts de robot worden bewogen maar kunnen er geen objecten worden gepakt. Om het programma om de producten op te pakken te starten moet er op de knop ‘auto’ worden gedrukt. Vervolgens moet er een volgorde van oppakken va de objecten worden gekozen. De robot zal vervolgens direct starten. Als alle producten één keer gepakt zijn moet er opnieuw een volgorde gekozen worden. Zie figuur 14. Links onder bevind zich het besturingspaneel met de auto/manueel selectie erboven.
Figuur 14: Overzicht van de interface
4.5.3
Terugkoppeling gedurende de simulatie
Tijdens de simulatie wordt veel gebruikt gemaakt van terugkoppeling naar de gebruiker, zie figuur 14. De absolute positie van de robot wordt continu weergegeven onder het besturingspaneel. In de linker bovenhoek bevinden zich drie keer drie meters. Deze geven continue de waarden van de jerk, de acceleratie en de snelheid weer voor de rotatie, translatie en de hoogte beweging. Aan de hand van deze meters kan men goed het derde-orde profiel zien wanneer de simulatie langzaam uitgevoerd wordt. Aan de rechterkant bevindt zich de terugkoppeling van de hoogte van de robot en producten. Omdat het SVG slechts twee dimensies heeft wordt de derde dimensie, de hoogte, weergegeven door middel van een omhoog en omlaag lopend blok. De blauwe balk verkleurt tijdens het verplaatsen in de hoogte. Op het laagste niveau is deze blauw, op het hoogte niveau is deze rood. De producten zijn aan de linkerzijde weergegeven als pijltjes. Deze geven een indicatie van de hoogte ten opzichte van de robot. Aan de rechterzijde geeft het bolletje de hoogte van de eindpositie weer. 14
Hoofdstuk 5. Uitbreiden van het model De 3D-robot kan in combinatie gezet worden met (een) kopie(s) van zichzelf om een product-flow te generen waarbij het product tweemaal opgepakt en verplaatst wordt voor deze zijn eindpositie bereikt. Er moet hier een gemeenschappelijke locatie zijn welk beide robots moeten kunnen bereiken. In dit hoofdstuk wordt uitgelegd wat er veranderd moet worden aan het model besproken in hoofdstuk 3, om meerdere robots toe te kunnen voegen en aan te sturen. De meest tijdrovende factor van het uitbreiden van het model bevindt zich in de visualisatie afhankelijk welke methode er gekozen wordt om de producten te visualiseren. Dit wordt besproken in hoofdstuk 6. Het uitbreiden van de controller zal complexer worden wanneer het programma groter wordt.
5.1
Wijzigingen van de automaten
Omdat de automaten voornamelijk definities zijn, kunnen er eenvoudig nieuwe robots en producten toegevoegd worden door deze te instantiëren. De belangrijkste automaten die een rol spelen bij het gebruik van meerdere robots zijn de coördinatie-controller en de bewegingscontroller.
5.1.1
Coördinatie-controller
De coördinatie-controller zet de robots individueel aan. Op dit moment dat een robot aan wordt gezet heeft deze ‘toestemming’ om een handeling uit te voeren. Elke nieuwe robot moet toegevoegd worden aan deze om een gecontroleerde volgorde te behouden van de handelingen van de verschillende robots.
5.1.2
Bewegingscontroller
De bewegingscontroller is een definitie, dat wil zeggen dat elke nieuwe robot geïnstantieerd moet worden, zie figuur 15. Rotation_1 : VAJ_Profile(1500.0 Translation_1 : VAJ_Profile(1500.0
, 24.0 , 24.0
, 6.2 , 1.5
, RobotOne.R, 1,1); , RobotOne.T-GripperLenght, 2,1);
Rotation_2 : VAJ_Profile(1500.0 Translation_2 : VAJ_Profile(1500.0
, 24.0 , 24.0
, 6.2 , 1.5
, RobotTwo.R, 1,2); , RobotTwo.T-GripperLenght, 2,2);
RobotOne : MovementController(0, CoordinationController.n, CoordinationController.go_r1); RobotTwo : MovementController(1, CoordinationController.n, CoordinationController.go_r2); Figuur 15: Toevoegen van een nieuwe robot In dit voorbeeld is er één robot toegevoegd aan het originele model. De robot krijgt een ID mee(0, 1, 2..) om onderscheid te maken. Het startsignaal uit de controller wordt meegenomen in de bewegingscontroller, deze is go_r# genoemd. De robot kan simpelweg gebruik maken van het
15
bestaande bewegingsprofiel. Echter heeft dit als resultaat dat de nieuwe robot hetzelfde patroon zal volgen als de originele. Om de robot een nieuwe set van setpoint te geven, moet in de bewegingscontroller een programma worden geschreven specifiek voor deze robot. Om de verschillende programma’s te onderscheiden moet als voorwaarde na het ID van de robot worden gevraagd. Op deze manier volgt de desbetreffende robot het correcte programma.
5.1.3
Derde-orde bewegingsprofiel
Elke robot maakt gebruik van het derde-orde bewegingsprofiel. Deze moet dan ook toegevoegd worden aan dit profiel, zie figuur 15. Ook hiervoor geldt dat dit een definitie is. In het bovenstaande voorbeeld is de hoogte in verband met gebrek aan ruimte in de visualisatie weggelaten. Er moet een duidelijk onderscheid blijven voor welke robot welk profiel heeft. Daarom moet bij elke nieuwe translatie of rotatie het nummer van de robot achter de naam woorden gezet om verwarring te voorkomen.
5.2
Gebruikersinterface
In het voorbeeld in er één robot toegevoegd aan het originele model. Omdat deze robot veel ruimte inneemt is de terugkoppeling naar de gebruiker ingekort. Zie figuur 16, de v,a,j-meters zijn verwijdert omdat het scherm te vol zou raken. Ook is absolute positie wordt niet meer weergegeven. In deze visualisatie wordt slechts aangetoond dat het mogelijk is het model uit te breiden naar meerdere robots met de daarbij behorende visualisatie,
Figuur 16: Interface met twee robots De besturing van de robots door middel van de knoppen is nagenoeg gelijk aan de interface toegelicht in paragraaf 4.5. Een toevoeging is de extra knop boven in het midden. Omdat er nu twee robots zijn die individueel bestuurd kunnen worden moet er ook gekozen worden welke robot bestuurd wordt. Door de toevoeging van een robot is er een extra locatie bijgekomen, namelijk de gedeelde locatie. De locatie van de gedeelde locatie en de eind locatie is variabel en te wijzigen in de CIF3 code. De gedeelde locatie moet echter in het bereik van beide robots liggen. Voor een correct verloop van het programma geldt hetzelfde als in het originele model. Op stand automatisch moet een product volgorde gekozen worden voor de robots aan het werk gaan. 16
Hoofdstuk 6. Visualisatie In de vorige hoofdstukken is beschreven hoe de robot aangestuurd wordt. Dit model staat los van de visualisatie. De visualisatie maakt gebruik van variabelen die voorkomen in het model zoals de positie van een rotatie of translatie. De eerste stap in het visualiseren is het overnemen van de robot in een tekenprogramma. Als tekenprogramma wordt InkScape gebruikt. Hierbij worden de tekeningen opgeslagen als een ‘Scalable Vector Graphics’ (SVG). Dit type afbeelding ondersteunt statische en dynamische vectorafbeeldingen. De tweede stap is het koppelen van het model aan de tekeningen. In dit hoofdstuk wordt behandeld hoe dit in zijn werk gaat en waar op gelet moet worden.
6.1
Visueel model van de robot
De tekening van de robot is gemaakt in InkScape. Er wordt niet dieper ingegaan over de werking van dit programma en hoe deze tekening tot stand is gekomen. De robot is direct getekend op de locatie waar deze moet komen te staan. Aan te bevelen is om uit te zoeken of het verstandiger is om de robot in he nulpunt te tekenen en vervolgens het geheel te transleren. Op deze manier kan eenvoudig een nieuwe robot toegevoegd worden en naar de juiste locatie toegewezen worden maar moet er wel gelet worden op de rotatiepunten. Zie figuur 17, de robot heeft drie rotatie punten. Om alle drie de delen van de robot correct te laten bewegen worden er groepen gemaakt van de losse onderdelen. Deze groepen kunnen aangestuurd door het bestand met extensie cifsvg.
Figuur 17: InkScape SVG van de robot
De eerste groep (gripper) bestaat uit de gripper tot en met het rotatie punt. De tweede groep (arm) bestaat uit de aangegeven balk met rotatiepunten, en daarbij toegevoegd de gehele eerste groep. De derde groep (basis) bestaat uit alle groepen en onderdelen uit de robot. Wanneer deze groep dus aangestuurd wordt beweegt de gehele robot.
17
6.2
Aansturing van het visuele model
Het SVG wordt bestuurd door het bestand met extensie .cifsvg. In dit bestand worden alle dynamische objecten gedefinieerd en wordt hun beweging, kleur, grootte, waarde en dergelijke, doorgeven aan het SVG. Per groep of los object kan er een bewerking aangegeven worden. Echter kan een bepaalde bewerking maar eenmaal per groep/object gedefinieerd worden om bijvoorbeeld dubbele transformaties te voorkomen.
6.2.1
Translaties en rotaties
Om objecten te laten bewegen wordt er gebruik gemaakt van transformaties(transform in .cifsvg). Deze transformaties hebben dezelfde mogelijkheden als de transformaties die beschikbaar zijn tijdens het tekenen van de SVG. Er wordt onderscheid gemaakt tussen twee verschillende transformaties: -
Translaties Rotaties
Zoals eerder genoemd bestaat de beweging van de robot alleen uit rotaties. Zie figuur 18, de rotaties zijn per groep gedefinieerd. In dit voorbeeld is Rotation.xx de rotatie van de gehele robot, en Angle is de berekende hoek uit de te maken translatie. Hoek 1 is de basis, hoek 2 is de arm en hoek 3 de gripper.
output id basis attr transform: value Rotation.xx + Angle: inmin 0; inmax 6.28; outmin 0; outmax 360; end pattern "rotate(%s,500,552.5)"; end
output id arm attr transform: value Angle*-2: inmin 0; inmax 6.28; outmin 0; outmax 360; end pattern "rotate(%s,500,352.5)"; end
output id gripper attr transform: value Angle: inmin 0; inmax 6.28; outmin 0; outmax 360; end pattern "rotate(%s,500,152.5)"; end
Figuur 18: Rotaties per groep
Met deze drie blokken is de beweging van de robot voltooid. Voor de producten die de robot oppakt zijn er twee methode bedacht. In de eerste methode wordt er gebruik gemaakt van de rotatie en de translatie die de robot maakt. Omdat het product op de gripper ligt en tijdens transleren in een rechte lijn beweegt, wordt er gebruik gemaakt van de originele translatie in plaats van de berekende Angle.
18
Om te voorkomen dat de producten bewegen wanneer de robot beweegt moet er nagegaan worden of de robot het product ‘gepakt’ heeft. Er is gesteld, dat wanneer de gripper zich op de exacte locatie van het product bevind, het product opgepakt wordt. De gripper schuift als het ware onder het product en neemt het vervolgens mee. Vanaf dit moment moet het product de beweging van de robot volgen. In figuur 19 is de visualisatie van een product weergegeven. Onderaan in de code bij “pattern” wordt de te maken rotatie en translatie doorgeven aan het SVG. De rotatie functie wordt in het eerste deel gedefinieerd. Deze is van kracht wanneer de gripper zich ‘onder’ het product bevind. Omdat op het moment van oppakken de robot al een rotatie heeft gemaakt, moet de rotatie positie van het product afgetrokken worden van de rotatie die vanaf dat moment geldt.
output id Object_1 attr transform: value if Controller.Object_Grabbed_1 = true: (Rotation.xx-Object_1.R) else Controller.ObjectRotation_1 end: inmin 0; inmax 6.28; outmin 0; outmax 360; end value if Controller.TranslateObject_1 = true: (Translation.xx-Controller.Current_T)*cos(Controller.Calc_R_1) else Controller.ObjectTranslation_1*cos(Controller.Calc_R_1) end: inmin -0.4; inmax 0.4; outmin if Object_1.R < Pi: -400 else 400 end; outmax if Object_1.R < Pi: 400 else -400 end; end value if Controller.TranslateObject_1 = true: (Translation.xx-Controller.Current_T)*sin(Controller.Calc_R_1) else Controller.ObjectTranslation_1*sin(Controller.Calc_R_1) end: inmin -0.4; inmax 0.4; outmin if Object_1.R < Pi/2 or Object_1.R > 3*Pi/2: 400 else -400 end; outmax if Object_1.R < Pi/2 or Object_1.R > 3*Pi/2: -400 else 400 end; end pattern "rotate(%s, 500, 552.5), translate(%s,%s)"; end Figuur 19: Visualisatie van een product
De translatie bestaat uit een x- en een y-richting. Omdat de translatie gegeven is in de afstand van de gripper tot het robot-rotatiepunt, moet de x- en y-translatie berekend worden. Deze wordt berekend aan de hand van de rotatie die de robot op dat moment heeft. Wederom geldt dat de initiële translatie afgetrokken moet worden van de translatie die vanaf dat moment voor het product geldt.
De richting van de translatie is afhankelijk in welke positie de robot staat. Zie figuur 20, voor de translatie in de x-richting zijn twee mogelijkheden. In toestand a geldt voor een toenemende translatie (uitschuivend) dat deze naar links is. Voor toestand b geldt echter voor dezelfde voorwaarde dat deze dan naar rechts gaat.
19
Figuur 20: Verschillende robot posities
Voor de y-richting geldt uiteraard hetzelfde maar dan wanneer de robot naar boven of naar beneden staat. Er moet dus gekeken in welk kwadrant de robot zich bevindt om de juiste mapping te bepalen voor de x- en y-translatie. Deze mapping is terug te vinden in figuur 19 bij de waarden voor outmin/outmax. Omdat deze methode erg langdradig is en er enkele problemen opgelost moeten worden is er een simpelere en kortere oplossing bedacht. Deze methode maakt gebruik van de locatie van de gripper. Deze wordt namelijk continue berekend om het pad naar het setpoint te berekenen. Aan de hand van deze positie in poolcoördinaten worden de cartesische coördinaten berekend. Deze coördinaten komen overeen met het middelpunt van de gripper en dus de locatie waar het product op dat moment moet liggen. De locatie van het product wordt dus continue gewijzigd naarmate de robot het product ‘verplaatst’. Zie figuur 21, in het product wordt het pad van het product bepaald. Dit pad bestaat uit een x- en een y-positie. Deze wordt vervolgens direct doorgegeven aan het SVG. De CIF3 code wordt hier gebruik voor alle producten, zo hoeft er alleen in de cifsvg nog de locatie wijzing toegevoegd te worden per product. CIF3: alg int Q = GetKwadrant(Rotation.xx); alg real Xpath = GetPathX(Translation.xx, Rotation.xx, Q); alg real Ypath = GetPathY(Translation.xx, Rotation.xx, Q); func real GetPathX(real T,R; int Q): real x; R := R - Q * 0.5 * Pi; T := T+GripperLenght; x := if Q = 0: 500+(T*sin(R)*1000)-40 elif Q = 1: 500+(T*cos(R)*1000)-40 elif Q = 2: 500-(T*sin(R)*1000)-40 elif Q = 3: 500-(T*cos(R)*1000)-40 else 0.0 end; return x; end
func real GetPathY(real T,R; int Q): real y; R := R - Q * 0.5 * Pi; T := T+GripperLenght; y := if Q = 0: 552.5-(T*cos(R)*1000)-40 elif Q = 1: 552.5+(T*sin(R)*1000)-40 elif Q = 2: 552.5+(T*cos(R)*1000)-40 elif Q = 3: 552.5-(T*sin(R)*1000)-40 else 0.0 end; return y; end
20
Cifsvg: output id value end output id value end
Object_1 attr x: if Controller.TranslateObject_1: Object_1.Xpath else Object_1.x end; Object_1 attr y: if Controller.TranslateObject_1: Object_1.Ypath else Object_1.y end;
Figuur 21: Product aansturing door middel van locatie wijziging van het product
6.3
Uitbreiding met meerdere robots
Het uitbreiden van de visualisatie wanneer het model meerdere robots bevat, komt voornamelijk neer op het uitbreiden van het pad dat het product aflegt. Wederom wordt er onderscheid gemaakt in twee methodes. De visualisatie van de nieuwe robots is identiek aan de originele robot. Deze maakt uiteraard andere bewegingen of op een ander tijdstip dan de originele robot, dus moet er een duidelijk onderscheid zijn tussen beide. Het pad van de robot wordt beschreven per robot. Zie figuur 22, hier is de eerste methode uitgewerkt zodat het product wordt opgepakt door twee robots. De eerste robot pakt het product op de sart positie en legt deze in de gedeelde positie. Vervolgens pakt de tweede robot het product en verplaatst deze naar de eindpositie. output id Object_1 attr transform: value // Rotation if RobotOne.GrabObject[ob1]: (Rotation_1.xx-Object_1.R) elif RobotTwo.GrabObject[ob1]: (Rotation_2.xx-RobotTwo.CommonRotation_r2) else 0.0 end: inmin 0; inmax 6.28; outmin 0; outmax 360; end value // Rotationpoint X if RobotOne.GrabObject[ob1]: 400 elif RobotTwo.GrabObject[ob1]: 1000 else 0 end; value // X-translation if RobotOne.TranslateObject[ob1]: (Translation_1.xx-RobotOne.Current_T)*cos(RobotOne.Calc_R_1) elif RobotTwo.TranslateObject[ob1]: (Translation_2.xx-RobotTwo.Current_T)*cos(RobotTwo.Calc_R_r2) else 0.0 end: inmin -0.4; inmax 0.4; outmin if RobotOne.GrabObject[ob1]: if Object_1.R < Pi: -400 else 400 end elif RobotTwo.GrabObject[ob1]: if RobotTwo.CommonRotation_r2 < Pi: -400 else 400 end else 0 end; outmax if RobotOne.GrabObject[ob1]: if Object_1.R < Pi: 400 else -400 end elif RobotTwo.GrabObject[ob1]: if RobotTwo.CommonRotation_r2 < Pi: 400 else -400 end else 0 end; end value // Y-Translation if RobotOne.TranslateObject[ob1]: (Translation_1.xx-RobotOne.Current_T)*sin(RobotOne.Calc_R_1) elif RobotTwo.TranslateObject[ob1]:(Translation_2.xx-RobotTwo.Current_T)*sin(RobotTwo.Calc_R_r2) else 0.0 end: inmin -0.4; inmax 0.4;
21
outmin if RobotOne.GrabObject[ob1]: if Object_1.R < Pi/2 or Object_1.R > 3*Pi/2: 400 else -400 end elif RobotTwo.GrabObject[ob1]: if RobotTwo.CommonRotation_r2
3*Pi/2:400 else -400 end else 0 end; outmax if RobotOne.GrabObject[ob1]: if Object_1.R < Pi/2 or Object_1.R > 3*Pi/2: -400 else 400 end elif RobotTwo.GrabObject[ob1]: if RobotTwo.CommonRotation_r2 < Pi/2 or RobotTwo.CommonRotation_r2 > 3*Pi/2: -400 else 400 end else 0 end; end pattern "rotate(%s, %s, 552.5), translate(%s,%s)"; end
Figuur 22: Visualisatie van een product gemanipuleerd door twee robots
Het pad van het product bestaat wederom uit het volgen van de rotatie en de translatie van de robot. Omdat het product nu verplaatst wordt door twee robots, moet het product ‘weten’ door welke robot het opgepakt is. Dit wordt in de CIF3 code bepaald. RobotOne en RobotTwo delen een boolean genaamd GrabObject[ob#]. Wanneer deze boolean waar is voor een bepaald product, betekent het dat deze robot het product gepakt heeft. Deze boolean kan maar voor één van de twee robots waar worden. De rotatie en translatie die het pad van het product beschrijft is gelijk aan die van de robots. Voor de rotatie geldt echter dat het rotatie punt van robot één naar robot twee verschuift wanneer de tweede robot het product pakt. Het pad dat het product afgelegd heeft van zijn begin positie naar de gedeelde positie is afhankelijk van de rotaties en translatie die de eerste robot gemaakt heeft rondom zijn middelpunt. Als het product de tweede robot gaat volgen is al deze informatie niet meer beschikbaar. Daarom word na het plaatsen van een product, op de gedeelde positie of de eindpositie, de beginlocatie van het product gewijzigd, zie figuur 23.
type LOCATION
= tuple (real x,y,z);
alg LOCATION Position1 = if RobotOne.ObjectMoved[ob1] and RobotTwo.ObjectMoved[ob1]: (End_Location_X-40,End_Location_Y-40,End_Location_Z) elif RobotOne.ObjectMoved[ob1]: (Common_Position[x]-40,Common_Position[y]-40,Common_Position[z]) else (Object1_X,Object1_Y,Object1_Z) end; Figuur 23: Locatie wijziging van een product
Bijvoorbeeld wanneer het product verplaatst is naar de gedeelde positie wordt de initiële positie van dat product, die op dat moment nog de beginpositie is, gewijzigd wordt naar de gedeelde positie aan de hand van het x- en y-coördinaat. Waarna de rotatie en translaties die dat product heeft ondergaan op nul gezet kunnen worden. Als het product nu door de tweede robot gepakt wordt, kan het pad zonder problemen gekoppeld worden aan de beweging van de robot. Er geldt wanneer beide robots het product verplaatst hebben dat het product op de eindpositie is. Wanneer slechts de eerste robot het product verplaatst heeft is het product op de gedeelde positie. Het is niet mogelijk dat alleen de tweede robot het product verplaatst heeft omdat beide voorwaarden tegelijk gereset worden wanneer het product na de cyclus terug gelegd wordt.
22
Voor de tweede methode wordt dezelfde positie wijziging gebruikt om de positie vast te leggen op de gedeelde of de eindpositie na het verplaatsen. Daarnaast moet het pad van twee robots berekend worden. Zie figuur 24, per robot wordt het kwadrant, de x- en de y-positie berekend. alg int alg int
Q1 = GetKwadrant(Rotation_1.xx); Q2 = GetKwadrant(Rotation_2.xx);
alg real X1path = GetPathX(Translation_1.xx, Rotation_1.xx,400.0, Q1); alg real Y1path = GetPathY(Translation_1.xx, Rotation_1.xx,552.5, Q1); alg real X2path = GetPathX(Translation_2.xx, Rotation_2.xx,1000.0, Q2); alg real Y2path = GetPathY(Translation_2.xx, Rotation_2.xx,552.5, Q2); Figuur 24: Berekening van het pad van het product per robot
Met beide paden bekend moet er in het cifsvg bepaald worden welk pad het product volgt. Dit is afhankelijk van welke robot het betreffende product vast heeft. Dit is een kleine uitbreiding op de originele code, zie figuur 25. output id Object_1 attr x: value if RobotOne.GrabObject[ob1]: elif RobotTwo.GrabObject[ob1]: else Object_1.x end; end output id Object_1 attr y: value if RobotOne.GrabObject[ob1]: elif RobotTwo.GrabObject[ob1]: else Object_1.y end; end
Object_1.X1path Object_1.X2path
Object_1.Y1path Object_1.Y2path
Figuur 25: Pad van het product afhankelijk van de robots
Beide methodes hebben hetzelfde resultaat. Echter is de tweede methode, waarbij het product elke tijdsstap een nieuwe locatie krijgt, velen malen eenvoudiger te implementeren en uit te breiden. Deze methode is dus de beste methode en aan te raden is om met deze methode verder te werken.
23
Hoofdstuk 7. Conclusies en aanbevelingen
7.1
Conclusie
Het doel van het project was het ontwerpen van het model met visualisatie van een pick-and-place robot in CIF3. Dit model bevat de beweging van een robot die gebruik maakt van een derde-orde profiel. Dit profiel is geïmplementeerd en getest voor elk setpoint vanuit elke beschikbare initiële positie. De robot is in staat producten op te pakken vanuit elke positie binnen zijn bereik. Vervolgens verplaatst de robot het product naar de nieuwe toegewezen positie. Met de visualisatie is dit proces duidelijk in beeld gebracht. Hieruit blijkt dat het model en de visualisatie correct werken. Het model van de robot met visualisatie is uitgebreid en in een groter geheel gezet, namelijk in serie met nog eenzelfde robot. Hier ontstaat er een productflow tussen de onderlinge robots door het verplaatsen en doorgeven van de producten.
Figuur 26: Visualisatie van het model met één en met twee robots
De visualisatie geeft een correcte animatie van het model weer. De beweging van de robot(s) en het product zijn essentieel gebleken in deze visualisatie. Het pad van het product wordt eenvoudig gevisualiseerd door de tweede methode waarbij het product elke tijdstap een nieuwe positie toegewezen krijgt. Deze code is eenvoudig uit te breiden naarmate het model groter wordt.
7.2
Aanbevelingen
Indien verder wordt gegaan met dit project is het volgende aan te bevelen: • • •
Eventueel de functie manueel uitbreiden zodat deze producten kan pakken; Een andere oplossing vinden voor de bewegingscontroller, er is wellicht een betere methode om de te maken beweging per robot te definiëren; Bij het creëren van de robot in InkScape alles te tekenen in het nulpunt en deze vervolgens e transleren. Op deze manier is het eenvoudiger om een nieuwe robot toe te voegen in de tekening.
24