Mittwoch, 16. September 2009

iSuck es geht weiter!

Nach längerer "stille" gibt es wieder neues von meinem iSuck Staubsauger Roboter Projekt
Die professionellen Platinen für den Laser Entfernungsmesser sind eingetroffen und schon teilweise bestückt. Demnächst kommen noch einige kleinteile und dann können die Tests des Sensors beginnen!

Links zu sehen: untere Seite der Platine bestückt mit Xilinx xc3s200 FPGA mit 200k Gates - hoffentlich genug ;)
Rechts: MT9T001 Bild sensor mit 3 Megapixel.

Mittlerweile scheint Samsung das von mir angewendete Prinzip entdeckt zu haben und in einen Staubsauger Roboter eingebaut zu haben :( Samsung Futor

Echte Klimaanlage im Eigenbau

Viele werden es kennen, draußen 36° , in der Dachwohnung 40° x.x
Deswegen wurde es bei mir Zeit für eine Klimaanlage. Natürlich nicht einfach irgendeine, sondern eine billige mit geringen Folgekosten. Herkömliche und am meisten verwendete Klimaanlagen komprimieren unter Energieaufwand (1000 Watt) Kühlmittel und "gewinnen" bei dessen Ausdehnung Kälte (3000 Watt). Im Gegensatz dazu gibt es noch das Prinzip der Verdunstungskühlung: Schnelle (Warme) Teilchen einer Flüssigkeit können aus dem Flüssigkeitsbund ausreißen, gehen über in Luftfeuchte und nehmen dabei Wärme mit. Die zurückbleibenden Teilchen werden kälter.
Dieses Prinzip benötigt kaum Energie, in meinem Fall 30 Watt bei ca 700 Watt Kühlleistung, lässt sich leicht realisieren und ist deshalb perfekt für den Eigenbau. Der einzige Nachteil ist, dass nicht beliebig tief runter gekühlt werden kann, bei meinen Tests ergaben sich maximal 10° Temperatur differenz zwischen Außentemperatur und der Temperatur des Kühlmediums, was in diesem Anwendungsfall allerdings kein wirklichen Nachteil darstellt.


Im wesentlichen benötigt man eine möglichst große feuchte Fläche, an der viel Luft vorbei zieht und die Warmen Teilchen mitreißt.
Weltweit gibt es kaum Firmen die Klimaanlagen nach diesem Prinzip bauen, ich konnte allerdings eine (die einzige?) auswendig machen und mir spezielle "Evaporative Cooling Pads" bestellen. Die Pads sind aus Wasserfestem Papier, besitzen eine große, gut befeuchtbare Oberfläche sowie kleine Windkanäle durch die der Verdunstungseffekt verstärkt wird.

Damit möglichst viel Wasser verdunstet sollte man einen hohen Luftstrom durch die Pads Leiten (1-2 m/s).

In meinem Fall realisiert durch 10 PC Gehäuselüfter (siehe links) mit jeweils 120m³/h Luftdruchsatz, was in etwa ~1.5 m/s Luftgeschwindigkeit ergibt. Die Lüfter verbrauchen um die 10 Watt.


In der 80x60x40 cm(l x b x h) großen Kiste befinden sich die 2 CELdek Matten die etwa 5cm hoch gelagert sind, damit sie nicht im Wasser stehen.

Im unteren Teil der Kiste befinden sich etwa 24 Liter Wasser das von einer kleinen Pumpe durch einen in meinem Zimmer stehenden Radiator und zurück auf die Pads gepumpt wird.

Die komplette Kiste steht auf der Fensterbank, Warme Außenluft wird von den Ventilatoren durch die Pads und wieder nach draußen geblasen, wodurch das Wasser, welches durch die Pads läuft, kälter wird. Der Radiator in meinem Zimmer strahlt die Kälte des gekühlten Wassers ab, die Zimmertemperatur sinkt.

Die bisher messbare Kühlleistung bei 24° Außentemperatur lag in etwa bei 700 Watt bei nur 33 Watt input, die Folgekosten gehen gegen 0! Sobald es draußen wieder über 30° warm wird, werde ich noch ein paar Testmessungen machen, insbesondere da der Wirkungsgrad bei höheren Temperaturen extrem zunimmt. Ich hoffe und schätze mal an die 1500 Watt o.O

Sonntag, 7. Juni 2009

Lasertriangulation - der Sensor

Nach nun einigen Wochen der Bastelei ist der Laser-Entfernungsmesser endlich fertig:
Zu sehen von links nach rechts:
  • Atmega88, 20Mhz, Mikrocontroller
  • ADC0820, 8 Bit paralleler Highspeed ADC (~2 us pro Messung)
  • uPD3753, linearer CCD (1x2048 Pixel), zum aufnehmen des Bildes, mit Objektiv einer alten Kamera
  • VSD-1, digitaler Servo mit montiertem Laser
Aufgrund geringer Fertigungsungenauigkeiten kann der Laser nicht statisch montiert werden, sondern muss dynamisch so geregelt werden, dass dieser immer auf der vom Bildsensor "sehbaren" Linie zeigt.
Für geringe Entfernungen größer 1m stellen diese ungenauigkeiten kein Problem dar, bei größeren Entfernungen muss der Laser allerdings nachgeregelt werden.
Hier liegt auch das Problem des ganzen Sensors: je größer die zu messende Entfernung, desto genauer muss der Laser eingestellt sein.
Im Klartext heißt das: bei Entfernungen größer 2m ist die benötigte Genauigkeit selbst mit digital geregeltem Servo und einem zusätzlich angebrachten Getriebe nicht mehr erreichbar und somit der Sensor für meine Anwendung nicht brauchbar :(
Für geringe Entfernungen wäre der Sensor die perfekte Lösung, bei Abständen <50cm beträgt die Auflösung kleiner 5mm.

Nachdem nun klar ist, dass es mit einem linearen Bildsensor nichts wird, plane ich derzeit den Sensor mit einem Flächenbildsensor mit ca ~1000x1000 Pixeln auszustatten, bei dem dann die dynamische Regelung des Lasers wegfallen würde.
Allerdings würde das den Rechenaufwand quadrieren da mehr Pixel geprüft werden müssen, sodass die angepeilte Messrate von 100hz nicht mehr realisierbar ist:
Der Mikrocontroller benötigt etwa 10 Takte pro Pixel -> 10*1 Mio -> 10 Mio Takte bei 20 mhz = 0,5 sec = 2 hz = zu wenig ....

Sonntag, 10. Mai 2009

iSuck Simulation

Mittlerweile ist die High-Level Software für meinen iSuck mehr oder weniger fertig.



Simuliert wird die komplette Reinigung eines sehr eckigen Raumes.
Rot entspricht einer Wand, Blau= noch zu reinigen, Gelb = gereinigt, die schwarze Linie zeigt den schon im vorraus berechneten Weg den der iSuck abfahren will an.
Implementiert wurden auf den sehr beschränkten Resourcen (64kb Ram) A* zum umfahren von Hindernissen und Floodfill iterativ zum festlegen des zu reinigenden Areals.

Auch auf der Low-Level Ebene hat sich einiges getan:
Der Lineare CCD mit 1x2048 pixeln vom typ NEC uPD3753CY ist vor einigen Tagen eingetroffen.
Die für einen Laser Entfernungsmesser benötigte Optik fand sich in einem alten Scanner auf dem Schrottplatz und die Highspeed ADC's mit ca 1 MS/s, die zum erreichen der 100hz Messrate nötig sind, sind eingetroffen.
Leider befindet sich das Herzstück des ganzen, der CPU, noch auf dem Postweg ...

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.