|
||||
1 Optische (Laser-)Maus
Optische Maussensoren nehmen laufend Bilder von der Unterlage
auf und berechnen aus dem Kamerabild die Verschiebungen. Die
Verschiebungen in x- und y-Richtung (relativ zum Sensor selbst)
können direkt über SPI-Bus oder I²C-Bus ausgelesen werden. Konzeptskizze: Verwendung von zwei Maussensoren In einem ersten Versuch mit einem optischen Maussensor ADNS2051 wurde der Sensor erfolgreich von einem ESP32 ausgelesen und die Verschiebung Seriell an den PC übertragen: ESP32 mit Maussensor ADNS2051
Die Ansteuerung erfolgt über einen Clock-Pin und einem Daten-Pin,
die Belegung kann aus dem Datenblatt entnommen werden: ADNS2051_Datasheet.pdf Ebenso wurde ein PAW3204DB-TJ3R mit einem ESP32 ausgelesen. Dieser Sensor wurde ausgewählt, da dieser (in einer Maus) auf einem spiegelnden Whiteboard sehr gut funktionierte. Wie im Video zu sehen, funktioniert der Sensor auch mit dem ESP32 auf dem Whiteboard: ESP32 mit Maussensor PAW3204DB-TJ3R Weitere Konzeptverfolgung: 1.1 Bau eines Prüfstandes zur ersten Kalibrierung des PAW3204DB-TJ3R-Sensors:Zum Aufnehmen von Messreihen die zur Kalibrierung des PAW-Sensor dienen sollen, wurden unterschiedliche Konzepte verfolgt bzw. aufgebaut die jedoch nicht alle anwendbar waren. Im folgenden wird daher jedes Konzept kurz vorgestellt und ebenso kurz die Gründe warum es dann doch nicht anwendbar war, erläutert:
Beim ersten Konzept war es vorgesehen das nicht die Maus selber bewegt werden sollte, sondern nur ein direkt vor dem Sensor angebrachtes und mit weißem Papier beklebtes Rad. Jedoch waren die hier aufgenommenen Messwerte nicht brauchbar. Es wurde vermutet das dies möglicherweiße an erhöhtem Lichteinfall liegen könnte, was sich jedoch nicht bestätigte und das Konzept darauf hin verweorfen wurde.
Beim zweiten Konzept sollte die Maus an einer Spindel, an dessen Ende ein Motor montiert war, vorwärts und rückwärts bewegt werden. Da die Spindel jedoch ein zu großes Spiel hatte, bewegte sich auch die Maus nur mit relativ großen seitlichen Ausschlägen woraufhin auch dieses Konzept verworfen wurde.
Beim dritten Konzept war es vorgesehen die Maus über einen Hebel, an dessen Ende ein Motor samt Rad befestigt wurde, in einem Winkel von ca. 100° vor- und zurückfahren zu lassen wobei der Radius ca. 142,76mm und die damit gefahrene Strecke ca. 249,16mm betrug. Damit das Vor- Zurückfahren automatisch erfolgen konnte wurden auch zwei Endschalter installiert. Da hier die Bewegung der Maus ohne Auschläge erfolgte und die Messwerte brauchbar waren, wurde dieses Konzept weiterverfolgt und zur Aufnahme der Messreihen verwendet. Der Prüfstand erlaubt die Bestimmung eines von der Fahrgeschwindigkeit näherungsweise unabhängigen Faktors, mit denen die Rohwerte in SI-Einheiten umgerechnet werden. Die Abtastrate des Sensors ist bei den Experimenten auf Standardeinstellung (1000 dpi (Dots per Inch))belassen:
Eingestellte (Fischertechnik-) Geschwindigkeitsstufen und
tatsächliche Geschwindigkeiten bei diesem Prüfstand: Die aus dem Sensor erhaltenen (Roh-)Werte werden also mit 0.008735 m multipliziert um Werte in [m/s] zu erhalten. Die Tabellen mit den Rohwerten und genauen Berechnungen befinden sich im Anhang. 1.2 Bau eines Experimentalfahrzeugs zum Tragen und Fahren des BreadboardsMit einem Experimentalfahrzeug sollen erste Erfahrungen mit dem gleichzeitigen Fahren und Auslesen der Sensoren gesammelt werden. Das erste Fahrzeug war auf Basis der fischertechnik Robotics-Baukästen, die Ansteuerung erfolgte über die physikalische I²C-Schnittstelle des FT32. Zu beachten ist hier, dass es sich bei der Kommunikation mit dem Sensor nicht um das I²C-Protokoll handelt.
Beim Bau des Fahrzeugs und bei den ersten Tests wurde festgestellt, dass die 3,3V Spannungsversorgung des PAW3204DB-TJ3R-Sensors diesen ggf. beschädigen kann. Eine Spannung von 3,3V ist zusätzlich kritisch, da der ESP32 (als Spannungsquelle) bis zu 3,6V ausgibt. Laut Datenblatt des PAW-Sensors liegt die ideale Versorgungsspannung bei 2,7V (+-0,2V). Es wurde daher beschlossen, einen Pegelwandler (TXB0105 von Adafruit) zu verwenden, welcher die Signale und Ausgangsspannung des ESP32 auf 2,7V skaliert. Diese Erweiterung erforderte ein neues Entwicklungsfahrzeug. Um spätere Erweiterungen leichter umsetzen zu können, trägt das Fahrzeug ein Steckbrett, auf dem alle Bauteile verbaut sind. Die Schaltung entspricht dabei weitestgehend der FT32-Platine.
Mit dem neuen Steckbrettaufbau wurde die Qualität der Sensorinformation zunehmend schlechter. Eine genaue Untersuchung mit einem Oszilloskop zeigt, dass die Signale sowohl nahe dem Sensor als auch nahe dem ESP32 so stark verrauscht waren, dass falsche Informationen gelesen werden. Unter anderem ist die Signalqualität stark von der Leitungslänge zwischen dem Sensor und dem neu verbauten Pegelwandler abhängig (Pixart empfiehlt an dieser Stelle des Datenblatts eine Leitungslänge um die 5mm für die Datenübertragung, siehe Datenblatt). Um die Leigungslängen minimal zu halten, wurde das Steckbrett auf dem Fahrzeug tiefer gelegt, sodass sich der Sensor nahe dem Pegelwandler befindet; die Leitungen können so mit kurzen Jumper-Kabeln realisiert werden.
Auch ist in diesem Fahrzeug die Radachse
nicht mehr unter, sondern neben dem Steckbrett. Somit kann später
ein Zeichenstift für (genaue) Zeichnungen in die Drehachse des
Fahrzeugs platziert werden.
Bei Version 2 wurden daher anstatt nur einer
Nut an allen Seiten horizontale Nuten in die Konstruktion
eingearbeitet, mit denen die Flexibilität Bezüglich der Platzierung
des Sensors weiter erhöht werden konnte. Ebenso wurden jetzt auch
Aussparrungen zur Leitungsverlegung berücksichtigt.
Aufgrund der noch relativ engen
Platzverhältnisse innerhalb der Sensoraufnahme war die Platzierung
und Entnahme der einzelnen Bauteile und insbesondere der Linse samt
Maussensor leider noch relativ schwierig gestaltet. Daher wurde bei
Version 3 etwas mehr Platz für Linse und Maussensor vorgesehen.
Daneben wurde anstatt der vorher noch horizontalen Nuten nun
vertikale Nuten verwendet. Der Grund hierfür ist, dass sich der
3D-Druck nun wesentlich einfacher gestaltet, da keine
Stützstrukturen während des Druckes verwendet werden müssen. Eine
weitere Annehmlichkeit, die hierdurch entsteht, ist dass die
Nacharbeit fast gänzlich entfällt. Eine weitere Kleinigkeit, die
ebenso in die Konstruktion eingearbeitet wurde, ist die Erweiterung
der Aussparrungen zur Verlegung von Leitungen. Die ist nun
durchgehend, wodurch nun auch hinter dem Maussensor und hinter der
Led etwas Platz für Leitungen vorhanden ist.
Es sei an dieser Stelle vorweggenommen das bei späteren Testfahrten, die unter Punkt 1.7 behandelt werden, herausgefunden wurde, dass je nach Oberfläche auf dem sich der Sensor befindet, die Höhe des Sensors bzw. der Linse über der Oberfläche angepasst werden muss. Nähere Details hierzu sind unter Punkt 1.7 zu finden. 1.3 Entwicklung der Schaltung für das Fahrzeug und die Ansteuerung des PAW3204DB-TJ3R-SensorsDa der Sensor mit einem Spannungsbereich von 2,5V bis 2,9V arbeitet, der ESP32 hingegen mit 5V/3,3V mussten die Pegel von letzterem angepasst werden, da der Sensor ansonsten Schaden nehmen könnte. Hierzu wurde ein sogenannter Level Shifter bzw. Pegelwandler ausgewählt, der auf der B-Seite 3,3V und auf der A-Seite die eingangs genannte Spannung zwischen 2,5V und 2,9V benötigt. Während die 3,3V vom ESP32 abgegriffen werden kann, wird für die Versorgungsspannung des Sensors aus zeittechnischen Gründe ein einfacher Spannungsteiler verwendet. Dabei wurde nach der Besichtigung der im Labor vorhandenen Widerstände zunächst ein 1kOhm Widerstand ausgewählt und der untere Widerstand in dessen Abhängigkeit und unter der Vorgabe von 3,3V als Gesamtspannung sowie 2,7V (Mittelwert) als Versorgungssspannung des Sensors berechnet. Die Berechnung ergab einen Widerstandswert von 4,5kOhm. Da dieser jedoch nicht vorhanden war, wurde stattdessen ein 4,7kOhm Widerstand eingesetzt. Die Betriebsspannung betrug hier dann 2,72V. Nach ersten Tests hat sich dann allerdings herausgestellt, dass die Widerstandswerte zu hoch sind und der für den Sensor und die LED benötigte Strom nicht geliefert werden kann. Dies hat sich durch eine sehr instabile Erfassung der Geschwindigkeitswerte und Kommunikation mit dem ESP32 gezeigt. Nach Anpassung der Widerstände auf 15Ohm und 47Ohm konnte der benötigte Strom schließlich bereitgestellt werden. Die Betriebsspannung beträgt hier 2,5V und ist damit im zulässigen Bereich. Die Berechungen des Spannungsteilers können hier als PDF-Datei heruntergeladen werden: Download
Zur Beseitigung der Überschwingungen war es notwendig Zenerdioden mit 3,3V Sperrspannung an GPIO22 (SCLK) und GPIO21 (SDIO) des ESP32 bzw. an der B-Seite des Pegelwandlers einzusetzen. Dabei wurden auch Strombegrenzungswiderstände zwischen ESP32 und Zenerdioden geschaltet. Die Berechnung des Widerstandswertes ergab ursprünglich 46,7Ohm. Es hat sich jedoch herausgestellt des jetztige Strom nicht mehr ausreicht, weshalb auf 12Ohm für beide Zenerdioden heruntergegangen wurde. Die Berechungen der Zener-Dioden und der ursprünglichen Strombegrenzungswiderstände können hier als PDF-Datei heruntergeladen werden: Download Des Weiteren werden mehrere Kondensatoren zur sonstigen Spannungsstabilisierung bzw. -glättung eingesetzt. Konkret sind diese an GPIO22 (SCLK) und GPIO21 (SDIO) des ESP32 bzw. an der B-Seite des Pegelwandlers, am 3,3V Pin des ESP32 bzw. Versorgungspin der B-Seite des Pegelwandlers und am Spannungsteiler bzw. Versorgungspin der A-Seite des Pegelwandlers angebracht. Dabei wurde für die Berechnung der Kondensatoren an der B-Seite des Pegelwandlers die Taktrate von 2,6MHz aus Punkt 1.4 herangezogen um daraus die Periodenzeit T zu ermitteln. Für die Zeitkonstante Tau wurde 1/20 von T angenommen. Mithilfe von Tau und dem Strombegrenzungswiderstand konnte schließlich die Kapazität mit 1,6nF für die einzelnen Kondensatoren berechnet werden. Da solche Kondensatoren allerdings im Labor nicht vorhanden waren, wurden stattdessen einfache Verbindungsleitungen verwendet, die für die Berechnung der Kapazität als Plattenkondensatoren angenommen wurden. Die Berechnung ergab hier schließlich 6,638*10^-2pF. Trotz der Tatsache das dieser Wert niedriger ist als derjenige der ursprünglich berechnet wurde, haben Tests mit den einfachen Leitungen gezeigt das es hiermit gut funktioniert. Für den Glättungskondensator, der am Versorgungspin der A-Seite des Pegelwandlers angeschlossen ist, wurde ein Richtwert von 47uF genommen von dem man ausgeht, dass dieser einen ausreichend hohen Ladestrom liefert. Dies gilt ebenso für den Glättungskondensator der am 3,3V Pin des ESP32 angeschlossen ist, wobei hier die Kapazität 10uF beträgt. Die Berechnungen zu den Kondensatoren können hier als PDF-Datei heruntergeladen werden: Download Am Taster der später zum starten und stoppen des Experimentalfahzeugs dienen soll, ist zudem noch ein Pull-Up-Widerstand angebracht. Dies wurde so von der ESP32-HWK-Gruppe übernommen. Alle verwendeten elektronischen Bauteile:
Zum Vergleich ist nachfolgend der aktuelle reale Steckbrettauf inklusive aller Fischertechnikbauteile als auch der Maussensoraufnahme zu sehen.
1.4 Untersuchung der (korrekten) Ansteuerung des PAW3204DB-TJ3R-SensorsDie Kommunikation mit dem Sensor (schreibend und lesend) erfolgt über das Ansprechen einer Adresse auf dem Sensor und der anschließenden Übertragung der Daten
Anhand dem Datenblatt eines vergleichbaren Maussensors (PAW3204)
werden die zum Betrieb notwendigen Register auf dem Sensor gesetzt.
Im laufenden Betrieb muss das Register "Motion_Status" gelesen
werden. Beim Lesen des Registers werden die Geschwindigkeitswerte
intern eingefroren. Man erhält dabei auch die Information, ob seit
dem letzten Auslesen eine Bewegung stattgefunden hat. Anschließend
können die beiden Register "Delta_X" und "Delta_Y" ausgelesen
werden, diese enthalten mit einer 8Bit Auflösung die
Geschwindigkeitswerte. Jetzt kann der Vorgang mit dem Lesen des
Registers "Motion_Status" wiederholt werden.
Umgesetzt wird das Takt- und Datensignal (im Programm) innerhalb einer Schleife, indem die Pegel der Pins mit den Arduino-C++-Befehlen "digitalWrite()" und "digitalRead()" gesetzt bzw. gelesen werden. Eine solche Umsetzung ergibt eine Taktrate von ca. 2,5MHz bis 2,63MHz, siehe Abbildung unten. Laut Datenblatt können die PAW3204DB-Sensoren mit bis zu 10MHz ausgelesen werden.
Zu Beachten sind die Pausen zwischen den Nachrichten: Anhand von
Experimenten wurde festgestellt, dass der Sensor nur dann
zuverlässig funktioniert, wenn nach einer Übertragung mindestens
5µs gewartet wird. Auch braucht das Lesen des Sensors eine kleine
Pause zwischen dem Ansprechen des Registers und der Ausgabe durch
den Sensor selbst (in Abbilundung oben mit HI-Z gekennzeichnet) von
mindestens 3µs. Aufgerundet wird dies auf 4µs, da der ESP32 nur
ganzzahlige Vielfache von ca. 4µs warten kann.
1.5 Verwendung eines Maussensors zur Feststellung der Position und Drehung eines FahrzeugsZur Berechnung der Geschwindigkeit und Position des Fahrzeugs werden folgende Koordinaten verwendet:
A: Drehpunkt des Fahrzeugs,
Ursprung des Fahrzeugkoordinatensystems xy
Daraus kann die Winkelgeschwindigkeit berechnet werden:
Sowie die Fahrgeschwindigkeit:
Durch (numerische) Integration der beiden Geschwindigkeiten erhält man die
tatsächliche Position relativ zum letzten Startpunkt. Die ausführliche Herleitung befindet sich hier zum Download: Berechnungen Geschwindigkeit und Position.pdf 1.6 TestfahrtenUm die Positionsgenauigkeit des Experimentalfahrezugs nach einer Bewegung zu untersuchen, wurden diverse Testfahrten auf unterschiedlichen Oberflächen durchgefüht. Im Allgemeinen konnte hierdurch herausgefunden werden, dass je nach Oberfläche die Höhe des Sensors leicht angepasst werden musste, damit mit diesem eine Positionserfassung möglich war. Der Bereich in dem die Anpassung durchzuführen ist, beträgt laut Datenblatt 2,3 bis 2,5 mm zwischen Oberfläche und der Linse auf dem der Sensor befästigt ist. Für die eigens konstruierte Maussensoraufnahme wurde die Höhe von der ursprünglichen Microsoft-Maus übernommen und mit 2,2mm so im CAD-Programm eingetragen. Obwohl dies laut dem Datenblatt eigentlich zu niedrig ist, funktionierte die Microsoft-Maus zuverlässig auf allen Oberflächen. Die Testfahrten mit dem Experimentalfahrzeug haben jedoch gezeigt, dass dies hier nicht unbedingt der Fall ist. Auf den im Labor befindlichen Tischen als auch auf dem Whitboard konnten zunächst vielversprechende Testfahrten durchgeführt werden, die beweisen dass auf diesen Oberflächen die Positionserfassung zum einen möglich und zum anderen potenziell noch verbesserbar ist. Bezüglich den Tischen ist zum besseren Verständnis an dieser Stelle noch anzumerken, dass diese eine leicht angeraute Oberfläche und Hellgrau sind. Auf weißen Papier jedoch, welche von einer großen DIN A1 Rolle stammt, konnte plötzlich keine kontrollierte Fahrt mehr durchgeführt werden. Aus diesem Grund wurde beschlossen, den Abstand zur Oberfläche noch weiter auf 2mm zu verringern, woraufhin die Positionserfassung wieder auf allen getesteten Oberflächen und insbesondere auf weißen Papier möglich war, allerdings mit unterschiedlichem Erfolg. Nachfolgend befinden sich Videos die die Testfahrten dokumentieren: Haus des Nikolaus Zeichnen In diesem Video ist zu sehen wie das Experimentalfahrzeug mit einem auf der Drehachse eingespanntem Filzstift das Haus des Nikolaus zeichnet. Die Oberfläche auf dem es sich befindet ist weißes Papier. Trotz kleinerer Fehler und Ungenauigkeiten kann man klar erkennen das die Positionserfassung hier bereits respektable Ergebnisse liefert. Kalibrierfahrt durch Geradeausfahren In diesem Video ist zu sehen wie das Experimentalfahrzeug vier mal 10cm, also insgesamt 40cm, gerade aus fährt. Zur Überprüfung der Genauigkeit wurde direkt neben das Fahrzeug ein Maßstab plaziert. Die Oberfläche auf dem es befindet ist hier jetzt das Whiteboard. Auch hier ist zu erkennen das der Fehler in der Positionserfassung relativ klein ist, solange das Fahrzeug gerade aus fährt. Geradeausfahren - hier ist die Arbeit der seitlichen Regelung zu sehen Dieses Video dient ebenso zur Demonstration der Geradeausfahrt. Hier jedoch von vorne um zu sehen wie stark das Fahrzeug seitlich wegdriftet. Die seitliche Abweichung ist gering. Drehungen des Fahrzeugs auf dem Whiteboard Zuletzt ist diesem Video zu sehen wie sich das Experimentalfahrzeug 4 mal um 90° bzw. insegesamt um 360° dreht. Als Oberfläche dient hier ebenso das Whiteboard, auf dem zur besseren Visualisierung der Drehgenauigkeit ein Kreuz eingezeichnet wurde. Es ist klar zu erkennen, dass sich Fahrzeug bei jeder Drehung zu weit dreht, wodurch sich zum einen jeder Fehler fortpflanzt und sich zu den anderen addiert. Der Gesamtfehler nach vier 90° Drehungen beträgt ca. 15° bzw. ca 4% im Vergleich zum Sollwert. In einem früheren Test war der Masussensor etwas höher platziert (ca. 0,2mm). Mit dieser Einstellung funktioniert der Sensor sogar sehr gut auf der Whiteboard-Fläche: Vierecke Zeichnen auf dem Whiteboard Am Anfang des Videos ist gut zu sehen, wie der Sensor einzelne Messungen verliert. In dem Fall gibt er der Geschwindigkeitsregelung zurück, dass er sich nicht bewegt, die Regelung versucht dann, mit höherer Raddrehzahl die Sollgeschwindigkeit zu erreichen. Dies führt zu den sichtbaren Sprüngen bei der Drehgeschwindigkeit. Besonders beim Whiteboard ist es daher Wichtig, die korrekte Höhenposition zu finden. In einem weiteren Test wurde die Wiederholbarkeit des geradeausfahrens und 180°-Kehrten getestet: Geradeausfahren und 180°-Kehrten auf dem Whiteboard Bei dieser Testfahrt war noch keine Korrektur vorhanden für die leicht seitliche Positionierung des Sensors, daher fährt und zeichnet das Fahrzeug bei den 180°-Kehrten einen kleinen Kreis. 1.7 Verwendung von 2 Mäusen zur Feststellung der Drehung eines Fahrzeugs
In verschiedenen Forschungs- und Entwicklungsprojekten wurde die Verwendung mehrerer 2D-(Maus-)Sensoren untersucht. Zusammengefasst lässt sich sagen, dass für eine vollständige Bewegungserfassung auf einer 2D-Ebene (2 Linearachsen, eine Rotationsachse) 2 Sensoren ausreichend sind.
Titel: Dead Reckoning for Mobile Robots Using Two Optical Mice
Titel: Dead-Reckoning for Mobile Robots Using Multiple Optical Mouse
Sensors
Titel: Optimal placement of optical mice for accurate mobile robot
velocity estimation
In der bisherigen Konzeptentwicklung wird nur ein Sensor verwendet. Auch so ist eine vollständige Messung möglich, jedoch ist die Sensorpositionierung nicht beliebig möglich und es müssen Voraussetzungen an das Fahrzeug gestellt werden: Werden die obigen punkte beachtet, kann eine ausreichende Positionsbestimmung mit nur einem Sensor durchgeführt werden.
2 Kugelmaus
|
Mit Unterstützung von Prof. J. Walter | Sommersemester 2019 |