Robotarm

Uit FabLab Mariahoeve Wiki
Versie door Peetklasen (overleg | bijdragen) op 8 okt 2022 om 14:12
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
EEZYbotArm Mk2

De EEZYbotARM Mk2 robotarm[bewerken]

Dit project begon als een studiecase naar de praktische toepassing van robots in bijvoorbeeld de zorg. De keuze viel op een zelfbouw robotarm, de fraaie EEZYbotArm Mk2 ontworpen door Carlo Franciscone, met bestanden voor 3D-printbare onderdelen die vrij beschikbaar zijn op Thingiverse (https://www.thingiverse.com/thing:1454048 ). Het diende als een mooi object voor het bestuderen van elementaire robotbesturing. Eerst door de armen handmatig aan te sturen, daarna met behulp van een computer. Hiervoor is gekozen voor een Raspberry Pi, de kleine, veelzijdige singleboard Linux-computer (https://www.hcc.nl/raspberry-pi).

Bestand:Rob2.PNG
Onze robotarm staat 180 graden gedraaid op het voetstuk t.o.v. het oorspronkleijke ontwerp.Hierdoor is de totaal benodigde ruimte kleiner.

De EEzybotArm is redelijk eenvoudig te bouwen. maar de aansturing ervan vereist de nodige aandacht. De armen kunnen vanwege de konstruktie van het frame slechts zo'n 70 à 80 graden op en neer bewegen. De servomotortjes die de armen aansturen mogen daarom maar een deel van de beschikbare 180 graden draaihoek gebruiken, anders raken ze beschadigd. Handmatige aansturing vereist dus oplettendheid! Met een Pololu Maestro-controller (https://www.pololu.com/product/1350/) gaat het al beter, want hiermee kunnen precieze bewegingen worden vastgelegd die eindeloos kunnen worden herhaald. Nog beter is om een computer te gebruiken om de armen simpelweg van en naar bepaalde punten te sturen. Een programma moet dan berekenen hoe de armen te verplaatsen om zo'n punt te bereiken, zonder dat ze buiten hun limiet komen.

Het berekenen van de juiste hoeken van de armen is vaste prik bij robots. De wiskundige procedure hiervoor wordt Inverse Kinematics (IK) genoemd. (zie: https://robodk.com/blog/inverse-kinematics-in-robotics-what-you-need-to-know/ ) Voor geavanceerde robots is voor die IK-berekeningen complexe wiskunde nodig, maar bij de de EEZYbot, die slechts drie 'draaipunten' heeft (3DOF) valt het reuze mee. Daarbij is de IK berekening veel eenvoudiger en een Raspberry Pi kan dat prima aan. Bovendien kan-ie ook de servo's aansturen (met behulp van een I2C servo driver board, zoals de PCA9586, voor het genereren van de benodigde signalen) en hij dient daarnaast ook voor de verdere verwerking van de besturingslogica.

Om dit alles te demonstreren is een boter-kaas-en-eieren programma gemaakt. Hierover later meer.

Wat betreft die berekeningen: de EEZYbotArm is van een specifiek ontwerp, namelijk waarbij alle armbewegingen zich in één (roterend) 2D-vlak bevinden. Dit maakt de inverse kinematicaberekeningen relatief eenvoudig: gewoon toepassen van wat basisgoniometrie voor het bepalen van de hoeken van de armen. De kunst is om niet in een volledig X-Y-Z-systeem te werken met x-, y- en z-coördinaten (die in de praktijk omslachtig te meten zijn), maar gewoon poolcoördinaten te gebruiken voor de doelpositie. Die doelpositie moet dan aangetipt worden door het eindpunt van de tweede arm, de plek waar je iets wil oppakken of neerzetten. (Het horizontale verlengstuk van de arm waar de grijper aanzit wordt in eerste instantie in de berekening verwaarloosd, maar wordt later eenvoudig toegevoegd.)

Er zijn voor het bepalen van de doelpositie 3 parameters nodig: afstand, hoogte en draaiingshoek, maar om de berekeningen te vereenvoudigen wordt de hoek even buiten beschouwing gelaten. Met alleen de afstand en hoogte plus de lengtes van de armen, zijn nu louter met behulp van sinus en cosinus met een paar regels Python programmakode de benodigde hoeken te berekenen. Laat tenslotte, met de armen in de juiste positie, het 2D-vlak rond de verticale as draaien om het doelpunt te bereiken (wat betekent: vertel de basismotor gewoon om naar de gewenste hoek te draaien) en voilá. Natuurlijk is het volledige programma uitgebreider (het houdt rekening met de beperkte reikwijdte van de armen , coördineert de bewegingen, enz.).

Je kunt de robotarm hier in actie zien.