Der erste Ansatz hat ja einige Probleme mit sich gebracht und leider doch wieder einige Anpassungen notwendig gemacht. Neben der Schüttellähmung bei den Drehservos ist leider auch immer wieder die Servoansteuerung ganz ausgestiegen und die Bewegung wurde nie flüssig. Inzwischen sind wir hier weiter und ein neuer Artikel ist fällig.

Projekt: Hexapod 12 DOF

Kontakt: Boris Dirnfeldner

Link– eigenes Projekt –

Nachdem die Software eine gewisse Reife hatte, sind trotzdem einige Dinge nicht durch simples Parametertunen zu lösen gewesen.

Das große Zittern
Ein wirklich blödes Verhalten war das ständige Gezittere bei den Drehservos. Die Plastikgetriebe (ok, Nylon) sind zwar ok und sehr günstig, da aber dann doch überfordert. Nur mit anziehen der Schrauben wurde es zwar etwas besser, am Ende aber immer noch ein Problem oder die Gelenke nicht mehr zu bewegen. Da ich inzwischen Servos mit Metallgetriebe habe (MG90), wurden die 6 Drehservos kurzerhand getauscht. Die MG90 sind hier um Welten besser und bieten kaum Spiel. Damit war das Aufschaukeln weg und die Bewegungen im Vergleich sehr gut kontrollierbar. Kraft war hier ohnehin nie ein Thema, lediglich die Lautstärke ist etwas höher. Die Hebeservos waren hier problemlos, daher bleiben die erst mal drin.

Plötzlicher Kontrollverlust
Ein richtig nerviges Ding war, das immer wieder und plötzlich alle Servos kraftlos wurden. Im Code war das nicht zu begründen, schien sich aber bei komplexeren Bewegungen aller Servos zu häufen. Danach war das System nur durch Neustart mit Powercycle wieder zur Kooperation bewegen. Der ESP hat dabei aber immer fröhlich weiter gemacht, nur hat es die Servos nicht mehr interessiert. Nach etwas Fehlersuche schien der I2C-Bus, über den der PCA9685 angeschlossen ist, die Grätsche zu machen. Nach etwas Netzrecherche scheint es wohl Probleme mit dem ESP32 zu geben, wenn zeitgleich die serielle Schnittstelle und der I2C-Bus am Werkeln sind. Keine Ahnung ob das nun wirklich so stimmt, bleiben konnte es so nicht. Da das Gamepad zwingend eine serielle Verbindung braucht, muss dann halt der Servocontroller weichen. Der zickte ja auch beim Einschalten rum (harte Ausschläge der Beine beim Initialisieren der Lib) und sollte in einer späteren Version auch ersetzt werden, daher gleich weg damit.
Der ESP triggert nun direkt per I/O die PWM-Eingänge der Servos. Damit das einigermaßen ordentlich funktioniert, musste auch schon mal eine erste Version einer Stromverteilerplatine dazu, die sowohl Servokabel, Strom als auch Signale zusammenbringt. War auch erst später geplant, aber was solls. Die erste Version ist leider wieder löttechnischer Pfusch, tut aber erst mal. Für das nächste Modell muss das aber nochmal und richtig gemacht werden.

Grenzen des PWM
Da nun der Servocontroller in den ESP gewandert ist, muss nun auch eine passende Lib dafür her. Die gibt es zuhauf und verwenden (fast alle) das eingebaute PWM-Modul. Leider hat der ESP32 damit „nur“ 16 unabhängige Kanäle, damit für das spätere 18DOF-Modell Zuwenig. Wenn ich aber schon umbauen muss, dann auch so dass die Lösung nachher auch weiterverwendet werden kann. Bei der Suche nach einer Lösung ist mir eine Library untergekommen, die mit einem Timer und Interrupt arbeitet und (mit kleinen Anpassungen und auch gemäß der Meinung des Entwicklers) auch deutlich mehr Servos verkraftet (Link). Mit etwas Try&Error und der Verteilerplatine hat sich tatsächlich eine stabile Lösung zur Servoansteuerung gefunden, die auch mit den geplanten 18 Servos klarkommen sollte. Die Ansteuerung haut auch nicht unkontrollierte Bewegungen raus wie beim Servocontroller. Im Code ist der Umstieg relativ schnell getan, und bis auf kleine Anpassung der Parameter in der Berechnung und Initialisierung funktionierte es auch fast Out-of-the-box. Leider hatte der Ansatz mit dem Timer Anfangs auch Probleme gemacht, da auch der Scheduler so arbeitet und der Überwachungsthread hier mit der Servolib den gleichen Timer verwenden wollte. Nachdem das klar war auch kein Problem, zumal ich die Überwachung in dieser Lösung eh nicht brauche.

Ruckelnde Bewegungen
Eigentlich war ja die Bewegungssteuerung für mich das interessante an diesem Projekt. Umso ärgerlicher war es, dass ich es bisher nicht geschafft hatte eine flüssige Bewegung ohne ruckeln zu bekommen. Entweder die Servos auf Vollgas laufen lassen (und damit zu schnell) oder ruckeln. Zwar wurde das Ruckeln immer formvollendeter, aber es blieb dabei. Nachdem mit den ganzen Änderungen zumindest ein stabiles System erreicht worden ist, ging es also wieder an die Steuerung. Eigentlich war es klar, dass die Steuerung nicht schnell genug durch die Regelschleifen kommt und dadurch ruckelt. Normalerweise sollte durch Anpassen der Scheduler-Konfiguration das leicht anzupassen sein, aber irgendwie brauchte der Code einfach zu lange. Der ARM-Kern sollte aber locker genug Leistung haben, zumal vergleichbares auch schon mit 8-Bit ATMEL-CPUs gemacht worden ist. Irgendwann (eher durch Zufall) hatte ich plötzlich eine saubere, ruckelfreie Bewegung, und zwar einfach durch Abschalten der Debug-Meldungen. Tatsächlich bremsen die Debug-Meldungen am seriellen Bus das System derart aus, das alle anderen Parameter schlicht nicht mehr zum Tragen gekommen sind. Nachdem das klar war, ging es in Riesenschritten zu im Vergleich schon sehr guten Bewegungen.

Der macht was er will
Ein letztes Thema ist aber immer noch, dass immer wieder das System eigenwillig in die Ruhelage steuert (egal was ich am Gamepad mache). Hier hatte ich vorher noch die Hardware oder die Servos im Verdacht, tatsächlich ist es aber ein Standardverhalten des Dongles für den PS2-Controller, wenn die Verbindung abbricht. Das System bekommt das nicht mit (der Dongle verhält sich wie ein Gamepad ohne Input), lediglich der Controller selbst blinkt dann als Hinweis auf den Verbindungsverlust. Es scheint, als on der Dongle nicht zu nah am ESP sein darf, weil sonst die Verbindung abbricht. Naja, auch nicht unmöglich zu lösen, wenn man es weiß.

Fazit:
Natürlich ist das Teil immer noch eine Bastelei. Allerdings sind viele der Anpassungen, die erst fürs nächste Modell geplant waren bereits umgesetzt und wieder neues dazu gelernt worden.
Die Steuerung macht schon richtig Laune, und im Übermut konnte ich sogar kleine Hopser mit dem Teil fabrizieren. Jetzt geht es aber zurück an die eigentliche Aufgabe, nämlich dem Teil endlich das Gehen beizubringen (soweit halt möglich mit den eingeschränkten Freiheitsgraden).

Hexapod – Wir werden besser

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

Hexapod – wir lernen laufen

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

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 ...

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 ...

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".