Can Koşar

Kategorie: Allgemein (page 1 of 2)

Mapping mit Ultraschall

Bei den SLAM-Robotern ist ein robustes Raumerfassungssystem von essenzieller Bedeutung. Bei den Robotern im Haushaltsbereich ist der Kostenfaktor des Raumerfassungssystems ein entscheidendes Kriterium. Die Ultraschall-Distanzmessung ist eine sehr interessante Möglichkeit, den Raum zu erfassen.

Ein analoges Ultraschallmodul für die Distanzmessung kostet bei großen Stückzahlen deutlich unter 1USD, da es eine einfache Elektronik hat und keine Präzisionsherstellung erfordert. Er kann die Objekte im Bereich 0,1m-4m erkennen. Die 1D-Messungen müssen, abhängig von der Roboterkonfiguration, ins Inertialsystem transformiert werden, um die 2D-Raumkarte zu erstellen. Die Schnittstelle HC-SR04 mit Raspberry Pi ist im Teil Schnittstelle Raspberry Pi und HC-SR04 erläutert.

Versuchsaufbau

Der Mapping-Versuch mit Ultraschallsensoren wird in einem vorgemessenen, künstlichen Versuchsraum durchgeführt, siehe Abbildung 1.


Abbildung 1: Versuchsraum

Die Außenmaße des Messraums betragen 3,65m \times 1,7m. Der Roboter führt ein autonomes „Rechtsherumfahrt“ an den Wänden entlang und akquiritiert die 1D-Entfernungsdaten mit der aktuellen Roboterlage. Danach werden diese Daten ins Inertialsystem transformiert und es wird die Raumgeometrie erstellt. Erster Teil des Versuchs ist die einmalige Fahrt und die Interpretation der Messergebnisse. Im folgenden Video wird der Versuchsablauf vorgestellt.

Video 1: Autonome Rechtsherumfahrt für die initiale Kartenerstellung
In der Abbildung 2 ist die dabei erfasste Raumgeometrie dargestellt.

Abbildung 2: Initiale Karte
Wie in der Abbildung 2 erkannt werden kann, können die einfachen Objekte bei solchen einfachen und geschickten Raumgeometrien erfasst werden. Die Stärken und Schwächen der Mapping durch Ultraschall-Technik kann wie folgt zusammengefasst werden.

Verarbeitung der Messdaten für die Erstellung der Raumkarte

Erst müssen die 1-D Distanz-Messdaten aus den Sensoren in das Inertialsystem transformiert werden. Somit werden Punkte im Inertialsystem gewonnen, mit denen Abschätzungen über die die 2-D-Raumkarte gemacht werden können. Dabei werden die Wahrscheinlichkeiten bzw. die Varianzen der ermittelten Punkte berechnet, um die höchstwahrscheinliche Raumkarte abschätzen und nachkorrigieren zu können. Zu diesem Zweck dienen die Hilfsmittel wie vor allem Bayessches Theorem und Kalman Filter, mit denen die Wahrscheinlichkeiten der Messpunkte abgeschätzt und im Algorithmus abgespeichert werden, siehe SlamChoset, SlamSiegwarth.

Das Kalman-Filter kann für die Erstellung der Raumkarte mit mehreren Datenquellen verwendet werden (Sensor Fusion). In dem Quellcodverzeichnis befindet sich eine Beispiel-Implementierung für Kalman-Filter als Python-Code.

Tauglichkeit der Ultraschalltechnik als Haupt-Mappingsystem

Die Ultraschalltechnik ist bei zahlreichen Anwendungen eingesetzt auch als Distanzsensoren. Im Folgenden wird die Tauglichkeit dieser Technik für vorliegende Anwendung, der Indoor-SLAM-Roboter beurteilt.

Die Ultraschallsensoren charaktersieren sich in der Anwendung als Haupt-Mappingsystem mit folgenden Eigenschaften

+ Niedriger Beschaffungspreis
 Großer Öffnungskegel der Ultraschallwellen
Interferenz der Ultraschallwellen
Ablenkung der Ultraschallwellen nach der Reflektion
Geschwindigkeit der Ultraschallwellen / Abtastfrequenz

+ Niedriger Beschaffungspreis

Die Ultraschalltechnik bietet eine sehr günstige Möglichkeit, Distanzen bis zu 4m zu messen.  In Großserie kosten die Sensormodule deutlich unter 1USD.

Großer Öffnungskegel der Wellen

Die Öffnungswinkel der Wellen aus Ultraschalltransmitter beträgt bei HC-SR04 15^\circ bis über 30^\circ.  Das ist eine fataler Nachteil dieser Technik gegenüber manchen anderen optischen Messmethoden. Die Auflösung sinkt deutlich mit der steigenden Entfernung. Die Varianz beträgt bei einer Entfernung von 4m demnach 2,09m, die im 2D-Raum auf einem Kreisbogen des Schallkegels dargestellt werden kann.

Diese Eigenschaft ist wiederrum vorteilhaft bei der Kollisionsverhinderung, wo ein breites Abtasten erforderlich ist.  Daher stellt der Sensor eine gute Möglichkeit als Kollisionsverhinderungssensor dar.

Interferenz der Ultraschallwellen

Das bei diesem Versuch verwendete Ultraschallsensormodul HC-SR04 ist ein nicht-konfigurierbares analoges Modul. Es schickt voreingestellt 8 Sequenzen mit 40Hz. Somit können sich die Wellen, besonders bei nah-positionierten Sensoren, interferieren. Um diese Problematik umzugehen, müssen die Ultraschall-Impulse kodiert werden. Dies erfordert zusätzliche und ggf. teurere Elektronik

Ablenkung der Ultraschallwellen nach der Reflektion

Die Ultraschallwellen können an schrägen oder sonstigen ungünstigen reflektierenden Oberflächen bzw. Objekten abgelenkt werden, sodass die Wellen entweder nicht an den Empfänger zurückkehren oder abgeschwächt werden. In dem Versuch zeigten sich die Messdaten bei den Objekten, die dem Sensor schräger als ~30 stehen, als unbrauchbar. Dazu gehören auch verschiedene Kanten, die der Roboter schräg messen muss. Das stellt auch einen bedeutenden Nachteil dar, da die Räume und Objekte in der Praxis viel komplizierter und ungünstiger sein können.

Geschwindigkeit der Ultraschallwellen / Abtastfrequenz

Die Geschwindigkeit der Ultraschallwellen beträgt  in der Luft \sim342\nicefrac{m}{s} und stellt ebenso ein großes Hindernis in der Verwendung als Haupt-Mappingsystem dar, es eine maßgebende Beschränkung für die Abtastfrequenz ist. Im Versuch zeigten sich Abtastfrequenzen über 2Hz als suboptimal, da die Messfehler bei niedrigeren Leerlaufzeiten drastisch zunehmen.

Bei niedrigen Abtastfrequenzen muss das Beobachtermodell auch präziser definiert werden. Zwar bei einem bewegenden Roboter wird die Lage des Roboters beim Aussenden und Empfangen der Wellen unvernachlässigbar unterschiedlich sein. Dieses Phänomen muss im Modell ebenso berücksichtigt werden.


Zusammenfassung

Aufgrund seinem günstigen Beschaffungspreis ist Ultraschallsensor eine interessante Technik, um kurze Distanzen bis zu 4m zu messen. Als zuverlässiges Haupt-Mappingsystem ist sie aufgrund der Breite und die Geschwindigkeit der Ultraschallwellen eher ungeeignet.  Dennoch bietet er eine interessante Möglichkeit als Kollisionsverhinderungssensor an.

Ausblick

Die optischen Methoden, wie 1D-Laserentfernungsmessungen, die auf Triangulationsprinzip beruhen, sind für die 2D-Kartenerstellung geeigneter und ist der aktuelle Fokuspunkt der Entwicklung des Ropi. Ein weiterer Entwicklunsgegenstand ist der Mapping-Algorithmus auf der Basis von Kalman-Filter.

Ultraschallsensor-Modul HC-SR04 mit Raspberry Pi Schnittstelle

Der preiswerte HC-SR04 Sensor besteht aus einem Ultraschall-Sender und einem Empfänger. Er funktioniert nach dem Prinzip Zeit-Distanzmessung, in dem er eine Reihe von Ultraschallwellen sendet und die Zeit bis zum Wiederempfang der reflektierten Wellen misst. Daraus können Aussagen über die Entfernung des reflektierenden Objekts gemacht werden.

Schnittstelle von Ultraschallsensor HC-SR04 und Raspberry Pi

Im Folgenden ist die Schnittstelle mit Raspberry Pi schematisch dargestellt.
HCSR04_Schema_Steckplatine

Abbildung 1: HC-SR04 und Raspberry Pi Schnitstellenschema

Das Ultraschall-Sensor-Modul ist eine analoges Modul, siehe Datenblatt. Es wird zuerst für min. 10us Spannung an Trigger gelegt. Danach sendet er über Transmitter acht Rechteck-Zyklen Ultraschall-Wellen mit 40Hz. Ab dieser Zeit schaltet er den Ausgang (Echo) ein und wartet auf die reflektierten Wellen. Sobald die Welle wieder am Receiver gehört wird, schaltet er den Echo wieder aus.

Elektronik

Die Eingangs- sowie Ausgangsspanunng von HC-SR04 beträgt 5V. Die Input Pins von Raspberry Pi können eine maximale Spannung von 3,3V erfassen. Daher muss die Ausgangsspannung mit einem Spannungsteiler reduziert werden.

Eine weitere Beschränkung ist der Strom, den Raspberry Pi aufnehmen soll. Der „Sink“ soll üblicherweise nicht höher als 0.5mA betragen. Das muss bei der Widerstandsauswahl berücksichtigt werden. Die Widerstände der Spannungsteiler können nach

(1)   \begin{equation*} \frac{U_E}{U_A}=\frac{R_1+R_2}{R_2} \end{equation*}

berechnet werden. Daraus ergibt sich das Verhältnis zwischen den Widerständen als

(2)   \begin{equation*} \frac{R_1}{R_2}=\frac{1,7}{3,3}\text{.} \end{equation*}

Wenn der Pulldown-Widerstand R_2 als 10k\Omega gewählt wird, soll demnach der Pullup-Widerstand R_1=5,\overline{15}k\Omega betragen. Der Spannungsteiler mit handelsüblichen 10k und 5k1 Widerständen gibt in Praxis mit Verlustwiderständen am Echo eine Ausgangsspanung von 3,25V. Das ist in dem sicheren Bereich der empfohlenen Eingangsspannung für Raspberry Pi.

Datenverarbeitung mit Python

Der Ablauf des Algorithmus ist, dass zuerst kurz einen Impuls an Trigger gegeben und unmittelbar danach die Zeit gemessen wird, in der am Ausgang (Echo) Spannung liegt. Da diese Zeitmessung analog erfolgen und ausgewertet werden muss, läuft das Programm, das einen Ultraschallmodul auswertet in Schleife. Daher muss die Auswertung des Ultraschalls in einem parallelen Prozess oder Thread laufen und zwar es muss für jeden Ultraschall-Sensor ein eigener Prozess laufen. Im Folgenden wird dazu ein Python-Programmcode beigefügt, in dem beliebig viele Ultraschallmodule durch Multithreading parallel ausgewertet werden und mit dem Hauptalgorithmus kommunizieren können.

Im Datenblatt von HC-SR04 wird eine Leerlaufzeit (Settle time) von min. 60ms empfohlen. Die Leerlaufzeit zwischen den Zyklen variiert je nach Anwendung und Messbereich. Die empfohlene Zeit von 60ms hat sich bei der Raumerfassung als zu niedrig herausgestellt, da die Wellen bei Distanzen über 3m nachhallen und die Receiver störanfälliger werden. Als akzeptabel haben sich die Leerlaufzeiten von ab 300ms herausgestellt. Dieser Umstand reduziert die Abtastfrequenz drastisch.

Hingegen spielt die Triggerzeit wenig Rolle bei der Anwendung mit Raspberry Pi, da der Prozessdauer des sequentiellen Ein- und Ausschaltens des Trigger-Pin schon länger als die erforderliche Trigger dauert. Im vorliegenden Fall ist die Sleep-Time für das Triggern überflüssig und könnte übersprungen werden.

Die Raum-Mapping mittels Ultraschallsensoren HC-SR04 ist in diesem Teil vorgestellt.

Übersicht der Elektronik

In der Abbildung 1 ist eine Übersicht der Elektronik vorgestellt. Die mechanische Bauform des Roboters ist in dem Teil Beschreibung der Kinematik detailliert erläutert. Aus Flexibilitätsgründen und um die vielfältige Versuche zu ermöglichen, wurde die Elektronik auf Basis einer Steckplatine aufgebaut. In der unten beigelegten Fritzing-Datei (.fzz) ist bereits ein Schema dargestellt, aus der man PCB-Leiterplatinen entwickeln kann. Als Mikrocontroller dient ein Raspberry Pi 2 Model B mit dem Betriebssystem Raspbian Wheezy, eine für die Raspbbery Pi optimierte Debian-Distribution.

Abbildung 1: Übersicht der kompletten Verdrahtung
 

Fritzing Datei (.fzz) für die Steckplatine und PCB herunterladen
Der Gegenstand aktueller Untersuchungen mit „Ropi“ ist die Forschung der Möglichkeiten eines mobilen Roboters mit günstigen, serienhergestellten und aktuell-marktüblichen Sensoren und Aktoren. Zudem werden die Schwächen und Verbesserungsmöglichkeiten der marktüblichen Aktorik und Sensorik untersucht und eine Marktanalyse der relevanten Komponenten durchgeführt.

Mikrocontroller Raspberry Pi 2 Model B

Raspberry Pi 2 Model B ist ein beliebter Einplatinen-Computer, der ab 2006 entstanden ist, um eine preiswerte Hardware bzw. Computer für die angehenden Informatik-Studenten zur Verfügung zu stellen 1. Der Computer im Kreditkartenformat wird heute aufgrund seines Preis/Leistungsverhältnisses vielseitig verwendet. Weiterlesen

A/D Wandler MCP 3008

Der MCP3008 ist ein 8-kanäliger, schneller und energieeffizienter Analog-Digital-Wandler, der für die Embedded-Regelungsapplikationen gut geeignet ist. Er kann mit Raspberry Pi über SPI-Port kommunizieren.Weiterlesen

Gyrometer/Accelerometer (IMU) MPU6050

Der als Initial-Measurement-Unit (IMU) vermarkteter MPU6050 ist ein kombinierter Gyro-/Accelerometer-Sensor, der einen eingebauten Bewegungsprozessor hat. Er dient gerade in vielen Hardware als IMU, wie Smartphones/Tablets etc. und ist dadurch ein sehr weit verbreitetes und preiswertes Sensormodul. Weiterlesen

Motorsteuerungsmodul L293N

Der L293N ist ein auf den Verstärker L293 von Texas Instruments aufgebauter Motortreiber, der gleichzeitig 2 Motoren steuern kann. Er eignet sich für die Steuerung und Taktung von DC- sowie Stepper-Motoren. Weiterlesen

DC-Bürstenmotor Mottrax X-Train FFK-265 mit 1/50 Untersetzungs­getriebe

Hierbei handelt es sich um einen preisgünstigen und marktüblichen Modellbau-Bürstenmotor, der von 4V bis 14V stufenlos betrieben werden kann. Der Motor zeichnet sich mit seinem niedrigen magnetischen Störverhalten aus. Weiterlesen

Gabelllichtschranke TCST2103

Der TCST2103 ist ein optischer Inkrementellzähler, eine sogenannte Gabellichtschranke, die aus einer Infrarotstrahler und einem Fototransistor besteht.Weiter­lesen

Ultraschall Distanzmesser HC-SR04

Der preiswerter HC-SR04 Sensor besteht aus einem Ultraschall-Sender und einem Empfänger. Er funktioniert nach dem Prinzip Zeit-Distanzmessung, in dem er eine Reihe von Ultraschallwellen sendet und die Zeit bis zum Wiederempfang der reflektierten Wellen misst. Daraus kann man Aussagen über die Entfernung des Reflektorobjekts machen. Weiter­lesen

Kalibration der Positionierung nach UMBMark

Bereits in den früheren Arbeiten von Borenstein und Feng, wurde diskutiert, wie die Positionfehler entstehen und systematisiert werden können, siehe BorensteinFeng94 und BorensteinFeng96. Dabei wurden sie die Fehler in zwei Klassen betrachtet.

Systematische Fehler

Zu dieser Gruppe gehören die Fehler, die durch systematischen und beobachtbaren ggf. auch beeinflussbaren Phänomenen entstehen. Hierzu gehören u.a. die Kalibrierungsfehler, kompensierbaren Fehler wie Temparatureinflüsse, Konvertierungsfehler, Durchdrehen der Räder und sonstige Ungenauigkeiten in der Parametrierung. Die systematischen Fehler sollten demnach die vermeidbaren Fehler sein. Um diese zu vermeiden, wurden Kalibrierungsprozeduren wie UMBMark entwickelt. Bei diesen Methoden geht’s um die systematischen Tests, wobei die Fehler addiert und sichtbar bzw. messbar gemacht werden. Eine dazugehörige Messprozedur ist die Quadraturfahrt in Schleife im und gegen den Uhrzeigersinn. Nach bestimmter Anzahl an Durchläufen in und gegen Uhrzeigersinn bilden sich Tendenzen für die Drifting-Richtungen. Diese Tendenzen werden danach versucht, durch Kalibrierung zu minimieren.

Unsystematische Fehler

Unter den unsystematischen Fehler werden die Fehler klassifiziert, die durch Stochastik entstehen (z.B. Unebenheiten des Bodens), die durch bekannte Phänomene nicht erklärt oder zumindest nicht beeinflusst werden können. Dazu gehören u.a. verschiedene Messfehler, Ungenauigkeiten in den Messgrößen, die durch verfügbare Messtechnik nicht gemessen werden können.


In der Abbildung 1 wurde eine Schleife der Quadraturfahrt aufgenommen, worin die Fahrt nur mit der Odometrie und mit der Sensorfusion mit der Gyrometrie gegenübergestellt. Hierbei gelte die Messung mit der Gyrometrie, wonach der Roboter auf die Sollkurve geregelt wurde als Beobachter bzw. Referenzgröße. Man erkennt hierbei schon bei der ersten Schleife, dass die Positionierung mit der reinen Odometrie in x-Richtung eine deutliche Drifting hat. Zudem dreht sich der Kreis nach Links. Dies entsteht durch die besonders hohe Abweichungen in der Winkelberechnung durch die reine Odometrie, siehe dafür Teil Zustandsbestimmung durch reine Odometrie.


Abbildung 1: Konzeptvergleich am Quadraturfahrtzyklus

Die Tendenz der vorliegenden Fahrt ist leichte Rechtssteuerung, die der Regler gegensteuern muss. Die kleinen Winkelshifts neigen z.B. daran das Quadrat nach links zu verdrehen. Die systematischen Fehler entstehen u.a. aus die Linkssteuerung. Werden die Motoren dementsprechend kalibriert, verschwindet diese Tendenz.

Bitte beachten Sie, dass die Abweichung des grünen Pfads von der Solltrajektorie nicht die Abweichung der Positionsmessung mit der Odometrie und Gyrometrie darstellt, sondern lediglich Reglerabweichung ist.

Die Kalibrierung des Roboters, der nur durch die Odometrie positioniert wird, ist allerdings nicht der Gegenstand meiner folgenden Arbeit. Im Folgenden wird sowohl Odometrie mit der Gyrometrie fusioniert.

Der Gyrometer hat eine hohe Genauigkeit in der Messung der Orientierung und dadurch kann sogar die Abweichung durch die Auflösung der Odometrie zum gewissen Teil kompensiert werden, siehe Teil Zustandbestimmung durch Odometrie und Gyrometrie.

Es gilt daher den Roboter mit beiden Sensoren zu kalibrieren. Dazu wird ein anderer Beobachter gebraucht. Die Kalibrierungsgrößen (x-Position, y-Position und die Orientierung können nach der Kalibrierungsschleife als Abweichung vom Ausgangszustand gemessen werden. Es wäre auch möglich z.B. optisch durch eine Kamera die komplette Fahrt aufzunehmen und vergleichen, nur für die Kalibrierung bzw. die Beobachtung der summierenden Phänomenen reicht auch der Vergleich vom End- und Ausgangszustand.

Abbildung 2: Kalibration nach UMBMark

Bei den ersten Kalibrierungsschleifen kam es, dass der Roboter etwas größere Quadrate zeichnet, nach der Kalibrierung der Odometrie zeigten die folgenden Kalibrierungsschleifen, dass die systematischen Fehler durch die Spreizung der unsystematischen Fehler unerkennbar bleiben. Eine eindeutige Driftingsentwicklung unerkennbar sind, bzw. es sich keine Drifting in eine bestimmte Richtung entwickelt. Die Abbildung 3 zeigt die Kalibrierungsschleife mit fünf Durchläufen.


Abbildung 2: Kalibration nach UMBMark mit 5 Schleifen rechtsherum

Dennoch sind die unsystematischen Fehler bzw. Varianz der Abweichungen hoch. Das wird u.a. durch folgende Zustände verursacht:

  • Die mangelnde Auflösung der Odometrie und daraus resultierende Fehler, die nicht konsequent auf eine Drifting wirken
  • Das Spiel im (Plastik-)Getriebe und Radaufhängung
  • Durchdrehung bzw. mangelnder Haft der Räder

Die grösste Fehlerquelle im vorliegenden Fall ist die Abweichungen, die durch die mangelnde Auflösung der Odometer enstehen.

Die Fehler bleiben bei der aktuellen Konfiguration auf kurzen Strecken von bis zu 10m im Bereich von <3cm in x– und in y-Richtung, welches für die weiterführenden Untersuchungen akzeptabel ist. Der Orientierungsfehler ist mit der zur Verfügung stehenden Messtechnik unmessbar klein \sim 0 ^\circ.

Bei der Rechtsschleife erkennt man, dass die Motoren nach rechts steuern. Bei der Linksschleife erkennt man allerdings, dass die Motoren nach links steuern. Dieses Phänomen beruht auf einem Hardwareproblem, dass das (Plastik-)Getriebe nach der Richtungswechsel sehr erhöhte Reibung aufweist, die der Motor überwinden muss. Prinzipiell könnte dies als ein systematischer Fehler betrachtet werden, der hardwareseitig optimiert werden kann.

Quellcodes

Der Code steht hier zum herunterladen. Die Kommentierung in den Codes ist und bleibt Englisch. Die Dokumentation vervollständige ich nach und nach. Das Projekt „Ropi“ inkl. Dokumentation und Bilder stelle ich unter Creative Commons (CC0 3.0) für nichtkommerzielle Zwecke frei. Fühlen Sie sich frei den Code zu verwenden oder weiterzuentwickeln. Bei Fragen schreiben Sie gerne an info@cankosar.com.

Quellcodes

Ropi_Sourcecode_v0.1

Positionsregelung auf Basis einer Solltrajektorie

Hierbei wird eine Solltrajektorie konstruiert und die Lagegrößen des Roboters, also Position und Orientierung, auf diese Solltrajektorie geregelt. Die Regelung erfolgt im Folgenden mit einem PD-Regler, da das integrale I-Glied durch die Addierung der differentiellen Bewegungen bereits mitbeinhalten ist und die Fehler der Lagegrößen sich summieren. Ein typischer Regelkreis sieht wie in der Abbildung 1 aus.

Rendered by QuickLaTeX.com

Abbildung 1: Standardregelkreis

Das Diagramm stellt einen typischen Regelkreis mit Rückführung dar. Hierbei stellt der Regler anhand der Einganggröße Regelabweichung e(t) die Stellgröße u(t). Hierbei ist die Regelgröße die IST-Position des Roboters

(1)   \begin{equation*} \mathbf{y}(t)=\begin{bmatrix} r_1^G\\r_2^G\\\gamma^G \end{bmatrix} \end{equation*}

und die Führungsgröße die Soll-Position, also die Soll-Trajektorie

(2)   \begin{equation*} \mathbf{w}(t)=\begin{bmatrix} \bar{r}_1^G\\\bar{r}_2^G\\\bar{\gamma}^G \end{bmatrix}\text{,} \end{equation*}

die der Roboter nachfahren muss. Daraus ergibt sich der Messfehler

(3)   \begin{equation*} \mathbf{e}(t)=\mathbf{w}(t)-\mathbf{y}(t)\text{.} \end{equation*}

Die Regelgleichung des idealen PD-Reglers im Zeitbereich kann dann als

(4)   \begin{equation*} \mathbf{u}(t)=\mathbf{K}_P^T[\mathbf{e}(t)+\mathbf{T}_V\frac{d}{dt}\mathbf{e}(t)] \end{equation*}

formuliert werden, wobei der Vektor \mathbf{K}_P der Verstärkungsvektor und der \mathbf{T}_V die Zeitkonstante ist, die das D-Glied parametrisiert. Die Stellgrößen, die hierbei eingestellt werden, sind die Spannungen der beiden Motoren

(5)   \begin{equation*} \mathbf{u}(t)=\begin{bmatrix} V_{RR}\\V_{RL}\text{.} \end{bmatrix} \end{equation*}

Der ideale PD-Regler genügt hierbei nicht ganz den Anforderungen, da das reale System sowohl software- als auch hardwareseitige Verzögerungen aufweist. Wenn man ein PT-Glied in den PD-Regler integriert, erhält man

(6)   \begin{equation*} \mathbf{T}_1\frac{d}{dt}\mathbf{u}(t)+\mathbf{u}(t)=\mathbf{K}_P^T[\mathbf{e}(t)+\mathbf{T}_V\frac{d}{dt}\mathbf{e}(t)]\text{,} \end{equation*}

wobei die Matrix \mathbf{T}_1 für die Verzögerungszeitkonstante steht. Die Bewegungsgleichungen des Roboters lassen sich i.a. als

(7)   \begin{equation*} \mathbf{M}\ddot{\mathbf{y}}(t)+\mathbf{D}\dot{\mathbf{y}}(t)+\mathbf{K}\mathbf{y}(t)=\mathbf{F}(t) \end{equation*}

schreiben, wobei \mathbf{M} die Massenmatrix, \mathbf{D} die Dämpfungsmatrix, \mathbf{K} Steifigkeitsmatrix und \mathbf{F}(t) die Matrix der äußeren Kräfte sind. Um die Bewegungsgleichungen als differentielle Gleichungen ersten Grades zu beschreiben, werden diese im Zustandraum dargestellt. Die Zustandsgleichung lautet i.a.

(8)   \begin{equation*} \mathbf{A}\dot{\underline{\mathbf{x}}}+\mathbf{B}\underline{{\mathbf{x}}}=\underline{\mathbf{p}}(t)\text{.} \end{equation*}

Mit dem Zustandvektor

(9)   \begin{equation*} \underline{{\mathbf{x}}}(t)=\begin{bmatrix} \mathbf{y}\\ \dot{\mathbf{y}} \end{bmatrix} \end{equation*}

und dem erweiterten Kraftvektor

(10)   \begin{equation*} \underline{{\mathbf{p}}}(t)=\begin{bmatrix} \mathbf{F}(t)\\ \mathbf{0} \end{bmatrix} \end{equation*}

lassen sich die Systemmatrix A als

(11)   \begin{equation*} \mathbf{A}=\begin{bmatrix} \mathbf{D}& \mathbf{M}\\ \mathbf{M}& \mathbf{0} \end{bmatrix} \end{equation*}

und die Eingangsmatrix \mathbf{B} als

(12)   \begin{equation*} \mathbf{B}=\begin{bmatrix} \mathbf{K}& \mathbf{0}\\ \mathbf{0}& \mathbf{-M} \end{bmatrix} \end{equation*}

formulieren. Im konkreten Fall des Roboters bietet sich die Vereinfachung an, bei der Ermittlung der Massenmatrix die Form als Zylinder anzunehmen. Die Dämpfungsmatrix, sowie die Steifigkeitsmatrix wurden emprisch ermittelt.

Ausblick: Die Parameteroptimierung für den Regler wurde noch nicht methodisch durchgeführt und ist ein anstehender Punkt im Roadmap.

Positionsregelung des nichtholonomen Roboters

Bereits in vorherigen Teilen wurde gezeigt, dass der Roboter als ein nichtholonomes Mehrkörpersystem modelliert wird. Durch die Nichtholonomität können die Lagegrößen, in dem Fall Position und Orientierung in Ebene, nicht direkt geregelt werden. Das bedeutet,er kann z.B. nicht direkt seitlich gestuert werden, sondern er muss sich zuerst drehen, gerade aus fahren und nochmals drehen, um eine seitliche Bewegung auszuführen. Dieses Problem kennen wir auch von Autos mit lenkbarer Vorderachse. Wenn man in eine Parklücke fahren möchte, kann man nicht immer aus jeder Position heraus mit einer direkten Bewegung in die Parklücke fahren. Manchmal sogar, wenn die Parklücke nicht groß genug ist, kann das Parken unmöglich werden, obwohl diese theoretisch genügend Platz bietet, denke man an eine Parklücke, die nur 1cm länger ist, als das Auto.

Bei der Regelung nichtholonomer Roboter gibt es grundsätzlich zwei Strategien, siehe Oubbati09.

Direkte Regelung

Die Lagegrößen werden dauerhaft direkt auf den Zielzustand, analog zur Regelung eines holonomen Systems geregelt. Dabei kann es nicht sichergestellt werden, dass die Regelung der Lagegrößen erfolgreich wird. Für manche Anwendungen könnte es funktionieren, in unserer Anwendung ist diese Strategie unbrauchbar.

Regelung auf eine Solltrajektorie

Hierbei wird eine Solltrajektorie konstruiert, die der nichtholonome Roboter fahren kann und zum Zielzustand führt. Beim Auto-Parken machen wir es im Prinzip genauso, dass wir von unserer aktuellen Position aus eine Solltrajektorie überlegen, die wir fahren sollen, um in die Parklücke hereinfahren zu können. Erstens ist es in unserer Anwendung sehr hilfreich, da der Roboter durch seine runde Bauform in jede Position hineingelingen kann, solange es dafür eine Solltrajektorie existiert (bzw. gefunden werden kann) und diese breit genug ist, dass der Roboter durchpasst. Zweitens ist das Fahren bestimmter Trajektorien für den Einsatz als mobiler Haushaltsroboter (z.B. Saugroboter) erforderlich ist. Daher ist die Regelung auf eine Solltrajektorie die geeignete Strategie für meiste Anwendungen.

Nächster Teil: Regelung auf eine Solltrajektorie

Zustandsbestimmung durch Odometrie und Gyrometrie

Im Folgenden wird die Drehung des Roboters mit Hilfe eines Gyrometers gemessen. Der Gyrometer ist im Zentrum des Gehäuse angebracht und misst die Drehgeschwindigkeiten _I\dot{\omega}^B. Der Gyrometersensor MPU6050, der hierzu verwendet wird, ist ein kostengünstiger Sensor. Er misst die Drehgeschwindigkeit und lineare Beschleunigungen in allen 6 Raumrichtungen, siehe MPU6050.

Um die Lagegrößen aus den Sensordaten vom Gyrometer bzw. Accelerometer zu konstruieren, muss die Drehgeschwindigkeit einfach und die translatorische Beschleunigungen zweifach integriert werden. Das führt dazu, dass die Messfehler mitsummiert werden. Während die Messfehler bei der Ermittlung der Orientierung durch Gyrometrie linear steigen, steigen sie bei der Ermittlung der translatorischen Lagegrößen durch den Accelerometer quadratisch. Im heutigen Stand der Technik können die Accelerometerdaten zu Hilfe gezogen werden, um momentane Beschleunigungen genau zu erfassen, allerdings für die Positionsbestimmung bei mobilen Indoor-Robotern gilt sie eher als ungeeignet, siehe BorensteinFeng94.

Die Daten des Gyrometers sind allerdings in manchen Anwendungen brauchbar. Hierbei hat man hierbei den Vorteil, dass direkt die Drehgeschwindigkeit und nicht die -beschleunigung gemessen wird. Bei der Bestimmung der absoluten Rotation um alle 3 Raumrichtungen, tritt das Problem auf, dass bei der Formulierung der Rotation alle 3 Achsen in Abhängigkeit stehen. Zur Formulierung der Rotation in allen Raumrichtungen kann die Formulierung nach Eulerwinkeln oder mit Hilfe der Quaternionen erfolgen, siehe DrehJena. Dies führt dazu, dass erstens die Messfehler in allen Richtungen addiert werden, zweitens dass man die Sensoren in allen Richtungen kalibrieren muss. Das ist z.B. eine bekannte Herausforderung bei der Anwendung in Flugobjekten wie Quadrocoptern und Flugzeugen.

Ohne darauf detailliert einzugehen, kann man erwähnen, dass im Beispiel eines 2D-Roboters nur die Rotation um eine Raumachse und zwar die Normalrichtung zur Ebene gemessen werden muss. Bei einer geschickten Kalibrierung des Sensors, lässt sich die Drifting des Sensor im Bereich von < 0.01\nicefrac{^\circ}{min} halten, was für vorliegende Anwendung eine ausreichende Fehlerentwicklung darstellt. Als Vergleich: Bei der Messung der Rotation in allen 3 Raumrichtungen und Formulierung durch Quaternionen beträgt die Drifting um die obengenannte Achse deutlich über 1 \nicefrac{^\circ}{min}.

Es gilt hierbei zu erwähnen, dass obiger Ansatz nur unter der Annahme

(1)   \begin{equation*} \begin{bmatrix} \alpha^G\\ \beta^G \end{bmatrix}=0 \end{equation*}

gilt, was am Anfang bei der Formulierung der Zwangsbedingungen erfolgte. Somit werden die Drehungen um die Frontal- und die Querachse (Roll und Pitch) vollständig vernachlässigt. Das kann ggf. genauso zu Fehlern führen, wenn die Bewegung des Roboters nicht mehr auf einer Ebene betrachtet werden kann, konkret gesagt, wenn er stolpert, über Gegenstände klettern muss etc. Für einen breiten Einsatz scheint diese Annahme allerdings zu eignen, siehe BorensteinFeng94 und BorensteinFeng96.

In dem vorherigen Teil wurde die Ermittlung des Zustands nur anhand der Odometrie erläutert. In diesem Teil wird die Ermittlung des Zustands anhand der Odometrie und der Gyrometrie diskutiert.

Sensor-Fusion

Die Ermittlung des Systemzustands durch Odometrie und Gyrometrie führt zu einem überbestimmten Problem. Der Rotationswinkel _G\gamma_{t} wird hierbei sowohl aus den Odometern konstruiert als auch aus dem Gyrometer akquiriert. Da die von der Sensorik akquirierten Daten keine absoluten Wahrheiten wiedergeben, wird hierbei von der Wahrscheinlichkeit der Daten bzw. einer „Schätzung“ (Prediction) des Systemzustands gesprochen. Hierbei erhält der Algorithmus mehrere ggf. voneinander abweichende Informationen über den Systemzustand. Er muss demnach den optimalsten bzw. den wahrscheinlichsten Systemzustand schätzen. Hierzu gibt es ebenfalls zahlreiche Studien und Ansätze, wie z.B. Bayes Theorem und Kalman Filter etc. Hier ein hilfreiches Video für Sensor-Fusion auf Android Devices mit Hilfe desselben Sensors.

Im vorliegenden Fall hat die Odometrie eine deutlich schlechtere Genauigkeit als die Gyrometrie. Eine Approximation ist die Annahme, dass die Gyrometerdaten durch geringe Drifting exakte Wahrheit sind, d.h.

(2)   \begin{equation*} P_\Gamma(G)=1 \end{equation*}

Die Daten der Odometrie und Gyrometrie sind \textit{weitestgehend} nicht komplementär, d.h. die Daten aus der Gyrometrie beeinflussen nicht die Wahrscheinlichkeit der Daten aus der Odometrie. Die Wahrscheinlichkeit der Odometriedaten wird in der Abbildung 1 dargestellt.

Rendered by QuickLaTeX.com

Abbildung 1: Gausssche Verteilung der Wahrscheinlichkeit der Odometriedaten
Das Ziel ist allerdings nicht nur Winkel sondern die gesamte differentielle Bewegung _G \mathbf{r}_{t}^B abzuschätzen. Somit sieht das Kreisbogen-Modell wie in der Abbildung 2.

Rendered by QuickLaTeX.com

Abbildung 2: Konstruktion der differentiellen Bewegung durch Odometer und Gyrometer
Die einfache optische Odometriemessung hat eine Auflösung, die zwei Spaltbreiten beträgt (ein leerer + ein voller). Wenn der Sensor ein Inkrement misst, gilt es

(3)   \begin{equation*} k_{Mess,Ink}=1\Rightarrow0<l_{Ist}<2l_s \end{equation*}

wobei k_{MESS,Ink} Inkrementenanzahl, l_{IST} die IST-Verschiebung (radial oder linear) und l_s eine Spaltbreite (ebenso radialoder linear) ist. In unserem Fall handelt es sich um einen Low-Budget Drehinkrementgeber (Drehencoder) mit 20 Spalten. Eine Spaltbreite beträgt demnach 360^\circ / (20*2)=9^\circ und wir haben insgesamt eine Auflösung von \pm9^\circ. Wichtig zu beachten ist, dass es sich hier nicht um einen Fehler handelt, sondern die Auflösung. Die Abweichungen werden nicht addiert.

Aus dieser Ungenauigkeit entsteht ein mögliches Intervall für die Ist-Inkrement für jeweils das rechte und das linke Rad. Daraus lassen sich nach den bereits genannter Vorgehensweise ein minimaler und ein maximaler Wert für die hinterlegten Bogenlängen \Delta a_{min,l,t}, \Delta a_{min,r,t}, \Delta a_{max,l,t}, \Delta a_{max,r,t} und daraus Radiusintervall des Drehkreises r_{min,c,t}, r_{max,c,t} berechnet.

Bei der Annahme, dass die Gyrometerdaten eine 100\%– Wahrscheinlichkeit und eine unendlich hohe Auflösung haben, kann der Radius des Drehkreises einen beliebigen Wert zwischen

(4)   \begin{equation*} r_{min,c,t}< r_{Ist,c,t}< r_{max,c,t} \end{equation*}

betragen. Nun gilt das Schätzungsproblem zu lösen, wodurch man die Fehler minimiert. Hierzu kann das Kalman-Filter zu Hilfe gezogen werden, welches die Tendenzen im Algorithmus mitspeichert und -berücksichtigt.

Eine Vereinfachung für die Abschätzung ist die Annahme, dass der Ist-Wert dem arithmetischen Mittel entspricht, d.h. r_{Ist,c,t}=\frac{r_{min,c,t}+r_{max,c,t}}{2}. Auch dieser Ansatz erweist sich für diese Anwendung brauchbar, weil die unsystematischen Fehler hoch sind und die systematischen Fehler überdecken, siehe BorensteinFengCalib96. Trotzdem bietet das Kalman-Filter eine allgemeingültigere und präzisere Vorangehensweise an das Schätzungsproblem.

Zustandsbestimmung durch reine Odometrie

Die Odometrie hat sich bei der relativen Lagemessung als eine der zuverlässigsten Methoden erwiesen, siehe BorensteinFeng94 und BorensteinFeng96. Bei simultaner Zustandsermittlung durch die Odometrie stehen uns ausschliesslich die Daten der Drehung beider Räder zur Verfügung. Die besondere Herausforderung hierbei ist, dass die Orientierung bzw. die Lenkung des Roboters durch die differentielle Drehung der beiden Antriebsräder erzeugt wird. Die genaue Bestimmung der Orientierung ist daher eine der Kernaufgaben der Regelungsalgorithmus. Hinzu kommt, dass sich der Roboter im Raum nicht absolut orientiert. Das führt dazu, dass die Fehler bei der Ermittlung der Lage und Orientierung immer addiert werden und es keine Sensorik zur Verfügung steht, die inkrementellen Fehler zu kompensieren.

Die Prinzip der Positionsermittlung hierbei ist die differentielle Konstruktion und Addition der Bewegung, die durch die Drehung beider Räder ermittelt wird. Dazu wird die Drehung beider Räder seit dem letzten Zeitinkrement gemessen und die Positions- und Orientierungsänderung inkrementell berechnet.

Bogenmodell

Der Ansatz bei der Konstruktion der Bewegung ist, dass der Roboter in einem diskreten Zeitintervall durch die unterschiedliche Bewegung der Räder eine Bogenbewegung um einen virtuellen Punkt O(t) macht, siehe Abbildung 1. In der Abbildung sind die Drehungen in die lineare Bewegung, in dem Fall Kreisbogen, übersetzt und in differentieller Schreibweise als \Delta a_l(t) und \Delta a_r(t) gekennzeichnet. Dabei ist \Delta a(t) die Bewegung des Roboters.

Rendered by QuickLaTeX.com

Abbildung 1: Konstruktion der differentiellen Bewegung

Durch die geometrischen Verhältnisse der beiden Kreisbogen gilt

(1)   \begin{equation*} \frac{r_{c,t}-r_R}{r_{c,t}+r_R}\sim\frac{\Delta a_{r,t}}{\Delta a_{l,t}}\text{.} \end{equation*}

Daraus ergibt sich

(2)   \begin{equation*} \Delta a_{l,t}(r_{c,t}-r_R)=\Delta a_{r,t}(r_{c,t}+r_R)\text{.} \end{equation*}

Wenn man die Gleichung \eqref{rel1} nach dem Radius des virtuellen Bogenkreises r_{c,t} löst, erhält man

(3)   \begin{equation*} r_{c,t}=r_R\frac{\Delta a_{l,t}+\Delta a_{r,t}}{\Delta a_{l,t}-\Delta a_{r,t}} \end{equation*}

Nun wird auch der Winkel des Bogens \Delta \gamma_{a,t} benötigt. Wenn die Längen beider Bögen \Delta a_{r,t} und \Delta a_{l,t} bekannt sind, kann für den mittleren Bogen geschrieben werden, dass

(4)   \begin{equation*} \Delta a_{m,t}=\frac{{\Delta a_{l,t}+\Delta a_{r,t}}}{2}\text{.} \end{equation*}

Daraus ergibt sich der Winkel als

(5)   \begin{equation*} \Delta\gamma_{a,t}=\frac{\Delta a_{m,t}}{r_{c,t}}=\frac{\frac{{\Delta a_{l,t}+\Delta a_{r,t}}}{2}}{r_R\frac{\Delta a_{l,t}+\Delta a_{r,t}}{\Delta a_{l,t}-\Delta a_{r,t}}}=\frac{\Delta a_{l,t}-\Delta a_{r,t}}{2 r_R}\text{.} \end{equation*}

Wenn der Kreisbogen bekannt ist, kann nun die Lage- und Orientierungsänderung im bewegten Koordinatensystem G als

(6)   \begin{equation*} _Gr_{1,t}=r_{c,t}(1-\cos(\Delta\gamma_{a,t})) \end{equation*}

für die erste translatorische Komponente,

(7)   \begin{equation*} _Gr_{2,t}=r_{c,t}\sin(\Delta\gamma_{a,t}) \end{equation*}

für die zweite translatorische Komponente und

(8)   \begin{equation*} _G\gamma_{t}=\Delta\gamma_{a,t} \end{equation*}

für die Rotation berechnet werden. Daraus ergibt sich die Bewegung der bewegten Koordinatensystems, bzw. des Starrkörpersystems G als

(9)   \begin{equation*} _G\mathbf{r}_{t}^B=\begin{bmatrix} r_{c,t}(1-\cos(\Delta\gamma_{a,t}))\\ r_{c,t}\sin(\Delta\gamma_{a,t})\\ \Delta\gamma_{a,t} \end{bmatrix} \end{equation*}

beschrieben werden.

Der Fall der Geradeausfahrt, wo beide Räder exakt den gleichen Weg zurücklegen, also \Delta a_{l,t}-\Delta a_{r,t}\rightarrow0 führt in den obigen Formeln zu einer Nulldivision. Im Prinzip ist dieser Fall durch

(10)   \begin{equation*} r_{c,t}\rightarrow\pm\inf \end{equation*}

miteingeschlossen und führt nach den Regeln der Limitrechnung zu

(11)   \begin{equation*} _G\bar{r}_{t}^B=\begin{bmatrix} 0\\ \Delta a_{l,t}\\ 0 \end{bmatrix}\text{.} \end{equation*}

Konstruktion der differentiellen Bewegung aus den Messdaten (IMU)

Noch immer die größte Herausforderung bei den mobilen Indoor-Robotern ist die Ermittlung des Zustands, d.h. der Lage und der Orientierung. Bei den Messungen stehen die Möglichkeiten der absoluten Zustandsbestimmung entweder nicht oder nur mit großem Aufwand verbunden, zur Verfügung. Am Beispiel der Haushaltsroboter steht kein GPS zur Verfügung. Zudem möchte man keine Beacons im Haus installieren. Die zusätzlichen Hilfskomponenten, wie Transponder werden für die Privatanwendung sehr mühsam empfunden und gelten als ein Minuskriterium. Hinzu kommt, dass diese keine zufriedenstellenden Daten liefern. Hierzu werden zahlreiche Studien veröffentlicht, beispielsweise BorensteinFeng94 und BorensteinFeng96. Die letzten Studien führen dazu, dass im Bereich der Indoor-Robotik keine einzelne zufriedenstellende Messmethode gibt und die zuverlässige Positionsermittlung mit Hilfe mehrerer Methoden bzw. Sensoren erfolgen muss. Unterschieden wird hierbei grundsätzlich zwischen den relativen und absoluten Methoden. Eine der wichtigsten Methoden ist die Positionsmessung durch die Odometrie. Die üblichen Odometriesensoren bieten zwar eine schlechte Genauigkeit allerdings eine geringe Fehlersummierung (Drifting).

Eine andere wichtige Messmethode ist die Drehgeschwindigkeitsmessung durch die Gyrometrie. Die Prinzip beruht auf der gyroskopischen Kräfte, die bei der Drehung entstehen. Die Gyrometrie wird durch eine hohe Genauigkeit aber auch eine hohe Drifting gekennzeichnet. Für die Anwendungen, wo die Drifting irrelevant ist, wie in den Eingabegeräten reicht die Gyrometrie aus. Beim Einsatz in absoluter Positionsermittlung stellt sie ein wichtiges Hilfsmittel dar, muss aber mit den anderen Messmethoden kombiniert werden.

Im folgenden Teilen wird die Zustandsbestimmung durch die optische Odometrie und die Gyrometrie beschrieben.

  1. Zustandsbestimmung durch reine Odometrie
  2. Zustandsbestimmung durch Odometrie und Gyrometrie
Olderposts

Rechte © 2017 Can Koşar

Mit Unterstützung von Wordpress, QuickLaTeX und Design von Anders NorenSeitenanfang ↑