Mittwoch, 29. April 2009

Problem mit den Sensoren

Nachdem der SRF02 für meine Anwendung mehr oder weniger ein Reinfall ist, erwarte ich vom Maxbotix EZ4 auch keine Wunder mehr und plane derzeit einen anderen Weg:

Entfernungsmessung mittels Laser
Der große Vorteil des Lasers ist seine Genauigkeit von bis zu 0.1mm sowie seine hohe Messfrequenz von mehreren 100hz , was für meine Applikation genau das Richtige ist.
Generell gibt es da einige möglichkeiten wie z.B. die Zeit die das Licht braucht um wieder am Sender anzukommen zu messen, wofür man wegen der hohen Lichtgeschwindigkeit allerdings sehr schnelle und präzise hardware benötigt, was im Hobby bereich nur unter großem Aufwand möglich wäre.
Ein weiterer Ansatz, den auch ich verfolgen werde, ist die Entfernungsmessung per Triangulation:
Ein geneigter Laser wirft einen Punkt an die Wand, von dem mit hilfe einer Kamera die Position bestimmt wird. Umso weiter Kamera und Laserquelle von der Wand entfernt sind, desto höher/tiefer wandert der Laserpunkt.
Aus der aktuellen Laserpunkt Position heraus kann dann der Abstand zur Wand bestimmt werden.
Bei diesem Ansatz muss keine spezielle Hardware vorhanden sein, im grunde funktioniert er auch mit der billigen Webcam vom ALDI und dem Laser vom Flohmarkt.

Um bessere Auflösung und weniger unnütze Daten zu erhalten werde ich wahrscheinlich auf einen Linearen CCD chip zurückgreifen, auf dem 1024*1 Pixel aufgereiht sind. Dadurch spart man sich die 2. Dimension und kann selbst mit billiger Hardware eine hohe Messrate erreichen.

Das einzige Problem bei dieser Methode sehe ich derzeit bei der Optik des CCD's, wie jede Kamera benötigt der CCD eine Linse die ihm einen klaren blick ermöglicht. Da CCD's oft in Scannern verwendung finden werde ich mir in nächster Zeit ein paar alte Geräte besorgen und mich über die verwendete Optik hermachen ;)

Siehe auch UB Robotics die ein solches Projekt bereits realisiert haben

Freitag, 24. April 2009

SRF02 Performance

Grade mal einen Tag nach der Bestellung des SRF02 von Manu-Systems kam er auch schon bei mir per DHL express an.

Ich hab mich natürlich direkt ans testen gemacht:
Was mir als erstes auffiel, waren die komischen Werte die er mir bei Abständen kleiner 25cm ausgibt: mal 0, mal 100, mal 200, darfs etwas mehr sein? Ausgaben > 0 sind falsche Messungen! Nur wie soll man die filtern?

Normale Messungen im Bereich 0-150 cm sind ohne größere Probleme möglich solang man an graden Wänden misst.

Sobald man aber Messungen in der echten Wohnung macht wird es etwas schwierig:
Aufgrund des breiten Messbereichs - ca 55° - ist es meist sehr schwer "freie Sicht" nach vorne zu bekommen, da überall irgendwelche Gegenstände nach vorne in den Messbereich hineinstehen.
Zwischen Stuhlbeinen hindurchmessen oder auch durch den Türrahmen in den Flur Messen ist ohne modifikation annähernd unmöglich.
Ohne Hilfsmittel ist es mir auch nicht gelungen in irgendeinem Innenraum Messungen > 200 cm durchzuführen, da IMMER irgendwelche Gegenstände im Messkegel liegen - was für den Roboter mit Positionsbestimmung ein Disaster wäre!

Zudem es im Innenraum auch zahlreiche Reflexionen gibt, die der Sensor gerne in falsche Messwerte wandelt.
Links zu sehen: Mein Ikea Drehstuhl modell Horst, der laut SRF02 den Raum krümmen kann! Konsequent ist er gemessene 210 - 250 cm vom Sensor entfernt, egal wie nah man den Sensor vor dem Stuhl platziert!
Auch die ca 40cm breite Ecke zwischen Schrank-Ende und Wand-Anfang scheint den Raum in gleicher Größenordnung wie auch der Drehstuhl zu krümmen, 220 - 250 cm sind keine Seltenheit.


Selbst wenn Reflexionsfehler nicht vermeidbar sind, sollten sie durch intelligente Empfangsdämpfung und optimierter Software größtenteils unterdrückt werden können - was beim SRF02 augenscheinlich nicht der fall ist.

Jetzt gebe ich mich natürlich nicht einfach geschlagen!

Wie ich letztens gelesen hatte, kann man den Messradius eines US Sensors mithilfe eines runden Rohres verringern und damit die Richtwirkung verbessern.
Ich habe es mit 2 verschiedenen Röhren getestet:
- Plastikrohr, erhältlich im Baumarkt, wird genutzt um Kabel darin zu verlegen
- Moosgummi, in Rohrform geklebt, gibts im Bastelladen

Beide brachten mehr oder weniger den gleichen Erfolg, Messungen durch den Türrahmen in den Flur waren möglich. Sogar Messungen in der Wohnung bis zu 600cm waren jetzt machbar.

Allerdings ist das ganze eine recht wackelige Angelegenheit, der Sensor scheint mir etwas schief zu messen, wenn das Plastikrohr zu 100% grade nach vorne zeigt, gibt es nur Messfehler, wenn das Rohr etwas schief auf dem Sensor steckt sind Messungen möglich. Mir scheint auch, dass der Bereich in dem das Rohr "richtig" sitzt extrem klein ist, ein bischen wackeln und die Messungen gehen wieder in die Hose.

Abschließend kann ich sagen, dass der SRF02 - zumindest ohne Modifikation - nicht einmal ansatzweise meinen Bedürfnissen entspricht!

Seit Gestern ist jetzt der Maxbotix EZ4 US-Sensor bestellt, der laut Hersteller bessere Messungen, keine Fehler bei geringem Abstand und vorallem genauere Richtwirkung verspricht - wir werden sehen.....

Montag, 20. April 2009

Mein altes Projekt: QuadCopter

Wie schonmal erwähnt gab es vor dem Saugroboter Projekt noch ein anderes Projekt:

Der QuadroCopter

Im wesentlichen ein Kreuz aus Alu und Carbon, 4 Motoren und viel Elektronik.

Technische Daten:
- Schub: ca 2kg
- Gewicht: 600g mit 2200mAh Akku
- Schwebeleistung: 60Watt
- Flugzeit: ca 20 min
- Gier (dreh) stabilisiert





Links sieht man die Platine des Quad's

Bestückung:
- PIC 18F458 40Mhz, leider nur schlappe 16 DMIPS
- LIS3LV02DQ Digitaler Beschleunigungssensor
- 3x MLX90609 Digitale Gyroscope
- Mk3 Mag Kompass
- Xbee Funkmodul zur steuerung
- GPS Modul mit 5Hz Aktualisierungsrate zur Positionsbestimmung (derzeit nicht auf der Platine)













Hier ein Bild von unten
Man sieht unten einen modifizierten TowerPro 25A Regler mit extra schnellem I2C Anschluss.
Darüber die Blau-Schwarzen Vibrationsdämpfer auf denen die Hauptplatine befestigt ist.
Wie man sieht beherrsche ich die Multi-Layer Technik ;)








Der QuadroCopter wird hauptsächlich durch seine elektronische Lageregelung in der Luft gehalten. Einfach alle Motoren auf gleiche stärke schalten würde auf direktem Wege gegen die Wand führen!
Es mussten bei der implementierung der Software einige Probleme gelöst werden wie z.B. die kompensation der driftenden Gyroscope oder das umgehen der langsamen RS232 Schnittstelle der Funkmodule.

Link zu einem Flugvideo

Sonntag, 19. April 2009

Saugroboter im Eigenbau: der Plan

Da das Projekt nun mittlerweile eine Woche feststeht, habe ich mir schon einige Gedanken zur Umsetzung gemacht:

Anforderungen:
  • Der Roboter wird eine Karte meiner Wohnung erhalten, auf der die Maße des Raumes, eventuelle Hindernisse sowie noch zu reinigende Stellen vermerkt sind. Die erste Karte wird wahrscheinlich von Hand erstellt, im späteren Stadium soll der Roboter die Karten selbst erstellen.
  • Mithilfe von Sensoren und der Karte des Raums soll der Roboter in der Lage sein seine eigene Position zu bestimmen.
  • Saugen auch an engen und für "standard Roboter" schwer erreichbaren Stellen dank optimierter Koordination
  • Die üblichen Features: optimalere Reinigung, fahren zur Ladestation etc.
Wie sich nach erstellen der Simulation herausgestellt hat, wird das größte Problem die Implementierung der komplizierten Path-Algorithmen auf einem kleinen Microcontroller sein.
Gefolgt von der Ungenauigkeit der Sensoren bei der Positionsbestimmung.
Zur Lösung dieser Probleme werden in nächster Zeit weitere Physikalische(reale Tests, keine Simulationen) durchgeführt ...

Derzeit ist das Projekt in 2 Stufen unterteilt:
In der Ersten Stufe wird die komplette Elektronik auf einem kleinen Legoauto implementiert und mehr oder weniger fertiggestellt.
In der Zweiten Stufe wird der Roboter sowie seine Saugvorrichtung selbst entwickelt. Da ohne die Elektronik nichts läuft wird dieser Schritt erstmal nach hinten verschoben.

Die Idee mit der Positionserkennung:

Der Roboter wird mit 4 (vl auch mehr) Ultraschallsensoren ausgestattet. Einer in jede Richtung (siehe Bild)
Dadurch ist der Abstand zur Wand in jede Richtung bekannt und die Position kann - solang sich der Roboter nicht dreht - bestimmt werden.

Um das "Richtungsproblem" zu beheben soll zusätzlich noch ein Kompass eingebaut werden der die absolute Richtung ermittelt und diese an den Hauptprozessor weitergibt, der wiederum die 4 Ultraschallsensoren mit hilfe eines Servos gegendreht.
Dadurch ist der vordere US-Sensor immer nach Norden gerichtet, was den späteren Positionserkennungs Algorithmus - um den ich mir wegen seiner theoretischen trivialität noch keine Gedanken gemacht habe - um einiges erleichtern sollte.


Die derzeit geplanten Bauteile:

  • Hauptprozessor: AT32UC3A 32Bit AVR Microprozessor 91 DMIPS, 64Kb Ram, 512Kb Rom, I2C, SPI etc.
  • Ultraschallentfernungsmesser: SRF02 15-600cm Messreichweite, Messungen mit 15HZ und mehr
  • Kompassmodul: HMC6352, steht nochtnich genau fest, Hauptsache der Preis stimmt
  • Fahrender Untersatz: schnell zusammengebautes Legoauto mit 2 Motoren, 50PS, 6 Sitzer ;D
Mit diesen Bauteilen werden die ersten echten Versuche durchgeführt.
Wenn alles klappt gehts bald weiter!

Neues Projekt

Nachdem das QuadroCopter Projekt nun abgeschlossen ist und ich seit einigen Wochen die Zeit nicht mehr effektiv totgeschlagen bekomme, ist es wieder Zeit für ein neues Projekt.

Da ich ein konstruktiv fauler Mensch bin, war das nächste Projekt klar: Reinigungsroboter!

Jetzt ist ein Reinigungsroboter allerdings nichts neues, es gibt diverse Modelle die alle in meinen Augen mehr oder weniger bescheiden sind.
Einer der Populärsten dürfte der iRobot Roomba 580 sein, der preislich bei um die 400 € liegt.

Der große Nachteil bei den derzeit verfügbaren Saugrobotern ist zum einen die mangelnde "Saugfähigkeit", er benötigt teilweise 3-4 Durchläufe um den Boden von grobem Schmutz zu befreien (siehe Video), und zum anderen die miserable Koordination.
Meist fährt der Roboter zufällig im Raum herum und kehrt mal hier und mal da ein bischen was weg, wirklich sauber machen kann man das nicht nennen!
Deswegen stellt dies eines meiner Hauptmerkmale bei der Eigenentwicklung dar: Der Roboter soll in der Lage seine eigene Position zu erkennen und wissen an welchen Stellen schon gesaugt wurde, sowie wo noch Dreck liegt.