Spinnendings, ein Zwischenstand?

Was für ein Spinnendings? Achso, ja, fangen wir damit an.

Motivation

Vor ein paar Jahren hat sich irgendwann der Wunsch ergeben, einen achtbeinigen Laufroboter zu programmieren - also der Laufalgorithmus war das, was mich interessiert hat. Von Mechanik war ich zu dem Zeitpunkt noch weit weg. Einen ganzen Simulator zu schreiben war mir zu aufwändig, weswegen ich mich auf fertige Umgebungen wie Scrap Mechanic gestürzt habe - was aber sehr regelmäßig sehr einschränkend (oder kompliziert) war. Kurzum: es gab in der Richtung nichts zu holen.

Weiterhin enttäuschend ist die Auswahl an fertiger Hardware: Hexapods (mit sechs Beinen) gibt es wie Sand am Meer (vergleichsweise), "Spiderbots" mit sechs Beinen ebenso, und extrem wenige Modelle mit acht Beinen. Für einen Batzen Geld bekommt man ein Metallgerüst von Lynxmotion3, was mir aber zu groß und zu teuer war.

Auf dem 35C3 habe ich dann "Projekt Hannah"1 kennengelernt. Selbe Motivation, allerdings mit der konsequenten Umsetzung in Hardware (wenngleich auch ein Simulator parallel entwickelt wurde). Die Vielfalt an 3D-Druckern auf dem Kongress war dann damit zusammen der Auslöser für die Bestellung eines Creality Ender 3 und dem Beschluss, damit einen Körper zu drucken.

Vorstellungen werden konkret

Da ich nun alle Freiheiten der Welt hatte (glaubte ich zumindest), begann ich mit der Ausformulierung, was ich tun wollte. Meine Ziele:

  • acht Beine soll es haben
  • einer Spinne zumindest ähneln
  • die richtigen Proportionen dazu haben (keine Leiste mit acht weiteren Leisten dran)
  • nicht viel größer als ein Teller
  • frei programmierbar
  • "3dof"2: drei Motoren pro Bein für Rotation um x1, x2 und z. Eine Neigung um y war nicht geplant.

Die Beine wollte ich schlank halten (nicht so wie die Lynxmotion Teile) und die Motoren aus den Beinen raus, um das zu schaffen. Dazu überlegte ich mir folgendes: wenn der Körper selbst durch Federn gehalten wird, dann muss der dazugehörige Motor nicht mehr die Kraft aufbringen, den Körper zu halten. Die Kraft zum mittleren Beinsegment könnte durch einen Seilzug übertragen werden und dort die Feder anziehen (Denkfehler #1). Ich dachte mir weiterhin, dass ein Schrittmotor mit einer Winde die beste Option ist, um den Seilzug zu implementieren. Mangels Verfügbarkeit eines leichten Schrittmotors habe ich das dann jedoch gelassen und stattdessen einen Servo eingeplant.

Im folgenden Verlauf (über etwa ein halbes Jahr) habe ich viel Theorie über Spinnenanatomie gelernt, ausführliche Daten gesammelt und letztlich mein Modell grob skizziert. Der erste Wurf wurde dann mit 9g-Servos implementiert (nur ein Bein), und die ersten Messungen mit einer Feder haben ergeben, dass ich vermutlich einen stärkeren Servo benötige (Denkfehler #2?). Auf der Basis der mir bekannten Maße und Winkel sowie der Größe des konstruierten Aufbaus einer Hüfte mit zwei Servos vom Typ MG995 und einem SG92R habe ich dann den Körper entworfen/angepasst.

Zu dem Zeitpunkt hätte ich eigentlich schon mit etwas Mathematik aus der Ecke Maschinenbau herausfinden können, dass das Teil zu fett ist. Auch dass die Proportionen nicht mehr gepasst haben, hat mich erstmal nicht ausreichend gestört - ich hatte doch schon fast alles konstruiert und ausgedruckt.

Als die Teile dann (mit vielen kleinen Anpassungen und Rückschlägen) zusammengesetzt waren, war das Teil auf dem Tisch nicht in der Lage, auf seinen Beinen zu stehen.

Kurzer Rückblick auf die Zwischenstände:

  1. ein Bein mit Kniegelenk und einer Feder
  2. ein Hüftgelenk mit drei 9g-Servos
  3. ein Bein mit zwei MG995-Servos und einer Feder
  4. eine Bodenplatte
  5. ein Bein mit zwei MG995-Servos und zwei Federn
  6. eine Pappversion einer Bodenplatte und vier Beinen, fast standfähig
  7. neue Beine mit kleinerem Winkel am Knie (vorher 90°, jetzt etwa 45°)
  8. neue Bodenplatte
  9. Z-Achsengelenk, Stabilisierung oberhalb der Hüftgelenke
  10. Modell zusammengesetzt

Der letzte Stand ließ dann die Motivation unter den Tisch kriechen und in Fötusstellung verharren.

Fazit

Von meinen bisherigen Zielen habe ich kaum eines erreicht. War alles umsonst? Ist nichts mehr zu retten? Ich bin nicht vollständig überzeugt, dass dem so ist, aber ich versuche mich mal an einer Zusammenfassung.

  • die Größe ist eindrucksvoll, aber entspricht nicht dem ursprünglichen Wunsch
  • das Gewicht beträgt mehr als 2kg, und ich kann noch nicht sagen, ob das an den Schrauben liegt, die ich verbaut habe (Hornbach hat gut verdient).
  • die Servos an der Hüfte jaulen unter dem Gewicht auf und frei nach dem schwächsten Glied schaffen sie es nicht, den Körper zu halten.
  • die Beine selbst verdrehen sich leicht unter Last, was die Stabilität zusätzlich belastet
  • die Federn sind möglicherweise stark genug, jeweils 1/8 des Gewichts zu halten, vielleicht auch mehr - aber durch die ungleichmäßige Belastung müssen sie jeweils viel mehr tragen und kollabieren nacheinander genauso wie die Servos.
  • durch die sich verdrehenden Beine müssen die 9g-Servos auf der Achse zuviel Last tragen und schaffen es ebenso wenig.
  • die Stromversorgung wurde mit einem Labornetzteil sichergestellt, und ich kann noch keine Aussage darüber treffen, wie sich das Gewicht für die notwendigen 3-5A auf die Gesamtleistung auswirkt.

Für einige Details gibt es Lösungsansätze:

  • Plastikschrauben verwenden, um das Gewicht zu reduzieren
  • eine starre Verbindung statt des Seillaufs
  • mehr Federn/stärkere Federn
  • kleinerer Winkel zum Aufrichten
  • Bodenplatte ausdünnen

Doch keins davon kommt ohne weitere zu kompensierende Nachteile aus, oder ist einfach nicht effektiv (Bodenplatte zB wiegt kaum etwas).

Ich weiß nicht, ob das der Moment ist, wo ich einsehen muss, dass ich falsch geplant habe oder der, wo ich die Fehler einzeln angehe - letzeres hat mich bisher immer wieder in die Irre geführt, weil ich das Gesamtbild ignoriert habe. Für ein vollständiges Konzept müsste ich viel mehr Zeit investieren, als ich bereit bin.

Aber die Zeit hatte nicht nur Negatives mit sich gebracht.

Gelerntes

War ja ne Menge Zeit, und ich hatte viel Spaß dabei, all meine Mitmenschen mit meinen kleinen Fortschritten und Problemchen vollzuquatschen. Eine unvollständige Liste...

OpenSCAD

Üblicherweise nimmt man irgendein CAD-Tool, FreeCAD4 wäre einer der prominenten Vertreter, AutoCAD vermutlich ein Platzhirsch in der kommerziellen Welt, viele cloud-basierte Tools folgen. Ein Blick auf die eingesetzten Tools auf thingiverse5 gibt eine unverfälschte Statistik. Für Masochisten gibts auch noch blender und sonstige 3D-Modellierer. Nichts für Softwareentwickler, eher für Künstler - zumindest meiner Meinung und Einschätzung nach. Ich wurde damit nicht warm.

Stattdessen habe ich OpenSCAD6 für mich entdeckt und viel gelernt: die eigene Sprache ist recht unkompliziert und sehr schnell gelernt. Die IDE ist verbesserungswürdig, aber in Ordnung und der Aufgabe gut angepasst. Was ich lernen musste, war der Umgang mit einer funktionalen Programmiersprache in einem etwas größeren Projekt. Das hat (nach vielen Workarounds und Frickeleien) dazu geführt, dass es für mich (und andere) viel einfacher wurde, Teile für den Druck vorzubereiten und künstlich zu integrieren. FreeCAD hätte mir hier einiges abgenommen, vielleicht aber auch die Motivation.

Handwerkliches

Die ersten Löcher für Schrauben habe ich erzeugt, indem ich eine Schraube in die Schieblehre gesteckt und das Maß dann mit ein paar umliegenden Zehntel Millimetern gedruckt und vertestet habe. Die Ergebnisse speicherte ich dann als M3_TIGHT_TH und M3_LOOSE_TH. Irgendwann kam ich dann auf den Trichter, dass die Teile genormt sind und ich eigentlich nur nachschauen müsste. So recherchierte ich alle eingesetzten und benötigten Werte und schrieb inkrementell mehr Hilfsfunktionen, um "richtige" Löcher in meine Konstruktionen einzubetten. Außerdem kamen diverse Werkzeuge in meinen Besitz, um Teile passend nachzubearbeiten.

Microcontroller

Hier ist noch viel Spielraum übrig, was ich im Rahmen des Projekt lernen wollte, aber dennoch ist viel hängen geblieben: ein standalone Arduino setup (also ohne die komische IDE, bei der alles irgendwie eingebaut ist) mit relativ nativem C++ Code (die Arduino.h habe ich noch eingebunden) und Ansätzen, den Code auch zu testen, die Ansteuerung der Servos mit einer Hilfsplatine von adafruit, die Ansteuerung von Schrittmotoren mit und ohne Hilfsplatinen (wobei ich das vermutlich nicht ohne Not wiederholen würde) und letztlich eine Umsetzung in python, was mir softwareseitig leicht gefallen ist, aber wieder einige Denkprozesse zur Ansteuerung angestoßen hat. Da war ich in C++ doch zu sehr mit der Sprache selbst beschäftigt (was ich aber definitiv wiederholen möchte! Es hatte mich nur ausgebremst, und eine fertige Iteration war bitter nötig).

3D-Druck

Sicher hätte ich das auch mit allem anderen erreicht, aber so hatte ich eine Motivation für spezifische Formen und Eigenschaften. Manchmal hätte ich sicher mehr lernen können, wenn ich nicht so versteift darauf gewesen wäre, den nächsten achtstündigen Druck vorzubereiten. Da wäre zum Beispiel der Wechsel von cura zu slic3r, oder Materialkunde am praktischen Beispiel (ich habe erst vor kurzem erst eine Kalibrierung der e-Steps ausgeführt, weil die Drucke nicht katastrophal genug waren, das zu ändern). Anfangs habe ich mich viel mit dem bed leveling beschäftigt, was recht offensichtlich die primäre Problemquelle war. Außerdem wollte ich ein Gehäuse für den Drucker bauen, was nie fertig wurde (und ich dachte dabei auch zuerst nur an Temperaturstabilisierung, mittlerweile ist eine offene Frage auch die Notwendigkeit nach Feuerschutz).

Was ich letztlich umgesetzt habe, war der Austausch diverser Komponenten am Drucker. Vielleicht nicht alles notwendig oder zielführend, aber ich finde, es hatte jeweils seine Vorteile. - das Mainboard durch einen duet3d7 ersetzt, weil ich von der deaktivierten thermal runaway protection8 erfahren habe - einen bltouch gekauft, um das bed leveling zu automatisieren - das Mainboard unter dem Drucker entfernt, damit a) nichts reinfällt und b) es außerhalb des geplanten Gehäuses platziert werden kann - den IKEA Lack Aufbau vorbereitet (und nie zu Ende umgesetzt, weil die gedruckten Teile nicht vertrauenswürdig wirkten)

Dokumentation

Letztlich war es nicht viel, und vielleicht auch zu früh. Aber ich hatte die Motivation, das Projekt allen zur Verfügung zu stellen und dazu brauchte ich eine Bauanleitung. Infolgedessen habe ich mich informiert, wie man technische Zeichnungen aus OpenSCAD herauslassen könnte und auch Explosionszeichnungen möglich wären. Das hat sich dann als ziemlich invasiv heraus gestellt, weswegen ich damit erstmal warten wollte, da mein Fokus gerade auf einem Teil lag, bei dessen Aufbau ich mir nicht sicher war und meine Aufmerksamkeit gerade komplett durch Codestrukturierung und Geometrie blockiert war. Für das nächste Projekt wüsste ich zumindest, wo ich anfangen sollte.

Projektstruktur

Angefangen habe ich natürlich mit jedem Ding einzeln - OpenSCAD code hier, OpenSCAD libs dort, Arduinocode in einem Arduino IDE Projekt, ein paar heruntergeladene PDF-Dateien (teils ziemlich riesig), unzähligen Bookmarks in drei verschiedenen Browserprofilen, handschriftliche Notizen, Textdateien irgendwo mit Ideen, diverse Clouddienste für Notizen und Arduino-Simulationen... nicht alles habe ich wieder zusammengezogen - das wäre noch zu tun, würde ich morgen daran weiter arbeiten. Ich würde aber vermutlich wieder so anfangen. Die Restrukturierung nach Bedarf ist sinnvoller als sich vorher Gedanken zu machen, wenn der Aufwand zum Ändern so gering ist. Gegen Ende fand ich Fortschritt und bequeme Zusammenarbeit wichtiger als es "richtig" zu machen, weswegen dann in meinem Git-Repository alle möglichen externen libs gelandet sind. Für eine Veröffentlichung des Quellcodes würde ich das zuerst aufräumen wollen (zumal ich nie eine Lizenz angegeben hatte).

Und jetzt?

Keine Ahnung, vielleicht mache ich mir beim nächsten Mal vorher mehr Gedanken zur Statik. Wenn ich dann weiß, wie ich ein kleines Projekt umsetzen könnte, dann weiß ich auch, was dem großen fehlt. Das kleine Projekt hätte weniger Materialverschleiß und wäre vermutlich der bessere Prototyp. Vielleicht lerne ich auch, was den Preisunterschied zu teuren HiTec Servos ausmacht.


  1. https://fahrplan.events.ccc.de/congress/2018/Fahrplan/events/9915.html 

  2. https://de.wikipedia.org/wiki/Sechs_Freiheitsgrade 

  3. http://www.lynxmotion.com/c-3-hexapods.aspx 

  4. https://www.freecadweb.org/ 

  5. https://thingiverse.com 

  6. http://openscad.org 

  7. https://www.duet3d.com/ 

  8. https://www.reddit.com/r/ender3/comments/a9q9jk/for_new_ender_3_owners_a_quick_note_on_thermal/