Im beschriebenen Projekt wurde ein automatischer Torwart mittels LEGO Mindstorms (aus einem NXT-Controller und ein Motor) konstruiert. Der Ball wurde mit Hilfe einer Webcam verfolgt und seine Trajektorie durch eine Optimierungsroutine ermittelt. Die Programmierung erfolgte in MATLAB mit der Hilfe der Toolbox der RWTH Aachen.
Alternative Prüfungsformate - Online-Workshop für das Netzwerk hdw nrw
Webcam-Ballverfolgung und Umsetzung eines Pong-Torwarts mit LEGO Mindstorms
1. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Webcam-Ballverfolgung und Umsetzung eines
Pong-Torwarts mit LEGO Mindstorms®
Mathias Magdowski
Lehrstuhl für Elektromagnetische Verträglichkeit
Institut für Medizintechnik
Otto-von-Guericke-Universität, Magdeburg
23. Februar 2017
Lizenz: cba CC BY-SA 3.0 (Namensnennung, Weitergabe unter gleichen Bedingungen)
Lego-Torwart 1
3. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Motivation
„Pong game on TV“ von Marcin Wichary via Flickr, CC BY 2.0,
https://commons.wikimedia.org/w/index.php?curid=48423746
Lego-Torwart 3
4. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Umsetzung
Vereinfachungen:
einseitig
nur „Halten“,
kein „Zurück-
spielen“
Kreisbahn
statt Linie
Ballverfolgung
durch
Webcam
Lego-Torwart 4
5. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Gliederung
Motivation
Aufbau und Ansteuerung
Probleme
Demo
Zusammenfassung
Lego-Torwart 5
7. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Aufbau
Motor
Sichtfeld
der Kamera
Lego-Torwart 7
8. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung der Kamera
Anlegen der Kamera als Objekt:
camera=videoinput(’winvideo’)
Lego-Torwart 8
9. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung der Kamera
Anlegen der Kamera als Objekt:
camera=videoinput(’winvideo’)
Übertragen eines Bildes:
frame=getsnapshot(camera)
Lego-Torwart 8
10. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung der Kamera
Anlegen der Kamera als Objekt:
camera=videoinput(’winvideo’)
Übertragen eines Bildes:
frame=getsnapshot(camera)
Anzeigen des Bildes:
image(frame) oder imagesc(frame)
Lego-Torwart 8
11. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus zur Ballerkennung
Farbbild:
Lego-Torwart 9
12. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus zur Ballerkennung
Graustufenbild:
set(camera,’ReturnedColorSpace’,’grayscale’)
Lego-Torwart 10
13. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus zur Ballerkennung
Schwarz-Weiß-Bild:
framebw=frame<border
spy(framebw)
Lego-Torwart 11
14. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus zur Ballerkennung
Erkennung des Balls:
frameblackx=any(framebw,1)
frameblacky=any(framebw,2)
posx=(find(frameblackx,1,’first’)+find(frameblackx,1,’last’))/2
posy=(find(frameblacky,1,’first’)+find(frameblacky,1,’last’))/2
Lego-Torwart 12
15. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus zur Ballerkennung
Verfolgung der Trajektorie:
fehlersumme=@(parameter) sum(((posy-modell(posx,parameter)).ˆ2))
parameter=fminsearch(fehlersumme,parameter)
Lego-Torwart 13
16. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung des Motors
Absolute Positionierung bei position_soll:
position_ist=motor.ReadFromNXT().Position
Lego-Torwart 14
17. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung des Motors
Absolute Positionierung bei position_soll:
position_ist=motor.ReadFromNXT().Position
motor.TachoLimit=abs(position_soll-position_ist)
Lego-Torwart 14
18. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung des Motors
Absolute Positionierung bei position_soll:
position_ist=motor.ReadFromNXT().Position
motor.TachoLimit=abs(position_soll-position_ist)
if position_soll-position_ist>0
motor.Power=power
else
motor.Power=-power
end
Lego-Torwart 14
19. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ansteuerung des Motors
Absolute Positionierung bei position_soll:
position_ist=motor.ReadFromNXT().Position
motor.TachoLimit=abs(position_soll-position_ist)
if position_soll-position_ist>0
motor.Power=power
else
motor.Power=-power
end
if position_soll-position_ist˜=0
motor.SendToNXT()
end
Lego-Torwart 14
21. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Elastischer vs. unelastischer Stoß
Elastischer Stoß an der Bande:
x
y
Lego-Torwart 16
22. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Elastischer vs. unelastischer Stoß
Unelastischer Stoß an der Bande:
x
y
Lego-Torwart 17
23. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Probleme mit der Framerate
Lego-Torwart 18
24. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus mit einer Schleife
Start
Frame
Ballver-
folgung
Abbruch Stop
JaNein
Lego-Torwart 19
25. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Algorithmus mit einer Callback-Funktion
Start Stop
Kamera Frame
Ballver-
folgung
Callback
Lego-Torwart 20
26. Motivation Aufbau und Ansteuerung Probleme Demo Zusammenfassung
Ergebnis −→ gleichmäßigere Framerate
Lego-Torwart 21