calibrate_hand_eyeT_calibrate_hand_eyeCalibrateHandEyeCalibrateHandEye (Operator)

Name

calibrate_hand_eyeT_calibrate_hand_eyeCalibrateHandEyeCalibrateHandEye — Durchführen einer Hand-Auge-Kalibrierung.

Signatur

calibrate_hand_eye( : : CalibDataID : Errors)

Herror T_calibrate_hand_eye(const Htuple CalibDataID, Htuple* Errors)

void CalibrateHandEye(const HTuple& CalibDataID, HTuple* Errors)

HTuple HCalibData::CalibrateHandEye() const

static void HOperatorSet.CalibrateHandEye(HTuple calibDataID, out HTuple errors)

HTuple HCalibData.CalibrateHandEye()

Beschreibung

Der Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye bestimmt die 3D-Lage eines Roboters („Hand“) relativ zu einer Kamera oder 3D-Sensor („Auge“) basierend auf einem Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID. Mit den ermittelten 3D-Posen können die Posen des Objektes im Kamerakoordinatensystem in das Roboterbasiskoordinatensystem transformiert werden. Der Roboter kann dann z.B. ein inspiziertes Teil greifen. Es gibt zwei mögliche Konfigurationen von Roboter-Kamera-Systemen (Hand-Auge-Systemen): Die Kamera kann auf dem Roboter montiert sein oder stationär sein und den Roboter beobachten. Beachten Sie, dass der Begriff „Roboter“ für ein beliebiges System steht, das Objekte bewegt. Daher können mit calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye viele verschiedene Systeme kalibriert werden, von Schwenk-Neige-Köpfen zu Vielachs-Manipulatoren.

Eine Hand-Auge-Kalibrierung kann über eine geschlossene Verkettung von insgesamt vier euklidischen Transformationen beschrieben werden. In dieser Kette sind zwei nicht aufeinander folgende Transformationen bekannt. Diese stammen entweder aus der Robotersteuerung oder werden aus Kameradaten, z.B. beobachtete Posen eines Kalibrierkörpers, bestimmt. Die beiden anderen Transformationen sind unbekannt aber konstant und werden durch die Hand-Auge-Kalibrierung bestimmt.

Eine Hand-Auge-Kalibrierung läuft ähnlich ab wie die Kalibrierung der externen Kameraparameter (siehe Kalibrierung): Verschiedene Posen eines Kalibrierkörpers im Kamerakoordinatensystem sowie die korrespondierenden Posen des Werkzeugs im Roboterbasiskoordinatensystem werden bestimmt und im Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID gesetzt.

Im Gegensatz zur Kamerakalibrierung wird der Kalibrierkörper nicht manuell bewegt. Dies ist die Aufgabe des Roboters. Zwei Hand-Auge Kalibrierszenarien werden unterschieden. Der Roboter bewegt entweder die Kamera (bei auf dem Roboter montierter Kamera) oder den Kalibrierkörper (bei stationärer Kamera). Die Bewegungen des Roboters werden als bekannt vorausgesetzt. Sie werden als Eingabe für die Kalibrierung benutzt und mittels set_calib_dataset_calib_dataSetCalibDataSetCalibDataSetCalibData im Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID gesetzt.

Durch die Hand-Auge-Kalibrierung werden zwei Posen bestimmt: Im Szenario „bewegte Kamera“ wird die 3D-Pose des Endeffektors im Kamerakoordinatensystem ('tool_in_cam_pose') und die 3D-Pose des Kalibrierkörpers in Roboterbasiskoordinaten ('obj_in_base_pose') bestimmt. Im Szenario „stationäre Kamera“ wird die 3D-Pose der Roboterbasis im Kamerakoordinatensystem ('base_in_cam_pose') sowie die 3D-Pose des Kalibrierkörpers im Tool-Koordinatensystem ('obj_in_tool_pose') bestimmt. Ihr Posentyp ist identisch mit dem Typ der Eingabeposen.

Im Folgenden werden die zwei Hand-Auge-Konfigurationen detaillierter beschrieben, gefolgt von genereller Information über die benötigten Daten und die Vorbereitung des Kalibrierdatenmodells.

Bewegte Kamera (auf dem Roboter montiert)

In dieser Konfiguration ist der Kalibrierkörper stationär, und die Kamera wird vom Roboter an verschiedene Positionen bewegt. Die grundlegende Idee hinter der Hand-Auge-Kalibrierung ist, dass die aus einem Kalibrierbild extrahierte Information, d.h. die 3D-Lage des Kalibrierkörpers relativ zur Kamera (d.h. die externen Kameraparameter), als Kette von 3D-Lagen bzw. homogenen Transformationsmatrizen aufgefasst werden kann, vom Kalibrierkörper über die Roboter-Basis zu dessen Tool (Endeffektor) und schließlich zur Kamera:

Bewegte Kamera: camera_H_cal = camera_H_tool * (base_H_tool)^(-1) * base_H_cal | | | | 'obj_in_cam_pose' 'tool_in_cam_pose' 'tool_in_base_pose' 'obj_in_base_pose'

Aus den gegebenen Posen des Kalibrierkörpers ('obj_in_cam_pose') und den Posen des Endeffektors in Roboterbasiskoordinaten ('tool_in_base_pose') bestimmt der Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye die zwei unbekannten Transformationen an den Enden der Kette, d.h. die 3D-Lage des Roboter-Tools in Kamerakoordinaten ( , 'tool_in_cam_pose') und die 3D-Lage des Kalibrierkörpers in Roboter-Basiskoordinaten ( , 'obj_in_base_pose'). Diese Posen sind konstant.

Im Gegensatz dazu ist die Transformation in der Mitte der Kette, , bekannt, aber unterschiedlich für jede Beobachtung des Kalibrierkörpers, da sie die 3D-Lage des Endeffektors (Tool) bezüglich des Roboterbasiskoordinatensystems beschreibt. In der gegebenen Gleichung werden die inversen Transformationsmatrizen benutzt (3D-Lage der Roboter-Basis in Roboter-Toolkoordinaten). Die Invertierung wird intern vorgenommen.

Es ist zu beachten, dass die Z-Translation von 'obj_in_base_pose' im Rahmen der Kalibrierung von SCARA-Robotern nicht eindeutig bestimmt werden kann. Um diese Mehrdeutigkeit aufzulösen, wird die Z-Translation von 'obj_in_base_pose' intern auf 0.0 gesetzt und 'tool_in_cam_pose' entsprechend berechnet. Es ist notwendig, die tatsächliche Translation in Z nach der Kalibrierung zu bestimmen indem der Roboter an eine Pose bekannter Höhe im Kamerakoordinatensystem gefahren wird. Hierfür empfiehlt sich das folgende Vorgehen: Der Kalibrierkörper wird an einer beliebigen Stelle platziert. Der Roboter wird dann so bewegt, dass die Kamera den Kalibrierkörper sieht. Nun wird ein Bild des Kalibrierkörpers aufgenommen und die aktuelle Roboterpose abgefragt (ToolInBasePose1). Anhand des Bildes kann die Pose des Kalibrierkörpers im Kamerakoordinatensystem ermittelt werden (ObjInCamPose1). Anschließend wird der Greifpunkt des Roboters von Hand zum Ursprung des Kalibrierkörpers bewegt und erneut die Roboterpose abgefragt (ToolInBasePose2). Diese drei Posen können zusammen mit dem Ergebnis der Kalibrierung (ToolInCamPose) folgendermaßen verwendet werden, um die Mehrdeutigkeit in Z aufzulösen: pose_invert (ToolInCamPose, CamInToolPose) pose_compose (CamInToolPose, ObjInCamPose1, ObjInToolPose1) pose_invert (ToolInBasePose1, BaseInToolPose1) pose_compose (BaseInToolPose1, ToolInBasePose2, Tool2InTool1Pose) ZCorrection := ObjInToolPose1[2]-Tool2InTool1Pose[2] set_origin_pose (ToolInCamPose, 0, 0, ZCorrection, ToolInCamPoseFinal)

Stationäre Kamera

In dieser Konfiguration greift der Roboter den Kalibrierkörper und bewegt ihn vor der Kamera. Auch in dieser Konfiguration entspricht die aus einem Kalibrierbild extrahierte Information, d.h. die 3D-Lage des Kalibrierkörpers in Kamerakoordinaten (d.h. die externen Kameraparameter) einer Kette von 3D-Lagen bzw. homogenen Transformationsmatrizen, diesmal vom Kalibrierkörper über das Roboter-Tool zu dessen Basis und schließlich zur Kamera:

Stationäre Kamera: camera_H_cal = camera_H_base * base_H_tool * tool_H_cal | | | | 'obj_in_cam_pose' 'base_in_cam_pose' 'tool_in_base_pose' 'obj_in_tool_pose'

Analog zur Konfiguration mit bewegter Kamera bestimmt der Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye die zwei Transformationen an den Enden der Kette, hier nun die 3D-Lage der Roboter-Basis in Kamerakoordinaten ( , 'base_in_cam_pose') und die 3D-Lage des Kalibrierkörpers in Roboter-Toolkoordinaten ( , 'obj_in_tool_pose').

Die Transformation in der Mitte der Kette, , beschreibt die 3D-Lage des den Kalibrierkörper bewegenden Roboters, d.h. die 3D-Lage des Roboter-Tools in Roboter-Basiskoordinaten. Die Transformation beschreibt die Pose des Kalibrierkörpers relativ zum Kamerakoordinatensystem.

Es ist zu beachten, dass die Z-Translation von 'obj_in_tool_pose' im Rahmen der Kalibrierung von SCARA-Robotern nicht eindeutig bestimmt werden kann. Um diese Mehrdeutigkeit aufzulösen, wird die Z-Translation von 'obj_in_tool_pose' intern auf 0.0 gesetzt und 'base_in_cam_pose' entsprechend berechnet. Es ist notwendig, die tatsächliche Translation in Z nach der Kalibrierung zu bestimmen indem der Roboter an eine Pose bekannter Höhe im Kamerakoordinatensystem gefahren wird. Hierfür empfiehlt sich das folgende Vorgehen: Ein (nicht am Roboter befestigter) Kalibrierkörper wird an einer beliebigen Stelle so platziert, dass er von der Kamera gesehen wird. Anhand eines aufgenommenen Bildes muss dann die Pose des Kalibrierkörpers im Kamerakoordinatensystem ermittelt werden (ObjInCamPose). Anschließend wird der Greifpunkt des Roboters von Hand zum Ursprung des Kalibrierkörpers bewegt und die Roboterpose abgefragt (ToolInBasePose). Die beiden Posen können zusammen mit dem Ergebnis der Kalibrierung (BaseInCamPose) folgendermaßen verwendet werden, um die Mehrdeutigkeit in Z aufzulösen: pose_invert (BaseInCamPose, CamInBasePose) pose_compose (CamInBasePose, ObjInCamPose, ObjInBasePose) ZCorrection := ObjInBasePose[2]-ToolInBasePose[2] set_origin_pose (BaseInCamPose, 0, 0, ZCorrection, BaseInCamPoseFinal)

Vorbereitung der Eingabekalibrierdaten

Bevor der Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye aufgerufen wird, müssen die benötigten Daten im Kalibrierdatenmodell gesammelt werden. Dabei müssen diese Schritte befolgt werden:

  1. Erstellen des Kalibrierdatenmodells mit dem Operator create_calib_datacreate_calib_dataCreateCalibDataCreateCalibDataCreateCalibData, wobei die Anzahl der Kameras und die Anzahl der Kalibrierkörper im Modell festgelegt werden. Abhängig vom Szenario muss für CalibSetup der Wert 'hand_eye_moving_camera'"hand_eye_moving_camera""hand_eye_moving_camera""hand_eye_moving_camera""hand_eye_moving_camera", 'hand_eye_stationary_camera'"hand_eye_stationary_camera""hand_eye_stationary_camera""hand_eye_stationary_camera""hand_eye_stationary_camera", 'hand_eye_scara_moving_camera'"hand_eye_scara_moving_camera""hand_eye_scara_moving_camera""hand_eye_scara_moving_camera""hand_eye_scara_moving_camera" oder 'hand_eye_scara_stationary_camera'"hand_eye_scara_stationary_camera""hand_eye_scara_stationary_camera""hand_eye_scara_stationary_camera""hand_eye_scara_stationary_camera" gesetzt werden. Diese vier Szenarien unterscheiden zum einen, ob die Kamera oder der Kalibrierkörper vom Roboter bewegt wird und zum anderen, ob ein anthropomorpher oder ein SCARA-Roboter kalibriert wird. Der Arm eines anthropomorphen Roboters hat 3 Drehgelenke, die typischerweise 6 Freiheitsgrade abdecken (3 Translationen und 3 Rotationen). SCARA-Roboter besitzen dagegen nur zwei parallele Drehgelenke und ein paralleles Schubgelenk, die nur 4 Freiheitsgrade (3 Translationen und 1 Rotation) abdecken. Grob gesagt ist ein anthropomorpher Roboter im Gegensatz zum SCARA-Roboter in der Lage, seinen Endeffektor zu verkippen.

  2. Festlegen der Optimierungsmethode mit dem Operator set_calib_dataset_calib_dataSetCalibDataSetCalibDataSetCalibData. Für den Parameter DataName='optimization_method'"optimization_method""optimization_method""optimization_method""optimization_method" sind zwei Optionen für DataValue möglich, DataValue='nonlinear'"nonlinear""nonlinear""nonlinear""nonlinear" und DataValue='linear'"linear""linear""linear""linear" (siehe Abschnitt 'Die eigentliche Kalibrierung durchführen').

  3. Setzen der Posen des Kalibrierkörpers

    1. Jede beobachtete 3D-Pose des Kalibrierkörpers kann direkt mittels des Operators set_calib_data_observ_poseset_calib_data_observ_poseSetCalibDataObservPoseSetCalibDataObservPoseSetCalibDataObservPose gesetzt werden. Somit ist es in der Hand-Auge-Kalibrierung möglich generische 3D-Sensoren zu benutzen, die ein Kalibrierobjekt beobachten.

    2. Andererseits kann die Pose des Kalibrierkörpers mittels Kamerabildern bestimmt werden. Dafür muss der Kalibrierkörper im Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID mit dem Operator set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObject gesetzt werden. Initiale Kameraparameter werden mit dem Operator set_calib_data_cam_paramset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamSetCalibDataCamParam gesetzt. Wenn eine Standard-Kalibrierplatte verwendet wird, bestimmt der Operator find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject die Pose des Kalibrierkörpers relativ zur Kamera und speichert sie im Kalibrierdatenmodell CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID. Für antropomorphe (d.h. nicht-SCARA) Roboter kalibriert der Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye in diesem Fall die Kamera bevor die eigentliche Hand-Auge-Kalibrierung durchgeführt wird. Falls die gegebenen Kameraparameter schon kalibriert sind, kann die Kamerakalibrierung wie folgt ausgeschaltet werden. set_calib_data(CalibDataID,'camera','general','excluded_settings','params'). Im Gegensatz dazu geht calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye bei SCARA-Robotern immer davon aus, dass die gegebenen Kameraparameter bereits kalibriert sind. Daher wird in diesem Fall vor der Hand-Auge-Kalibrierung keine automatische interne Kalibrierung der Kamera durchgeführt. Der Grund hierfür ist, dass die Kamerakalibrierung nur mit unterschiedlicher Verkippung der Kalibrierplatte zuverlässig ist. Bei der Hand-Auge-Kalibrierung ist die Kalibrierplatte oft annähernd parallel zur Bildebene, was bei einem SCARA-Roboter dazu führt, dass alle Kameraposen annähernd parallel sind. Daher muss die Kamera zuvor mit einem separaten Satz an Kalibrierbildern kalibriert worden sein.

  4. Spezifizieren der Posen des Tools im Roboterbasiskoordinatensystem. Für jede Pose des Kalibrierkörpers im Kamerakoordinatensystem muss die korrespondierende Pose des Tools im Roboterbasiskoordinatensystem wie folgt gesetzt werden. set_calib_data(CalibDataID,'tool', PoseNumber, 'tool_in_base_pose', ToolInBasePose)

Die eigentliche Kalibrierung durchführen

Der Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye kann die Kalibrierung auf zwei verschiedene Arten durchführen. In beiden Fällen werden alle gegebenen Posen des Kalibrierobjekts in Kamerakoordinaten sowie die zugehörigen Posen des Tools in Roboterbasiskoordinaten für die Kalibrierung benutzt. Mittels des Operators set_calib_dataset_calib_dataSetCalibDataSetCalibDataSetCalibData wird spezifiziert welche Methode benutzt wird.

Soll die Kalibrierung mittels eines linearen Algorithmus durchgeführt werden, so muss die Parameterkombination DataName='optimization_method'"optimization_method""optimization_method""optimization_method""optimization_method" und DataValue='linear'"linear""linear""linear""linear" gewählt werden. Dieser Algorithmus ist schnell jedoch in vielen praktischen Fällen nicht genau genug.

Wird die Parameterkombination DataName='optimization_method'"optimization_method""optimization_method""optimization_method""optimization_method" und DataValue='nonlinear'"nonlinear""nonlinear""nonlinear""nonlinear" gewählt, so wird ein nicht linearer Algorithmus benutzt, welcher das genaueste Ergebnis liefert und daher auch empfohlen ist.

Ergebnisse der Kalibrierung überprüfen

Nach einer erfolgreichen Kalibrierung wird der Lagefehler über die komplette Transformationskette in ErrorsErrorsErrorsErrorserrors zurückgegeben. Genau genommen wird ein Tuple mit vier Elementen zurückgegeben, welches zuerst den mittleren, quadratischen Fehler der Translation, dann den mittleren, quadratischen Fehler der Rotation, an dritter Stelle den maximalen Fehler der Translation und schließlich an vierter Stelle den maximalen Fehler der Rotation angibt. Diese Fehler geben einen allgemeinen Hinweis darauf, ob die Optimierung erfolgreich war.

Die Fehler werden in den Einheiten zurückgegeben, in denen die Eingabeposen gegeben waren. Das bedeutet, dass die Translationsfehler typischerweise in Metern zurückgegeben werden. Die Rotationsfehler werden immer in Grad zurückgegeben.

Kalibrierergebnisse abfragen

Die Posen, die durch den Operator calibrate_hand_eyecalibrate_hand_eyeCalibrateHandEyeCalibrateHandEyeCalibrateHandEye berechnet werden, können mit get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData abgefragt werden. Für das Szenario „bewegte Kamera“ können die 3D-Pose des Tools in Kamerakoordinaten ('tool_in_cam_pose') und die 3D-Pose des Kalibrierkörpers im Roboterbasiskoordinatensystem ('obj_in_base_pose') abgefragt werden. Für das Szenario „stationäre Kamera“ können die 3D-Pose der Roboterbasis im Kamerakoordinatensystem ('base_in_cam_pose') und die 3D-Pose des Kalibrierkörpers im Koordinatensystem des Tools ('obj_in_tool_pose') abgefragt werden.

Abfragen der Eingabedaten

Wurden die 3D-Posen des Kalibrierobjektes mit find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject bestimmt, dann werden diese bei antropomorphen (d.h. nicht-SCARA) Robotern dazu verwendet, die Kamera vor der eigentlichen Hand-Auge-Kalibrierung zu kalibrieren, und werden somit ebenfalls kalibriert. Die kalibrierten Posen können mit get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData und dem Parameter ItemType='calib_obj_pose'"calib_obj_pose""calib_obj_pose""calib_obj_pose""calib_obj_pose" abgefragt werden. Die beobachteten 3D-Posen des Kalibrierobjektes im Kamerakoordinatensystem können mit get_calib_data_observ_poseget_calib_data_observ_poseGetCalibDataObservPoseGetCalibDataObservPoseGetCalibDataObservPose abgefragt werden. Die zugehörigen 3D-Posen des Tools im Roboterbasiskoordinatensystem können mit get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData abgefragt werden.

Ein Set geeigneter Posen des Kalibrierkörpers aufnehmen

Ist eine Standard-Kalibrierplatte vorhanden, sollte folgendermaßen vorgegangen werden:

Lagen des Roboter-Tools aufnehmen

Wir empfehlen, die 3D-Lagen in einem separaten Programm zu erzeugen und mittels write_posewrite_poseWritePoseWritePoseWritePose in Dateien abzuspeichern. Im Kalibrierprogramm können sie dann eingelesen werden und im Kalibrierdatenmodell gesetzt werden.

Die 3D-Lage eines Roboters kann über seine kartesische Schnittstelle typischerweise in einer Notation abgefragt werden, die den Darstellungstypen mit den Codes 0 oder 2 entsprechen (OrderOfRotationOrderOfRotationOrderOfRotationOrderOfRotationorderOfRotation = 'gba'"gba""gba""gba""gba" oder 'abg'"abg""abg""abg""abg", siehe create_posecreate_poseCreatePoseCreatePoseCreatePose). In diesem Fall können die abgefragten Werte direkt als Eingabe für create_posecreate_poseCreatePoseCreatePoseCreatePose verwendet werden.

Falls die kartesische Schnittstelle des Roboters die Orientierung anders beschreibt, z.B. in der Darstellung ZYZ ( ), kann die entsprechende homogene Transformationsmatrix schrittweise mit den Operatoren hom_mat3d_rotatehom_mat3d_rotateHomMat3dRotateHomMat3dRotateHomMat3dRotate und hom_mat3d_translatehom_mat3d_translateHomMat3dTranslateHomMat3dTranslateHomMat3dTranslate aufgebaut und dann mit hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPoseHomMat3dToPose in eine 3D-Lage gewandelt werden. Der folgende Beispiel-Code erzeugt eine 3D-Lage aus der oben beschriebenen ZYZ-Darstellung:

Bitte beachten Sie, dass die Hand-Auge-Kalibrierung nur dann erfolgreich sein kann, wenn die Posen des Tools im Roboterbasiskoordinatensystem mit hoher Genauigkeit angegeben werden!

Ausführungsinformationen

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.

Parameter

CalibDataIDCalibDataIDCalibDataIDCalibDataIDcalibDataID (input_control, Zustand wird modifiziert)  calib_data HCalibData, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Kalibrierdatenmodells.

ErrorsErrorsErrorsErrorserrors (output_control)  number-array HTupleHTupleHtuple (real) (double) (double) (double)

Durchschnittlicher verbleibender Fehler nach der Optimierung.

Vorgänger

create_calib_datacreate_calib_dataCreateCalibDataCreateCalibDataCreateCalibData, set_calib_data_cam_paramset_calib_data_cam_paramSetCalibDataCamParamSetCalibDataCamParamSetCalibDataCamParam, set_calib_data_calib_objectset_calib_data_calib_objectSetCalibDataCalibObjectSetCalibDataCalibObjectSetCalibDataCalibObject, set_calib_data_observ_poseset_calib_data_observ_poseSetCalibDataObservPoseSetCalibDataObservPoseSetCalibDataObservPose, find_calib_objectfind_calib_objectFindCalibObjectFindCalibObjectFindCalibObject, set_calib_dataset_calib_dataSetCalibDataSetCalibDataSetCalibData, remove_calib_dataremove_calib_dataRemoveCalibDataRemoveCalibDataRemoveCalibData, remove_calib_data_observremove_calib_data_observRemoveCalibDataObservRemoveCalibDataObservRemoveCalibDataObserv

Nachfolger

get_calib_dataget_calib_dataGetCalibDataGetCalibDataGetCalibData

Literatur

K. Daniilidis: „Hand-Eye Calibration Using Dual Quaternions“; International Journal of Robotics Research, Vol. 18, No. 3, pp. 286-298; 1999.
M. Ulrich, C. Steger: „Hand-Eye Calibration of SCARA Robots Using Dual Quaternions“; Pattern Recognition and Image Analysis, Vol. 26, No. 1, pp. 231-239; January 2016.

Modul

Calibration