Dieses Kapitel beschreibt die Nutzung der 3D Gripping Point Detection.
Mit der 3D Gripping Point Detection findet man geeignete Greifpunkte auf der Oberfläche beliebiger Objekte in einer 3D-Szene. Die Ergebnisse können verwendet werden um die Greifpunkte mit einem Roboterarm anzusteuern und die die Objekte mit einem Vakuumsauger anzuheben.
HALCON liefert ein vortrainiertes Modell, das ohne zusätzlichen Trainingsschritt bereit für die Inferenz ist. Dabei funktioniert die 3D Gripping Point Detection auch für Objekte, die im Training nicht aufgetreten sind. Außerdem ist es nicht notwendig 3D-Objektmodelle für die Objekte, die angesteuert werden sollen, bereitzustellen. 3D Gripping Point Detection kann außerdem mit Szenen umgehen, die mehrere unterschiedliche Objekte gleichzeitig beinhalten, Szenen, in denen teilweise verdeckte Objekte enthalten sind, sowie Szenen, die Störungen in den 3D-Daten enthalten.
Im folgenden Abschnitt wird der generelle Ablauf der Inferenz beschrieben.
Dieser Abschnitt beschreibt, wie ein passender Greifpunkt auf beliebigen
Objektoberflächen mit Hilfe eines 3D Gripping Point Detection-Modells
bestimmt werden kann.
Ein Anwendungsszenario findet sich im HDevelop-Beispielprogramm
3d_gripping_point_detection_workflow.hdev
.
Einlesen eines vortrainierten 3D Gripping Point Detection-Modells mit
Setzen von Modellparametern, beispielsweise bezüglich der verwendeten Hardware-Einheit oder der Bilddimensionen, mit
Generieren eines Dictionarys DLSample
für jede 3D-Szene.
Dazu kann die Prozedur
gen_dl_samples_3d_gripping_point_detection
verwendet werden, welche verschiedene Arten von 3D-Daten verarbeiten kann. Für weitere Informationen zu den Anforderungen an die Daten siehe den Abschnitt „Daten“ weiter unten.
Vorverarbeiten der Daten vor der Inferenz. Dazu wird die Prozedur
preprocess_dl_samples
verwendet. Die notwendigen Vorverarbeitungsparameter können aus dem Modell mittels
create_dl_preprocess_param_from_model
generiert werden, oder manuell mittels
create_dl_preprocess_param
gesetzt werden.
Es ist zu beachten, dass die Vorverarbeitung der Daten einen signifikanten Einfluss auf die Inferenz hat. Für weitere Details, siehe den Abschnitt „3D-Szenen“ weiter unten.
Anwenden des Modells über den Operator
Nachverarbeiten des Ergebnisses in DLResult
um
Greifpunkte für die Szene zu erhalten mittels
gen_dl_3d_gripping_points_and_poses
.
Visualisieren der 2D- und 3D-Ergebnisse mit der Prozedur
dev_display_dl_data
.
Dieser Abschnitt enthält Informationen bezüglich Daten, die für die Inferenz mittels eines 3D Gripping Point Detection-Modells benötigt werden.
Ein Grundgedanke der Datenhandhabung: Das Modell interagiert mit den Daten
über Dictionaries.
Dies bedeutet, das Modell erhält die Eingabedaten über das Dictionary
DLSample
und gibt die Ausgabe über das Dictionary
DLResult
zurück.
Für weitere Informationen zur Datenhandhabung wird auf das Kapitel
Deep Learning / Modell verwiesen.
Die 3D Gripping Point Detection verarbeitet 3D-Szenen, welche aus klassischen 2D-Bildern und Tiefeninformationen bestehen.
Um diese 3D-Daten an die Anforderungen für Eingabedaten des Netzwerks anzupassen ist ein Vorverarbeitungsschritt für die Inferenz notwendig. Für Informationen zu bestimmten Vorverarbeitungsparametern, siehe den Abschnitt „Spezifische Vorverarbeitungsparameter“ weiter unten. Es wird empfohlen einen hochauflösenden 3D-Sensor zu verwenden um die notwendige Datenqualität zu sicherzustellen. Folgende Daten werden benötigt:
RGB-Bild, oder
Intensitätsbild (Grauwertbilder)
X-Bild (Werte müssen von links nach rechts aufsteigend)
Y-Bild (Werte müssen von oben nach unten aufsteigend)
Z-Bild (Werte müssen von dem Sensor nahen zu fernen Punkten aufsteigen; das ist z.B. der Fall wenn die Daten bezüglich des Kamerakoordinatensystems angegeben werden)
(1) | (2) | (3) |
2D-Mappings (3-kanaliges Bild)
Um den Suchbereich einzuschränken kann die Domäne des RGB-/Intensitätsbildes reduziert werden. Es ist zu beachten, dass die Domäne der XYZ-Bilder und der (optionalen) Normalenbilder identisch sein muss. Außerdem dürfen für alle Eingabedaten nur gültige Pixel Teil der genutzten Domäne sein.
Als Ausgabe gibt das Modell ein Dictionary DLResult
für jedes
Sample zurück. Dieses Dictionary beinhaltet die folgenden Einträge:
'gripping_map'
: Binärbild, das für jedes Pixel der Szene
angibt, ob das Modell einen Greifpunkt vorhergesagt hat
(Pixelwert = 1.0) oder nicht (0.0).
'gripping_confidence'
: Bild, das für jeden Punkt der
Szene unverarbeitete, unkalibrierte Konfidenzwerte
enthält.
Die Modell-Ergebnisse in DLResult
können mit
gen_dl_3d_gripping_points_and_poses
nachverarbeitet werden um Greifpunkte zu generieren.
Diese Prozedur kann außerdem parametrisiert werden um kleine Greifflächen
zu unterdrücken (mit min_area_size
), oder als Vorlage dienen
um eigene Auswahlkriterien zu definieren.
Folgender Eintrag wird von dieser Prozedur zum Dictionary
DLResult
hinzugefügt:
'gripping_points'
: Tupel von Dictionaries mit Informationen
zu geeigneten Greifpunkten in einer Szene:
'region'
: Zusammenhängende Region möglicher Greifpunkte.
Der bestimmte Greifpunkt liegt innerhalb dieser
Region.
'row'
: Zeilenkoordinate des Greifpunktes im
vorverarbeiteten RGB-/Intensitätsbild.
'column'
: Spaltenkoordinate des Greifpunktes im
vorverarbeiteten RGB-/Intensitätsbild.
'pose'
: 3D-Pose des Greifpunktes (relativ zum
Koordinatensystem der XYZ-Bilder, also der
Kamera), die vom Roboter
genutzt werden kann.
Zusammen mit den Daten müssen Vorverarbeitungsparameter an
preprocess_dl_samples
übergeben werden.
Zwei Parameterpaare haben einen besonders hohen
Einfluss:
'image_width'
, 'image_height'
:
Bestimmen die Bilddimensionen der Bilder, die inferiert werden.
Mit größeren Bilddimensionen und dadurch einer besseren Auflösung können kleinere Greifflächen detektiert werden. Damit steigen allerdings auch die Laufzeit und der Speicherverbrauch der Anwendung.
'min_z'
, 'max_z'
:
Bestimmen, basierend auf dem Z-Bild, die minimale und maximale
zulässige Distanz von 3D-Punkten von der Kamera.
Mit Hilfe dieser Parameter können fehlerhafte Ausreißer entfernt werden und damit eine bessere Robustheit für die Anwendung erzielt werden.
Eine Einschränkung des Suchbereichs kann durch Reduzierung der Domäne der
Suchbilder (mittels
) durchgeführt werden. Für
reduce_domain
preprocess_dl_samples
muss mit dem Vorverarbeitungsparameter
'domain_handling'
festgelegt werden, wie die Domäne gehandhabt
werden soll. Der Parameter 'domain_handling'
sollte dabei so
verwendet werden, dass nur essentielle Informationen zur Inferenz an das
Netzwerk weitergegeben werden.
Die folgenden Bilder zeigen, in Abhängigkeit von
'domain_handling'
, wie ein Eingabebild mit reduzierter Domäne
nach der Vorverarbeitung weitergegeben wird.
(1) | (2) | (3) | (4) |