Wegmessung (Odometrie): Unterschied zwischen den Versionen
Pemiso (Diskussion | Beiträge) (→Signalform der Odometrie-Encoder) |
Pemiso (Diskussion | Beiträge) |
||
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 37: | Zeile 37: | ||
Rückwärts: Pin 1 zeigt Übergang LOW->HIGH und Pin 2 = LOW | Rückwärts: Pin 1 zeigt Übergang LOW->HIGH und Pin 2 = LOW | ||
− | = | + | = Encoder im Eigenbau = |
<gallery> | <gallery> | ||
− | File: l50_odometry_sensor.jpg | Ambrogio L50: | + | File: l50_odometry_sensor.jpg | Ambrogio L50: Encoderscheibe einer Computermaus auf der Motorachse, Fotodiode/Fototransistor einer Lichtschranke (z.B. LTH 301) an den Plexiglasscheiben befestigt. |
− | File: mower_photo_interrupter_right.JPG | Tianchen TC-G158 ( | + | File: mower_photo_interrupter_right.JPG | Tianchen TC-G158 (rechts): Eine Lichtschranke (z.B. LTH 301) wird durch das Getriebezahnrad auf der Motorachse unterbrochen. |
− | File: Odometry_circuit.jpg | LTH301 | + | File: Odometry_circuit.jpg | LTH301 Schaltung |
</gallery> | </gallery> | ||
− | == | + | == Verdrahtung == |
VCC pinArduino | VCC pinArduino | ||
Zeile 51: | Zeile 51: | ||
== Differential drive == | == Differential drive == | ||
− | + | Durch Auswertung der Odometrie können wir Geschwindigkeit, Fahrstrecke und Richtung ermitteln. | |
<gallery> | <gallery> | ||
Zeile 58: | Zeile 58: | ||
− | + | vom Rad zurückgelegter Weg: | |
left_cm = ticksLeft / odometryTicksPerCm | left_cm = ticksLeft / odometryTicksPerCm | ||
right_cm = ticksRight / odometryTicksPerCm | right_cm = ticksRight / odometryTicksPerCm | ||
− | + | Fahrtrichtung: | |
wheel_theta = (left_cm - right_cm) / odometryWheelBaseCm | wheel_theta = (left_cm - right_cm) / odometryWheelBaseCm | ||
odometryTheta += wheel_theta | odometryTheta += wheel_theta | ||
− | + | Gesamtweg: | |
avg_cm = (left_cm + right_cm) / 2.0 | avg_cm = (left_cm + right_cm) / 2.0 | ||
odometryX += avg_cm * sin(odometryTheta) | odometryX += avg_cm * sin(odometryTheta) | ||
odometryY += avg_cm * cos(odometryTheta) | odometryY += avg_cm * cos(odometryTheta) | ||
− | == | + | == Meßfehler == |
− | + | Durch Auswertung der am linken und rechten Radantrieb gezählten Encoderimpulse über der Zeit können wir Geschwindigkeit, Fahrstrecke und Richtung ermitteln. Jedoch addieren sich kleine Fehler durch Verwendung von Näherungsformeln und Schlupf der Antriebsräder über längere Zeit zu wachsenden Ungenauigkeiten. Dies kann durch [http://wiki.ardumower.de/index.php?title=Sensor_fusion Sensor-Signalfusion] kompensiert werden. | |
<gallery> | <gallery> | ||
− | File: odometry_plot.jpg | | + | File: odometry_plot.jpg | Odometriefehler |
</gallery> | </gallery> | ||
− | = | + | = Drehzahlregelung (PID) der Motoren = |
− | + | Die Drehzahlregelung der Radantriebe erfolgt per Software über einen PID-Regler. Die Qualität der Regelung kann per pfodApp visualisiert werden (Plot->Motor control): | |
<gallery> | <gallery> | ||
Zeile 86: | Zeile 86: | ||
= Video = | = Video = | ||
− | + | Noch kein Video verfügbar (Odometrie derzeit in Entwicklung) |
Aktuelle Version vom 15. Juli 2015, 19:25 Uhr
Inhaltsverzeichnis
Zusammenfassung
Mittels Odometrie können sowohl Geschwindigkeit als auch kurzfristige Position des ArduMower ermittelt werden. Dies basiert auf der Zählung der Umdrehungen des linken und rechten Radantriebsmotors (Motor-Encoder erforderlich zur Nutzung der aktuellen Ardumower-Software).
Momentan wird die Odometrie folgendermaßen genutzt:
- Gewährleistung der gleichen Drehzahl bei rechtem und linken Antriebsrad des Ardumower beim Vorwärtsfahren.
Pinbelegung der Ardumower Motor-Encoder
Die Motoren aus dem Shop verfügen über 2-Kanal-Encoder. Diese liefern 5 Impulse per Motorumdrehung. Multipliziert man diese mit dem Übersetzungsverhältnis des Getriebes von 1:212, erhält man 1060 Encoderimpulse pro voller Radumdrehung.
Pinbelegung und Verdrahtung der Encoder-Anschlüsse:
grün ---- GND braun ---- VCC blau ---- Odometry1 (Kanal 1) lila ---- Odometry2 (Kanal 2)
WICHTIG: Auf den PCB V0.5/1.2 fehlen die Pull-up-Widerstände! Du mußt sie selbst ergänzen:
odometry1 --- 4.7k --- 5v odometry2 --- 4.7k --- 5v
Signalverlauf der Odometrie-Encoder
Vorwärts: Pin 1 zeigt Übergang LOW->HIGH und Pin 2 = HIGH Rückwärts: Pin 1 zeigt Übergang LOW->HIGH und Pin 2 = LOW
Encoder im Eigenbau
Verdrahtung
VCC pinArduino +--13 KOhm----+-------Collector Emitter---GND +--380 Ohm------------Anode Kathode---GND
Differential drive
Durch Auswertung der Odometrie können wir Geschwindigkeit, Fahrstrecke und Richtung ermitteln.
vom Rad zurückgelegter Weg:
left_cm = ticksLeft / odometryTicksPerCm right_cm = ticksRight / odometryTicksPerCm
Fahrtrichtung:
wheel_theta = (left_cm - right_cm) / odometryWheelBaseCm odometryTheta += wheel_theta
Gesamtweg:
avg_cm = (left_cm + right_cm) / 2.0 odometryX += avg_cm * sin(odometryTheta) odometryY += avg_cm * cos(odometryTheta)
Meßfehler
Durch Auswertung der am linken und rechten Radantrieb gezählten Encoderimpulse über der Zeit können wir Geschwindigkeit, Fahrstrecke und Richtung ermitteln. Jedoch addieren sich kleine Fehler durch Verwendung von Näherungsformeln und Schlupf der Antriebsräder über längere Zeit zu wachsenden Ungenauigkeiten. Dies kann durch Sensor-Signalfusion kompensiert werden.
Drehzahlregelung (PID) der Motoren
Die Drehzahlregelung der Radantriebe erfolgt per Software über einen PID-Regler. Die Qualität der Regelung kann per pfodApp visualisiert werden (Plot->Motor control):
Video
Noch kein Video verfügbar (Odometrie derzeit in Entwicklung)