Bouw een grijp-en-plaatsrobot die weet wanneer hij misgreep
Een arm die onderdelen uit een lade oppakt en in twee bakken sorteert, een misgreep detecteert, het opnieuw probeert en vastlegt hoeveel cycli goed gingen.
Wat u bouwt
Een arm die een lade leeghaalt. Onderdelen gaan in één van twee bakken, afhankelijk van iets dat u eraan kunt zien — afmeting, kleur, uit welke houder ze komen — en de machine draait zonder toezicht door tot de lade leeg is of er iets misgaat, waarna hij stopt en aangeeft in welke toestand dat gebeurde.
De robot is niet het interessante deel. Robotarmkits met vier vrijheidsgraden kosten £40 en de kinematica is een pagina met trigonometrie. Het interessante deel is dat een machine voor grijpen en plaatsen met een percentage wordt beoordeeld, en de stap van “het werkte op video” naar “hij deed het vijftig keer achter elkaar” is een ander technisch probleem dan de stap naar “hij beweegt überhaupt”.
Twee dingen brengen u daar, en beide zitten in de grijper.
De twee beslissingen die ertoe doen
1. De vinger mag niet stijf zijn
Dit is het punt waarvan mensen verrast zijn, dus zet het op een rij voordat u iets print.
De knop van uw grijper is een positie — een servohoek. De grenzen van het object zijn krachten: een vloer waaronder het eruit valt en een plafond waarboven het wordt vernietigd. De verhouding daartussen is de serie-stijfheid k van alles tussen het hoornschoen en het object. Het venster waarop u werkelijk moet mikken is dus
window (mm) = ( min(F_crush, F_servo) − F_slip ) / k
Een stijve geprinte vinger heeft ongeveer 25 N/mm. Een hobby-servomotor op een hefboomsarm van 30 mm lost ongeveer 0,524 mm vingerverplaatsing op. Reken het door voor een aardbei en het venster is 0,108 mm — vijf keer fijner dan één stap, dus er bestaat geen werkend commando en afstemming vindt er geen.
| Vinger | k | Venster | Werkende servoposities |
|---|---|---|---|
| Stijf geprint | 25 N/mm | 0,108 mm | 0 |
| Schuimdrukstuk | 4 N/mm | 0,677 mm | 1 |
| Veer in serie | 0,8 N/mm | 3,386 mm | 7 |
| Geprinte flexure | 0,35 N/mm | 7,739 mm | 15 |
Plaats een 40p-rekveer tussen het hoornschoen en de vinger en het probleem verdwijnt. Dimensioneer uw exemplaar in het lab met uw eigen object en uw eigen hefboomsarm voordat u filament gebruikt, en lees kracht, vastlopen en soepelheid bij servogrijpers voor de volledige redenering.
2. Er moet een verificatiestap komen
De cyclus bestaat uit naderen, dalen, grijpen, verifiëren, tillen, overbrengen en plaatsen. Zonder de verificatietoestand is elke mislukking stil: de grijper sluit op niets, de arm vervoert lucht over de tafel en opent boven de bak, en de teller zegt dat het gelukt is.
Een hefboommicroschakelaar aan de binnenkant van één vinger kost vijftig pence en één ingangspin, en is het waardevolste onderdeel van deze build. Lees hem af na 300–400 ms wachttijd — een soepele vinger meetrilt na het sluiten en bemonstering tijdens die rilling is een kwestie van geluk — ontdanker hem over drie opeenvolgende metingen en geef de toestandsmachine een RECOVER-toestand met een begrensd aantal nieuwe pogingen. De tutorial over de toestandsmachine bevat het hele ontwerp.
De build, in volgorde
- Kies de eind-effector. Zijn uw onderdelen vlak en van boven bereikbaar, bekijk dan eerst de prijs van een zuignap en een kleine pomp — die verslaan alles wat u print. Kies anders twee vingers. Grijpertypen en grijpkracht.
- Meet uw object. Massa op een keukenweegschaal, platdrukkraft op dezelfde weegschaal met enkele opofferingsonderdelen en μ met een bagageweegschaal die u over het materiaal van het drukstuk trekt. Deze drie getallen bepalen het ontwerp, en de waarden die u online vindt kloppen niet voor uw onderdeel.
- Controleer krachtafsluiting. Als de vlakken waarop de drukstukken komen sterker taps lopen dan
atan(μ), houdt geen enkele kracht het onderdeel vast en hebt u een V-groef of een ander grippunt nodig. Wrijving en krachtafsluiting. - Dimensioneer de grijper in het lab. Bepaal de hefboomsarm vanaf het breedste object en controleer het venster tegen de servostap. De grippersimulator.
- Print de grijper met een flexure of een veer in serie, TPU-drukstukken, een harde aanslag en een microschakelaar. Servogrijper.
- Bekabel vijf servomotoren goed. PCA9685 via I²C, een aparte spanningsrail voor de servomotoren en ontkoppeling. Doe dit voordat u firmware schrijft, anders besteedt u een dag aan het debuggen van resets die door een spanningsprobleem worden veroorzaakt.
- Schrijf de toestandsmachine, niet-blokkerend, met
VERIFYenRECOVER. Toestandsmachine voor grijpen en plaatsen. - Begrenst de versnelling met een bewegingsprofiel, zodat de gedimensioneerde grijpkracht het overbrengen overleeft.
- Voer vijftig cycli uit en tel.
De meting
Vijftig opeenvolgende cycli zonder toezicht, met een teller en een foutenlog dat bij iedere mislukking de toestand vastlegt. Dat is de oplevering en het is veel veeleisender dan een video.
| Resultaat | Betekenis |
|---|---|
| Boven 95% | U hebt een machine. Ga verder met de stand meten in plaats van die handmatig vast te leggen |
| 80–95% | Meestal de naderingsstand of te weinig stabilisatietijd vóór de verificatie |
| Onder 80% | Meestal voeding of een grip die is gedimensioneerd zonder versnellingsterm |
| Mislukt alleen laat in de reeks | Servomotoren worden warm of drukstukken raken vuil. Beide zijn reëel en beide lijken op spoken |
De tabel met storingen in de tutorial over de toestandsmachine koppelt de meeste symptomen aan oorzaken.
Wat dit project niet is
Het doet geen visuele waarneming en het plant niet om obstakels heen. De lade staat op een bekende plek, de bakken staan op bekende plekken en de arm gaat waar hij heen wordt gestuurd. Dat is bewust — het doel van deze build is dat grijpen een afzonderlijk probleem is dat moeilijker is dan het lijkt, en anders dan positioneren, en dat de twee door elkaar halen de reden is waarom de eerste builds voor grijpen en plaatsen vastlopen.
Wanneer u de arm het onderdeel wilt laten vinden in plaats van te vertellen waar het is, hebt u camerakalibratie en markerstand nodig. Dat komt boven op een werkende grijpcyclus, niet ter vervanging ervan.
Projectroadmap
De bouwroute
Volg de techboom van onderdelen tot een werkende robot. Elk knooppunt wordt ontgrendeld zodra de voorwaarden klaar zijn, en je voortgang wordt op dit apparaat opgeslagen.
0 / 21 klaar
Componenten
- Chassis4-DOF-robotarmkitFrame van acryl of metaal dat van vier servo's een manipulator maakt: basis, schouder, elleboog, grijper.
- ActuatorServogrijperEén servo, twee vingers en het ene getal dat niemand op de productpagina vermeldt.
- ActuatorSG90-servomotorDe servomotor van negen gram achter de meeste robotarmen, grijpers en stuurmechanismen.
- DriverPCA9685-servodriverBestuur 16 servo's via twee I²C-pins—het bord achter de meeste robotarmen en hexapoden.
- ControllerArduino UnoHet vergevingsgezinde 8-bits bord waarmee de meeste mensen robotica leren.
- SensorMicroswitch met hefboomDe enige detectie die een robot vertelt dat hij al ergens tegenaan is gereden.
- VoedingAccu- en voedingspakket voor robotsHet verschil tussen een robot die blijft draaien en een robot die steeds opnieuw opstart.
Tutorials in deze route
- Beginner · 30 minTypen robotgrijpers en hoe je de greepkracht dimensioneertKies het grijpertype en dimensioneer daarna de kracht met de term die iedereen vergeet: de versnelling.
- Gevorderd · 25 minWrijving, krachtsluiting en waarom twee contacten een gok isWaarom het object eruit schiet hoe hard je ook knijpt, en wat de wrijvingskegel werkelijk zegt.
- Gevorderd · 30 minServogrijperkracht, vastlopen en waarom meegevendheid wintDe knop is een positie, de muren zijn krachten, en de stijfheid is de wisselkoers tussen beide.
- Gevorderd · 35 minEen grijp-en-plaats-toestandsmachine die fouten overleeftNaderen, grijpen, verifiëren, tillen, plaatsen—en wat je doet als de verificatie zegt dat het niet zit.
- Expert · 22 min lezenInverse kinematica van een robotarm met twee linksWaarom een arm met twee links twee oplossingen heeft, waar hij wel en niet bij kan, en wat een singulariteit werkelijk is.
- Gevorderd · 18 min lezenServo's aansturen met de PCA9685 (I²C PWM-driver)Stel de frequentie in, zet hoeken om in pulsbreedtes, en bestuur zestien servo's vanaf twee I²C-pinnen — veilig en gekalibreerd.
- Gevorderd · 40 minBewegingsprofielen: trapezium- en S-curveversnellingRam een beweging op in plaats van hem op te leggen—trapeziumprofielen, jerkgrenzen en wat een S-curve je echt kost.
- Beginner · 17 min lezenToestandsmachines voor het gedrag van een robotVervang rommelige robotvoorwaarden door expliciete toestanden, gebeurtenissen, overgangen, timeouts en herstel.
- Beginner · 30 minWaarom je robot reset zodra de motoren startenDe reset die op een codebug lijkt, is vrijwel altijd de batterij. Budgetteer de stroom en meet daarna de spanningsval.
- Beginner · 30 minWaarom delay() robots saboteert: timing met millis()Een robot die in delay() staat is blind. Vervang hem door millis() en krijg de overflowvergelijking goed.
Oefen voordat je bedraadt
Stem het af in de live simulator
De bouwroute loopt via een lab in de browser. Krijg het gedrag hier goed en zet je instellingen daarna over naar de echte robot.
Veelgestelde vragen
Wat is het lastigste onderdeel van een robot voor grijpen en plaatsen?
Niet de arm en niet de kinematica — het feit dat de grijper een positie aanstuurt, terwijl het object om een kracht vraagt. Met stijve, geprinte vingers is het bruikbare venster tussen het laten vallen van een onderdeel en het platdrukken ervan ongeveer een tiende van een millimeter breed, terwijl één stap van een hobby-servomotor de vingers ongeveer een halve millimeter verplaatst. Geen enkel commando valt binnen dat venster. De oplossing is een veer of flexure in serie, waardoor het venster evenredig met 1/k groter wordt. Dit is de beslissing die het hele project kan maken of breken. Dimensioneer de grijper in de grippersimulator voordat u iets print.
Waarom laat mijn robotarm het onderdeel vallen zodra hij beweegt?
Omdat u de greep hebt gedimensioneerd op het gewicht terwijl de beweging meer nodig heeft. De benodigde grijpkracht is m(g + a)·SF/(μ·n), en bij een vlotte robotarm is de versnellingsterm groter dan de zwaartekracht. Een greep die 58 g in rust kan houden met 1,63 N, heeft 1,93 N nodig tijdens een lift van 250 mm in 0,9 s en 2,59 N als u die in 0,35 s uitvoert — hij laat los na ongeveer 40 ms, voordat de arm merkbaar is verplaatst. Daardoor lijkt het alsof de grijper faalt en niet alsof er een rekensom fout is. Begrenst de versnelling met een bewegingsprofiel of grijp krachtiger; meestal is het profiel de goedkopere oplossing.
Hoe weet ik of de grijper echt iets heeft opgepakt?
Gebruik een hefboommicroschakelaar aan de binnenkant van één vinger, aangesloten op een ingangspin met een pull-up. Dat kost ongeveer vijftig pence, één draad en levert een rechtstreeks digitaal antwoord. Plaats hem op het soepele deel van de vinger, zodat hij bij een reproduceerbare kracht schakelt; ontdanker hem in software (drie opeenvolgende metingen, niet één) en lees hem af na 300–400 ms wachttijd, zodat u het meetrillen van de vinger vermijdt. Stroomsensoring werkt ook en signaleert bovendien platdrukken, maar vereist een gekalibreerde drempel en loopt weg naarmate de accu leegloopt.
Heb ik inverse kinematica nodig?
Niet strikt genomen — u kunt standen handmatig aanleren en de gewrichtshoeken opslaan, en voor een vaste lade en twee vaste bakken is dat werkelijk genoeg. U hebt inverse kinematica nodig zodra u in een rechte lijn wilt naderen en terugwijken, want dat zijn Cartesiaanse bewegingen die handmatig aangeleerde gewrichtshoeken niet opleveren. Omdat een onderdeel vanuit een hoek omgooien en optillen langs een curve het meetrekt, willen de meeste builds rechte segmenten, en dat betekent inverse kinematica.
Hoeveel servomotoren en stroom zijn er nodig?
Vijf: basis, schouder, elleboog, pols en grijper. Dat is meer kanalen dan een Uno betrouwbaar zelf mag aansturen, dus gebruik een PCA9685 via I²C. Voeding wordt onderschat — vijf hobby-servomotoren die tegelijk bewegen vragen bij inschakelen meerdere ampères, waardoor de 5 V-regelaar van het bord een brown-out krijgt en de besturingseenheid midden in een greepcyclus reset. Geef de servomotoren een eigen voeding met een gemeenschappelijke massa en plaats enkele honderden microfarad bij het bord.
Wanneer is het klaar?
Vijftig opeenvolgende cycli zonder toezicht, met een teller en een foutenlog. Dat is een veel beter doel dan een video van één geslaagde greep, want het dwingt u de verificatiestap, het begrensde aantal nieuwe pogingen en een voeding te bouwen die niet inzakt — precies de drie dingen die een demo van een machine scheiden. Onder 95% is er altijd één specifieke oorzaak, en het log vertelt u in welke toestand de mislukking optrad.