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
.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.
SurfaceModelID
(input_control, Zustand wird modifiziert) surface_model →
(handle)
Handle des Oberflächenmodells.
GenParamName
(input_control) attribute.name →
(string)
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'
GenParamValue
(input_control) attribute.value(-array) →
(real / string / integer)
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