Seminar im Grundstudium SS2007 Seminar im Grundstudium: Motion-Tracking in der Robotik Lehrstuhl für Hardware-Software-Co-Design Universität Erlangen-Nürnberg [email protected] Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 1 Ziel Detektieren und Tracken von Person Mitdrehen Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 2 Roboteransteuerung Problem: Sobald der Roboter seine Richtung ändert, stimmen das lokale Koordinatensystem des Roboters (+ Laserscanners) und das golbale Weltkoordinatensystem nicht mehr überein. Translation und Rotation des Laserscans bzw. der detektierten Objekte notwendig Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 3 Systemaufbau Sehen Objekterkennung Bewegungserkennung Anchoring Gedächtnis Bewegungsvorhersage und Tracking Robotersteuerung Handeln Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann Tracking 4 Laserscanner SICK Laser Measurement System 200 arbeitet nach Phasenlaufzeitverfahren: Δt⋅c Distanz= 2 Friedrich-Alexander-Universität Erlangen-Nürnberg 5 Laserscanner Rotationsspiegel, der den Lichtstrahl umlenkt Ebene von 180° lässt sich abtasten (2D Scan) Friedrich-Alexander-Universität Erlangen-Nürnberg 6 Objekt-/Bewegungserkennung (Gruppen 1&2) Teilaufgaben: • Laserdaten sammeln: laser.LaserClient laser = new laser.LaserClient("131.188.52.173", 4444); [...] laser.Scan scan = laser.getScan(); • Personen finden: public interface ObjectDetector implementieren • Visualisierung mittels GUI Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 7 Objekt-/Bewegungserkennung (Gruppen 1&2) package: detection public interface ObjectDetector Vector findFeatures( Scan scan ) throws Exception; Sucht im Laserscan nach bestimmten Merkmalen (abgeleitet von abstrakter Klasse Feature) z.B. Linien; Kreisbögen; Segment, das sich bewegt hat Vector findObjects( Vector features ) throws Exception; Klassifiziert diese Merkmale als Person oder etwas anders Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 8 Anchoring (Gruppe 3) Teilaufgaben: • Einarbeitung in die Roboteransteuerung: Kurt3D Studienarbeit von Igor Kats Kommunikation über TCP/IP (Socket) • Anchoring von gemessenen und gespeicherten Daten public class tracking.Anchoring • Steuerung des Kurt3D anhand der Daten Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 9 Anchoring (Gruppe 3) public class tracking.Anchoring Objekte aus dem Laserscan werden mit den Objekten aus dem Gedächtnis (Memory) assoziiert Neue Personen sollen erkannt und ins Gedächtnis aufgenommen werden Bereits erkannte Personen werden “getrackt“ Für diesen Zweck wird ein Bewegungsmodell eingesetzt (Gruppe 4) Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 10 Bewegunsvorhersage, Tracking (Gruppe 4) Teilaufgaben: • Laden der Bewegungspattern (siehe TrackIt.java) • Implementierung des Kalman Filters: public interface tracking.MotionModel • Visualisieren des Trackings mittels GUI Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 11 Bewegunsvorhersage, Tracking (Gruppe 4) public interface tracking.MotionModel Generelles Interface für ein Bewegungsmodell Das Modell muss einerseits Positionen basierend auf vorangegangenen Positionen vorhersagen können (Prediction) Ebenso müssen neue Messungen zur Verbesserung der Vorhersage eingearbeitet werden (Time Update) TrackedObject predict( TrackedObject object, Date timestamp ) liefert eine Schätzung der Position von object zum Zeitpunkt timestamp zurück Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 12 Bewegunsvorhersage, Tracking (Gruppe 4) TrackedObject timeUpdate( TrackedObject object, DetectedObject measurement, Date timestamp ) Verknüpft die Messung aus dem Laserscan measurement und die vorhergesagte Position von object liefert somit eine verbesserte Schätzung der Position der Person Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 13 Packages: Hilfsklassen graphics Klassen zum Erstellen von 2D-Szenen gui Klassen für GUI zur Anzeige von 2D-Szenen benötigt JOGL-Bibliothek (https://jogl.dev.java.net/) math Klassen für Matrizen und Vektoren mit einigen Standardoperationen (Addition, Subtraktion, Determinante, Invertieren, ...) laser Klassen für die Kommunikation mit dem Laserscanner Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 14 Laserserver starten Verbindung mit Roboter über SSH > ssh -X [email protected] Server starten > ./laserserver/bin/server Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 15 GUI verwenden packages: graphics, gui //GUI erzeugen: MyGUI gui = new MyGUI("Motion Tracker"); //Neue Szene erzeugen MyScene scene = new MyScene(); //Kreis erstellen Circle circle = new Circle( 100, 50, 80, new Color(255, 255, 255)); //Kreis zur Szene hinzufügen scene.addCircle(circle); //Szene anzeigen gui.setScene(scene); Circle Line Point Steuerung: Cursor-Tasten; Zoom In: A; Zoom Out: Y; Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 16 Roboteransteuerung Roboteransteuerung erfolgt über Sockets IP: 131.188.52.173 Port: 30000 Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 17 Eclipse einrichten lib/jogl.jar in den Java Build Path hinzufügen Project -> Properties -> Java Build Path -> add External JARs Vor Ausführen den Pfad zur Library angeben Run -> Run -> Arguments -Djava.library.path=<Pfad zur Library> Friedrich-Alexander-Universität Erlangen-Nürnberg Stefan Wildermann 18