Objekt- und Selbstlokalisationin der Robotik
Arndt Mühlenfeld3.7.2002
Anfang
• soccerVision liefert Positionen im Bild.
• Die Tore und das Hindernis mit Bounding-Box und Schwerpunkt.
• Auf den Ball wird ein Kreisfitting durchgeführt.
soccerVision
Mängel
• Kein Bestimmung der Ballposition im Spielfeld.
• Khepera erkennt die Wand nicht als Hindernis.
• Keksi braucht Selbstlokalisation.
„goalieVision“
RGB-Image
Segmenter
Linescan
Blob-selection+ Circlefitting
Houghtransform+ Line-selection
MatchModel
Ballposition
Pose
soccerVision
Selbstlokalisation
1) Finden von potentiellen Linienpunkten
2) Hough-Transformation
3) Ermitteln der Maxima
4) Zählen der Punkte auf jeder Linie
5) Maxima wählen und ähnliche entfernen
6) Vergleich mit gegebenem Modell
Line-scan
Kamera-Kalibrierung
Linsen-Verzerrung (k1 k2 p1 p2)
Kamera-Matrix
100
0
0
yy
xx
cf
cf
A
yy
rpxprkrkcvvv
xx
rpyprkrkcuuu
y
x
22~
22~
2
124
22
1
2
214
22
1
OpenCV
• Funktionen in OpenCV:– cvFindChessBoardCornerGuesses– cvCalibrateCamera
• Aber:– Punkte im Bild müssen den Punkten im
„Schachbrett“ zugeordnet werden.
FindChessBoardCornerGuesses
Die Houghtransformation für Geraden
sincos yx
bzw.
sincos)( yxf
Linien im Bild
Umrechung in die Boden-EbeneBAXX p 0Ebenengleichung:
b
b
a
z
y
x
z
y
x
z
y
x 0
0
0
0
0
0
y
x
zBlickrichtung
X0
A
B
Höhe
Kalibriertin mm
Roboter
Kalibrierung für den Khepera
0
60 60
110
120
Das Modell vom Test-Goalie(Keksi II)
Tor
Hough-Space
h
v
02
600
Probleme
• Mehrdeutigkeiten in der Position:
Ballposition
• 2 Möglichkeiten:– Berechnung der Projektion des Mittelpunkts auf
den Boden, über die Ballhöhe kommt man auf die tatsächliche Position.
– Ermitteln der Parameter der Ebene parallel zum Boden durch die Ballmitte.
• Problem:Das Ballzentrum im Bild ist sehr ungenau.
Ballgeschwindigkeit
• Einfache Differenzbildung zwischen zwei Bildern funktioniert nicht gut.
• Kalman-Filter:
11
1000
0100
010
001
kkk
y
x
pxT
T
x
v
v
y
x
Modell: Messung:
10010
0001
kkk qxz
Anwendung
• Ableiten des Controllers von visionControllerBase.Überschreiben der virtuellen Methoden:– setBallPosition (timestamp, x, y)– setPose (timestamp, x, y, phi)
• Erzeugen eines goalieVision - Objekts,Übergabe des Controller-Objekts.
• Aufruf der Methode goalieVision::Run()
Ende
(Eine detailliertere Beschreibung mit Referenzen ist in Arbeit)