Informatik und Kram

Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...

w.e.i.r.d.o
de-flagge aktiviert en-flagge deaktiviert

Wireless Explorating Intelligent Robot Dodging Obstacles
Hier stelle ich euch meinen Robo vor, jetzt in der 3. Version, die endlich funktionstüchtig ist!
Er lässt sich fernsteuern (per WLAN), oder fährt alleine im Explorer-Modus ( umfährt Hindernisse, fährt an Wänden entlang ). Da die Hardware erst vor kurzem fertig geworden ist, ist die Software noch nicht so ausgereift, das kommt aber noch!

Überblick

Technische Daten

  • Platinen: Motor-, LCD-, Main-Platine (Atmega8, Platinen selbst geätzt)
  • Motorplatine ist H-Brücke mit L298, strombegrenzt auf 2A
  • Sensoren: Sharp GP2D12, mehrere Bumper
  • Chassis: Aus Holz gesägt, mit Gewindestangen zusammengehalten
  • Fahrwerk: Im Moment noch Vaio-Getriebe, Übersetzung: 1:125
  • WLAN: La Fonera 2100
  • Akku: 7,2V, 2400mAh
  • Aktuelle Programme

  • Explorer: fährt selbständig durch die Gegend, weicht Hindernissen zufallsbasiert aus
  • Ferngesteuert: über einen Server auf der Fonera kann der Roboter per WLAN ferngesteuert werden
  • Fahrwerk

    .
    Um auf der Stelle drehen zu können benutze ich zwei zentrierte Antriebsräder und Hilfsräder. Da das Budget für dieses Projekt ziemlich klein ist, musste ich leider auf einen Kettenantrieb verzichten.
    Mit dieser Konstruktion bleibt der Roboter gerne mal an Kabeln oder höheren Teppichkanten hängen, aber hey, es ist momentan nur ein "proof of concept" :-)
    .
    .
    .
    Was man auf keinen Fall vergessen sollte ist das Entstören der Motoren. Es wirkt 1. dem Brushfire entgegen, was von den innenliegenden Bürsten verursacht wird (Funkenflug), und 2. fängt es Spannungsschwankungen ab, die die Elektronik beeinflussen könnten.
    ( Quelle: Roboternetz )

    Elektronik

    I²C-Bus

    Der I2C-Bus war hier die erste Wahl, da man nur zwei Leitungen benötigt und eine Unmenge an Modulen in den Bus hängen und einzeln adressieren kann. Wichtig sind die PullUp-Widerstände zu VCC.
    Bei meinem Robo fungiert die Hauptplatine momentan als einziger Master, die restlichen Module hängen als Clients im Bus. (Nur der Master kann Verbindungen initiieren, und zur Zeit wird noch keine Rückmeldung von den Modulen erfordert). Weitere Infos zur Funktionsweise des I2C-Bus: Hier

    Motor-Platine

    Hier kommt ein L298 als Motortreiber zum Einsatz. Die Motoren werden getrennt angesteuert, der Atmega steuert deren Geschwindigkeit mit Pulsweitenmodulation. Als Schutz wurden zwei 2W-Widerstände gegen GND geschalten, sie begrenzen die Stromaufnahme des L298 auf 2A.
    Die Steuerkommandos werden von der Hauptplatine über I2C empfangen, mit der aktuellen Motor-Konfiguration sind 5 Geschwindigkeitsstufen implementiert. Da diese Platine ganz unten im "Turm" sitzt und die Motoren 3-6V Eingangsspannung verlangen, bietet es sich an, auf dieser Platine die Verbindung zum Akku herzustellen. So können zum einen die 7,2V des Akkus direkt an den Motortreiber weitergegeben werden, und mithilfe eines 7805-Spannungsreglers die nötigen 5V für die Atmegas und andere Elektronik geregelt werden.

    LCD-Platine

    Auch hier wieder ein Atmega8, der Kommandos per I2C empfängt und dementsprechend Debug-Meldungen und Messdaten auf dem LCD anzeigt. Hier kommt ein gewöhnliches 2-zeiliges Display mit HD44780-Controller zum Einsatz (im 4bit-Betrieb). Weitere Infos: LCD

    Haupt-Platine

    Hier läuft alles zusammen. Sämtliche Bumper-/Sensor-/Remote-Leitungen sind an den Atmega8 angeschlossen, der sie verarbeitet und entsprechend die anderen Module steuert.
    Die Haupt-Platine ist ausserdem über eine serielle Schnittstelle mit einem WLAN-Router verbunden und kann so Statusmeldungen, Messwerte oder Debuginfos per WLAN an einen Client senden, oder Steuerkommandos von diesem erhalten.

    WLAN-Router

    Hier kommt ein modifizierter Fonera-Router zum Einsatz. In einem anderen Artikel habe ich bereits geschrieben, wie man den Router modifizieren kann, um eigene Programme (wie z.B. meinen selbstprogrammierten Robot-Server) darauf auszuführen und die Schnittstellen des Routers zu benutzen.

    Funk-Kamera

    Zur Zeit benutze ich eine Funkkamera von Pollin, die zwar sehr gute Bilder überträgt, aber leider auch das WLAN-Signal unbrauchbar macht, so dass gleichzeitig Fernsteuern und Live-Bilder ankucken leider nicht möglich ist.

    Software

    Die Software wird mit avr-gcc kompiliert und mit avr-dude übertragen. Als Programmer kommt ein usbprog zum Einsatz.

    Explorer

    Im Prinzip ein sehr einfaches Program. Der Roboter fährt einfach los, überprüft periodisch die Werte, die er vom IR-Sensor empfängt. Sobald diese auf ein Hindernis in unmittelbarer Nähe hindeuten, dreht er entweder nach links oder rechts (mit je 50% Wahrscheinlichkeit), bis der Weg wieder frei ist und fährt weiter.

    Ferngesteuert

    Hier spielen ein in C programmierter Server und ein python-client zusammen. Mit dem Client kann man sich per WLAN mit dem Roboter verbinden, Statusmeldungen empfangen, das Kamerabild ansehen und den Roboter steuern.

    Ausblick

    Hardware

  • Auf jeden Fall muss eine neue Cam her. Ich denke hier an eine Ethernet-IP-Cam, die ich an den Router hängen könnte (hier ist ein Ethernet-Port frei und könnte dafür genutzt werden)
  • Desweiteren ist das Vaio-Getriebe aus Plastik sehr anfällig für Verschmutzungen, und die beiden Getriebe laufen nicht gleich schnell. Hier sollte ein Getriebemotor mit Quadratur-Encodern Abhilfe schaffen, das Problem ist, dass die meisten "besseren" Motoren alle 12V Spannung benötigen.
  • Ein Aktuator muss noch angebaut werden (Roboter-Arm oder ähnliches)
  • Zusätzliche IR-Sensoren (z.B. für eine "Radar-Funktion", zur Kartenerstellung, etc.)
  • Software

    Implementiert werden in nächster Zeit:
  • Radar-Funktion (Atmega sendet Messdaten der IR-Sensoren an den PC, welcher eine Radarkarte davon erstellt)
  • Karten-Funktion (Messwerte an den PC senden, der eine Karte der Umgebung daraus erstellt)
  • Wegpunkte anfahren (entweder auf Basis der oben erstellten Karte oder mithilfe des Kamerabildes, was vom PC verarbeitet wird)
  • Schlusswort

    Ich bin dankbar für jeden Kommentar, der konstruktive Kritik, Anmerkungen oder Tips enthält!
    Update 11.11.2008: Ich habe mich dazu entschieden, die Entwicklung an weirdo einzustellen und mir stattdessen einen RP6 gekauft. Grund: Ich hab erkannt, dass meine persönlichen Möglichkeiten langsam erschöpft sind, und bis ich die oben genannten Hardware-Änderungen erfolgreich gebaut hätte, wären noch einige Euros und Zeit und Nerven draufgegangen.

    Kommentare

    Hier Chef, mach den doch mal irgendwie son bissi abschließender. Net einfach so, als wärs ein geiles Projekt und dann am Ende son Satz und fertig. Sind halt schon ein paar gute Ideen dabei, aber was is jetzt net gut gelaufen, was hat funktioniert. Wie hasst du die Kommunikation zwischen den Platinen gemacht, usw. Ich weiss, nervige Arbeit, besonders, wenn man nix mehr mit macht.

    Kommentar schreiben