PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Optimale Nutzung des Kinect Tiefensensors?



Andre_S
16.10.2012, 08:03
Hallo Zusammen!

Mir stellt sich im Moment die Frage wie der Tiefensensor am optimalsten für die Bewegung/Hinderniserkennung des Bot genutzt werden kann. Es geht mir jetzt nicht um die Trackingvarianten des Sensors,… die sind nutzungstechnisch eindeutig.

Kurz vorweg, wie ich es im Augenblick eingebunden habe…
Aktuell benutze ich den Sensor mit der Xbox Firmware und somit einer realen Tiefenauflösung von 0,8 bis 4,1 m. Ein Bild darzustellen und den Farben passende Tiefenwerte zuzuordnen geht ja recht fix. Dies sieht schön aus hilft in der Form aber noch nicht weiter. Deshalb berechne ich aktuell für jeden Bildpunkt/Tiefenwert die genauen Raumkoordinaten und schaue ob diese bei gradliniger Bewegung des Bot innerhalb seines Korridors liegen würden. Die naheliegendsten Punkte welche dies erfüllen sind nun meine Werte für die maximale Entfernung ohne Kollision mit einem Objekt. Dies funktioniert sehr gut, lässt sich schnell und unkompliziert berechnen und ist auch zentimetergenau wiederholbar.

Nun würde mich aber interessieren ob es diesbezüglich noch andere Ansätze gibt?
Eine Erstellung der Umgebung ist zwar auch möglich, allerdings müsste aus dieser auch wieder die max. Hindernisentfernung abgeleitet werden und vorab wäre auch noch ein Positionsabgleich notwendig.


Gruß André

Günter49
16.10.2012, 13:40
Es gibt Ansätze, ...

die die Positionsbestimmung mit einem zusätzlichen Sensor (z.B. Laserscanner oder IMU) vornehmen und aus der Position und den Kinectdaten eine Karte erstellen:
z.B.
http://www.youtube.com/watch?v=IkAqoTJtcKc&feature=related
(edit: Sollte zu schnell gehen. Die benutzen nur das LIDAR ohne Kinect http://www.youtube.com/watch?v=sieBqVxTz2c )


die die Position aus den Kinectdaten direkt ableiten (visuelle Odometrie). Dabei werden Übereinstimmungen/Merkmale (z.B. mit SIFT/SURF) in aufeinander folgenden Kinect-Punktwolken gesucht und die Daten dann zusammengesetzt:
http://www.youtube.com/watch?v=ecIQdF31Z04&feature=related
http://www.youtube.com/watch?v=rm1JuukxhLQ&feature=related
http://www.youtube.com/watch?v=CSZ1iznlTkE&feature=related

zum Selberprobieren recht einfach:
http://skanect.manctl.com/


Such mal auf die Begriffe „Kinectfusion“ und „PCL“ .....


Gruß, Günter

Andre_S
16.10.2012, 17:52
Hallo Günter,

erst einmal vielen Dank für die interessanten Links und Informationen dazu.:)


Also ich glaube die Themen gehen über eine Hinderniserkennung hinaus,… aber gut die habe ich ja.;)

Eigentlich hatte ich vor dem Bot eine „Karte“ fest zu hinterlegen und diese in Bereiche zu teilen, so kann er gezielt durch Positionsabgleich verschiedene Bereiche erreichen, natürlich dabei mit aktiver Hinderniserkennung und gegebenenfalls Umfahrung der selben. Bereiche könnten z.B. der Tisch oder der Eingangsbereich sein.

Beispiel einer hinterlegten Aufgabe, welche im Falle des Bot Mira per Spracheingabe aktiviert werden könnte wäre:

Bewegen zum Eingangsbereich,.. Positionierung in Richtung Eingangstür,.. warten auf Personen,… nach Erkennung einer Person diese begrüßen und um Eingabe des Namen auf der Tastatur bitten,…usw.
->Abbruch (nicht erscheinen einer Person) nach vordefinierter Zeit und Rückkehr.
Diese Aufgabe wäre im Fall der hinterlegten Karte "relativ" einfach zu programmieren.

Das ganze wird für „mich“ bei automatischer Kartierung aber unlösbar. Diese hatte ich bereits beim ASM5 (allerdings nur einer Ebene) Ich habe es nicht geschafft, größere Vorteile daraus zu ziehen, da der Bot einfach nur die Raumgrenzen kannte, aber das war’s auch schon.

Wenn der Bot jetzt in der Lage wäre bei der automatischen Kartierung Bereiche zweckdienlich zuzuordnen, welche dann auch zu hinterlegten Aufgaben passen würden, wäre die Sache für mich allerdings wieder interessant. Nur wie kann er selbst definieren was Eingangsbereich, Eingangstür etc. ist.

Traue ich mir nicht zu! Könnte ja eventuell mit Fusion und Objektabgleichen gehen (!?) aber da bin ich mit meiner vorabdefinierten Information sicherer, ich komme ja nie in unbekanntes Gebiet.


Gruß André

Günter49
16.10.2012, 20:19
Die Probleme, die Du bei der automatischen Kartierung siehst, kommen mir nur zu bekannt vor. Die Entfernungsdaten zu haben ist eins, den Daten dann automatisch einen „Sinn“ zuzuordnen, ist eine viel schwierigere Aufgabe. Ich habe auf Deiner Mira-Seite gesehen, dass Du mit C# programmierst. Dafür gibt es eine Schnittstelle zu „RoboRealm“ (funktioniert leider nicht mit den Microsoft Kinect-Treibern). Damit könnte man z.B. aus dem RGB-Bild der Kinect zusammen mit den Entfernungsdaten eine Türklinke erkennen zur Identifizierung des Eingangsbereichs. Gibt es weitere ähnliche Türen im Raum hat man schon wieder ein Problem.

Ich habe mich deshalb wie Du entschieden, mit einer vorgefertigten Karte zu arbeiten. Allerdings wird (besser: wird in Zukunft hoffentlich ) die Positionsbestimmung im Raum mit einem Laserscanner, der in 1,4m Höhe montiert ist, durchgeführt und der Kinect-Sensor, der sich noch darüber befindet, wird um ca. 60° nach unten geneigt um Hindernisse im Nahbereich zu erkennen und Objekte auf einem Tisch.
Den automatischen Aufbau von semantischen Karten, die auch verstehen was sie zeigen, werde ich wohl den Doktoranden an den Hochschulen überlassen müssen.


Gruß, Günter

Andre_S
17.10.2012, 11:21
Hallo Günter,

da schließe ich mich Deiner Meinung an und bleibe definitiv auch bei vorgefertigten Karten. Unabhängig davon werde ich mir „RoboRealm“ mal näher anschauen, möchte aber eigentlich bei den MS-Treibern bleiben.
Einen Laserscanner in 1,4m Höhe ist als Ausgangspunkt schon mal sehr optimal, besonders da dieser auch schon aus Hindernisbereichen von kleineren Objekten herausragt. Der steht mir aber leider nicht zur Verfügung, also werde ich versuchen dies mit Hilfe der Kombination von Kinect und Kompass zu ermitteln. Der Zeitpunkt für eine Objekterkennung ist bei mir noch nicht gegeben, die sinnvolle Voraussetzung dafür, nämlich der Roboterarm ist leider noch nicht vorhanden.

Da ich keine anderweitigen Vorschläge bezüglich der Kollisionserkennung seitens Kinect erhalten habe werde ich meine Routine erst einmal so belassen.


Danke und Gruß
André