Robotarmkinematica: van servo-PWM naar inverse kinematica
Je kunt een servoarm een gekozen punt laten bereiken, met begrip van voorwaartse en inverse kinematica, het werkgebied en singulariteiten — voordat je hardware aanraakt.
Robotarmkinematica is de geometrie die twee dingen verbindt die een manipulator moet verenigen: de gewrichtshoeken die hij daadwerkelijk kan aansturen en de gereedschapspositie die je in de wereld wilt. Eén kant op — van hoeken naar positie — is voorwaartse kinematica, en die is makkelijk. De andere kant op — van positie naar hoeken — is inverse kinematica, en daar leven de interessante problemen: twee oplossingen, randen die je niet kunt bereiken, en poses waarin de arm even de controle over een richting kwijt is.
Dit leertraject bouwt dat inzicht vanaf de grond op. Je begint met de hardware — een servo via een PCA9685-driver naar een aangestuurde hoek laten bewegen, inclusief kalibratie. Daarna leer je de geometrie: hoe de hoeken van een tweeledige arm het gereedschap plaatsen, en hoe je dat omdraait om een doel te bereiken. Tot slot verken je het live in de simulator: sleep een doel en zie de oplosser gewrichtshoeken kiezen, de grens van het werkgebied raken en het onbereikbare aanwijzen.
Volg de knopen één voor één — elke knop ontgrendelt de volgende zodra je hem hebt gedaan, en je voortgang wordt op dit apparaat opgeslagen. Ben je klaar om het echt te bouwen, dan sluit dit leertraject direct aan op het 4-DOF-robotarmproject.
Voordat je begint
Je hebt trigonometrie nodig — specifiek sin, cos en atan2 — en genoeg programmeerkennis om een functie te
schrijven die twee waarden teruggeeft. Ervaring met servo’s helpt, maar dit leertraject dekt het. Niets hier
vereist de fysieke arm; de hele geometrie kun je in de simulator leren.
Wat je hierna kunt
- Berekenen waar het gereedschap van een tweeledige arm staat op basis van de gewrichtshoeken, en dat omdraaien om de hoeken te vinden die een bepaald punt bereiken.
- Bewust kiezen tussen de twee oplossingen — elleboog omhoog en elleboog omlaag — in plaats van degene te nemen die de wiskunde teruggaf.
- De grens van het bereikbare werkgebied voorspellen en een doel erbuiten detecteren voordat de arm probeert te bewegen.
- Een singulariteit herkennen wanneer de arm volledig gestrekt komt, waar een kleine verandering van gereedschapspositie om een enorme verandering van gewrichtshoek vraagt.
- De speling in je eigen gewrichten meten, en zeggen hoeveel van de fout bij de grijper door het mechanisme komt in plaats van door de wiskunde.
Waar mensen vastlopen
atan in plaats van atan2. Gewone atan kan niet bepalen in welk kwadrant het doel ligt, dus
doelen vóór de arm bereikt hij correct en die erachter spiegelt hij. atan2 neemt de twee componenten
apart en heeft alle vier de kwadranten goed.
Een domeinfout bij acos. Als het doel verder weg ligt dan de schakels kunnen reiken, levert de
cosinusregel een argument buiten −1 tot 1 op en geeft acos NaN terug. Die NaN stroomt als een waardeloze hoekwaarde de
servo-opdracht in. Controleer de bereikbaarheid vóór de trigonometrie, niet erna.
Gewrichtshoek verwarren met servo-hoek. Het nulpunt van een servo is waar zijn hoorn gemonteerd was, en die kan tegen je eigen tekenrichting in draaien, dus elk gewricht heeft een kalibratieoffset nodig en misschien ook een tekenomkering. Sla je dit over, dan krijg je een arm die soepel beweegt en toch ver van het doel belandt.
Zwaartekracht bij strekking negeren. De geometrie neemt aan dat de arm doet wat hem wordt gezegd. Een hobby-servo die een volledig gestrekte schakel vasthoudt heeft zijn slechtste mechanische hefboom, en de werkelijke positie zakt onder de opgedragen hoek — het duidelijkst aan de verre rand van het werkgebied.
Een mechanische fout afstellen. Bereikt de arm hetzelfde punt op verschillende manieren, afhankelijk van de kant waarvandaan hij kwam, dan lost geen enkele afstelling dat op: dat is speling in de tandwielkast, vermenigvuldigd met de hele armlengte. Vier graden in een schouder die een 150 mm-schakel aandrijft is meer dan 10 mm bij de grijper.
Door een singulariteit heen sturen. Vlak bij volledige strekking wordt de inverse oplossing slecht geconditioneerd, en een soepel gereedschapspad verandert in een heftige gewrichtsbeweging. Houd paden binnen een marge van de grens in plaats van er tegenaan te zitten.
Wat je nodig hebt
| Wat | Waarom dit leertraject het nodig heeft | Opmerkingen |
|---|---|---|
sin, cos en atan2 |
De volledige wiskundige gereedschapskist | Als je weet waarvoor atan2 dient, kun je beginnen |
| Een functie die twee waarden teruggeeft | IK geeft een paar hoeken terug, en vaak twee paren | Een tuple, een struct, een uit-parameter — maakt niet uit |
| Een hoekmeter en een liniaal | Vergelijken waar de arm naartoe ging met waar hij naartoe gestuurd werd | De enige eerlijke test van een kinematica-implementatie |
| Een arm en een PCA9685 (optioneel) | De hardwarehelft | De geometrie is volledig in de simulator te leren |
Waarom dit leertraject in deze volgorde loopt
Servo’s aansturen komt vóór de geometrie, en het is niet vanzelfsprekend dat het zo hoort. De reden is kalibratie. Zodra je een gewricht kunt aansturen en ziet waar het werkelijk belandt, heb je een manier om elk later resultaat tegen de werkelijkheid te toetsen. Leer je de geometrie eerst, dan heb je geen manier om een verkeerde oplosser te onderscheiden van een verkeerd gemonteerde servohoorn — twee heel verschillende fouten die vanuit de andere kant van de zaal identiek lijken.
Armtypes volgen omdat ze uitleggen wat een “schakel” is. Cartesische, SCARA- en delta-arms lossen hetzelfde probleem op met volstrekt verschillende geometrie, en er drie van zien maakt duidelijk dat kinematica over de plaatsing van gewrichten gaat en niet over een bepaalde arm. Ze vertellen je ook waarom de IK van een SCARA vrijwel triviaal is en die van een delta niet.
Inverse kinematica komt op de derde plek, als beide vereisten in orde zijn. Ze is het hart van het leertraject, en het is de enige knop waar je echt tijd aan wiskunde besteedt.
De simulator komt als vierde omdat die het onzichtbare zichtbaar maakt. Bereikbaarheid, de twee elleboogtakken en singulariteiten zijn allemaal dingen die je op papier kunt bewijzen en pas echt begrijpt nadat je een doel naar de rand van het werkgebied hebt gesleept en het gedrag van de oplosser hebt zien veranderen. Slepen is ook de snelste manier om de vorm van een werkgebied te vinden, en dat is een ringvormig gebied in plaats van een schijf zodra de schakels ongelijk zijn.
Speling sluit het leertraject bewust af. Dit is het punt waarop je niet langer de nauwkeurigheid van de arm met betere wiskunde kunt verbeteren. Elke knop ervoor gaat over het berekenen van de juiste hoek; deze gaat over de millimeters tussen de juiste hoek en de juiste positie.
Mijlpalen: hoe je ziet dat een stap is gelukt
| Stap | De check | Een succes ziet er zo uit |
|---|---|---|
| Servo’s aansturen | Stuur 0°, 90° en 180° aan op elk gewricht | De hoorn belandt waar je hem aanstuurde, en je hebt de offset en het teken per gewricht opgeschreven |
| PWM-kalibratie | Zoek de pulsbreedtes voor de echte eindpunten van elke servo | Je minimale en maximale tellingen zijn per servo, niet de standaard van de bibliotheek, en er zoemt niets op de grenzen |
| Voorwaartse kinematica | Stel bekende hoeken in, bereken de gereedschapspositie en meet die | Berekende en gemeten waarde komen binnen enkele millimeters overeen |
| Heen en terug | Voer een berekende positie terug door IK | De hoeken die eruit komen zijn dezelfde als die je erin hebt gestopt |
| Kwadranten | Vraag doelen in alle vier de kwadranten op | Alle vier werken — als er twee spiegelen, gebruik je atan |
| Bereikbaarheid | Vraag een doel ruim voorbij het bereik van de arm op | Je krijgt een zuiver “onbereikbaar”, geen NaN en geen rukbeweging |
| Vorm van het werkgebied | Breng in de simulator de bereikbare grens in kaart | Je kunt hem beschrijven en uitleggen waarom ongelijke schakels een ring met een gat geven |
| Elleboogtakken | Bereik hetzelfde punt op beide manieren | Allebei werken, je hebt bewust één gekozen en je kunt zeggen waarom |
| Singulariteit | Stuur een recht gereedschapspad door bijna volledige strekking | Je hebt de piek in de gewrichtssnelheid gezien en je plant nu een marge |
| Speling | Nader hetzelfde punt vanuit elke richting en meet | Je hebt een getal in millimeters bij de grijper — en dat is niet nul |
Waar dit leertraject ophoudt
Dit leertraject behandelt de vlakke tweeledige oplossing in gesloten vorm — de geometrie achter schouder en elleboog van vrijwel elke hobbyarm. Dat is het juiste om als eerste te leren, omdat je het kunt afleiden, controleren en precies kunt zien waarom elke fout optreedt.
Het stopt vóór verschillende dingen die je hierna tegenkomt. Algemene n-DOF-kinematica gebruikt Denavit–Hartenberg-parameters en homogene transformatiematrices om elke keten van gewrichten systematisch te beschrijven, in plaats van de geometrie van elke arm met de hand op te lossen. Numerieke IK — iteratie op basis van de Jacobian — gebruik je wanneer er geen oplossing in gesloten vorm bestaat, wat de normale situatie is vanaf vier of vijf gewrichten; die degradeert ook netjes bij singulariteiten waar een oplossing in gesloten vorm het gewoon aflaat.
Oplossen van redundantie is de vraag wat je moet doen wanneer een arm meer gewrichten heeft dan de taak begrenst en er dus oneindig veel geldige oplossingen zijn — een werkelijk interessant probleem waar dit leertraject nooit mee te maken heeft, omdat een tweeledige arm er precies twee heeft.
En dynamica is de hele andere helft van manipulatie: kinematica zegt niets over krachten, traagheid of hoe snel een gewricht kan bewegen zonder door te schieten. Alles hier gaat ervan uit dat de arm doet wat hem wordt gezegd, langzaam genoeg om die aanname te laten kloppen.
Leerroute
De route
Volg de knooppunten op volgorde – elk ontgrendelt het volgende zodra je het hebt afgerond. Je voortgang wordt op dit apparaat opgeslagen.
0 / 5 klaar
Veelgestelde vragen
Veelgestelde vragen
Wat is het verschil tussen voorwaartse en inverse kinematica?
Voorwaartse kinematica beantwoordt de vraag “gegeven deze gewrichtshoeken, waar is het gereedschap?”. Dat is een directe berekening, ze heeft altijd precies één antwoord en ze is werkelijk eenvoudig. Inverse kinematica beantwoordt de nuttige vraag — “om het gereedschap hier te krijgen, welke hoeken heb ik nodig?” — en is op elke manier moeilijker. Ze kan twee antwoorden hebben, of helemaal geen als het doel buiten bereik ligt, of oneindig veel als de arm meer gewrichten heeft dan de taak begrenst. Elk interessant probleem in armregeling ligt aan de inverse kant.
Waarom bereikt mijn robotarm doelen achter de arm de verkeerde kant op?
Je gebruikt vrijwel zeker atan in plaats van atan2. Gewone atan neemt één verhouding en kan een doel vóór de arm niet onderscheiden van zijn spiegelbeeld erachter, want beide leveren hetzelfde quotiënt — dus de arm bereikt in twee kwadranten correct en spiegelt in de andere twee. Atan2 neemt de twee componenten apart en lost alle vier de kwadranten op. Dit is de meest voorkomende bug in een eerste IK-implementatie, en zij presenteert zich als een arm die prima werkt totdat je iets achter de arm opvraagt.
Wat is elleboog omhoog tegenover elleboog omlaag bij inverse kinematica?
Bij een tweeledige arm zijn vrijwel alle bereikbare punten op twee verschillende manieren te bereiken — met de elleboog omhoog of omlaag gebogen — en de wiskunde geeft allebei terug, want beide zijn correct. Welke je wilt hangt af van de omgeving van de arm: de ene kan tegen de tafel botsen, of tegen het werkstuk, of de kabel verdraaien. Het belangrijke is dat je bewust en consequent kiest, want stilzwijgend wisselen van tak midden in een pad laat de arm door een grote, snelle, ongeplande beweging slingeren.
Waarom geeft mijn IK-code NaN terug?
Omdat het doel verder weg ligt dan de schakels kunnen reiken en de cosinusregel een argument opleverde buiten het bereik −1 tot 1 dat acos accepteert. De NaN stroomt dan rechtstreeks als een waardeloze hoekwaarde de servo-opdracht in, en daarom levert een onbereikbaar doel zo vaak een heftige beweging op in plaats van een weigering om te bewegen. Test de bereikbaarheid vóór de trigonometrie — vergelijk de afstand tot het doel met de som en het verschil van de schakellengtes — en geef “onbereikbaar” als een echt resultaat terug in plaats van het over te laten aan acos.
Wat is een singulariteit bij een robotarm?
Een configuratie waarin de arm even het vermogen verliest om het gereedschap in een bepaalde richting te bewegen, hoe de gewrichten ook bewegen. Bij een tweeledige arm is de voor de hand liggende volledige strekking: met de arm recht vooruit is het onmogelijk het gereedschap verder weg te bewegen, en het een stukje in die richting bewegen vraagt om een enorme verandering van gewrichtshoek. Het praktische gevolg is dat een soepel gereedschapspad vlak bij volledige strekking verandert in een heftige gewrichtsbeweging. Houd geplande paden binnen een marge van de grens van het werkgebied in plaats van er tegenaan te zitten.
Waarom belandt mijn arm niet waar de wiskunde zegt dat hij zou moeten belanden?
Drie oorzaken, in ruwe volgorde van waarschijnlijkheid. Kalibratie: het nulpunt van een servo is waar zijn hoorn toevallig gemonteerd was, en die kan tegen je eigen tekenrichting in draaien, dus elk gewricht heeft een offset nodig en misschien ook een tekenomkering. Zwaartekracht: een hobby-servo die een volledig gestrekte schakel vasthoudt heeft zijn slechtste mechanische hefboom en zakt simpelweg onder de opgedragen hoek. En speling: vier graden speling in een schouder die een 150 mm-schakel aandrijft is meer dan 10 mm fout aan de grijper, en het teken wisselt met de richting van waaruit je naderde.