Hexapod – wir lernen laufen

Die Hausspinne hat inzwischen Fortschritte gemacht, genug um den neuen Stand in einem Text zu beschreiben. Verbesserungen im Steuerprogramm, neue Schnittstellen und ein Gamepad als Eingabegerät machen die weitere Entwicklung einfacher und auch mehr Spaß.

Projekt: Hexapod 12 DOF

Kontakt: Boris Dirnfeldner

Link– eigenes Projekt –

Die Hausspinne basiert ja auf einem fertigen Design (beim Druckmodell) und eigener Software. Nach den ersten Versuchen haben sich schnell auch erste Defizite gezeigt und die Detailprobleme, die das vorhandene Konzept hat.

Änderungen und Verbesserungen Mechanik/Elektronik:
Das Thema Schüttellähmung hat sich mit besser angezogenen Schrauben vermindert, wenn auch nicht gelöst. Hier sind wohl bessere Dämpfungslösungen im Design erforderlich oder eine andere Form der Kraftübertragung von den Servos, das ist aber für die “Lernversion” nicht mehr relevant. Leider hilft das Festschrauben auch nicht beliebig, weil irgendwann die Servos nicht mehr gegen die Reibung ankommen.
Bei der Stromversorgung hat sich der Ansatz mit dem 18650-Shield nicht bewährt. Der hat einfach nicht genügend Saft um schnelle und komplexe Bewegungen mit ausreichend Strom zu unterstützen und schaltet immer wieder wegen der Überlastung ab. Hier wurde nun auf Modellbau-Komponenten umgestellt, mit einem 3S Lipo, einem Festspannungs-SBEC und entsprechenden Kabeln/Steckern. Damit sollte für das Modell die Stromversorgung geklärt sein.
Den Arduino UNO hatte ich ja bald schon ersetzt durch einen ESP32, der neben deutlich großzügigeren Speicherbedingungen auch mehr Prozessorleistung bietet. Mit jeder Software-Erweiterung sieht man aber den erhöhten Bedarf, so dass der Umstieg ohnehin zeitnah notwendig gewesen wäre.
Neu ist die Anbindung eines PS2-Controllers per Funkdongle. Das Teil hatte ich schon mal in Verwendung, zumindest die Hardware war also wenig problematisch.
Da für die Version damit die Hardware definiert und ausgereizt ist, wird es wohl noch angepasste Druckteile geben um den Ausbau auch sicher zu befestigen.

Software:
Hier wird am meisten gearbeitet und hier gibt es auch am meisten zu tun.
Zum einen werden die Gelenkservos nun mit 50Hz angesteuert und laufen damit weniger hakelig als vorher. Die Steuerung des Gesamtsystems hat nun einen eigenen “Steuerungs-Thread” und ist damit auch für komplexere Ansteuerung gerüstet. Die Bewegungssequenzen sind nun auch präziser, da nicht mehr jedes Gelenk einzeln angesteuert wird, sondern alle Servos zusammen (und fast zeitgleich) aktualisiert werden. Dadurch wird auch der erforderliche Code für die Bewegungen kürzer und übersichtlicher. Die einzelnen Gelenke laufen auch jeweils in kleinen “Threads” und interpolieren die geforderte Bewegung in der gewünschten Geschwindigkeit (allerdings bisher noch linear).
Über die Kommandozeile ist es nun auch möglich Kommandos auf Gelenkebene und für das Gesamtsystem direkt per USB-Verbindung einzuspeisen und sich so komfortabler an mögliche Bewegungen ranzutasten. Ohne Try&Error geht da fast nichts, zumal nicht jede Bewegung theoretisch sicher abgeschätzt werden kann.
Auch muss ich so nicht mehr jeden Versuch erst mal als Programm neu übertragen, was auf Dauer auch das Flash ausnudelt.
Da die Kommandozeile auf Dauer auch keine Laune macht, vor allen nicht wenn es um Timing-Fragen geht, ist nun ein PS2-Spielecontroller mit Funkverbindung im System. Eigentlich ein bekannter Kandidat, allerdings nur auf den Arduinos. Mit dem ESP32 gab es einige hakelige Punkte die erst mal (in der Library) angepasst werden musste. Nach ein paar Stunden Fluchen, Suchen, Umstecken und weiteren Fluchen macht das Teil endlich wieder was es soll. Aber so richtig Lustig war das nicht, zumal ich da keine derartigen Probleme erwartet hatte.
Aktuell ist der Fokus der Entwicklung also in den Bewegungen des Systems und den Übergängen zwischen Kommandos. Auch wird alles für ein 18DOF Modell vorbereitet um hier die Anpassungen übersichtlich zu halten. Je mehr ausprobiert wird, desto öfter finden sich auch kleine Bugs die natürlich auch rausgearbeitet werden.

Mit dem Gamepad hat nun auch der Sohnemann den ersten Kontakt mit dem neuen Stubenmitglied und schon (für den geringen Funktionsumfang) viel Spaß. Hier noch ein kurzes Video mit den ersten Versuchen mit Gamepad und Lipo nach Umbau:

Planspiele NextGen:
Mit den Erfahrungen gibt es natürlich auch den Wunsch nach Verbesserung. Am aktuellen Modell wird nicht mehr viel geschraubt, und die fehlenden Freiheitsgrade sind nicht auszugleichen.
Nebenher wird also die neue Generation schon mitentworfen. Folgende Rahmenbedingungen zeichnen sich bereits ab:

  • Das Basisdesign orientiert sich an einem Nachbau des bekannten PhantomX AX von Trossen Robotics. Um die Kosten im Rahmen zu halten, wird dort mit MG996R Digitalservos gearbeitet. Scheinbar kraftvoll genug, 18DOF, kugelgelagerten Gelenken, einem geeigneteren rechteckigen Layout und genügend Platz alles drauf zu montieren. Der Grundaufbau mit kleinem Akku sollte mit ca. 200€ Materialkosten möglich sein.
  • Die Ansteuerung der Servos wird direkt vom Controller erfolgen anstatt über den bisher verwendeten PCA9685. Zum einen ist der I2C-Bus ein potentieller Flaschenhals bei schneller Ansteuerung aller Servos, zum anderen möchte ich bessere Kontrolle über die Ansteuerung bekommen. Der ESP32 hat hierfür genügend I/Os, sollte also passen.
  • Die Stromversorgung wird ähnlich ausgeführt, benötigt aber einen leistungsfähigeren SBEC. Eine Version mit 20A sollte normalerweise genügen und ist bestellt. Der könnte dann auch mit leistungsfähigeren Lipos umgehen, falls notwendig.
  • Die Fernsteuerung per PS2-Controller bleibt. Je mehr die Software bietet, desto höher ist der Nutzen einer solchen Steuerung.
  • Die Software sollte sich nahtlos umstellen lassen, natürlich mit einigem an Feintuning. Durch die zusätzlichen Freiheitsgrade sollte es aber speziell bei Bewegungen in eine Richtung wesentlich flüssiger und ohne das ausgeprägte Gerutsche laufen.
  • Ein Feedback über die Gelenkpositionen wäre wichtig, aber noch ungelöst. Eine Option wäre ein Rückkanal über Potis, dafür fehlen dem ESP aber die benötigten Eingänge. Eine Idee sind hier Analogmultiplexer, aber das muss sich erst noch zeigen.
  • Auch wäre es sinnvoll, an den Beinspitzen ein Feedback für Kontakt zu bekommen. Das geht z.B. mit Mikroschaltern oder über Drucksensoren. Auch hier ist es noch nicht klar wohin die Reise geht.

Natürlich gibt es Tonnen an weiteren Ideen und erforderlichen zusätzlichen Arbeiten, aber auch hier ist die Basisplattform erst mal das wichtigste.

Fazit:
Es bleibt also spannend und weiterhin viel zu tun. Es zeigt sich aber, dass es in die richtige Richtung geht und die Ergebnisse werden mit jedem Versuch besser. Das NextGen-Projekt wird aber auch erst 2021 starten und dann vermutlich auch einige Zeit brauchen, zumal ich dann hoffentlich auch wieder in regulären (Brot&Butter-) Projekten zu tun habe.

Hexapod – Wir werden besser

Der erste Ansatz hat ja einige Probleme mit sich gebracht und leider doch wieder einige Anpassungen notwendig gemacht. Neben der ...
Weiterlesen …

Hexapod – wir lernen laufen

Die Hausspinne hat inzwischen Fortschritte gemacht, genug um den neuen Stand in einem Text zu beschreiben. Verbesserungen im Steuerprogramm, neue ...
Weiterlesen …

Hexapod – Roboter mit Schüttellähmung

Nachdem nun alle Teile im Haus sind und der Aufbau erst mal fertig ist, geht es daran die Bewegungen richtig ...
Weiterlesen …

DIY – Hexapod als neue Hausspinne

Ein schon langes geplantes Projekt, dass ich aber auch lange mangels Zeit verschieben musste, war ein Hexapod aus eigener Fertigung ...
Weiterlesen …

Hexapod – Roboter mit Schüttellähmung

Nachdem nun alle Teile im Haus sind und der Aufbau erst mal fertig ist, geht es daran die Bewegungen richtig in das System zu bekommen. Wie zumeist gibt es auch hier wieder viele Details zu klären und manchmal auch fundamentale Momente von B*******.

Projekt: Hexapod 12 DOF

Kontakt: Boris Dirnfeldner

Link– eigenes Projekt –

Mit den inzwischen angekommenen Schrauben ist die Mechanik schnell fertig aufgebaut und funktioniert auch wie erwartet. Alle Beine haben etwas Spiel, sind aber trotzdem recht gut geführt. Die Servos sitzen sicher und die Elektronik ist provisorisch fixiert. Die Deckplatte habe ich aber nicht festmontiert, da der Kabelbaum von den Servos recht hoch aufträgt und sonst an ein oder zwei Servoarmen scheuern würde. Vorerst aber gut genug.

Mit dem Uno bin ich zunehmend unglücklich. Zwar scheint er noch genug Leistung zu bringen um die Steuerung zu leisten, aber wenn ich dazu Kommandozeilen-Befehle nutze kackt mir das System ab. Nach inzwischen 3 Tagen Versuch und Irrtum, einem komplett neu aufgebauten Modul ohne Fremdcode und viel Frust habe ich davon die Nase voll. Wo immer das Problem ist, es tritt erst auf mit der Kommandozeile, und da finde ich nix mehr. Irgendwo gibt es eine Querwirkung, aber mit der Arduino-Entwicklungsumgebung bekomme ich kaum Hilfe bei der Suche. Perverserweise funktioniert alles auf dem ESP32 ohne Probleme, daher verabschiede ich mich vom Uno früher als geplant. Ohnehin war er schon ziemlich ausgelastet und der Umzug auf den ESP32 auch schon klar, daher spare ich mir die Zeit den Uno hier stabil zu bekommen. Daneben zeigt sich beim Uno auch, dass die Initialisierung des Servocontrollers zu merkwürdigen Ausschlägen bei den Beinen führt. Nicht so beim ESP32. Also weg damit.

Mit den ersten Versuchen und Bewegungen zeigen sich auch Schwächen des gewählten Modells und der ersten Steuerungsversuche. Die verwendeten 9g-Servos sind klein, leicht und billig. Allerdings zeigt sich auch, dass die Mechanik mit der direkten Verbindung an den Servoarm zu Problemen führt. Bei schnellen Bewegungen fährt der Arm wohl über das Ziel hinaus und wird dann recht hart vom Servocontroller zurückgefahren. Dabei geht es dann in die andere Richtung mit dem gleichen Effekt. Im Ergebnis schaukelt sich das dann so stark auf, dass der Robot in Schüttellähmung mit sich selbst beschäftigt ist. Hier mal ein Video wie das dann aussieht:

Eigentlich macht alles was es soll. Da aber die Mechanik ziemlich Spiel hat unterstützt das halt solches Verhalten. Auch die Servos sind hier problematisch, da zwischen den beiden Regelpunkten kaum mechanischer Widerstand vorhanden ist. Das folgende Video zeigt gut das Verhalten im System. Wenn ich mit der Hand das Bein in eine Richtung in den Anschlag führe, drückt der Servo plötzlich dagegen. Das gleiche passiert in die andere Richtung. Im Video sieht man dann ein Ruckeln (wenn der Servo die zentrale Scheibe drückt) und hört den Servo anfahren. Durch den guten Hebel schafft das an sich recht leichte Bein diese Bewegung fast ohne Widerstand, und der starke Servoschub gibt dann Schwung in die Sache. Das lässt sich mit leichtem Anschlagen auch gut provozieren.

Hier muss ich also stärker dämpfen. Am Modell geht das zum einen natürlich durch langsame Bewegungen und durch stärker angezogene Schrauben. Hier wird wohl noch einiges an Try&Error notwendig sein. An den Hebearmen sieht man auch beim Einschalten, das die Servos das Gewicht gut stemmen können. Von der Dimensionierung her passt also alles soweit.

Die Steuerung arbeitet inzwischen auch mit Zwischenschritten zur besseren Kontrolle und auch um langsamere Bewegungen zu ermöglichen. Leider kann ich den Servos keine Stellgeschwindigkeiten vorgeben, daher muss halt die Software ausreichend Zwischenschritte einfügen. Dazu läuft im Hintergrund für jedes Gelenk eine Steuerung, die eine (vorerst) lineare Anpassung der PWM-Stellvorgaben berechnet und derzeit ca. 20-mal pro Sekunde anpasst (mehr konnte der Arduino Uno nicht mehr leisten). Das Servo arbeitet mit ca. 50 Hz, es gibt also noch Luft nach oben. Man hört und sieht auch, dass ein leichtes Ruckeln in den Bewegungen vorhanden ist. In der Software gibt es inzwischen auch Logik, um Bewegungssequenzen aneinander zu reihen und abarbeiten zu lassen. Natürlich nicht optimal, aber fürs erste ok.

Hier ein Video für eine einfache Testsequenz. Man sieht das kontrollierte Bewegungen an den Hebearmen im Vergleich schon gut gelingen.

Bei den ersten Gehversuchen hat sich auch gezeigt, das mit nur 12 Freiheitsgraden das Modell mechanisch zu eingeschränkt ist um flüssig wirkende Bewegungen zu erlauben. Die Beine können so nicht nach Außen oder Innen bewegt werden und rutschen so immer am Boden rum. Verstärkt wird das Verhalten auch durch die Platzierung der Beine, hier wäre es wohl besser eine rechteckige Grundform zu wählen und dann die Beine seitlich zu platzieren. Kommt auf den Merkzettel fürs nächste Modell.

Der Einfachheit halber werden die Servos aktuell mit einem 18650-er Schield von Wemos versorgt. Das ist zwar wegen den integrierten Lade- und Sicherungskomponenten schön, auch wegen des mechanisch kompakten Aufbaus, aber leider scheint die Wahl des 18650 ein Fehler zu sein. Beim Einschalten oder bei schnellen Bewegungen scheint hier die Last zu hoch zu werden und das Modul schaltet die Stromversorgung ab. Zwar meint das Teil bis zu 4A bei 5V liefern zu können (laut Aufdruck), aber richtig glauben will ich das nicht. Der Akku sollte typischerweise mit 1C belastbar sein, also mit bis zu 2,2A. Im Internet wird bei den Servos von ca. 200mA Strom gesprochen, in der Spitze sogar bis zu 600mA im Anschlag (also volle Leistung gegen ein Hindernis). Wenn da mehrere Servos gleichzeitig loslegen, kann ich mir schon eine Überlastung der Versorgung vorstellen. In der Praxis schaltet das Modul dann die Spannung fast komplett weg und benötigt dann einen “Neustart” per Akku raus und rein. Lästig, aber ok zum Testen. Später muss ich wohl eine richtige Versorgung per Modellbau-Lipo etc. machen.

Fazit:
Es war ja eigentlich schon klar, dass der erste Versuch nicht so richtig gut sein wird. Das Modell sollte primär schnell druckbar und einfach aufgebaut sein. Im Nachhinein ist es zu einfach aufgebaut um wirklich flexibel zu sein, aber trotzdem ein guter Start. Die Probleme mit dem Arduino Uno sind leider auch nicht unerwartet gekommen. Und dass es bei komplexen Bewegungen Zeit benötigt um eine gute Lösung zu schaffen ist auch klar. Wer sowas schon mal angefangen hat, kann dies sicher gut nachvollziehen. Mit dem Modell wird jetzt erst mal weiter geprobt und Software als auch Mechanik zu einer gewissen Reife gebracht. Nächstes Jahr sehe ich aber eine neue Version kommen, dann mit 18 Freiheitsgraden, besseren Servos und auch mehr Hintergrund aus der aktuellen Runde.

Hexapod – Wir werden besser

Der erste Ansatz hat ja einige Probleme mit sich gebracht und leider doch wieder einige Anpassungen notwendig gemacht. Neben der ...
Weiterlesen …

Hexapod – wir lernen laufen

Die Hausspinne hat inzwischen Fortschritte gemacht, genug um den neuen Stand in einem Text zu beschreiben. Verbesserungen im Steuerprogramm, neue ...
Weiterlesen …

Hexapod – Roboter mit Schüttellähmung

Nachdem nun alle Teile im Haus sind und der Aufbau erst mal fertig ist, geht es daran die Bewegungen richtig ...
Weiterlesen …

DIY – Hexapod als neue Hausspinne

Ein schon langes geplantes Projekt, dass ich aber auch lange mangels Zeit verschieben musste, war ein Hexapod aus eigener Fertigung ...
Weiterlesen …

Wir benutzen Cookies und Logs mit personenbezogenen Daten ausschließlich für essentielle Funktionen wie z.B. bei der Benutzeranmeldung oder der Fehlersuche. Für Videos werden weitere Cookies von Drittanbietern benötigt. Details finden sie unter dem Link "Weitere Informationen".