calib3d_calibrateRobotWorldHandEye_Pointer

[32/64bit] Robot-World/Hand-Eye Calibrationを計算します。\(_{}^{w}\textrm{T}_b\), \(_{}^{c}\textrm{T}_g\)

calib3d_calibrateRobotWorldHandEye_Pointer p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13

p1 = sptr : IntPtr[] R_world2camMats
p2 = int : int R_world2camMatsSize
p3 = sptr : IntPtr[] t_world2camMats
p4 = int : int t_world2camMatsSize
p5 = sptr : IntPtr[] R_base2gripperMats
p6 = int : int R_base2gripperMatsSize
p7 = sptr : IntPtr[] t_base2gripperMats
p8 = int : int t_base2gripperMatsSize
p9 = var : [MarshalAs(UnmanagedType.LPArray), Out] double[,] R_base2world
p10 = var : [MarshalAs(UnmanagedType.LPArray), Out] double[] t_base2world
p11 = var : [MarshalAs(UnmanagedType.LPArray), Out] double[,] R_gripper2cam
p12 = var : [MarshalAs(UnmanagedType.LPArray), Out] double[] t_gripper2cam
p13 = int : int method

(プラグイン / モジュール : OpenCvSharpExtern.dll)

解説

この関数は,様々な方法を用いて,Robot-World/Hand-Eyeのキャリブレーションを行います.一つの方法は,回転と平行移動を推定することです(分離可能な解):M.Shah, Solving the robot-world/hand-eye calibration problem using the kronecker product [221]もう1つの方法は,回転と平行移動を同時に推定する方法(同時解法)で,次のように実装されています:A. Li, L. Wang, and D. Wu, Simultaneous robot-world/Hand-Eye calibration problem using the kronecker product [221].A. Li, L. Wang, and D. Wu, Simultaneous robot-world and hand-eye calibration using dual-quaternions and kronecker product [143]次の図は、ロボットとワールドフレームの間の変換、およびロボットグリッパー(「ハンド」)とロボットエンドエフェクタに取り付けられたカメラ(「アイ」)の間の変換を推定しなければならない、ロボット-ワールド/ハンド-アイのキャリブレーション問題を説明しています。


ロボットのグリッパーを動かして,複数のポーズを取得する


各ポーズについて、グリッパーフレームとロボットベースフレームの間の同次変換が、例えばロボットキネマティクスを用いて記録されます。


\キャリブレーションの手順は以下の通りです。X_g\ Y_g\ Z_g\ 1 end{bmatrix} = ????? )_{}^{g}\\{R}/b & _{}^{g}\\{t}/b\\\\♪♪♪♪♪♪♪♪♪~\]








各ポーズについて、キャリブレーション対象フレーム(ワールドフレーム)とカメラフレームの間の同次変換を、例えば、2D-3D点対応からのポーズ推定法(PnP)を用いて記録する。


\????? )X_c\ Y_citness Z_citness 1 ??? -? ??? = ??? -? ??? )_{}^{c}\\{R}_w & _{}^{c}\\{t}_w\\\\X w\\ Y wadows\Robot-World/Hand-Eyeキャリブレーション手順では、以下のような同次変換が行われます。X_w\ Y_w\ Z_w\ 1 end{bmatrix} = ????? )♪♪♪♪♪~\\\\♪♪♪♪♪♪♪♪♪~\♪♪♪♪♪~♪♪♪♪♪♪♪~_{}^{c}\\{R}_g & _{}^{c}\{t}_g\\\\X'g\ Y'g\ Z'g\\ 1 end{bmatrix}.この問題は別名、\\\\\\\\\\\\\\\\\\\\\とも呼ばれます。


\♪♪♪♪♪♪♪~


\♪♪~


\Note最低でも3つの測定値が必要です(入力ベクトルのサイズは3以上です)。

元関数名(C#): calib3d_calibrateRobotWorldHandEye_Pointer
元DLLエクスポート名: calib3d_calibrateRobotWorldHandEye_Pointer
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_calibrateRobotWorldHandEye_Pointer(
    cv::Mat** R_world2camMats, int32_t R_world2camMatsSize,
    cv::Mat** t_world2camMats, int32_t t_world2camMatsSize,
    cv::Mat** R_base2gripperMats, int32_t R_base2gripperMatsSize,
    cv::Mat** t_base2gripperMats, int32_t t_base2gripperMatsSize,
    double* R_base2world, double* t_base2world,
    double* R_gripper2cam, double* t_gripper2cam,
    int32_t method)
{
    BEGIN_WRAP
    std::vector<cv::Mat> R_gripper2base;
    std::vector<cv::Mat> t_gripper2base;
    std::vector<cv::Mat> R_target2cam;
    std::vector<cv::Mat> t_target2cam;
    toVec(R_world2camMats, R_world2camMatsSize, R_gripper2base);
    toVec(t_world2camMats, t_world2camMatsSize, t_gripper2base);
    toVec(R_base2gripperMats, R_base2gripperMatsSize, R_target2cam);
    toVec(t_base2gripperMats, t_base2gripperMatsSize, t_target2cam);
    cv::Matx33d R_base2worldM;
    cv::Matx31d t_base2worldM;
    cv::Matx33d R_gripper2camM;
    cv::Matx31d t_gripper2camM;
    cv::calibrateRobotWorldHandEye(
        R_gripper2base, t_gripper2base,
        R_target2cam, t_target2cam,
        R_base2worldM, t_base2worldM,
        R_gripper2camM, t_gripper2camM,
        static_cast<cv::RobotWorldHandEyeCalibrationMethod>(method));

    std::memcpy(R_base2world, R_base2worldM.val, 9 * sizeof(double));
    std::memcpy(t_base2world, t_base2worldM.val, 3 * sizeof(double));
    std::memcpy(R_gripper2cam, R_gripper2camM.val, 9 * sizeof(double));
    std::memcpy(t_gripper2cam, t_gripper2camM.val, 3 * sizeof(double));

    END_WRAP
}

情報

プラグイン / モジュールOpenCvSharpExtern.dll
バージョン1.00
作成日2021/11/30
著作者inovia
URLhttps://hsp.moe/
備考#include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as"
使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること
タイプOpenCVSharpラッパーDLL
グループNativeMethods_calib3d
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\OpenCvSharpExtern.hs