Hexapod (Tastsinn)

Aus Das Projektwiki
Zur Navigation springen Zur Suche springen
PhantomX Hexapod Mark II WS 2016/17

!!!This site is under construction!!!

Die Aufgabe dieses Projektes war es, einem "PhantomX Hexapod Mark II" einen Tastsinn zu geben. Dabei sollten mehrere Möglichkeiten der Umsetzung betrachtet werden, von denen aber nur eine verwendet werden sollte. Die schlussendliche Umsetzung verzichtet auf die Verwendung zusätzlicher Sensoren und benutzt die Funktionalitäten der Servos, um einen Tastsinn in zwei Anwendungsfällen zu realisieren.

Das Projekt wurde von Thassilo Bücker und Alexander Orzol für das Modul "Softwareentwicklung für eingebettete Systeme" durchgeführt.



Konzept

Hardware

Bein des Hexapoden mit Servos, Aufbau von links nach rechts: Coxa, Femur, Tibia
Fernbedienung zur Steuerung des Hexapoden

Die verwendete Hardware umfasst den Hexapoden-Roboter und eine dazugehörige Fernbedienung. Bei dem Roboter handelt es sich um einen "PhantomX Hexapod Mark II" (weiterhin als "Hexapode" bezeichnet). Dieser besteht aus diversen Trägerelementen, die durch Servo-Motoren des Typs AX-12A (weiterhin als "Servos" bezeichnet) bewegt werden. Jedes der sechs Beine besteht dabei aus drei Servos, wodurch in dem Hexapoden insgesamt 18 Servos verbaut sind. Diese Servos werden mit einer 12V Betriebsspannung versorgt. Die Versorgung kann entweder über ein Netzteil oder über einen Akku bereitgestellt werden.

Die Ansteuerung der Servos erfolgt über einen Einplatinencomputer, einen "Beagle Bone Black" (weiterhin als "BBB" bezeichnet). Dieser wird über einen Spannungswandler, der eine 5V Ausgangsspannung liefert, mit der Versorgungsspannung der Servos betrieben. Auf diesem läuft die gesamte Software zur Bewegung des Roboters, Verwertung der Fernbedienungssignale und Realisierung des Tastsinns. Die Verwendung dieses Controllers ist im Werkszustand nicht vorgesehen. Im Projekt Hexapod (Umbau) wurde der originale Controller, welcher über die Arduino IDE programmiert werden konnte, gegen den BBB ausgetauscht.

Der ursprüngliche Controller verfügte über einige zusätzliche Funktionalitäten, welche über die Steuerungsaufgaben hinausgehen. Dazu gehören die Unterbringung des Spannungswandlers, die Befestigung des Funkmoduls "Xbee" und die Bussteuerung. Um diese Funktionalitäten weiter zu gewährleisten wurde eine neue Platine erstellt. Auf dieser wurde der Spannungswandler des Original Controllers installiert. Desweiteren ist auf ihr ein IC des Modells "SN74LS241N" untergebracht. Dieses ermöglicht die Umsetzung der Vollduplex-Kommunikation auf Seiten des BBB auf eine Halbduplex-Kommunikation auf Seiten des Servo-Busses. Zuletzt befindet sich auf der Platine die Halterung des Xbees inklusive einer 3,3V Spannungsversorgung vom BBB für den Xbee.

Der Xbee ist ein Funkmodul, welches mit einem anderen Xbee Daten austauschen kann. Die Daten werden dabei über eine serielle Schnittstelle übergeben. Dies bietet den Vorteil, dass die Controller auf dem Hexapoden und der Fernbedienung sich nicht um die Logik zum Versenden und Empfangen von Daten kümmern müssen. Diese Kapselung spielt für dieses Projekt zwar keine große Rolle, ist aber für eine Echtzeitfähigkeit, wie im Projekt Hexapod (Echtzeitfähige Steuerung) wichtig.

Definition

Bei der Durchführung dieses Projektes ist es wichtig zwischen den Begriffen "Tasten" und "Tastsinn" zu unterscheiden. Dabei bezeichnet der Tastsinn allgemein die Fähigkeit, Berührungen wahrzunehmen. Dies umfasst keine Spezifizierung, wie dies geschieht. Das Tasten hingegen ist der Vorgang, bei dem ein Wesen mit kontrollierten Bewegungen einen Gegenstand erfühlt. Das Tasten ist also die Anwendung eines Tastsinns in einem bestimmten Bereich. Daher soll in diesem Projekt ein Tasten realisiert werden, denn ein allgemeiner Tastsinn würde die Möglichkeit, Bewegung in alle Richtungen wahrzunehmen, erfordern.

Realisierungsoptionen

Zur Realisierung gab es entweder die Möglichkeit den Hexapoden mit weiteren Sensoren auszustatten oder die Funktionalitäten der Servos zu benutzen. Bei der Anbringung weiterer Sensoren würden sich Näherungssensoren zur Erkennung eines Abstandes anbieten. Ultraschallsensoren würden mit dem gleichen Prinzip eine Möglichkeit bieten. Desweiteren könnten Kraftmesser benutzt werden, um den Druck auf Partiien des Hexapoden zu messen. Diese Implementierungen hätten den Vorteil, dass sie in den meisten Fällen keinen direkten Kontakt zu einem Objekt erfordern würden, um dieses zu erkennen. Die Nachteile dabei wären hingegegen, dass diese Sensoren oft nur einen beschränkten Wirkungsbereich hätten und für eine universelle Einsetzbarkeit mehrere Sensoren installiert werden müssten. Auch entspräche die Erkennung von Objekten auf Distanz nicht dem Tasten, wie man es von der Verwendung von Lebewesen kennt, die dafür direkten Kontakt benötigen.

Die Option, die hier daher betrachtet werden soll, ist die Verwendung der Servos. Diese haben den Vorteil, dass sie bereits an allen Seiten des Hexapoden angebracht sind und so in jede Richtung verwendet werden können. Auch wird der Hexapode direkten Kontakt benötigen, um die Servos zur Objekterkennung benutzen zu können. Ein Nachteil ist, dass man die Servos und deren Protokoll und Aufbau nachvollziehen muss.

Umsetzung: ino

In dieser Umsetzung soll der Hexapode in die Lage versetzt werden, eine vor ihm liegende Wand zu erkennen. Dazu soll der Hexapode auf vier Beine gestellt werden, während er zwei seiner Beine als Fühler aufstellt, wie es manche Spinnenarten tun.

Prinzip

Die Umsetzung baut auf einen Vergleich zwischen einem IST- und einem SOLL-Zustand auf. Dabei wird eines der internen Register der Servos verwendet. In diesem Register "PRESENT_LOAD" wird der Betrag der aktuellen Last gespeichert. Dabei handelt es sich um einen Wert zwischen 0 und 2080, wobei die 2080 den Maximalwert darstellt. Wird dieser Wert einige Zeit gehalten, schalten sich die betroffenen Servos ab. Die Last gibt an, wieviel Kraft der Servo momentan aufbringt. Drückt er gegen einen Gegenstand, muss der Servo mehr Kraft aufbringen, um seine Position zu halten.

Die Ansteuerung der Servos erfolgt ebenfalls über Zahlenwerte (keine Winkel). Diese Werte können zwischen 0 und 1024 liegen, wobei diese jeweils den maximalen Anschlag in einer Richtung angeben. Diese lassen sich aufgrund der Verbauung nicht erreichen. Die meisten Servos können Werte zwischen 257 und 767 einnehmen, ohne Probleme zu verursachen. Diese Werte entsprechen ca. der 90° Ausrichtung aus der Ruhelage. Die Ruhelage hat bei jedem Servo den Wert 512. In der Ruhelage ist der Servo exakt in seiner Mittelstellung. Im Falle der hier verwendeten Femur-Servos bedeutet die Ruhelage, dass die Servos parallel zum Boden ausgerichtet sind.

Für diese Anwendung werden die Femur-Servos der erhobenen Beine um 90° aus der waagerechten Ruheposition nach oben verfahren. Anschließend werden diese Servos Schrittweise in die Ruheposition zurückfahren und nach jedem Schritt ihre Last überprüft. Dafür werden jedoch Abbruchkriterien benötigt, um festzulegen, ob die ermittelte Last einen erkannten Gegenstand bedeutet.

Abbruchkriterien

Zur Ermittlung der Abbruchkriterien wurde die beschriebene Bewegung zwei mal durchgeführt: ein mal ohne vor einer Wand zu stehen, einmal vor einer Wand. Dabei wurde nach jedem Schritt in Richtung der Mittelstellung die aktuelle Last ausgelesen. Dies wurde für die beiden betroffenen Femur-Servos, in diesem Falle Servo 3 und Servo 4, durchgeführt. Die nachfolgenden Grafiken zeigen die dabei erstellten Verläufe:

HIER FEHLEN NOCH BILDER

In der Grafik für Sensor 3 lässt sich gut erkennen, ab wann eine Wand erkannt wurde. Dir Kurve, in der keine Wand vorhanden war, wurden nur Werte um 0 erfasst. Zu dem Zeitpunkt an dem eine Wand erkannt wurde, steigen die Werte relativ gleichmäßig an, beginnend mit einem Wert von ca. 1024. Hier lässt sich also sagen, dass ein Wert von 1200 oder größer bedeutet, dass ein Gegenstand das weitere Verfahren verhindert. Die Kurve von Servo 4 sieht hier anders aus. Dies liegt daran, dass die Servos aus Gründen der Symmetrie beim Aufbau des Hexapoden, unterschiedlich eingebaut wurden. Während Servo 3 auf Position 257 verfahren muss, um 90° nach oben abzustehen, muss Servo 4 auf Position 767 fahren. Ihre Drehrichtungen sind also umgekehrt. Dies wirkt sich auch auf die Erfassung der Last aus. Im Fall ohne Wand nimmt die Last die Werte 0, 249 oder 1048 an. Wenn eine Wand erkannt wurde, treten Werte zwischen 0 und 249 auf. Dort muss also als Abbruchkriterium eine Last zwischen den Werten 50 und 200 definiert werden.

Umsetzung

Beispielsweise ist hier die Funktion aufgeführt, mit der das linke Bein überprüfen kann, ob sich eine Wand vor dem Hexapoden befindet. Dabei wird die offizielle Bibliothek zur Ansteuerung der Servos eingebunden.

#include <ax12.h>

char tasten_links(){
  char detected=0;

  //Servos nach vorne Ausrichten (Servo 1)
  SetPosition(1,350);
  delay(50);
  
  //Startstellung für Servo 3 eingeben und von dort verfahren
  pos=257;
  while(pos<450){                                  //Verfahren nicht exakt in Mittelstellung (Kollision mit Boden)
    SetPosition(3,pos);                            //Neue Position einnehmen
    delay(25);
    loadl=ax12GetRegister(3, AX_PRESENT_LOAD_L,2); //Last auslesen
    if(loadl>1200){
      //Tasten erfolgreich
      detected=1;
      break;
    }
    pos++;
  }
  pos=257;
  SetPosition(3,pos);                              //Servo in Startstellung verfahren
  return detected;
}

Umsetzung: Python

Abbruchkriterien

Umsetzung

Probleme

Am Ende dieses Projektes gab es mit dem Implementierung das Problem, dass ein fest definiertes Szenario zur Anwendung benötigt wird. Es gibt keine "allgemeingültige" Lösung. Auch wurden in beiden Anwendungsfällen zwei Beine als Fühler genutzt. Durch eine fehlende Vier-Bein-Gangart konnte der Hexapod sich während des Tastens nicht bewegen. Auch war es nicht möglich eine Erhöhung der Last zu erkennen, wenn der Hexapode im normalen Laufbetrieb auf sechs Beinen gegen eine Wand läuft. Somit ist es bisher nicht möglich den Tastsinn während einer Fortbewegung zu benutzen.


Mögliche Folgeprojekte

In Zukunft bietet es sich an, die Probleme, die dieses Projekt hatte, zu eliminieren. Im Anschluss an dieses Projekt würden sich daher folgende Ergänzungen/Erweiterungen des Systems anbieten:

  • Ergänzung von Sensoren zur Groberkennung der Umgebung mit dem Tastsinn als Feinerkennung
  • Implementierung weiterer Anwendungsfälle
  • Erarbeitung einer Vier-Bein-Gangart, um zwei Beine permanent heben zu können
  • Tastsinn zu Erkennung eines unebenen Untergrundes nutzen