CollisionCheck¶
Einleitung¶
Das CollisionCheck Modul ist ein optionales Modul, welches intern auf dem rc_cube läuft, und ist freigeschaltet, sobald eine gültige Lizenz für eines der Module ItemPick und BoxPick oder CADMatch und SilhouetteMatch vorhanden ist. Andernfalls benötigt dieses Modul eine separate Lizenz.
Das Modul ermöglicht die Kollisionsprüfung zwischen dem Greifer und dem Load Carrier, der Punktwolke (nur in Kombination mit CADMatch), oder anderen detektierten Objekten (nur in Kombination mit CADMatch und SilhouetteMatch). Es ist in die Module ItemPick und BoxPick und CADMatch und SilhouetteMatch integriert, kann aber auch als eigenständiges Modul genutzt werden. Die Greifermodelle für die Kollisionsprüfung müssen über das GripperDB Modul definiert werden.
Warnung
Es werden nur Kollisionen zwischen dem Load Carrier und dem Greifer geprüft, aber nicht Kollisionen mit dem Roboter, dem Flansch, anderen Objekten oder dem Objekt im Greifer. Nur in Kombination mit CADMatch und SilhouetteMatch, und nur wenn das gewählte Template eine Kollisionsgeometrie enthält und check_collisions_with_matches
im entsprechenden Modul aktiviert ist, werden auch Kollisionen zwischen dem Greifer und den anderen detektierten Objekten geprüft. Kollisionen mit Objekten, die nicht detektiert werden können, werden nicht geprüft.
Nur in Kombination mit CADMatch und nur wenn check_collisions_with_point_cloud
in CADMatch aktiviert ist, werden Kollisionen zwischen dem Greifer und einer wasserdichten Version der Punktwolke geprüft.
Bemerkung
Dieses Softwaremodul ist pipelinespezifisch. Änderungen seiner Einstellungen oder Parameter betreffen nur die zugehörige Kamerapipeline und haben keinen Einfluss auf die anderen Pipelines, die auf dem rc_cube laufen.
Kollisionsprüfung mit | detektierter Load Carrier, detektierte Objekte (nur CADMatch und SilhouetteMatch), Basisebene (nur SilhouetteMatch), Punktwolke (nur CADMatch) |
Kollisionsprüfung verfügbar in | ItemPick und BoxPick, CADMatch und SilhouetteMatch |
Kollisionsprüfung¶
Stand-Alone Kollisionsprüfung¶
Der Service check_collisions
triggert die Kollisionsprüfung zwischen dem angegebenen Greifer und dem angegebenen Load Carrier für jeden der übergebenen Greifpunkte. Eine Kollisionsprüfung mit anderen Objekten oder der Punktwolke ist nicht möglich. Das CollisionCheck-Modul überprüft, ob sich der Greifer in Kollision mit mindestens einem Load Carrier befindet, wenn sich der TCP an der Greifposition befindet. Es können mehrere Load Carrier gleichzeitig getestet werden. Der Griff wird als Kollision markiert, wenn es mit mindestens einem der definierten Load Carriern zu einer Kollision kommen würde.
Das Argument pre_grasp_offset
(Greif-Offset) kann für eine erweiterte Kollisionsprüfung genutzt werden. Der Greif-Offset \(P_{off}\) ist der Offset vom Greifpunkt \(P_{grasp}\) zur Vorgreifposition \(P_{pre}\) im Koordinatensystem des Greifpunkts (siehe Abb. 35). Wenn der Greif-Offset angegeben wird, werden Greifpunkte auch dann als Kollisionen erkannt, wenn der Greifer an einem beliebigen Punkt während der linearen Bewegung zwischen Vorgreifposition und Greifposition in Kollision geraten würde.
Integrierte Kollisionsprüfung in anderen Modulen¶
Die Kollisionsprüfung ist in die Services der folgenden Softwaremodule integriert:
- ItemPick und BoxPick:
compute_grasps
(siehe compute_grasps für ItemPick und compute_grasps für BoxPick) - SilhouetteMatch:
detect_object
(siehe detect_object) - CADMatch:
detect_object
(siehe detect_object)
Jedem dieser Services kann ein collision_detection
-Argument übergeben werden, das aus der ID des Greifers (gripper_id
) und optional aus dem Greif-Offset (pre_grasp_offset
, siehe Stand-Alone Kollisionsprüfung) besteht. Wenn das collision_detection
Argument übergeben wird, liefern diese Services nur die Greifpunkte zurück, an denen der Greifer nicht in Kollision mit dem erkannten Load Carrier ist. Dazu muss dem jeweiligen Service auch die ID des zu erkennenden Load Carriers übergeben werden.
Nur in CADMatch und SilhouetteMatch, und nur wenn das gewählte Template eine Kollisionsgeometrie enthält und check_collisions_with_matches
im SilhouetteMatch Modul aktiviert ist, werden auch Greifpunkte, bei denen der Greifer in Kollision mit anderen detektierten Objekten wäre, herausgefiltert. Dabei ist das Objekt, auf dem sich der jeweilige Greifpunkt befindet, von der Prüfung ausgenommen.
Wenn ein Greifer für einen Greifpunkt in einem Template von CADMatch und SilhouetteMatch definiert ist, wird dieser Greifer und nicht der im collision_detection
Argument des detect_object
Services angegebene Greifer zur Kollisionsprüfung dieses Greifpunkts verwendet (siehe Setzen von Greifpunkten). Die vom detect_object
Service zurückgelieferten Greifpunkte enthalten ein Flag collision_checked
, das angibt ob der jeweilige Greifpunkt auf Kollisionen geprüft wurde, und das Feld gripper_id
. Wenn collision_checked
true ist, enthält das Feld gripper_id
die ID des Greifers, der für die Kollisionsprüfung dieses Greifpunkts verwendet wurde. Dies ist die ID des Greifers, der für den jeweiligen Greifpunkt definiert wurde, oder, falls kein Greifer definiert wurde, die ID des Greifers die im collision_detection
Argument des Serviceaufrufs angegeben wurde. Wenn collision_checked
false ist, enthält gripper_id
die ID des Greifers, die für den Greifpunkt definiert wurde.
In SilhouetteMatch werden Kollisionen zwischen dem Greifer und der Basisebene geprüft, wenn der Parameter check_collisions_with_base_plane
in SilhouetteMatch aktiviert ist.
Kollisionen zwischen dem Greifer und einer wasserdichten Version der Punktwolke können in Kombination mit CADMatch geprüft werden, wenn der Parameter check_collisions_with_point_cloud
in CADMatch aktiviert ist.
Warnung
Es werden nur Kollisionen zwischen dem Load Carrier und dem Greifer geprüft, aber nicht Kollisionen mit dem Roboter, dem Flansch, anderen Objekten oder dem Objekt im Greifer. Nur in Kombination mit CADMatch und SilhouetteMatch, und nur wenn das gewählte Template eine Kollisionsgeometrie enthält und check_collisions_with_matches
im entsprechenden Modul aktiviert ist, werden auch Kollisionen zwischen dem Greifer und den anderen detektierten Objekten geprüft. Kollisionen mit Objekten, die nicht detektiert werden können, werden nicht geprüft.
Nur in Kombination mit CADMatch und nur wenn check_collisions_with_point_cloud
in CADMatch aktiviert ist, werden Kollisionen zwischen dem Greifer und einer wasserdichten Version der Punktwolke geprüft.
Die Kollisionsprüfung wird von Laufzeitparametern beeinflusst, die weiter unten aufgeführt und beschrieben werden.
Parameter¶
Das CollisionCheck-Modul wird in der REST-API als rc_collision_check
bezeichnet und in der Web GUI in der gewünschten Pipeline unter dargestellt. Der Benutzer kann die Parameter entweder dort oder über die REST-API-Schnittstelle ändern.
Übersicht der Parameter¶
Dieses Softwaremodul bietet folgende Laufzeitparameter:
Name | Typ | Min | Max | Default | Beschreibung |
---|---|---|---|---|---|
check_bottom |
bool | false | true | true | Aktiviert die Kollisionsprüfung mit dem Boden des Load Carriers. |
check_flange |
bool | false | false | true | Bestimmt, ob ein Greifpunkt als Kollision erkannt wird, sobald der Flansch innerhalb des Load Carriers ist. |
collision_dist |
float64 | 0.0 | 0.1 | 0.01 | Minimaler Abstand in Metern zwischen einem Greiferelement und dem Load Carrier und/oder der Basisebene (nur SilhouetteMatch) für einen kollisionsfreien Griff. |
Beschreibung der Laufzeitparameter¶
Jeder Laufzeitparameter ist durch eine eigene Zeile in der Web GUI im Abschnitt Einstellungen in der gewünschten Pipeline unter
repräsentiert. Der Web GUI-Name des Parameters ist in Klammern hinter dem Namen des Parameters angegeben:collision_dist
(Sicherheitsabstand)¶
Minimaler Abstand in Metern zwischen einem Greiferelement und dem Load Carrier und/oder der Basisebene (nur SilhouetteMatch) für einen kollisionsfreien Griff.
Warnung
Der Sicherheitsabstand wird nicht für die Kollisionsprüfung zwischen dem Greifer und der Punktwolke, oder dem Greifer und anderen detektierten Objekten angewendet. Er wird auch nicht verwendet um zu prüfen, ob sich der Flansch innerhalb des Load Carriers befindet (
check_flange
).Über die REST-API kann dieser Parameter wie folgt gesetzt werden.
PUT http://<host>/api/v2/pipelines/<0,1,2,3>/nodes/rc_collision_check/parameters?collision_dist=<value>PUT http://<host>/api/v1/nodes/rc_collision_check/parameters?collision_dist=<value>
check_flange
(Flansch-Check)¶
Ermöglicht einen Sicherheitscheck mit dem Flansch, wie in Flanschradius beschrieben. Wenn dieser Parameter gesetzt ist, gelten alle Griffe, bei denen der Flansch innerhalb des Load Carriers wäre, als Kollisionen.
Über die REST-API kann dieser Parameter wie folgt gesetzt werden.
PUT http://<host>/api/v2/pipelines/<0,1,2,3>/nodes/rc_collision_check/parameters?check_flange=<value>PUT http://<host>/api/v1/nodes/rc_collision_check/parameters?check_flange=<value>
check_bottom
(Boden-Check)¶
Wenn dieser Check aktiviert ist, werden Kollisionen nicht nur mit den Load Carrier Wänden, sondern auch mit dem Boden geprüft. Falls der TCP innerhalb der Kollisionsgeometrie (z.B. innerhalb des Sauggreifers) liegt, ist es möglicherweise nötig, diesen Check zu deaktivieren.
Über die REST-API kann dieser Parameter wie folgt gesetzt werden.
PUT http://<host>/api/v2/pipelines/<0,1,2,3>/nodes/rc_collision_check/parameters?check_bottom=<value>PUT http://<host>/api/v1/nodes/rc_collision_check/parameters?check_bottom=<value>
Statuswerte¶
Statuswerte des rc_collision_check
-Moduls:
Name | Beschreibung |
---|---|
last_evaluated_grasps |
Anzahl der ausgewerteten Griffe |
last_collision_free_grasps |
Anzahl der kollisionsfreien Griffe |
collision_check_time |
Laufzeit der Kollisionsprüfung |
Services¶
Die angebotenen Services von rc_collision_check
können mithilfe der REST-API-Schnittstelle oder der rc_cube Web GUI ausprobiert und getestet werden.
Das CollisionCheck-Modul stellt folgende Services zur Verfügung.
reset_defaults
¶
stellt die Werkseinstellungen der Parameter dieses Moduls wieder her und wendet sie an („factory reset“).
Details
Dieser Service kann wie folgt aufgerufen werden.
PUT http://<host>/api/v2/pipelines/<0,1,2,3>/nodes/rc_collision_check/services/reset_defaults
PUT http://<host>/api/v1/nodes/rc_collision_check/services/reset_defaultsDieser Service hat keine Argumente.Die Definition der Response mit jeweiligen Datentypen ist:
{ "name": "reset_defaults", "response": { "return_code": { "message": "string", "value": "int16" } } }
check_collisions
(veraltet)¶
löst eine Kollisionsprüfung zwischen dem Greifer und einem Load Carrier aus.
Details
Dieser Service kann wie folgt aufgerufen werden.
PUT http://<host>/api/v2/pipelines/<0,1,2,3>/nodes/rc_collision_check/services/check_collisions
PUT http://<host>/api/v1/nodes/rc_collision_check/services/check_collisionsObligatorische Serviceargumente:
grasps
: Liste von Griffen, die überprüft werden sollen.
load_carriers
: Liste von Load Carriern, die auf Kollisionen überprüft werden sollen. Die Felder der Load Carrier Definition sind in Erkennung von Load Carriern beschrieben. Die Griffe und die Load Carrier Positionen müssen im selben Koordinatensystem angegeben werden.
gripper_id
: Die ID des Greifers, der in der Kollisionsprüfung verwendet werden soll. Der Greifer muss zuvor konfiguriert worden sein.Optionale Serviceargumente:
pre_grasp_offset
: Der Greif-Offset in Metern vom Greifpunkt zur Vorgreifposition. Wird ein Greif-Offset angegeben, dann wird die Kollisionsprüfung auf der gesamten linearen Trajektorie von der Vorgreifposition bis zur Greifposition durchgeführt.Die Definition der Request-Argumente mit jeweiligen Datentypen ist:
{ "args": { "grasps": [ { "pose": { "orientation": { "w": "float64", "x": "float64", "y": "float64", "z": "float64" }, "position": { "x": "float64", "y": "float64", "z": "float64" } }, "pose_frame": "string", "uuid": "string" } ], "gripper_id": "string", "load_carriers": [ { "id": "string", "inner_dimensions": { "x": "float64", "y": "float64", "z": "float64" }, "outer_dimensions": { "x": "float64", "y": "float64", "z": "float64" }, "pose": { "orientation": { "w": "float64", "x": "float64", "y": "float64", "z": "float64" }, "position": { "x": "float64", "y": "float64", "z": "float64" } }, "pose_frame": "string", "rim_thickness": { "x": "float64", "y": "float64" } } ], "pre_grasp_offset": { "x": "float64", "y": "float64", "z": "float64" } } }
colliding_grasps
: Liste von Griffen, die in Kollision mit einem oder mehreren Load Carriern sind.
collision_free_grasps
: Liste von kollisionsfreien Griffen.
return_code
: enthält mögliche Warnungen oder Fehlercodes und Nachrichten.Die Definition der Response mit jeweiligen Datentypen ist:
{ "name": "check_collisions", "response": { "colliding_grasps": [ { "pose": { "orientation": { "w": "float64", "x": "float64", "y": "float64", "z": "float64" }, "position": { "x": "float64", "y": "float64", "z": "float64" } }, "pose_frame": "string", "uuid": "string" } ], "collision_free_grasps": [ { "pose": { "orientation": { "w": "float64", "x": "float64", "y": "float64", "z": "float64" }, "position": { "x": "float64", "y": "float64", "z": "float64" } }, "pose_frame": "string", "uuid": "string" } ], "return_code": { "message": "string", "value": "int16" } } }
set_gripper
(veraltet)¶
konfiguriert und speichert einen Greifer auf dem rc_cube.
Dieser Service ist in API Version 2 nicht verfügbar. Nutzen Sie stattdessen set_gripper inrc_gripper_db
.Dieser Service kann wie folgt aufgerufen werden.
PUT http://<host>/api/v1/nodes/rc_collision_check/services/set_gripperDie Definitionen von Request und Response sind dieselben wie in set_gripper in
rc_gripper_db
beschrieben.
get_grippers
(veraltet)¶
gibt die mit
gripper_ids
spezifizierten und gespeicherten Greifer zurück.Dieser Service ist in API Version 2 nicht verfügbar. Nutzen Sie stattdessen get_grippers inrc_gripper_db
.Dieser Service kann wie folgt aufgerufen werden.
PUT http://<host>/api/v1/nodes/rc_collision_check/services/get_grippersDie Definitionen von Request und Response sind dieselben wie in get_grippers in
rc_gripper_db
beschrieben.
delete_grippers
(veraltet)¶
löscht die mit
gripper_ids
spezifizierten, gespeicherten Greifer.Dieser Service ist in API Version 2 nicht verfügbar. Nutzen Sie stattdessen delete_grippers inrc_gripper_db
.Dieser Service kann wie folgt aufgerufen werden.
PUT http://<host>/api/v1/nodes/rc_collision_check/services/delete_grippersDie Definitionen von Request und Response sind dieselben wie in delete_grippers in
rc_gripper_db
beschrieben.
Rückgabecodes¶
Zusätzlich zur eigentlichen Serviceantwort gibt jeder Service einen sogenannten return_code
bestehend aus einem Integer-Wert und einer optionalen Textnachricht zurück. Erfolgreiche Service-Anfragen werden mit einem Wert von 0
quittiert. Positive Werte bedeuten, dass die Service-Anfrage zwar erfolgreich bearbeitet wurde, aber zusätzliche Informationen zur Verfügung stehen. Negative Werte bedeuten, dass Fehler aufgetreten sind. Für den Fall, dass mehrere Rückgabewerte zutreffend wären, wird der kleinste zurückgegeben, und die entsprechenden Textnachrichten werden in return_code.message
akkumuliert.
Die folgende Tabelle listet die möglichen Rückgabecodes auf:
Code | Beschreibung |
---|---|
0 | Erfolgreich |
-1 | Ein ungültiges Argument wurde übergeben. |
-7 | Daten konnten nicht in den persistenten Speicher geschrieben oder vom persistenten Speicher gelesen werden. |
-9 | Lizenz für CollisionCheck ist nicht verfügbar. |
-10 | Das neue Element konnte nicht hinzugefügt werden, da die maximal speicherbare Anzahl an Greifern überschritten wurde. |
10 | Die maximal speicherbare Anzahl an Greifern wurde erreicht. |
11 | Bestehender Greifer wurde überschrieben. |