Linearisierung der GP2D12 Abstandssensoren

HOWTOs zum c't-Bot und c't-Sim

Moderator: Moderatoren Team

Antworten
noxon
Moderator
Moderator
Beiträge: 192
Registriert: 18 Jan 2006, 11:19
Wohnort: Hamm, NRW
Kontaktdaten:

Linearisierung der GP2D12 Abstandssensoren

Beitrag von noxon » 14 Feb 2006, 09:47

Da die Abstandssensoren keine linearen Werte liefern, sondern einer speziellen Kurve folgen sollte man dies natürlich auch im Programm und natürlich auch im Simulator beachten.

Um das tun zu können linearisiert man am Besten die Kurve, sodass man beim doppeltem Abstand auch einen doppelt so hohen Messwert erhält.

Dazu habe ich eine Formel auf dieser Seite gefunden, die genau dies tut. Sie ist wirklich sehr einfach und scheint auch sehr genaue Messergebnisse zu liefern. Hinzukommt, dass die Messwerte auch noch individuell auf jeden Sensor einzeln abgestimmt werden und somit eventuelle Toleranzen, die bei der Produktion entstehen, ausgeglichen werden.

Falls der Link irgendwann vielleicht nicht mehr existiert gibt es hier die Formel noch einmal in Textform:

[pre]
D = A / (X - B)


D: Entfernung
X: Ausgabewert des Sensors
A: Steigung der Kurve A/X
B: Offset der Kurve


Die individuellen Konstanten A und B werden wie folgt ermittelt:

A = ((X' - X) * (D' * D)) / ( D - D')

B = ((D' * X') - (D * X)) / (D' - D)



D: Entfernung der ersten Messung (z.B.: bei 15 cm )
X: Ausgabewert der ersten Messung (z.B.: bei 15 cm )

D': Entfernung der zweiten Messung (z.B.: bei 80 cm )
X': Ausgabewert der zweiten Messung (z.B.: bei 80 cm )
[/pre]
Ein IO-Port kann drei verschiedene Zustände einnehmen. Input, Output und Kaputt. Müsste es dann nicht IOK-Port heißen?

Harald
Friends of Marvin
Friends of Marvin
Beiträge: 2
Registriert: 15 Feb 2006, 23:18

Beitrag von Harald » 15 Feb 2006, 23:40

Nach einer kleinen Messreihe mit fünf Messpunkten hatte ich meine Konstanten beisammen und wunderte mich, dass bei der Berechnung auf dem Papier alles wunderbar klappte, der Bot jedoch ziemlichen Mist anzeigte. Nach einigem Rätseln bin ich schließlich auf die Lösung gestoßen: Das Display zeigt nicht etwa den Sensormesswert für die Formel an, sondern 1023 - Messwert.
Halb so schlimm, man kann die Displayanzeige dennoch zur Kalibrierung verwenden, wenn man die Formel anpasst:

D = A / (1023 - X - B)

Aufpassen sollte man auch, wenn die Konstanten zu groß werden, bei mehr als 32767 könnte es bei einem int16 Probleme geben.

marvin
Wiki Master
Wiki Master
Beiträge: 440
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 16 Feb 2006, 10:26

Hallo Harald,

könntest du deine gemessenen Werte hier mal veröffentlichen, zwecks Vergleich? Danke.

Gruß marvin

Harald
Friends of Marvin
Friends of Marvin
Beiträge: 2
Registriert: 15 Feb 2006, 23:18

Beitrag von Harald » 16 Feb 2006, 20:11

könntest du deine gemessenen Werte hier mal veröffentlichen, zwecks Vergleich?
Aber gerne: Mit der Formel

D/cm = A / (X - B)

gilt bei mir

A = 5084
B = 43

Grüße,
Harald

marvin
Wiki Master
Wiki Master
Beiträge: 440
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 16 Feb 2006, 23:12

Vielen Dank, Harald

bei meinem Bot komme ich auf:

Rechter Sensor:
A = 5000
B = 100

Linker Sensor:
A = 4880
B = 100

Denke, das liegt innerhalb der Toleranz.
Anbei eine Excel Tabelle mit den Messwerten.

Gruß marvin
Dateianhänge
distanzsensor.zip
c't-Bot Distanz Sensor Messreihe
(51.84 KiB) 1046-mal heruntergeladen

Antworten