2

Ich verwende die SACSegmentation from PCL segmentation module, um die Bodenebene herauszufiltern.Erkennung und Entfernung der Bodenebene für die Lokalisierung des Roboters in 3D-Daten

Die Methode passt die Frontfläche des 3D-Objekts an, anstatt die Groundplane wie in der 2. pcd-Datei unten gezeigt zu montieren.

Irgendwelche Vorschläge, was ich tun soll, um die Bodenebene Punkte zu passen und zu filtern.

Vielen Dank im Voraus.

pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients); 

pcl::SACSegmentation<pcl::PointXYZ> segmentation; 

segmentation.setInputCloud(cloudAll); 

segmentation.setOptimizeCoefficients(true); 

segmentation.setModelType(pcl::SACMODEL_PLANE); 

segmentation.setMethodType(pcl::SAC_RANSAC); 

segmentation.setDistanceThreshold(20.20); 

Scene*.PCD

After the ground plane segmentation

afterApplyingPassthrough

Antwort

1

Das Problem ist, dass die Ebene Ransac wich findet die höhere Anzahl von Punkten passt, wich in der Punktwolke auf die vordere Oberfläche entsprechen.

Wenn Sie etwas Wissen über die Szene und das Koordinatensystem auf Wich die Punktwolke dargestellt wird Ihnen leicht, das Problem umgehen können wie folgt:

  1. Verwenden PCL PassThrough filter die nur die Punkte des Punktes wählen Wolke, die über einigen y Wert Ihrer Wahl sind.

ich hier asumming dass y im gegebenen Punktwolke Koordinatensystems die vertikale Achse repräsentiert.

Dieser Schwellenwert sollte auf Ihrer Kenntnis der Dimensionen der Szene basieren.

Basierend auf Ihrer Punktwolke sollten Sie die Punkte mit y > 200 auswählen.

Ihre Punktwolke:

enter image description here

Auswahl nur Punkte mit y > 200:

enter image description here

  1. die Segmentierung durchführen, wie Sie diese Zeit tat, aber Verwenden Sie nur die ausgewählte Teilmenge von Punkten.

Hier ist eine Visualisierung der ordnungsgemäß angepaßten Ebene, die die ausgewählten Punkte mit:

enter image description here

+0

Great! Danke vielmals. Dein Beitrag ist wirklich nützlich. Als mein Hauptziel ist es, den Mittelpunkt/Schwerpunkt des 3D-Objekts/Container zu bekommen, wenn Sie die kürzlich gepostet * .pcd-Datei (AfterApplyingPassthrough), wo ich nur passthroughfilter die Bodenpunkte und Räder verwerfen angenommen, dass der Offset vom Boden ist immer bekannt. Nach dem Passthrough wie in * .pcd oben gezeigt. Welche Methode empfehlen Sie für den Mittelpunkt? –

+0

Ich habe versucht, den Schwerpunkt des verbleibenden Objekts zu berechnen (ohne Bodenpunkte und Räder) 1) pcl :: compute3DCentroid (* cloudExtracted, Schwerpunkt) zurückgegeben XYZ (44.0321, -300.226, 1616.87) Eine andere Idee ist, die 2) zu finden Boundingbox für das verbleibende Objekt. Eine zusätzliche Frage, welche Entwicklungsumgebung Sie verwenden. es scheint ziemlich gut (Eclipse, VStudio usw.) –

+1

Er schien CloudCompare verwenden http://www.danielgm.net/cc/ –

Verwandte Themen