Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

KITtyBot

Komponenten und Verbrauchsmaterialien

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
Servos (Tower Pro MG996R)
SG-90 oder 9 g Servo mit gleichem Formfaktor
× 12
Adafruit UBEC DC/DC Abwärtswandler (Buck) - 5V @ 3A Ausgang
× 1
Adafruit Mini-Fernbedienung
Natürlich können Sie jede beliebige Fernbedienung verwenden. Dies funktionierte zufällig gut mit der IRLib-Bibliothek
× 1
Adafruit IR (Infrarot)-Empfängersensor - TSOP38238
× 1
Widerstand 1k Ohm
× 1
Widerstand 2,2 kOhm
× 1
7,4 V / 500 mAh LiPo-Akku
Eine Batterie mit ungefähr dieser Kapazität für das RC-Hobby reicht aus
× 1

Notwendige Werkzeuge und Maschinen

3D-Drucker (generisch)
Lötkolben (generisch)
Das Steckbrett-Design könnte ohne Löten auskommen

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Einführung

Ich wollte einen wandelnden vierbeinigen Roboter bauen, eher im "Säugetier"-Stil als die normale "Spinne" oder "Insekt". Die Inspiration kommt von den bekannten Boston Dynamics Robotern und anderen vierbeinigen Forschungsrobotern. Einen solchen Roboter zu bauen ist eine ziemliche Herausforderung, da er aufgrund des hohen Schwerpunkts und der Füße unter dem Körper relativ leicht umkippt, anstatt sich in die Ecken auszubreiten.

Das Ziel war es, einen billigen Roboter zu bauen, der Arduino und kostengünstige Mikroservos verwendet. Diese Lösung hat natürlich ihre Grenzen. Man kann nicht erwarten, dass es perfekt ist, aber ich habe es jetzt geschafft, ein paar Roboter zu bauen, die das in diesem Film beschriebene Gehverhalten ausführen können. Und mit einem sehr kleinen Budget das Beste zu tun, ist eine Herausforderung für sich und vielleicht etwas, dem sich Leute in stark finanzierten Forschungsprojekten nie stellen müssen. :)

Es wurde früh erkannt, dass eine Studie der invertierten Kinematik (IK) erforderlich war, um es richtig zu machen. Der Code enthält eine Reihe von Gleichungen, um Gelenkwinkel basierend auf gewünschten Fußbewegungen zu berechnen. Diese können in Funktionen für einige wiederkehrende Aufgaben weiter verwendet werden, wie zum Beispiel eine Körperbewegung (alle vier Füße in die entgegengesetzte Richtung bewegen) und eine vollständige Fußbewegung (aufwärts heben, in eine bestimmte Richtung heben und wieder absetzen).

Die nächste Herausforderung besteht darin, Gangstudien durchzuführen, d. h. zu definieren, wie der Roboter in Bezug auf Körper- und Fußbewegungen gehen und drehen soll. Mein Roboter verwendet ständig statisch stabile Gangarten. Dabei wird jeweils ein Fuß angehoben und in eine neue Position gebracht. Der Körper ruht auf den anderen drei Füßen und um nicht zu kippen, muss der Schwerpunkt innerhalb des Stativs bleiben, das diese Füße bilden. Ich habe vier Standardgangarten entwickelt - vorwärts, rückwärts, links und rechts. Dadurch werden wiederum die Fuß- und Körperbewegungsfunktionen zu einer vollständigen Sequenz kombiniert.

Ich habe auch eine Funktion für synchrone Servobewegungen entworfen. In manchen Fällen machen mehrere Servos während einer eingestellten Zeit unterschiedliche Hübe. Dies muss synchronisiert werden, um reibungslose Bewegungen zu erzielen.

Zu guter Letzt verwende ich einen völlig ungeschützten LiPo-Akku. Dies kann riskant sein, die größte Gefahr besteht darin, ihn zu schnell oder zu tief zu entladen. Die erste Gefahr wird vermieden, solange sie nicht versehentlich kurzgeschlossen wird. Eine normale R/C-Batterie hat eine Entladerate von 25 C, die in diesem Fall 12 A zulässt. Die UBEC verhindert in jedem Fall, dass sie höher als 2 A ist. Die zweite Gefahr wird durch eine Überwachungsfunktion in der Software verhindert. Die Spannung wird an einem der analogen Pins gemessen und wenn der Roboter unter 7,0 V sinkt, wird der Roboter stillgelegt.

Und schließlich muss ich betonen, dass die Akkus mit einem speziell entwickelten Ladegerät aufgeladen und mit der üblichen Sorgfalt behandelt werden sollten. Lassen Sie das Aufladen nie unbeaufsichtigt. Der Akku sollte vom Roboter abgenommen (mit Klettverschluss befestigt) und in einer feuerfesten Tasche oder zumindest mit sicherem Abstand zu brennbaren Materialien aufgeladen werden, damit ein Feuer eingedämmt und nicht verbreitet werden kann. Bewahren Sie auch Ihre Batterien sicher auf.

Wenn Sie mit LiPo-Akkus nicht vertraut sind, wenden Sie sich an einen örtlichen R/C-Hobbyladen und kaufen Sie Akkus zusammen mit einem geeigneten Ladegerät und möglicherweise einer feuerfesten Tasche/einem feuerfesten Behälter zum Laden und Aufbewahren. Diese Gegenstände sind oft voller Warnzeichen. Reda sie und verwenden Sie Ihr eigenes gutes Urteilsvermögen. :)

Bau des Roboters

Drucken Sie die Teile gemäß den mitgelieferten Dateien. Nehmen Sie sich etwas Zeit, um sich die Bilder anzusehen und herauszufinden, wie Sie die Teile zusammenbauen, bevor Sie beginnen. Ich bin Skandinavier, aber diese Anleitung ist weit von dem Niveau einer IKEA- oder LEGO-Anleitung entfernt :)

Das Hüftgelenk sollte zuerst montiert werden. Ich habe doppelseitiges Klebeband von guter Qualität verwendet, um die Teile zu verbinden. Sie könnten auch geklebt werden, aber wenn ein defektes Teil repariert werden muss, sind sie nicht zu demontieren, ein gebrochenes Servo führt zum Austausch des kompletten Gelenks.

Setzen Sie die Servohalterung auf die Unterseite eines Servos, in einer Linie mit der Betätigungsachse. Dann verbinden Sie ein anderes Servo mit seiner Achse senkrecht. Das Bild unten zeigt das Hüftgelenk für vorne-rechts und hinten-links. Für die beiden anderen Ecken sollten Spiegelverbindungen hergestellt werden.

Bevor Sie fortfahren, sollten Sie sicherstellen, dass alle 12 Servos zentriert sind. Am besten bestückst du die Platine (oder das Steckbrett, siehe unten), schließe alle Servos an und lade den Code. Beim Starten des Arduino werden alle Servos zentriert (Befehlssignal 90 Grad). Die Mittelpositionen müssen später nach dem Zusammenbau des Roboters feinjustiert werden.

Der nächste Schritt ist das Anbringen des Teils namens Oberschenkel, der "oberen Extremität" einer Beineinheit. Dieses Teil hat Aussparungen, die zu den Servohörnern passen, die normalerweise mit dem Servo geliefert werden. Kleben Sie Hörner in die Aussparungen. Stellen Sie sicher, dass Sie einen Kleber verwenden, der zum Verbinden des 3D-gedruckten Materials und des Nylonkunststoffs, aus dem das Horn besteht, geeignet ist. Die Klebepistole, die ich verwendet habe, funktionierte gut, ich hatte jedoch einige gemischte Erfolge mit CA-Kleber (einige Marken funktionieren, andere nicht).

Der Oberschenkel ist in einem 60-Grad-Winkel mit dem Hüftgelenk verbunden. Versuchen Sie bei zentrierten Servos eine Position zu finden, die diesem Winkel möglichst nahe kommt. Befestigen Sie das Horn mit der mitgelieferten Schraube (oft die kürzere von drei, die mit einem Servo geliefert werden) an der Servoverzahnung. Unten sind zwei Bilder von zusammengebautem Oberschenkel und Hüfte, Servohorn aus Gründen der Übersichtlichkeit nicht enthalten (oder nie aus Faulheit von meiner Seite modelliert).

Der untere Teil des Beins sollte ebenfalls montiert werden. In diesem Fall wird ein Servo mit Schrauben am Beinteil befestigt. Dem Servo liegen Schrauben bei (oft zwei längere "Holz"-Schrauben).

Nun können die Beine am Körper montiert werden. Es gibt zwei Teile, die ich "Stoßstange" nenne und die sich vorne und hinten am Roboter befinden (wie die Stoßstangen an einem Auto). Sie haben ebenso wie das Oberschenkelteil Aussparungen für Servohörner. Kleben Sie Hörner hinein. Schieben Sie dann die Servostütze eines Oberschenkels in das entsprechende Loch im Körper. Wenn dies auf beiden Seiten erfolgt, kann die Baugruppe durch den Stoßfänger gesichert werden. Lassen Sie die Beine etwa 12 Grad nach außen zeigen (eine 20 mm Vorspur des Beines). Die Stoßstange wird mit übrig gebliebenen (längeren) Servoschrauben an der Karosserie befestigt.

Endlich können die Unterschenkel des Roboters befestigt werden. Sie sollten in die entgegengesetzte Richtung des Oberschenkels abgewinkelt sein, sodass sich die Fußspitze direkt unter dem Hüftgelenk jeder Beineinheit befindet.

Dadurch wird der Roboter zusammengebaut. Es sollte wie auf dem Bild unten aussehen. Beachten Sie, dass sich das Design des Roboters im Vergleich zum oberen Bild und dem Filmausschnitt leicht geändert hat. Das Gehäuse wurde überarbeitet, um das Design zu vereinfachen und robuster zu machen. Servostütze und Hupe für das Hüftgelenk sind getauscht. Stellen Sie also nach den 3D-Bildern zusammen und vermeiden Sie Verwirrung durch die Fotos und Filmausschnitte.

Natürlich können die Winkel jedes Gelenks nicht genau den erforderlichen Winkeln entsprechen, die Anzahl der Splines bei einem SG-90-Servo beträgt 21, was zu einem Winkel von 17 Grad zwischen zwei Positionen führt. Sie können den Roboter bestenfalls innerhalb von 10-20 Grad zusammenbauen, der verbleibende Fehler muss durch Ändern der Neutralposition im Code ausgeglichen werden, siehe weiter unten in dieser Anleitung. Es könnte eine gute Idee sein, noch einmal alle Servos anzuschließen und den Arduino zu starten und die neutralen Positionen zu überprüfen und bei Bedarf einige mechanische Einstellungen vorzunehmen (ein Gelenk um ein oder zwei Spline bewegen). Man neigt dazu, die Servos versehentlich zu drehen, wenn man damit arbeitet.

Anschließen der Elektronik

Es gibt zwei Möglichkeiten, alles auf einem Steckbrett zu haben oder eine Platine mit der mitgelieferten Fritzing-Datei zu produzieren. Wenn Sie beim Anschließen aller Strom- und Masseleitungen an die Servos nicht aufpassen, können Probleme mit der Spannung im Steckbrett auftreten. Im Extremfall kann ein Servo 600 mA verbrauchen und schlechte Verbindungen führen zu fehlerhaftem Verhalten. Die Platine hat sehr breite Kupferspuren für die Stromleitungen. Wenn Sie also nur richtig löten, funktioniert es gut.

Es gibt keinen Netzschalter in meinem Design. Der Roboter wird einfach durch Anschließen des Akkus ein- und ausgeschaltet. Wenn Sie einen hinzufügen möchten, sollte dies nach dem Batterieanschluss erfolgen, indem die 7,4 V-Versorgung sowohl des Arduino als auch des UBEC unterbrochen wird.

Breadboard-Version

Es ist möglich, den Pro Mini, die Anschlüsse für die Servos und den Großteil der anderen Elektronik auf einem halben Steckbrett zu haben. Ich zeichne die Schaltpläne in das Bild unten. Stellen Sie sicher, dass Sie kurze Überbrückungskabel verwenden, insbesondere für die 5 V-Strom- und Masseverbindungen zu den Servos. Die Servoanschlüsse sind einfach extra lange Stiftleisten, die in drei Teile geschnitten und in das Steckbrett gedrückt werden.

Was auf dem Bild nicht zu sehen ist, ist der Akku und die UBEC. Es kann sein, dass etwas gelötet wird, um dies zu beheben, um einen Anschlussstecker an der Batterie anzubringen. Von dem Stecker sollten zwei Überbrückungsdrähte an die untere "Stromschiene" des Steckbretts angeschlossen werden, um den Pro Mini zu speisen (verbunden mit RAW und GND). Schließen Sie auch zwei Widerstände von der 7,4 V-Versorgung an den A0-Pin an. 2,2k geht von der positiven Seite und 1k vom Boden. Dadurch wird die Spannung, die bei einer vollen Batterie mehr als 8 V beträgt, auf einen Wert unter 5 V geteilt, der vom analogen Pin gemessen werden kann.

Die Ausgangsseite des UBEC hat einen Servoanschluss. Es ist sehr praktisch, an der oberen "Stromschiene" zwei Stiftleisten hinzuzufügen. Platzieren Sie es wie auf dem Bild irgendwo in der Mitte, um eine möglichst ausgewogene Kraftverteilung auf die Servos zu gewährleisten.

Der IR-Empfänger sollte an A1 angeschlossen und mit 5V versorgt werden. Die Stifte am Empfänger sind lang genug, um in Löcher direkt auf dem Steckbrett eingepasst zu werden.

Unten finden Sie ein Schema und ein Bild, wie das fertige Steckbrett aussehen könnte. Beachten Sie, dass das Bild eine ältere Version des Roboters mit anderen Pinbelegungen und Anschlüssen zeigt. Es gibt immer noch eine Idee, wie man Überbrückungsdrähte und Servoanschlüsse anschließt.

Das Steckbrett wird mit seiner selbstklebenden Rückseite am Korpus befestigt. Richten Sie es so aus, dass sich die Ecke mit den Servos, die an den Pins D3, D4 und D5 (oben rechts im Schaltplan) angeschlossen sind, an der vorderen/linken Ecke des Roboters befindet und stellen Sie sicher, dass die Platine mittig auf dem Körper liegt (richtige Mitte von Schwerkraft ist lebenswichtig).

PCB-Version

Ich habe unten eine Fritzing-Datei hinzugefügt. Dies kann zur Herstellung einer Leiterplatte verwendet werden, entweder durch Bestellung beim Service von Fritzing oder durch Exportieren von Dateien für die Leiterplattenherstellung. Ich habe eine Reihe von Bildern gemacht, um die Baugruppe unten zu zeigen. Die Platine ist speziell für diesen Roboter mit Anschlüssen für alle Servos, IR und Spannungsmessung. Es sind aber auch Stecker aus den restlichen Pins herausgebrochen. Diese können verwendet werden, um andere Geräte anzuschließen, wenn Sie den Roboter in Zukunft erweitern möchten.

Es gibt kleine "Pads" auf dem Körper, die zu den Ecken der Platine passen. Auch hier sollte die Ecke mit dem D3 zu D5 Stecker vorne/links sein. Es gibt Befestigungslöcher auf der Platine, aber ich habe nur ein Stück doppelseitiges Klebeband am Körper verwendet, um es zu befestigen. Es bleibt an Ort und Stelle.

Batterie

Der Akku wird mit Klett an der Unterseite befestigt. Dafür ist am Körper eine ebene Fläche vorgesehen. Ein 7,4V/500mAh LiPo Akku hat normalerweise den Formfaktor von ca. 55x30x10 mm (Geben oder Nehmen von wenigen mm) und passt hier recht gut hinein.

Schließlich kann der Roboter "nachgebessert" werden, indem die Servodrähte in schöne Bündel geschnürt werden, damit er beim Gehen nicht davon stolpert. Es gibt dem Roboter auch das schöne Aussehen, dass er tatsächlich ein vierbeiniges Wesen ist, das herumläuft und nicht ein Haufen Servokabel. :)

Abschluss

Vor dem Einsatz der Roboter sollten die Mittelpositionen fein abgestimmt werden. Dies geschieht durch Bearbeiten des Arrays servodeg0 im Code:

const float servodeg0[12] ={90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90};  

Die Werte sind in der Reihenfolge alfa, beta gamma und vorne/links, hinten/links, vorne/rechts, hinten/rechts angeordnet. Beta vorne rechts ist also die achte Position im Array oder servodeg0[7] (die Nummerierung des Arrays beginnt mit 0).

Es gibt auch ein Array namens servodir, das die Drehrichtung der Servos definiert.

const int servodir[12] ={ +1, +1, -1, -1, -1, +1, -1, -1, -1, +1, +1, +1}; // Drehrichtung (positiv ist Servo gegen den Uhrzeigersinn)  

Die von mir verwendeten Servos bewegen sich von 0 bis 180 Grad gegen den Uhrzeigersinn. Ich habe irgendwo gelesen, dass es Servos gibt, die in die andere Richtung gehen. In einem solchen Fall müssen die Vorzeichen des Array-Servodir die ganze Zeit geändert werden.

Starten Sie den Arduino und überprüfen Sie die Winkel an allen Servos. Machen Sie Maßnahmen und schauen Sie, dass alles gerade und symmetrisch aussieht. Abstände und Winkel sollten dem Bild unten entsprechen.

Es ist schwierig, bei jeder Messung auf den Millimeter genau zu sein, innerhalb eines Zentimeters zu sein ist vernünftig. Sehen Sie, welche Änderungen erforderlich sind, und addieren/subtrahieren Sie sie zum Wert im Array servodeg0. Dies erfordert definitiv einige Iterationen, bis alles richtig ist. Sie werden mit einem servodeg0-Array enden, das ungefähr so ​​​​aussieht (ein tatsächlicher Code von einem meiner Roboter). Und am wichtigsten, Sie sollten am Ende einen Roboter haben, der auf allen vier Füßen ruht und gerade steht.

 const float servodeg0[12] ={80, 95, 100, 100, 110, 90, 100, 115, 100, 80, 80, 100}; 

Jetzt ist alles fertig. Viel Spaß!

Nur vielleicht ein paar Tipps für den Weg.

Die Servos müssen möglicherweise nach einiger Zeit neu kalibriert werden. Die Mittelposition kann mit der Zeit driften. Überprüfe einfach von Zeit zu Zeit, ob alles ausgerichtet ist.

Wenn Sie alles richtig gemacht haben und immer noch einen Roboter haben, der umkippt, überprüfen Sie den Schwerpunkt. Der Akku kann bewegt werden, um dies auszugleichen, eine gute Sache mit Klettverschluss.

Und noch einmal. Gehen Sie sorgsam mit Ihren LiPo-Akkus um.

Weitere Verbesserungen

Indem ich meinen Roboter hier einreiche, lade ich die Leute auch ein, das Design zu verfeinern, entweder mehr Funktionen hinzuzufügen oder ein etwas anderes Layout zu erstellen (größer, kleiner, cooler aussehend). Der Code sollte auf einem Roboter mit einem etwas anderen Layout oder einer etwas anderen Größe wiederverwendet werden können. Die folgende Skizze zeigt die verschiedenen Konstanten im Code. Alle IK- und Bewegungsfunktionen sollten noch funktionieren, wenn ein Roboter mit anderen Maßen hergestellt wird. Es zeigt auch, dass die Koordinaten definiert sind, x zeigt in die Vorwärtsrichtung.

Und natürlich wäre es interessant, wenn die Leute dem Roboter Funktionen hinzufügen würden. Es gibt mehrere Tasten auf der Fernbedienung, die mit Funktionen belegt werden können (warum nicht tanzen oder andere Bewegungsabläufe ausführen, wenn eine Taste gedrückt wird).

Ich persönlich experimentiere mit analogem Eingang. Ich habe auch mit einer Gangart "Drehen im Gehen" gearbeitet, um den Roboter einigermaßen lenken zu können oder Kursabweichungen mit Hilfe von Kreisel oder Kompass zu korrigieren. Und ich habe auch einen Ultraschallsensor und autonomes Verhalten (Vermeiden von Hindernissen) hinzugefügt. Mein aktuelles Projekt ist es, analoge Steuerung mit autonomer Steuerung zu kombinieren und alles über ein Smartphone steuern zu lassen. Dies hat mich gezwungen, viele neue Dinge zu lernen (Blynk, ESP6822, serielle Kommunikation zwischen Geräten usw.) und hoffentlich kann ich eine verfeinerte Version des Roboters auf den Markt bringen (oder vielleicht jemand mit besseren Fähigkeiten schlägt mich in diesem Ding) :)

Code

  • Der Code für KITtyBot2
Der Code für KITtyBot2Arduino
Upload zum Arduino Mini
/* Eine IR-gesteuerte Version des KITtyBot 2. Es verwendet Arduino Pro Mini und das von mir entworfene PCB-Board (Fritzing-Skizze Kittybotmini.fzz) Es basiert auf den vorherigen Robotern KITtyBot und KITtyBot mini mit eine IR-Fernbedienung zur Steuerung des Roboters Es verwendet eine NEC (Adafruit)-Fernbedienung und die IRLib2-Bibliotheken, siehe https://github.com/cyborg5/IRLib2. Laden Sie IRLib2-Bibliotheken aus dem Repository herunter und installieren Sie sie gemäß den Anweisungen. Die allgemeinen Abmessungen sind ähnlich wie beim originalen KITtyBot, aber es gibt einen Versatz zwischen der Gamma- und Alfa-Achse von 12 mm (die Servos sind übereinander montiert). das stabilste Verhalten gegeben. Erstellt von Staffan Ek 2017*/#include #include #include  // Fügen Sie zuerst die Dekodierungsbasis ein#include  // Fügen Sie nur das Protokoll hinzu, das Sie sind using #define MY_PROTOCOL NEC // Definiert die IR-Steuerung (NEC) long Previous;IRrecv My_Receiver (A1); // Empfangen auf Pin A0IRdecodeNEC My_Decoder;const int servonum =12; // Die Anzahl der ServosServo servo[servonum]; // Servo-Objekt erstellen const float servodeg0[12] ={90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90}; // Neutralpositionen für die Servos eingestellt von nominell 90 Grad ( eine Kalibrierung ist erforderlich, um diese Werte einzustellen)float servodegnew[servonum]; // Die gewünschte Servoposition in Gradfloat servodegold[servonum]; // Die alte (oder aktuelle) Servoposition // Aktualisieren Sie die Werte unten auf die KITtyBot-Miniconst int servodir[12] ={ +1, +1, -1, -1, -1, +1, -1, -1, -1, +1, +1, +1}; // Drehrichtung (positiv ist Servo gegen den Uhrzeigersinn) const float pi =3.1416;const float alfa0 =pi / 6; // Die neutrale Position von alfa (30 deg) const float beta0 =pi / 3; // Die neutrale Position von Beta (60 Grad) const float jointlength =50; // Die Länge eines Beinteils (beide haben die gleiche Länge)const float width =120; // Die Breite (Abstand zwischen den Füßen in y-Richtung, mit toeout0 hinzugefügt)const float leng =120; // Die Länge (Abstand zwischen Fuß in x-Richtung)const float distag =12; // Abstand zwischen Alpha- und Gamma-Achseconst float toeout0 =20; // Der nach außen gerichtete Abstand der Füße vom Gamma-Servozentrum (der Abstand, in dem der Fuß nach außen zeigt) const float leglength0 =2 * Jointlength * cos (alfa0); const float gamma0 =asin (toeout0 / (leglength0 + distag)); // Die neutrale Position von Gamma (aufgrund von 20 mm Nachspur und 12 mm Abstand)const float bodyradius =sqrt(pow((width / 2), 2) + pow((leng / 2), 2)); // Die Länge der Diagonale (Abstand von der Mitte zur Fußecke)const float phi0 =atan(width / leng); // Der Winkel des Körperradius gegenüber der x-Achse (nach vorne zeigend) const float height0 =sqrt(pow(leglength0 + distag, 2) - pow(toeout0, 2)); // Die normale Höhe des Roboters (wenn Winkel oder Abstände geändert werden müssen diese aktualisiert werden)float leglength [4] ={sqrt(pow(height0, 2) + pow(toeout0, 2)), sqrt(pow(height0, 2) + pow(toeout0, 2)), sqrt(pow(height0, 2) + pow(toeout0, 2)), sqrt(pow(height0, 2) + pow(toeout0, 2)) };// Startwerte of leglengthunsigned long timestep =500; // Zeit, die von jeder Sequenz benötigt wird (bei Verwendung von servomove () )int steplength =40; //Die Länge eines Schrittes in x-Richtung während des Gehens (Vorwärts- und Rückwärtskriechen)float phi =20; // Drehwinkel beim Drehen (in Grad, nicht im Bogenmaß!) // Variable für die Bewegungfloat footpos[12]; // Fußpositionen, Reihenfolge LeftFrontxyz, LeftRearxyz, RightFrontxyz, RightRearxyzfloat stepturn[12] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Fußbewegung bei einer Drehung // Die Fußpositionen werden mit ihren jeweiligen Startpositionen kalibriertconst float jointangle0[12] ={alfa0, beta0, 0, alfa0, beta0, 0, alfa0, beta0, 0, alfa0, beta0, 0};Schwimmverbindungswinkel[12]; // Verwenden Sie einen Vektor für Winkel, bestellen Sie LeftFrontAlfaBetaGamma etcconst int voltagepin =A0; // Der zugewiesene Pin für die Spannungsmessung Lowvolt =0; // Eine Variable, die den Roboter stoppt, wenn die Spannung <7,0 Vint mode =0; // Der aktuell geordnete Gehmodus; vorwärts, rückwärts, links, rechtsvoid setup () { Serial.begin (9600); Serial.println ("KITtyBot mini"); //Diese Zeilen dienen nur zur Überprüfung der Konfiguration. Kann gelöscht werden. Serial.print("Gamma0:"); Serial.println (gamma0); Serial.print("Leglength0:"); Serial.println (Beinlänge0); Serial.print ("Körperradius:"); Serial.println (Körperradius); Serial.print("Phi0:"); Serial.println (phi0); Serial.print("Height0:"); Serial.println (Höhe0); servo[0].attach(3); servo[1].attach(4); servo[2].attach(5); servo[3].attach(6); servo[4].attach(7); servo[5].attach(8); servo[6].attach(2); servo[7].attach(A3); servo[8].attach (12); servo[9].attach(11); servo[10].attach(10); servo[11].attach(9); for (int i =0; i  2 * Gelenklänge) lresult =2 * Gelenklänge; // Wenn die Beinlänge höher als möglich ist, werden einige der folgenden Funktionen instabil return lresult;}float legright(float dx, float dz, float gamma) { float lresult =sqrt(pow(leglength0 - (dz / cos(gamma0 - gamma)), 2) + pow(dx, 2)); if (lresult> 2 * Gelenklänge) lresult =2 * Gelenklänge; // Wenn die Beinlänge höher als möglich ist, werden einige der folgenden Funktionen instabil return lresult;} // Beta, das "Kniegelenk"float beta(float leg) { float bresult =2 * acos(leg / (2 * Jointlength)); Return bresult;} // Alfa, Der andere Hüftservofloat alfafront (float dx, float beta, float leg) { float aresult =(beta / 2) - asin (dx / leg); return aresult;}float alfarear(float dx, float beta, float leg) { float aresult =(beta / 2) + asin(dx / leg); return aresult;}// Angeben von Fußpositionen basierend auf einem Drehwinkel f (in Grad). Stepturn wird verwendet, um Footpos-Werte zu ungültig zu machen turnpos(float f) { stepturn[0] =bodyradius * cos(phi0 + (f * pi / 180)) - leng / 2; stepturn[1] =Körperradius * sin(phi0 + (f * pi / 180)) - Breite / 2; stepturn[3] =Körperradius * cos(pi - phi0 + (f * pi / 180)) + Länge / 2; stepturn[4] =bodyradius * sin(pi - phi0 + (f * pi / 180)) - width / 2; stepturn[6] =Körperradius * cos(2 * pi - phi0 + (f * pi / 180)) - Länge / 2; stepturn[7] =Körperradius * sin(2 * pi - phi0 + (f * pi / 180)) + Breite / 2; stepturn[9] =Körperradius * cos(pi + phi0 + (f * pi / 180)) + Länge / 2; stepturn[10] =bodyradius * sin(pi + phi0 + (f * pi / 180)) + width / 2;} // Berechnet die Servopositionen (in Grad) basierend auf den Gelenkwinkeln in der Funktion obenvoid servopos () { for ( int i =0; i <12; i++) { servodegnew[i] =servodeg0[i] + servodir[i] * (jointangle[i] - jointangle0[i]) * 180 / pi; }} // Der Servoalgorithmus für kontrollierte und synchronisierte Bewegungen. Alle Servos sollten ihre Endposition am Ende eines timestepvoid erreichen servomove() { int servotimeold[servonum]; // Lokale Variable für die Zeit der letzten Servoposition int servotimenew[servonum]; // Lokale Variable für die aktuelle Zeit, wenn das Servo positioniert ist int SERVOPULSE[servonum]; // Lokale Variable zum Schreiben in den Servotreiber float servodeg[servonum]; // Lokale Variable für die aktuelle Servoposition float servodegspeed[servonum]; // Lokale Variable für den gewünschten Servogeschwindigkeitsdegress pro Millisekunde unsigned long starttime =millis(); // Zeitstempel für den Start des Algorithmus unsigned long timenow =starttime; // Zeit jetzt zurücksetzen für (int i =0; i  

Kundenspezifische Teile und Gehäuse

The body of the robot. Carries the PCB and battery.At each end of body, like bumper on a car. You should have two of these.Supports the hip joint. Print four of theseThe upper limb of leg. Print four.The lower limb (or foot). Print four.All parts put together. Not for printing.

Schaltpläne

This is a Fritzing file to allow PCB production. Use it to order from Fritzing themselves or export to a suitable format an manufacture elsewhere. kittybotmini_XKZYltyQVJ.fzz

Herstellungsprozess

  1. Windows 10 IoT Core auf Raspberry Pi 2 – Adafruit-Sensordaten
  2. Einfache Wanduhr mit Adafruit 1/4 60 Ring Neopixel
  3. UnifiedWater v1
  4. Avenger montiert:Iron Man Helm &Arc Reactor
  5. Mobile Abstimmungsbox
  6. Intel Arduino 101 BLE Blynk Tank
  7. Arduino101 / tinyTILE BLE:Match-Making-Sonnenbrille
  8. Whac-A-Mole (Button Edition)
  9. Moderne Jukebox
  10. Arduino Apple Watch