| Operatoren |
set_surface_model_param — Setzen von Parametern eines Oberflächenmodells.
set_surface_model_param( : : SurfaceModelID, GenParamName, GenParamValue : )
Der Operator set_surface_model_param setzt Parameter und Eigenschaften des Oberflächenmodells SurfaceModelID. Das Oberflächenmodell muss vorher mittels create_surface_model oder read_surface_model erstellt worden sein. Die Namen der zu verändernden Parameter werden in GenParamName übergeben, die entsprechenden neuen Werte in GenParamValue.
Die möglichen Werte für GenParamName sind unten aufgeführt.
Kameras für die bildunterstützte Posenverfeinerung. Die folgenden Parameter erlauben das Setzen und Löschen von Kameraparametern und -posen. Diese werden von find_surface_model_image und refine_surface_model_pose_image verwendet, um das Modell in die dort übergebenen Bilder zu projizieren.
Die Kameraparameter müssen vor der Kamerapose eingestellt werden.
Setzt die Kameraparameter der Kamera mit Nummer X. X ist ein 0-basierter Index und standardmäßig 0 (erste Kamera). Die Kameraparameter werden von den Operatoren find_surface_model_image und refine_surface_model_pose_image verwendet, welche die entsprechenden Kamerabilder für die Pose-Verfeinerung verwenden. Kameras müssen in aufsteigender Reihenfolge hinzugefügt werden.
Setzt die Kamerapose der Kamera mit Nummer X. X ist ein 0-basierter Index und standardmäßig 0 (erste Kamera). Beim Hinzufügen einer neuen Kamera wird die Pose standardmäßig auf die Nullpose [0,0,0,0,0,0,0] gesetzt, was bedeutet, dass die Kamera und der 3D-Sensor den gleichen Ursprung haben.
Löscht alle vorher im Oberflächenmodell gesetzten Kameras.
Objektsymmetrien definieren. Die folgenden Parameter können verwendet werden, um im Oberflächenmodell Symmetrien des Objekts zu setzen. Diese Information kann verwendet werden, um das oberflächenbasierte Matching zu beschleunigen.
Für mit 'train_3d_edges' erstellte Oberlfächenmodelle können keine Symmetrien gesetzt werden.
Standardmäßig sind keine Symmetrien aktiviert.
Zu beachten ist, dass set_surface_model_param beim Ändern der Symmetrien einige interne Datenstrukturen neu aufbaut, damit das oberflächenbasierte Matching schneller wird. Dies kann einige Sekunden dauern.
Setzt die Richtung der Symmetrieachse des Modells. GenParamValue muss ein Tupel mit drei Zahlen sein, welche die x-, y- und z-Werte der Achsenrichtung sind. Das Modell wird modifiziert, um diese Information zum Beschleunigen des oberflächenbasierten Matchings zu verwenden.
Um die Symmetrieachse zu löschen, kann in GenParamValue ein leeres Tupel übergeben werden.
Setzt einen Punkt auf der Symmetrieachse des Modells. GenParamValue muss ein Tupel mit drei Zahlen sein, welche einen beliebigen Punkt in Modellkoordinaten darstellen, der auf der Symmetrieachse liegt. Dieser Parameter ist optional. Standardmäßig wird er auf den wie von get_surface_model_param zurückgegebenen Mittelpunkt des Modells gesetzt.
Setzt eine oder mehr Symmetrieposen des Modells (siehe create_pose). Das Modell muss, wenn es mit einer dieser Posen transfomiert wird, zu sich selbst identisch sein. Das Modell wird modifiziert, um diese Information zum Beschleunigen des oberflächenbasierten Matchings zu verwenden.
Wenn eine oder mehr Symmetrieposen gesetzt werden, erzeugt set_surface_model_param intern alle durch Invertierung und Verkettung dieser Posen erzeugbaren weiteren Posen. Um alle derart intern erstellten Posen zu erhalten, kann get_surface_model_param mit dem Parameter 'symmetry_poses_all' verwendet werden. Wenn intern mehr als 100 Posen gefunden werden, wird ein Fehler zurückgegeben, da dies auf ungültige Symmetrieposen hindeutet.
Um die Symmetrieposen zu löschen, kann ein leeres Tupel in GenParamValue übergeben werden. Es kann nur entweder eine Symmetrieachse oder Symmetrieposen gesetzt werden, aber nicht beides.
Einschränkung des Posenbereichs. Die folgenden Parameter können verwendet werden, um den Rotationsbereich einzuschränken, in dem find_surface_model nach dem Oberflächenmodell sucht, oder um den erlaubten Rotationsbereich für refine_surface_model_pose zu setzen.
Standardmäßig gibt es keine Poseneinschränkungen, d.h. das Modell wird in allen möglichen Rotationen gesucht.
Zu beachten ist, dass set_surface_model_param beim Ändern der Poseneinschränkungen einige interne Datenstrukturen neu aufbaut, damit das oberflächenbasierte Matching schneller wird. Dies kann einige Sekunden dauern.
Setzt die Referenzpose des Modells. Die Referenzpose kann zusammen mit 'pose_restriction_max_angle_diff' verwendet werden, um den erlaubten Rotationsbereichs des Modells einzuschränken.
Wenn GenParamValue ein leeres Tupel ist, wird eine vorher gesetzte Referenzpose gelöscht und die Poseneinschränkung des Modells damit aufgehoben.
Andernfalls muss GenParamValue eine Pose sein (siehe create_pose). Der Translationsanteil der Pose wird ignoriert. Zu beachten ist auch, dass sowohl 'pose_restriction_reference_pose' als auch 'pose_restriction_max_angle_diff' gesetzt werden müssen, damit eine Poseneinschränkung aktiv ist.
Legt fest, um wieviel die Rotation eine beim oberflächenbasierten Matching gefundenen Pose von der Rotation der mit 'pose_restriction_reference_pose' gesetzten Referenzpose abweichen darf. Der Winkel wird im Bogenmaß angegeben.
Wenn GenParamValue ein leeres Tupel ist, wird ein vorher gesetzter Winkel gelöscht und die Poseneinschränkung aufgehoben.
Andernfalls muss GenParamValue ein Winkel sein, der angibt, um wieviel die Rotation einer gefundenen Pose 'P' von der Referenzpose 'R' abweiche darf. Der Vergleich erfolgt über die Gleichung Angle(R^(-1) * P) <= max_angle_diff .
Rotation um die mit diesem Parameter gesetzte Achse werden beim Vergleichen von gefundenen Posen mit der mit 'pose_restriction_reference_pose' gesetzten Referenzpose ignoriert.
Wenn GenParamValue ein leeres Tupel ist, wird eine vorher gesetzte Achse gelöscht.
Andernfalls muss GenParamValue drei Werte enthalten, die die Richtung der zu ignorierenden Achse in Modellkoordinaten enthält. Wenn eine solche Achse gesetzt ist, so darf sich ihre Richtung in einer gefundenen Pose von der Richtung der Achse in der Referenzpose höchstens um den mit 'pose_restriction_max_angle_diff' gesetzten Winkel unterscheiden.
Der Vergleich der Rotation einer gefundenen Pose mit der Referenzpose erfolgt dann mit der Gleichung Angle(R * axis, P * axis) <= max_angle_diff .
Definiert einen Punkt auf der mit 'pose_restriction_allowed_axis_direction' gesetzten Achse. GenParamValue muss ein Tupel mit drei Werten sein, die einen beliebigen Punkt auf dieser Achse darstellen. Dieser Parameter ist optional. Standardmäßig wird er auf den wie von get_surface_model_param zurückgegebenen Mittelpunkt des Modells gesetzt.
Mittels dieses Flags kann zwischen zwei verschiedenen Modi für die Poseneinschränkung gewechselt werden.
Wenn GenParamValue auf 'false' gesetzt ist (Standardwert), werden Posen mit Rotationen außerhalb des erlaubten Bereichs bereits früh im Matchingprozess unterdrückt. Diese Einstellung sollte verwendet werden, wenn das Objekt in der Szene stets in einer gewissen Orientierung liegt, find_surface_model aber teilweise eine falsche Orientierung zurückliefert. Mit dieser Einstellung liefert find_surface_model evtl. Posen zurück, die der Operator eigentlich als lokal suboptimal erachtet, wenn alle besseren Posen Rotationen außerhalb des erlaubten Bereichs haben. Wenn an refine_surface_model_pose eine Pose übergeben wird, deren Rotation außerhalb des erlaubten Bereichs liegt, wird diese in den erlaubten Bereich projiziert.
Wenn GenParamValue auf 'true' gesetzt ist, werden nur die endgültigen von find_surface_model gefundenen Posen gefiltert und die außerhalb des erlaubten Bereichs liegenden entfernt. Diese Einstellung sollte verwendet werden, wenn das Objekt von find_surface_model zwar immer korrekt gefunden wird, aber für die Anwendung nicht alle Posen interessant sind, da einige z.B. nicht vom Roboter gegriffen werden können. In dieser Einstellung liefert find_surface_model möglicherweise weniger Posen als angefordert zurück, wenn eine oder mehr der gefundenen Posen außerhalb des erlaubten Bereichs liegen.
In einigen Fällen kann dieser Operator bereits am Modell durchgeführte Änderungen nicht mehr rückgängig machen, wenn während der Aktualisierung der internen Datenstrukturen ein Fehler wie z.B. zu wenig Speicher auftritt. In diesem Fall kann das Modell in einem inkonsistenten, nur teilweise geänderten Zustand bleiben. Das Modell sollte dann gelöscht und neu erzeugt werden.
Dies betrifft nicht Fehler, die aufgrund ungültiger Parameterwerte auftreten, da diese schon vor der Aktualisierung des Modells geprüft werden.
Es ist auch zu beachten, dass die Neuerstellung der internen Datenstrukturen beim Ändern von Symmetrien oder der Poseneinschränkung so lange dauern kann wie das ursprüngliche create_surface_model.
Handle des Oberflächenmodells.
Name der zu setzenden Eigenschaft.
Defaultwert: 'camera_parameter'
Werteliste: 'camera_parameter', 'camera_pose', 'clear_cameras', 'pose_restriction_allowed_axis_direction', 'pose_restriction_allowed_axis_origin', 'pose_restriction_filter_final_poses_only', 'pose_restriction_max_angle_diff', 'pose_restriction_reference_pose', 'symmetry_axis_direction', 'symmetry_axis_origin', 'symmetry_poses'
Wert der zu setzenden Eigenschaft.
Wertevorschläge: 'true', 'false', [], [0,0,0,0,0,0,0], [0,0,1]
Wenn alle Parameter korrekt sind liefert set_surface_model_param den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
create_surface_model, read_surface_model, get_surface_model_param
find_surface_model, refine_surface_model_pose, write_surface_model, find_surface_model_image, refine_surface_model_pose_image
create_surface_model, get_surface_model_param
3D Metrology
| Operatoren |