Einzelkamera-Vision- und Kartensystem


17

Vor einiger Zeit habe ich eine Demo eines kleinen "Spielzeugtanks" gesehen, auf dem eine einzelne Kamera montiert war. Dieser Panzer war in der Lage, über den Boden zu fahren, Objekte zu erkennen und diese dann zu bewegen / zu steuern, um sie zu vermeiden. Das Interessante war, dass es ein einzelnes Kamerasichtsystem verwendete und, soweit ich mich erinnere, den Vorteil ausnutzte, dass der Boden flach war. und dann Verwenden der Geschwindigkeit, mit der sich ein Merkmal in der Szene relativ zu den Motoren und Fahrtrichtungen bewegte, um die Szene zu bewerten und folglich abzubilden.

Kann mir jemand Zeiger schicken, nach denen ich suchen muss, um weitere Informationen zu diesem Thema zu erhalten, oder einige Zeiger auf Codebasen, die dies tun können?

Der Grund, den ich frage, ist, dass dies ein einzelnes Kamerasystem von vor einigen Jahren war (5+) und daher (soweit ich mich erinnere) eine relativ geringe Rechenlast war. Ich wollte dies auf einem Raspberry PI ausprobieren, um ein Auto / einen Panzer zu bauen, das / der einen Raum oder eine Gruppe von Räumen abbildet.


2
Willkommen in der Robotik Ben. Bitte beachten Sie auch Wie fragen und Tour für einige Tipps dazu , wie Sie zu schreiben , praktisch, beantwortbar Fragen basierend auf den tatsächlichen Probleme , die Sie Gesicht . Vielen Dank,
Mark Booth

Antworten:


4

Es ist schwer genau zu sagen, was sie getan haben, aber die Begriffe, die Sie hier vielleicht wollen, sind " optischer Fluss " und " egomotion ". Hört sich so an, als ob Feature-Erkennung und Matching (etwa SURF oder SIFT) oder Vordergrund- / Hintergrundsegmentierung ebenfalls durchgeführt wurden.

OpenCV ist wahrscheinlich die am weitesten verbreitete Codebasis für Computer Vision. Sie verfügen über zahlreiche Funktionen für die Bewegungsanalyse . OpenCV sollte auf dem Raspberry Pi ausgeführt werden, obwohl Ihre Algorithmen möglicherweise durch die Rechenleistung eingeschränkt sind.


4

Aufbauend auf WildCrustcean ‚s Antwort wäre eine weitere Möglichkeit sein Stereo - Vision . Während wir Stereovision oft als die Verwendung von zwei Kameras betrachten, benötigen die Techniken nur räumlich verschobene Bilder und ein Modell der Verschiebung. Mit anderen Worten, ich kann ein Bild aufnehmen, mich bewegen und dann ein anderes Bild aufnehmen. Solange ich die Transformation zwischen diesen beiden Bildern kenne, kann ich Stereovisionstechniken verwenden, um die Entfernung zu einem Punkt im Bild zu berechnen.


2
Ich denke, die Technik, über die Sie sprechen, heißt "Struktur aus Bewegung".
Kozuch

1

Möglicherweise wurde Parellel Tracking und Mapping PTAM verwendet . PTAM ist eine Implementierung des SLAM-Problems (Simultaneous Localization and Mapping), bei dem mit einer einzigen Kamera eine 3D-Karte der Welt erstellt und durch Verfolgung visueller Merkmale lokalisiert wird.

Mein Team hat einmal mit der Verwendung des PTAM-Pakets in ROS experimentiert .

Wir haben Ubuntu auf einem Intel Atom ausgeführt, und, wie ich mich erinnere, wurde der Prozessor nicht zu stark beansprucht. Wir haben es jedoch nicht genutzt, hauptsächlich, weil wir nicht genug Features in der Umgebung finden konnten, in der unser Roboter laufen würde.


0

Im Allgemeinen können Sie keine metrischen Entfernungsmessungen aus einem einzelnen Bild extrahieren , es sei denn, Sie verfügen über zusätzliche Informationen über die Welt. Wenn Sie beispielsweise wissen, dass die Welt planar ist (oder Sie den Boden erkennen können, bei dem es sich um eine planare Region handelt), können Sie eine Homographie schätzen.

Eine Homographie ist eine projektive Transformation zwischen Ebenen (3x3-Matrix). Aufgrund der kameraeigenen Kalibrierung können Sie diese ebeneninduzierte Homographie in Rotation und Translation zerlegen. Die Übersetzung ist maßstabsgetreu. Sie können diese Mehrdeutigkeit beheben, indem Sie den Abstand zwischen Kamera und Boden (Ebene) kennen.

Sobald Sie die Homografie haben, können Sie Objekte erkennen, die sich nicht in der Ebene befinden. Mit der Homografie können Sie das erste Bild auf das zweite Bild verschieben. Objekte in der Ebene werden ausgerichtet und weisen einen kleinen Fehler auf. Objekte, die sich nicht in der Ebene befinden, werden nicht ausgerichtet . Dies nennt man Parallaxe.

Ein Weg, dies umzusetzen, könnte sein

  1. Extrahieren Sie Features aus beiden Bildern.
  2. Passen Sie die Funktionen an oder verfolgen Sie sie.
  3. Schätzen Sie die Homographie mit RANSAC.
  4. Zerlegen Sie die Homographie mithilfe der Kalibrierung in eine Rotation und Translation.
  5. Verzerren Sie das erste Bild auf das
    zweite. Pixel mit großen Fehlern liegen nicht auf dem Boden und können
    Hindernisse darstellen.

Die meisten Bausteine ​​sind in opencv implementiert (siehe http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html ).

Viel Glück.

PS die Homographiezerlegung gibt Ihnen auch die Normalen der Ebene. Da Sie jedoch davon ausgehen, dass dies die Grundebene ist, haben wir die normale Ausrichtung nach oben. Eine genauere Lösung kann in Ihrem Kalibrierungsverfahren erreicht werden. Sie können ein Schachbrettziel verwenden und dessen Position schätzen. Die Pose hat eine Normalebene und einen Abstand zur Kamera.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.