Inhaltsverzeichnis:

Haptischer Zeichenroboter - Gunook
Haptischer Zeichenroboter - Gunook

Video: Haptischer Zeichenroboter - Gunook

Video: Haptischer Zeichenroboter - Gunook
Video: Haptically enabled robot - HTBLuVA Salzburg 2024, Juli
Anonim

Im Rahmen meines Masterabschlusses an der dep. Industrial Design an der Universität Eindhoven erstellte ich ein haptisches Zeichengerät, mit dem ein halbautonomes Auto durch den Verkehr navigiert werden kann. Die Schnittstelle heißt Scribble und ermöglicht dem Benutzer, haptische Vorrichtungen in einem 2D-Raum durch eine variable Kraft und Position zu erleben. Obwohl das Konzept nicht das ist, worum es in diesem instructable geht, können Sie hier mehr über Scribble lesen:

Scribble verwendet eine 5-Stangen-Gestängekonfiguration, die es ermöglicht, zwei seitliche Freiheitsgrade (DoF) zu bewegen. Dieses Setup ist bei Prototypen sehr beliebt, um Zeichenroboter zu erstellen, hier sind einige Beispiele:

www.projehocam.com/arduino-saati-yazan-kol-…

blogs.sap.com/2015/09/17/plot-clock-weathe…

www.heise.de/make/meldung/Sanduhr-2-0-als-Bausatz-im-heise-shop-erhaeltlich-3744205.html

Mechanisch sind diese Roboter einfach herzustellen. Sie benötigen nur Grundgelenke und verfügen über zwei Aktuatoren, die einige flüssige Bewegungen erzeugen können. Diese Struktur ist ideal für Designer, die daran interessiert sind, bewegliche Strukturen zu erstellen. Da ich jedoch kein Maschinenbauingenieur bin, fand ich es ziemlich schwierig, die Kinematik in Code zu übersetzen. Daher werde ich grundlegenden Arduino-Code bereitstellen, der die Vorwärts- und die inverse Kinematik ermittelt, damit Sie dies problemlos in Ihren zukünftigen Designs verwenden können!;-)

Bitte laden Sie den untenstehenden Code herunter!

* BEARBEITEN: Für ein ähnliches Projekt schaue auf https://haply.co *

Schritt 1: Aufbau der Struktur

Aufbau der Struktur
Aufbau der Struktur

Je nach Verwendungszweck sollten Sie zunächst eine 5-Linkage-Struktur entwerfen. Denken Sie an die Maße, die Aktuatoren, die Sie verwenden möchten, und wie Sie die Gelenke für reibungslose Bewegungen anbringen.

Für meinen Prototyp führe ich meinen Code auf einem Arduino DUE aus, der von einem Programm auf meinem Mac, das in Open Frameworks erstellt wurde, über seriell gesteuert wird. Das Programm verwendet eine UDP-Verbindung, um mit einem auf Unity 3D basierenden Fahrsimulator zu kommunizieren.

Der Scribble-Prototyp verwendet 5 mm Lager und besteht aus 5 mm lasergeschnittenem Acryl. Die Aktuatoren sind die Haptic Engines von Frank van Valeknhoef, die eine Betätigung, das Auslesen der Position und die Ausgabe einer variablen Kraft ermöglichen. Dies machte sie ideal für die gewünschten haptischen Eigenschaften von Scribble. Mehr zu seinen Aktuatoren finden Sie hier:

Schritt 2: Kennen Sie Ihre Hardwarewerte

Kennen Sie Ihre Hardwarewerte
Kennen Sie Ihre Hardwarewerte

Die Vorwärtskinematik basiert auf der Plot Clock Wetterstation von SAP:

Wie in ihrer Konfiguration gezeigt, ist der Arm verlängert, um einen Marker zum Zeichnen zu halten. Dies wurde entfernt, da es für den Scribble-Prototyp keinen Zweck erfüllte. Überprüfen Sie den Code, wenn Sie diese Komponente wieder hinzufügen möchten. Die Namen im Bild bleiben in meiner Konfiguration gleich.

Abhängig von Ihrer Hardware muss der Algorithmus Ihre Hardwareeigenschaften kennen:

int linker Aktor, rechter Aktor; //Winkel, um in Grad in den Aktuator zu schreiben, zu Floats ändern, wenn Sie mehr Genauigkeit wünschen

int posX, posY; //die Koordinaten der Position des Zeigers

Stellen Sie die Auflösung Ihrer Eingabewerte ein

int posStepsX = 2000;

int posStepsY = 1000;

Abmessungen Ihres Setups, Werte in mm (siehe SAP Bild)

#define L1 73 // Länge Motorarm, siehe SAP Bild (links und rechts sind gleich)

#define L2 95 // Länge Verlängerungsarm, siehe SAP Bild (links und rechts sind gleich)

#define rangeX 250 // maximaler Bereich in X-Richtung für den zu verschiebenden Punkt (von links nach rechts, 0 - maxVal)

#define rangeY 165 // maximale Reichweite in Y-Richtung für die Bewegung des Punktes (von 0 bis maximale Reichweite, während man zentriert bleibt)

#define originL 90 // Versatzabstand vom kleinsten X-Wert zur Mittelposition des Aktuators

#define originR 145 // Versatzabstand vom kleinsten X-Wert zur Mittelstellung des Stellantriebs, der Abstand zwischen den beiden Motoren beträgt in diesem Fall

Schritt 3: Vorwärtskinematik

Vorwärtskinematik
Vorwärtskinematik

Wie im vorherigen Schritt erwähnt, basiert die Vorwärtskinematik auf dem Algorithmus von SAP.

Die Leere aktualisiert die zuvor definierten gewünschten Winkelwerte des linken und rechten Aktuators. Basierend auf den eingegebenen X- und Y-Werten werden die richtigen Winkel berechnet, um den Zeiger an diese Position zu bringen.

void set_XY(double Tx, double Ty) //Geben Sie Ihren X- und Y-Wert ein{// einige Werte, die wir brauchen, aber nicht für lange speichern möchten double dx, dy, c, a1, a2, Hx, Hy; // Inpit-Auflösung auf den Bereich Ihrer Konfiguration in der realen Welt abbilden int realX = map (Tx, 0, posStepsX, 0, rangeX); //Swap if Mapping wenn invers int realY = map(Ty, posStepsX, 0, 0, rangeY); // tauschen wenn Mapping wenn invers // Winkel für linken Aktuator berechnen // kartesisch dx/dy dx = realX - originL; // Offset einbeziehen dy = realY; // Polarlänge (c) und Winkel (a1) c = sqrt(dx * dx + dy * dy); a1 = atan2(dy, dx); a2 = return_angle(L1, L2, c); leftActuator = floor(((M_PI - (a2 + a1)) * 4068) / 71); // Endwinkel und Konvertieren von rad in deg // Calc-Winkel für den rechten Aktuator dx = realX - originR; // Offset einbeziehen dy = realY; c = Quadrat (dx * dx + dy * dy); a1 = atan2(dy, dx); a2 = return_angle(L1, L2, c); rightAktor = floor(((a1 - a2) * 4068) / 71); // Endwinkel und Konvertieren von rad in deg}

Zusätzliches Leerzeichen für Winkelberechnung:

double return_angle(double a, double b, double c) { // Kosinusregel für Winkel zwischen c und a return acos((a * a + c * c - b * b) / (2 * a * c)); }

Schritt 4: Inverse Kinematik

Inverse Kinematik
Inverse Kinematik

Die inverse Kinematik funktioniert umgekehrt. Sie geben die Drehung Ihrer Aktuatoren in Grad ein und die Leere aktualisiert die zuvor definierte Position.

Bitte beachten Sie, dass Sie Aktoren oder einen separaten Sensor benötigen, der den Winkel des Arms lesen kann. In meinem Fall habe ich Aktoren verwendet, die ihre Position gleichzeitig lesen und schreiben können. Fühlen Sie sich frei, damit zu experimentieren und erwägen Sie, eine Art Kalibrierung hinzuzufügen, damit Sie sicher sind, dass Ihr Winkel richtig gelesen wird.