1

Ich versuche eine zuverlässige Methode zu finden, um die Eckpunkte eines Containers zu berechnen. Von diesem Eckpunkt ist die Idee, den Mittelpunkt des Containers für die Lokalisierung des Roboters zu berechnen, das heißt, dass der berechnete Mittelpunkt das Ziel des Roboters sein wird, um den Container zu holen. Hierfür suche ich nach Vorschlägen zur Berechnung der Eckpunkte oder ggf. nach einer Möglichkeit, den Mittelpunkt direkt zu berechnen. Bis zu diesem Zeitpunkt wird die PCL-Bibliothek C/C++ für die Verarbeitung der 3D-Daten verwendet. Das Bild unten ist der Screenshot des Containers.
danke im voraus.Berechnung des Mittelpunkts für die Lokalisierung des Roboters in 3D-Daten

afterApplyingPassthrough

+0

Sie versuchen, das Zentrum des Rechtecks ​​zu finden? –

+0

tatsächlich dachte ich nicht über das Finden der Mitte des Rechtecks ​​könnte auch somhow das Problem lösen. Das heißt, wenn es darum geht, die Ecken zu finden und das Zentrum zu berechnen, das natürlich wenige Schritte hat. Wie Sie erwähnten, könnte das Finden des Zentrums eine bessere Lösung sein. Das Zentrum finden und den Offset hinzufügen. Sie schlagen Ihnen die Möglichkeit vor, es direkt in PCL zu berechnen? –

+1

Haben Sie dort Tiefendaten? Ich sehe keine der Innenflächen des Containers ... (Ich verstehe, dass es 3D-Daten sind, aber kann Ihr Sensor nur die Vorderseite des Wagens auflösen?) –

Antwort

1

Ich nehme an, die Räder halten den Wagen einen bekannten Abstand vom Boden und Sie können den Boden identifizieren.Filtert alle Punkte aus, die zu nah am Boden liegen (dadurch werden Räder und alles andere außer dem Wagen entfernt, wodurch Daten begrenzt und spätere Schritte vereinfacht werden.

Wenn Sie den Wagen isolieren, können Sie einen einfachen Durchschnittspunkt (Schwerpunkt) anwenden Alternativ können Sie, wenn das nicht genau ist, versuchen, den bounding box des isolierten Wagens zu finden (min max in den Hauptrichtungen) und dann den Schwerpunkt des Begrenzungsrahmens wählen (dies sollte genauer sein, erfordert aber immer noch einen leichten vertikalen Versatz) aufgrund der oberen Griffe)

Wenn Sie den Warenkorb nicht isolieren können oder die anderen Methoden nicht gut funktionieren, können Sie versuchen, PCL sample consensus speziell SACMODEL_LINE.Dies wird eine Strategie sein, wird aber sehr solide Ergebnisse, basic geben Lasse dich durch und finde jede Linie und subtrahiere ihre Mitglieder von der Wolke, um die nächstbeste Linie zu finden. Nachdem Sie Ihre 4 primären Einkaufswagenlinien haben, verwenden Sie ihre Parameter, um Ihren Schwerpunkt zu finden. * Dies wäre auch robust gegen zufällige Gegenstände in oder auf dem Wagen sowie Wagen unterschiedlicher Größe (vorausgesetzt, sie hatten immer lineare senkrechte Wände)

+0

Great suggestions.thanks. Was Sie sagen über (1) die Identifizierung des Bodens und (2) das Herausfiltern der Punkte, die zu nah am Boden sind, um die Räder zu entfernen und nur den Wagen so zu behalten, könnte ich die (3) Begrenzungsbox benutzen. ? –

+1

Das sind ziemlich klare Erklärungen ... was die Implementierung angeht, gibt es viel zu viel zu erklären. Es ist sehr gut dokumentiert mit Tutorials und Web-Dokumentation der Klassen gedacht. Hier ist ein guter Ausgangspunkt: http://pointclouds.org/documentation/tutorials/ Ich schlage vor, die Tutorials zunächst so zu testen, wie sie sind und sie dann an Ihre Bedürfnisse anzupassen. –

+0

tatsächlich habe ich in PCL-Tutorials gesucht und RANSAC für die Flugzeuganpassung etc. verwendet. Könnten Sie ein bestimmtes Beispiel nennen, bei dem das Erkennen und Entfernen von Ebenen möglich ist, irgendwie wäre es einfacher, das Rad herauszufiltern und ein rechteckiges Prisma zu finden Begrenzungsbox auf dem Warenkorbobjekt? –

2

Ich habe folgende Dinge:

  • I binarisiert das Bild (schwarze Pixel = 0, grüner Pixel = 1),
  • das Bild invertiert (schwarzen Pixel = 1, grün Pixel = 0),
  • erodiert das Bild mit 3x3 Kernel N-mal und erweitert es mit dem gleichen Kernel M-mal.

Left: N = 2, M = 1, rechts: N = 6, M = 6

enter image description hereenter image description here

Danach:

  • I berechnete Konturen aller nicht -zero Bereiche und
  • entfernt die Kontur, die das gesamte Bild umgeben.

Dies sind die Konturen, die geblieben:

enter image description hereenter image description here

Ich weiß nicht, wie "typisches" Eingabebild wie in Ihrem Fall aussieht. Da ich nur auf ein Beispielbild zugreifen kann, möchte ich nicht über eine "allgemeine Lösung" spekulieren, die für Sie geeignet ist. Aber dieser besonderen Fall zu lösen, könnten Sie jede Kontur in der folgenden Art und Weise analysieren:

  • Compute Rechteck rotatated, die am besten um Ihre Kontur paßt (Sie etwas ähnliches wie minAreaRect from OpenCV benötigen)
  • Rechenbereiche Rechteck und Konturinnen
  • Wenn die Differenz zwischen dem Konturenbereich und dem Bereich des gedrehten Begrenzungsrechtecks ​​klein ist, hat die Kontur eine ungefähr rechteckige Form.
  • Suchen Sie nach der Kontur, die rechteckig ist und eine andere Bedingung erfüllt (Beispiel: typischer Bereich des Containers)). Angenommen, dies gehört zum Container und berechnet sein Zentrum.

Ich behaupte nicht, dass dies eine Lösung ist, die in realen Szenarien gut funktionieren wird. Es ist auch nicht schnell. Sie sollten es als eine "Skizze" betrachten, die zeigt, wie man einige nützliche Informationen extrahiert.

+0

Das Bild, das ich oben gepostet habe, ist der Screenshot der pointcloud Daten. Es bedeutet wörtlich, dass die Verarbeitung nicht auf diesem Bild, sondern auf den Tiefendaten erfolgen sollte. aber danke, es scheint gut, wenn es ein 2D-Bild ist. ist es nicht? –

Verwandte Themen