Mein Hexapod: Erste Schritte auf der Hardware

Veröffentlicht von am 22. März 2014 in Mitgliederblog

Es geht weiter mit meinem Hexapod! (Intro)

Testaufbau mit Raspberry Pi, Display, PWM Treiber und Servo

Testaufbau mit Raspberry Pi, Display, PWM Treiber und Servo

Das Gehirn

Wie schon im Intro erwähnt, wird das Gehirn des Roboters ein Raspberry Pi Rev.2. Der RasPi kommuniziert per USB-WLAN-Dongle mit der Welt und ist ansonsten out of the box. Die weitere Hardware wird per I2C angeschlossen. Als Betriebssystem läuft ein normales Raspbian ohne X-Server, weil ich sowieso nicht plane einen Monitor anzuschließen.

Als Programmierumgebung benutze ich auf meinem Windows Laptop Eclipse mit PyDev und EGit. Der Datenaustausch mit dem Raspberry erfolgt über das Github Repository und das Projekt wird komplett in Python programmiert.

Das Display

Um auch ohne großen Monitor ein wenig Info aus dem Raspberry zu bekommen, habe ich ein Display Board von Adafruit angeschlossen. Das Board hat die gleichen Abmessungen wie der Raspberry und kann direkt auf dem GPIO Header gesteckt werden. Wichtige Erkenntnis dabei: nächstes Mal unbedingt den Stecker mit längeren Pins mitbestellen, damit man weiter Zugriff auf die Pins hat. Ich habe nur den normalen Stecker bestellt, daher musste ich ein Adapterboard löten, um zumindest die I2C Pins weiter verwenden zu können.

I2C Adapterboard

I2C Adapter, nicht schön, aber selten

Auf dem Displayboard ist zum einen natürlich das Display mit 16×2 Zeichen in Blau-Weiß zu finden, zum anderen sind auch 5 Buttons verbaut, was z.B. eine einfache Menüstruktur ermöglicht. Mein Menü besteht aktuell aus drei Punkten, die per Button durchgeblättert werden können:

  • Uhrzeit
  • IP Adresse
  • Cpu-Last und Cpu-Temperatur

Weitere Details zu der Software folgen in einem späterem Beitrag.

Die Servos

Um die Servo Motoren mit dem Rasperry Pi anzusteuern braucht man ein Treiberboard. Ich habe bei diesem Projekt das PWM Board von Adafruit mit 16 Kanälen und jeweils 12Bit im Einsatz. Herauszufinden, wie man die Servos ansteuern muss, damit sie das tun, was man erwartet, war schwieriger als erwartet. Und das obwohl Adafruit ein Tutorial für die Python Bibliothek zur Verfügung stellt. Aber nach ein paar Stunden herumprobieren und einem fast zerstörtem Servo kann ich jetzt per WLAN einen Servo in eine gewünschte Position stellen. Auch hierzu mehr in einem späteren Beitrag.

Die RB 65PG Servos von Robotbase sollen laut Datenblatt 180° Bewegungsradius haben. Effektiv haben sie leider nur 80°, also in jede Richtung 40° von der Mittelstellung. Es wird sich zeigen, ob das ausreichend ist.

Ausblick

Als nächstes steht die Konstruktion der Körperteile auf dem Plan. Bislang ist mein Plan, die 3D-Teile mit OpenSCAD zu konstruieren. Ich werde dann hier von meinen Erfahrungen damit berichten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

  1. Tobias sagt:

    Hallo Thomas,

    bist Du weitergekommen mit der Ansteuerung von Servos
    via RasPI?
    Die Anleitung auf Adafruit habe ich zwar auch gefunden aber die hilft mir nicht weiter, kannst Du vielleicht dazu noch ein paar Infos geben?

    Gruß Tobi

    • Thomas Helmke sagt:

      Hallo Tobias,
      das Ansteuern der Servos hat eigentlich ganz gut funktioniert zum Schluss. Ich habe aber auch schon länger nichts mehr daran gemacht. Wenn ich wieder in das Projekt einsteige muss ich mir wahrscheinlich das meiste neu erarbeiten ;)
      Mein Python-Code für die Servo-Ansteuerung liegt bei Github[1], da kannst du gerne mal reinschauen. Ist aber leider nicht kommentiert.
      Wenn du noch weitere Fragen hast, kannst du mich auch gerne direkt anmailen.
      Gruß
      Thomas

      [1]https://github.com/Syralist/yet-another-hexapod/blob/master/hexapy/ServoClasses.py

      • Nils Hoffmann sagt:

        Hallo!

        Auch ich werkele nach wie vor an meinem Hexapod. Die Infos hier und auf GitHub waren da schon eine Hilfe.
        Ich werde die Tage mal ein wenig Hilfestellung leisten was die Ansteuerung der Servos angeht. Jedoch ruht mein Projekt auch gerade, da ich als Lehrer einiges um die Ohren habe. Ja, wir haben nicht nur vormittags Recht und nachmittags frei :-)

        Außerdem ist mir wohl einer meiner Servos abgeraucht. Muss ich aber noch verifizieren. Wie gesagt, die Tage kommt auch noch etwas Support von mir.

        Meinen Code kann ich auch bereitstellen. Das ist aber absolutes Flickwerk und sehr chaotisch. Zumindest kann mein kleiner Hey damit aber mal aufstehen. Vom echten Laufen kann keine Rede sein. Ich werde aber mal nen Link posten. Dort hat ein findiger Entwickler das Ganze mathematisch mit Koordinaten gelöst und dem Hex so quasi einen natürlichen Bewegungsablauf verpasst. Ich steige da nicht durch, aber vielleicht ja ihr.

        So long …
        Nils

  2. Nils sagt:

    Schön zu sehen, dass auch andere sich an ähnliche Projekte wagen :-)

    Nachdem ich meinem recht doofen Robosapien einen Pi auf den Rücken geschnallt habe, ihn über eine alte IR-LED und etwas Software auf dem Pi nun kontrollieren kann, wollte ich mich an ein größeres Projekt wagen. Für den „Roboraspian“ habe ich bereits ein kleines Programm in bash geschrieben, sodass ich ihn über die Tastatur eines beliebigen PCs kontrollieren und seine Bewegungen über eine Kamera verfolgen kann :-) Auch Sound wird über den Lautsprecher des Robos ausgegeben (AMP zwischengeschaltet) läuft gut.

    Nun habe ich mir 18 Servos, ein Hexapod-Gestell, nen Pi und zwei Adafruit 16-Kanal Boards bestellt und muss dem noch „hirnlosen“ Hex jetzt das Laufen bei bringen.

    Du schreibst, die Servos anzusteuern sei schwierig und du hättest einen Servo fast zerlegt …

    Deshalb wäre ich für Tipps zur Umsetzung, sprich zu python-scripts von Adafruit und Steuerung, dankbar.

    Das Programmieren wird wohl der schwerste Teil, da ich darin nicht ganz so bewandert bin … aber man wächst ja mit seinen Aufgaben ;-)

    Gruß
    Nils

    • Thomas Helmke sagt:

      Hallo Nils.

      Ich habe schon eine ganze Weile nicht mehr am Hexapod gebastelt, aber ich glaube das Problem bei den Servos war, dass man das Steuersignal zwischen 1ms und 2ms einschalten muss. Wenn man mit der Umrechnung durcheinander kommt und ausserhalb dieser Zeiten kommt dann knurrt das Getriebe ganz böse ;)

      Meinen Code kannst du unter https://github.com/Syralist/yet-another-hexapod finden. Die Servoansteuerung ist in den Servo-Classes programmiert: https://github.com/Syralist/yet-another-hexapod/blob/master/hexapy/ServoClasses.py

      Bist du aus Bremen? Dann kannst du ja mal im Hackerspace vorbeischauen ;)

      Gruß
      Thomas

      • Nils sagt:

        Wie du an meiner sehr verspäteten Antwort erkennen kannst, musste mein Projekt auch aus Zeitgründen ruhen :-)

        Nein, ich bin nicht aus Bremen … komme aus einer ganz anderen Ecke Deutschlands.

        Ich kann die Servos auch in vordefinierte Positionen bringen. Habe es mit Hilfe der Dateien von Adafruit geschafft, einfache defs zu schreiben, die die Beinchen des Hex in Min, Max und Mid-Position ausrichten und auch eine, die ihn aufstehen lässt *stolz*

        Für jemanden, der von Python und anderen Programmiersprachen eigentlich keine echte Ahnung hat, ist das schon was :-)

        Aber: Durch deinen Code und andere Beispiele von echten Programmieren steige ich nicht durch.

        Habe ein schönes Beispiel gesehen, in dem ein Programmierer alle Befehle an die Motoren durch einen darüber liegenden „Layer“ von Code geschickt hat. So konnte er den Hex mit einem Playstationcontroler steuern.

        Du scheinst da auch einen ähnlichen Ansatz zu verfolgen, zumindest deute ich einige deiner Classes so („set_angle“ etc.)

        Das bekomme ich definitiv nicht hin, dafür bin ich nicht gut genug. Steige so schon kaum durch. Nun habe ich aber gesehen, dass einige Hersteller von fertigen Hexapods Software anbieten, die die Steuerung übernehmen können. Kennst du ein solches, möglichst freies Programm (das unter Linux läuft), mit dem ich meinem Freund das Laufen beibringen kann?

        Zu dem „Knurren“, das du beschreibst: Kann ich nicht ganz nachvollziehen. Ich habe auch mehr oder minder auf „gut Glück“ herumexperimentiert. Bei mir war ein Problem, dass ich die Energieversorgung zunächst zu schwach gewählt hatte. Sobald ich mehr als einen Motor gleichzeitig ansprach, zitterten die Beinchen … :-(

        Mit zwei Mal vier AA Batterien ging es dann ganz gut. Nun bin ich auf einen Spannungswandler mit sechs Li-Ion-Akkus umgestiegen.

        Von welchem Steuersignal schreibst du da eigentlich? :-) Ich muss mich hier als NOOB outen, da ich von Physik, Elektrotechnik und Programmierung echt nicht viel Ahnung habe.

        Wenn du möchtest, schick mir doch mal ne e-Mail mit ein paar Bildern deines Hex. Würde mich sehr interessieren.

        Gruß
        Nils