BouwrouteGevorderdEen weekend

Bouw een 4-DOF-robotarm: PCA9685, servomotoren en kinematica

Een bureaurobotarm die de standen aanneemt die u opgeeft — gestuurd door een PCA9685 en afgesteld met inverse kinematica die u in simulatie begreep vóór u één servo aansloot.

Technisch schema: Bouw een 4-DOF-robotarm: PCA9685, servomotoren en kinematicaREACHABLE WORKSPACE

Een robotarm is het eerste project waarin een robot niet meer rondbeweegt, maar iets met de wereld doet. Een lijnvolger volgt; een robot voor obstakelvermijding wijkt uit; een arm bereikt, positioneert en grijpt. Die overgang van rijden naar manipulatie brengt het ene idee dat aan elke manipulator ten grondslag ligt: kinematica, de geometrie die de hoeken die u kunt instellen verbindt met het punt in de ruimte dat u werkelijk wilt.

Dit bouwpad behandelt de arm precies zo: als een toegankelijke les in kinematica. U begint met begrijpen hoe een arm met twee koppels gewrichtshoeken in een gereedschapsstand en weer terug verandert, verzamelt de onderdelen die een servomotorarm nodig heeft en leert wat elk onderdeel doet. Daarna — voordat u iets koopt of tandwielen uit elkaar haalt — verkent u het bereik, de twee elleboogoplossingen en de onbereikbare standen in de browsersimulator. Pas dan bekabelt u de echte arm, kalibreert u de servomotoren handmatig en voert u de inverse kinematica uit op de hardware.

Volg de technologieboom hieronder van boven naar beneden. Elk knooppunt gaat open zodra de vereisten zijn afgerond en uw voortgang wordt op dit apparaat opgeslagen, zodat u de arm in een weekend kunt bouwen zonder uw plaats kwijt te raken.

Materialenlijst

Onderdeel Aantal Geschatte kosten Opmerkingen
Arduino Uno 1 $5–8 Elk bord voldoet — hier wordt alleen I²C gebruikt
PCA9685, 16-kanaals servodriver 1 $3 Voor vier servomotoren niet strikt vereist, maar wel het juiste hulpmiddel
SG90-servomotor 4 $8 Koop voor de schouder een MG90S — metalen tandwielen, en dit is het gewricht dat kapotgaat
4-DOF-armkit 1 $12–25 Acryl is prima om mee te leren; aluminium buigt veel minder
5–6 V-voeding, ≥3 A 1 $8 Vier servomotoren die tegelijk vastlopen vragen ~2,6 A
Condensator van 1000 µF 1 $1 Over V+, dicht bij de aansluiting
Reserve hoornschoenen 1 set $2 U bevestigt er ooit één verkeerd. Iedereen doet dat

Totaal: ongeveer $40–60.

Twee aanschaffingen verdienen nadenke in plaats van de standaardkeuze. Een MG90S met metalen tandwielen voor de schouder kost een dollar meer en draagt het gewicht van alle andere gewrichten — nylonen tandwielen breken daar door langdurige belasting, niet door een impact. Kies daarnaast een voeding die is gedimensioneerd voor het vastlooppunt, want de kenmerkende storing van een arm is dat bij een botsing met het eigen frame of het vasthouden van een vast voorwerp alle servomotoren tegelijk vastlopen.

Meet de arm voordat u code schrijft

Inverse kinematica is rekenwerk met koppellengtes. Deze vier getallen vormen de volledige invoer, en de meest voorkomende reden dat een arm vol vertrouwen de verkeerde plek bereikt, is dat ze uit een productvermelding in plaats van met een lineaal komen.

Symbool Meten vanaf Tot Typisch
L1 As van het schoudergewricht As van het ellebooggewricht 90–105 mm
L2 As van het ellebooggewricht Het werkelijke grijppunt van de grijper 80–95 mm

Die laatste rij doet meer werk dan hij lijkt. Het werkelijke grijppunt van de grijper verschuift naarmate de vingers sluiten, en het dimensioneren van de grijper zelf is een apart probleem — met eigen wanden, eigen rekenwerk en eigen storingsmodi. Als uw arm het onderdeel bereikt en het vervolgens laat vallen of platdrukt, staat het antwoord niet op deze pagina: begin bij de grippersimulator. | h | Tafeloppervlak | As van het schoudergewricht | 50–70 mm | | d | Draaias van de basis | As van de schouder, horizontaal | 0–15 mm |

Meet tussen de gewrichtsassen, niet tussen de randen van de beugels. De as is het middelpunt van de uitgaande spline van de servomotor en ligt vaak 5–10 mm binnen de zichtbare beugel. Bij een koppeltje van 95 mm is een fout van 10 mm meer dan 10%, waardoor de arm systematisch te kort is op een manier die geen enkele versterking kan corrigeren.

Die twee lengtes geven u direct de werkruimte:

maximum reach = L1 + L2          e.g. 100 + 90 = 190 mm
minimum reach = |L1 - L2|        e.g. |100 - 90| = 10 mm

De werkruimte is een ringvormig gebied, geen schijf. In het midden zit een gat dat de arm fysiek niet kan bereiken. Een doelpunt nabij de basis dat als “onbereikbaar” terugkomt, is dus correct gedrag en geen bug.

Bouw hem in mijlpalen

De montagevolgorde bevat één stap die vrijwel onomkeerbaar is, en dat is stap 2.

# Mijlpaal De test Slagen ziet er zo uit
1 Servodriver reageert Doorzoek de I²C-bus 0x40 verschijnt; V+ heeft een eigen voeding
2 Servomotoren in huis vóór montage Stel elke servomotor in op 90° voordat u een hoornschoen aandrukt Elk hoornschoen zit in de beoogde nulstand
3 Eindstop per servomotor Stap vanaf het midden naar buiten totdat de servomotor zoemt U hebt minimale en maximale tellingen per servomotor, geen bibliotheekstandaardwaarden
4 Gewrichtskaart vastgelegd Stel elk gewricht in over het volledige bereik Verschuiving, teken en mechanische grenzen staan voor alle vier vastgelegd
5 Botsingscontrole Doorloop elk gewricht langzaam over het volledige bereik Niets raakt het frame; de grenzen komen overeen met wat u hebt waargenomen
6 Voorwaartse kinematica Stel bekende hoeken in, bereken de gereedschapsstand en meet die Berekende en gemeten stand wijken slechts enkele millimeters af
7 Heen en terug Voer de berekende stand terug door inverse kinematica De uitgaande hoeken komen overeen met de ingaande hoeken
8 Alle vier kwadranten Vraag doelpunten voor, achter, links en rechts op Alle vier werken — als er twee spiegelen, gebruikt u atan in plaats van atan2
9 Bereikbaarheid Vraag een doelpunt ruim voorbij L1 + L2 Een zuiver “onbereikbaar” — geen NaN en geen ruk
10 Vloeiende beweging Stel een grote beweging in In stappen geïnterpoleerd, alle gewrichten samen, zonder schok
11 Herhaalbaarheid Keer tien keer vanuit verschillende richtingen naar dezelfde stand terug Meet de spreiding van de eindstand — dat getal is de speling

Mijlpaal 2 kan later niet worden hersteld. Een hoornschoen heeft een spline met ongeveer 20 tanden en past daarom alleen in discrete standen die ongeveer 18° uit elkaar liggen. Monteert u eerst en kalibreert u daarna, dan kunt u een gewricht aantreffen waarvan het bruikbare bereik 40° verschoven is zonder mechanische manier om dat te herstellen. Voed elke servomotor, stel 90° in en druk pas daarna het hoornschoen aan.

Beweeg hem altijd voorzichtig

Een servomotor die op een nieuwe hoek wordt ingesteld, gaat daar met volle snelheid naartoe. Bij een arm betekent dat een heftige beweging, een stroompiek over alle vier servomotoren en een mechanische schok door de nylonen tandwielen die het hefboomeffect van de arm zelf versterkt.

// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
  static float cur[3] = {0, 0, 0};
  const float target[3] = {base, shoulder, elbow};

  for (int s = 1; s <= steps; s++) {
    const float t = (float)s / steps;
    for (int j = 0; j < 3; j++) {
      const float a = cur[j] + (target[j] - cur[j]) * t;
      pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
    }
    delay(stepMs);
  }
  memcpy(cur, target, sizeof(cur));
}

Alle gewrichten tegelijk interpoleren is minstens zo belangrijk als de vloei zelf. Als u gewrichten één voor één beweegt, volgt het gereedschap een vreemde boog door de werkruimte — langzamer en veel gevoeliger voor een botsing onderweg.

Zo ziet goed eruit

Meting Acrylkit, SG90-servomotoren Aluminium, MG90S
Herhaalbaarheid, dezelfde naderingsrichting ±3–5 mm ±1–2 mm
Herhaalbaarheid, gemengde naderingsrichtingen ±8–15 mm ±3–5 mm
Bruikbaar draagvermogen bij volle uitstrekking 20–30 g 40–60 g
Doorzakken bij volle uitstrekking, onbelast 3–8 mm 1–3 mm

Het verschil tussen de twee rijen voor herhaalbaarheid is de speling, en dat is de grootste afzonderlijke foutbron bij een hobbyarm. Vier graden speling bij de schouder over een bereik van 190 mm betekent meer dan 13 mm bij de grijper. Het praktische antwoord is niet betere wiskunde — u moet doelpunten altijd vanuit dezelfde richting naderen, waardoor de tekenomkeer volledig verdwijnt en een fout van ±13 mm verandert in een reproduceerbare verschuiving die u kunt kalibreren.

Storingzoeken

Symptoom Waarschijnlijke oorzaak Oplossing
De arm bereikt volledig het verkeerde punt Hoornschoen op een willekeurige hoek bevestigd Stel elke servomotor vooraf in op 90° voordat u hoornschoenen bevestigt
Het bereik van een gewricht is ongeveer 18° verschoven Hoornschoen één spline-tand verkeerd Verwijder en hermonteer — software kan dit niet corrigeren
Bereikt correct aan de voorkant, spiegelt aan de achterkant atan in plaats van atan2 atan2 verwerkt alle vier kwadranten
Inverse kinematica geeft NaN en de arm schiet naar voren Argument van acos buiten −1..1 Controleer bereikbaarheid vóór de trigonometrie
Doelpunten nabij de basis mislukken Binnen het gat voor minimale afstand Correct gedrag — de werkruimte is ringvormig
Het bord reset wanneer de arm beweegt Servostroom via de Arduino Eigen V+-voeding, gemeenschappelijke massa, condensator van 1000 µF
De arm zakt bij volle uitstrekking Schouder verder dan het haalbare draaimoment MG90S op de schouder; compenseer met een rubberband
Zoemen tijdens het vasthouden van een stand Servomotor voert een last uit aan zijn grens Verlaag de last of gebruik detach wanneer vasthouden niet nodig is
Plotselinge snelheid van een gewricht bij volle uitstrekking Bewegen door een singulariteit Houd geplande paden binnen een marge van de grens
Landt verschillend vanuit elke richting Speling Nader altijd vanuit dezelfde richting aan
Alle hoeken zijn systematisch te klein De oscillator van de PCA9685 is niet exact 25 MHz Meet de werkelijke uitvoerfrequentie en roep setOscillatorFrequency aan

Waar u hierna mee kunt beginnen

Voeg een rechte beweging toe. Interpoleren in de gewrichtsruimte, zoals de bovenstaande code doet, laat het gereedschap een kromme volgen. Interpoleren in de Cartesiaanse ruimte — bij elke stap langs een rechte lijn inverse kinematica berekenen — laat het recht bewegen, en dat is wat elk echt grijp- en plaatssysteem nodig heeft. De wijziging is klein en juist hier worden singulariteiten minder theoretisch: een recht pad door de buurt van volledige uitstrekking vraagt om enorme snelheden van de gewrichten.

Voeg een camera toe en sluit de regelkring. Alles hier is een open regelkring: de arm gaat waar hem wordt gezegd en controleert niets. Een camera die een ArUco-marker op het object leest, kan de arm de fout laten corrigeren die speling en doorzakken achterlaten — zo wordt een goedkope arm nauwkeurig.

Ga een niveau omhoog zodra u de grens bereikt. Aluminiumen koppels nemen het meeste doorzakken weg, MG90S-servomotoren nemen het meeste speling weg en een arm met 6-DOF voegt een pols toe, zodat u de naderingshoek van het gereedschap zelf kunt kiezen. Niets daarvan verandert de wiskunde: de oplosser voor twee koppels die u hier hebt geschreven is dezelfde als die van een betere arm, en juist daarom was het bouwen op het eenvoudige frame de moeite waard.

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 / 13 klaar

100%
Bouw

Bekabel de arm

40 min

Bouw

Kalibreer de homepositie en de grenzen van de servomotoren

30 min

Bouw

Voer inverse kinematica uit op de hardware

45 min

Doel

Robotarm met 4-DOF gereed

U hebt hem gebouwd

Componenten

Tutorials in deze route

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

Hoe maakt u een robotarm met Arduino?

Monteer vier servomotoren in een frame met 4-DOF—basis, schouder, elleboog en grijper—en bestuur ze met een PCA9685 via I²C, zodat de Arduino niet uit PWM-pinnen raakt. Kalibreer voor elke servomotor het bereik tussen hoek en puls en geef doelpunten aan een inverse-kinematica-oplosser voor twee koppels die de hoeken voor schouder en elleboog teruggeeft. Dit bouwpad volgt die hele keten, en u stemt de geometrie in een simulator af voordat u iets aansluit.

Hoeveel servomotoren heeft een robotarm met 4-DOF nodig?

Vier—één per vrijheidsgraad: een draaibare basis, een schouder, een elleboog en een grijper. Elke servomotor heeft een eigen PWM-kanaal nodig, en juist daarom gebruikt een robotarm met meerdere gewrichten een PCA9685-driver in plaats van de beperkte hardware-PWM-pinnen van de Arduino.

Heb ik een PCA9685 nodig voor een robotarm?

Het is het juiste hulpmiddel, maar strikt genomen niet verplicht. Vier servomotoren kunnen op een Arduino draaien als u ze afzonderlijk voedt, maar de PCA9685 ontlast de timers van de microcontroller, bestuurt elk gewricht via twee I²C-pinnen en voert de servostroom via een eigen V+-voeding—zo blijft de hoge stroom bij de logica vandaan en krijgt het bord geen brown-out.

Moet ik onderdelen kopen voordat ik aan dit project begin?

Nee. De kinematica en het bepalen van standen draaien in de browsersimulator, zodat u het bereik van de arm, de twee oplossingen en de onbereikbare standen kunt begrijpen en verkennen voordat u iets koopt. Alleen de laatste stappen—bekabelen, kalibreren en inverse kinematica uitvoeren—vereisen de fysieke Arduino, PCA9685, servomotoren, armframe en voeding.

Hoe wordt inverse kinematica bij een robotarm gebruikt?

Voorwaartse kinematica vertelt waar het gereedschap terechtkomt bij gegeven gewrichtshoeken; inverse kinematica doet de nuttige omgekeerde bewerking—bij een gegeven doelpunt retourneert het de gewrichtshoeken waarmee u dat bereikt. Bij deze arm vormen schouder en elleboog een planaire oplosser voor twee koppels, richt de basis dat vlak en verzorgt de grijper het oppakken. In de simulator kunt u de oplosser zien werken, inclusief waar een doelpunt buiten bereik ligt.