Günstiger und voll funktionsfähiger DIY Roboterarm

Lassen Sie uns gleich reservieren, dass wir es nicht sehr billig machen, weil Ich möchte keine Nervenzellen abtöten, indem ich selbst entwickelte Encoder für Motoren herstelle. + Ich möchte die Erstellung eines 3D-Modells vereinfachen, das für die Steuerung über ROS benötigt wird (Link zum fertigen Modell - siehe unten im Artikel).



Zum Zeitpunkt dieses Schreibens betragen die geschätzten Endkosten des Produkts ~ 70.000 Rubel. Wenn Sie einen 3D-Drucker haben, können Sie sicher 20.000 Rubel davon abziehen. Wenn es keinen Drucker gibt, ist sein Aussehen ein angenehmer Bonus. Ich werde alle Ausgaben unter der Annahme beschreiben, dass wir nur Geld haben.



Wie das Ergebnis aussieht:







Es sollte auch beachtet werden, dass wir zum Programmieren der Hand einen Computer mit installiertem Linux-Betriebssystem (ich verwende Ubuntu 18.04) und dem ROS- Framework (ich verwende Melodic) benötigen .



Es kann sich die Frage stellen, warum 70.000 Rubel billig sind.



Ich antworte.Anfangs wollte ich mich nicht mit der Herstellung eines Roboterarms beschäftigen und dachte daran, nur etwas Einfaches zu kaufen, das aber funktionell genug ist, um zusammengebaut zu werden.



Was waren die Kriterien für die Funktionalität und die für mich minimal akzeptable Einfachheit (d. H. Warum Manipulatoren von aliexpress NICHT geeignet sind) kann in den Kommentaren diskutiert werden, um diejenigen, die offensichtlich und / oder nicht interessiert sind, nicht zu belasten.



Wettbewerbsfähige Lösungen auf dem Markt



Ich werde jedoch kurz Beispiele für das beschreiben, was ich auf dem Markt in Betracht gezogen habe:



1) top3dshop.ru/robots/manipulators/dobot-magician-basic.html

176.000 Rubel. Sie können DOBOT nicht nur in diesem Geschäft kaufen, sondern es kostet normalerweise sogar noch mehr. Sicher gibt es eine Chance, es irgendwo billiger zu finden, aber es wird immer noch viel teurer als 70.000 Rubel.



2) robotbaza.ru/product/robot-manipulyator-widowx-robotic-arm-mark-ii

280.000 Rubel. Noch teurer. Im Allgemeinen kosten Manipulatoren von TossenRobotics direkt vom Hersteller überaus vernünftiges Geld. Aber die Lieferung nach Russland (und ich war hier) aus dem Laden kann nicht bestellt werden.



Ich werde sagen, dass wir eine Kopie des PhantomX Pincher Robot Arm Kits Mark II erstellen werden, das von TossenRobotics hergestellt wird.



Insgesamt sehen wir, dass 70.000 Rubel gar nicht so teuer sind.



Was müssen wir kaufen?



Ich zitiere alle Preise zum Zeitpunkt dieses Schreibens (Juli 2020):



1) 6 DYNAMIXEL AX-12A-Motoren, die







ich zu einem Preis von 7200 Rubel pro 1 Stück gekauft habe, aber es scheint, dass Sie sie für 6000 finden können, wenn Sie wirklich wollen. Nehmen wir an, Sie haben Pech und kaufen auch für 7200.

Gesamtkosten: 43.200 Rubel



2) 3D-Drucker



Jeder einfache, den Sie tun können, können Sie innerhalb von 20.000 Rubel halten.



3) Arduino Uno + Power Shield











Kosten: ~ 4.000 Rubel



4) Optional (aber ich kann es nur empfehlen): Laborstromversorgung







Kosten: ~ 3.500 Rubel



Versammlung



Ausgezeichnet! Wir haben alles gekauft, was wir brauchten (wahrscheinlich das längste Warten auf die Lieferung der Motoren, sie wurden mehr als einen Monat zu mir transportiert).



Was weiter?



1) Drucken wir Teile für den Manipulator auf einem 3D-Drucker.



Laden Sie STL-Dateien von hier herunter.



2) Zusammenstellen mit Motoren. Es sollte keine Probleme mit der Baugruppe geben, aber wenn sie plötzlich auftreten, können Sie diese Anweisung verwenden.



Erstellen eines 3D-Modells



Klasse! Wir haben eine Hand, aber sie muss irgendwie kontrolliert werden. Ich möchte das Beste aus den Errungenschaften der Menschheit machen, also installieren wir ROS für uns .



Um mit dem Manipulator in ROS vollständig arbeiten zu können, müssen Sie ihn zu einem URDF- Modell machen. Wir werden es brauchen, um den Roboterarm mit dem MoveIT- Paket zu steuern !

Zum Zeitpunkt dieses Schreibens ist der neueste stabile Build für Melodic / Ubuntu 18.04 verfügbar, was meine Wahl der System- und Framework-Version am Anfang des Artikels erklärt.



Das Erstellen eines URDF-Modells ist ein ziemlich mühsamer (und meiner Meinung nach langweiligster) Teil dieses Projekts. Es ist notwendig, ein wenig mit einer stl-Datei der Komponentenmodelle fertig zu stellen und sie in einer XML-förmigen Datei miteinander zu verbinden, wobei manuell die richtigen Verschiebungskoeffizienten der Teile relativ zueinander ausgewählt werden.



Jeder, der möchte, kann die Arbeit selbst erledigen. Ich werde die Nerven aller anderen retten und einfach einen Link zu meiner fertigen Datei geben:



github.com/vladmiron85/armbot/blob/master/catkin_ws/src/armbot_description/urdf/base.urdf



Dieses Modell ist noch nicht aufregend Geräte, um Objekte in der realen Welt zu erfassen, sind wir jedoch noch weit weg. Für andere Aufgaben ist dieses Modell mehr als genug.



Das Modell sieht folgendermaßen aus:





Aus der resultierenden URDF-Datei erstellen wir die MoveIT! -Konfiguration, mit der wir die Bewegungen des Manipulators simulieren und Steuerbefehle an einen echten Roboterarm senden können.



Es gibt ein hervorragendes Tutorial zum Erstellen einer Konfiguration ( Link ).



Hier kann ich wieder Zeit sparen und meine Konfiguration bereitstellen. Es liegt hier:



github.com/vladmiron85/armbot/tree/master/catkin_ws/src/armbot_moveit_config



Sie können die Konfiguration vom Github herunterladen und mit dem folgenden Befehl ausführen:



roslaunch armbot_moveit_config demo.launch


So etwas wird es möglich sein, unsere echte Robo-Hand über rviz zu steuern, wenn wir sie mit ROS verbinden:





Was ist mit der echten Hand?



Wechseln wir von der Welt der 3D-Modelle zur harten Realität. Wir haben einen zuvor zusammengebauten Manipulator. Ich würde ihn gerne irgendwie bewegen. Machen wir das mit dem Arduino UNO und Power Shield.



Verbinden







wir den ersten Motor des Manipulators (siehe unten) wie folgt mit dem Power Shield und dem Netzteil: Ja, wir verbinden den Daten-Pin des Motors direkt mit den 3 und 4 Pins des Arduino. Ein neugieriger Leser des Dynamixel-Handbuchs ( hier ist er ) wird sofort bemerken, dass die Kommunikation mit der Außenwelt am Motor gemäß der asynchronen seriellen Halbduplex-Kommunikation organisiert ist, was bedeutet, dass der Daten-Pin sofort zum Empfangen von Befehlen und zum Antworten verwendet wird.



Standardmäßig kann der Arduino auf Hardwareebene nur mit Vollduplex-UART arbeiten. Dieses Problem kann mithilfe der Soft Serial-Bibliothek umgangen werden, was wir tun werden. Die Verwendung des Halbduplex-Modus erklärt die gleichzeitige Verbindung des Datenpins des Motors mit den 3 und 4 Pins der Abschirmung.



Neben der Halbduplex-Kommunikation weist die Arbeit mit Dynamixel über Arduino einige interessante Punkte auf, die von Anfang an möglicherweise nicht ganz offensichtlich sind. Lassen Sie uns sie alle zusammenbringen.



Wie bewege ich unseren Manipulator?



1) Laden Sie zunächst die erforderliche Bibliothek herunter. Es heißt ardyno und kann über den Arduino Library Manager oder hier ( Link ) bezogen werden.



2) Standardmäßig möchte Dynamixel AX-12A mit einer Baudrate von 1000000 arbeiten. Die serielle Software-Schnittstelle unterstützt diese Geschwindigkeit jedoch nicht, daher sollte die Baudrate auf 57600 reduziert werden. Der Anfang der Datei mit Ihrem Programm sieht also ungefähr so ​​aus:



#include "DynamixelMotor.h"

// communication baudrate
const long unsigned int baudrate = 57600;

SoftwareDynamixelInterface interface(3, 4);


3) Alle unsere Motoren sind in Reihe geschaltet. Um jeden von ihnen anzusprechen, müssen Sie seine ID kennen? Dies ist in der Tat der Fall, das DynamixelMotor-Objekt empfängt während der Initialisierung zwei Parameter: Schnittstelle (für alle gleich, wir haben sie im vorherigen Absatz festgelegt) und ID (jeder muss anders sein, sonst ist das Verhalten des Manipulators sehr seltsam)



DynamixelMotor motor(interface, id);


Die ID für jeden Motor muss manuell eingestellt werden. Es scheint, dass sie, wenn sie in Reihe geschaltet sind, sich selbst mit Zahlen von 1 bis 6 hätten berechnen können, aber dies ist nicht vorgesehen. Daher müssen Sie jeden Motor separat an das Arduino anschließen (vom Rest trennen) und das folgende Programm ausführen:



#include "DynamixelMotor.h"

// communication baudrate
const long unsigned int baudrate = 57600;

// id of the motor
const uint8_t id=1;

SoftwareDynamixelInterface interface(3, 4);

DynamixelMotor motor(interface, id);

void setup()
{
  interface.begin(baudrate);
  delay(100);
 
  // check if we can communicate with the motor
  // if not, we turn the led on and stop here
  uint8_t status=motor.init();
  if(status!=DYN_STATUS_OK)
  {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    while(1);
  }

  motor.changeId(NEW_ID);
}

void loop()
{}


Anfangs haben alle Motoren id = 1, weshalb wir oben angeben



const uint8_t id=1;


NEW_ID für jeden Motor muss durch eine Zahl von 1 bis 6 ersetzt werden (ja, ok, Sie müssen den ersten Motor nicht berühren). Wir nummerieren sie in der Reihenfolge von unten nach oben.



Hurra! Wir haben einen vollwertigen Manipulator, den wir bewegen können, und wir haben auch ein 3D-Modell dafür. Sie können ROS nehmen und alle coolen Sachen programmieren. Dies ist jedoch bereits eine Geschichte für einen separaten Artikel (und nicht für einen). Diese Geschichte ist zu Ende gegangen, danke für Ihre Aufmerksamkeit!



All Articles