calib3d_calibrateHandEye

[32/64bit] Hand-Eye Calibrationを計算します.\(_{}^{g}\textrm{T}_c\).

calib3d_calibrateHandEye p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11

p1 = sptr : IntPtr[] R_gripper2baseMats
p2 = int : int R_gripper2baseMatsSize
p3 = sptr : IntPtr[] t_gripper2baseMats
p4 = int : int t_gripper2baseMatsSize
p5 = sptr : IntPtr[] R_target2camMats
p6 = int : int R_target2camMatsSize
p7 = sptr : IntPtr[] t_target2camMats
p8 = int : int t_target2camMatsSize
p9 = sptr : IntPtr R_cam2gripper
p10 = sptr : IntPtr t_cam2gripper
p11 = int : int method

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

解説

この関数は,様々な手法を用いて手と目のキャリブレーションを行います.一つの方法は,回転と平行移動を推定することであり(分離可能な解),以下の方法が実装されています:R. Tsai, R. Lenz A.S.A.Tsai, R. Lenz A New Technique for Fully Autonomous and Efficient 3D Robotics Hand/EyeCalibration [249].


F.Park, B. Martin Robot Sensor Calibration:ユークリッドグループ上でAX = XBを解決する [190]。


R.Horaud, F. Dornaika Hand-Eye Calibration [112]別のアプローチは,回転と平行移動を同時に推定すること(同時解)であり,次のような実装方法がある:N.Andreff, R. Horaud, B. Espiau On-line Hand-Eye Calibration [11].


K.Daniilidis Hand-Eye Calibration Using Dual Quaternions [52]次の図は、ロボットグリッパー(「ハンド」)に取り付けられたカメラ(「アイ」)間の変換を推定しなければならないハンドアイのキャリブレーション問題を説明しています。Eye-to-Hand構成は、ロボットのエンドエフェクタに取り付けられた校正パターンを観察する静的なカメラで構成されています。カメラからロボットのベースフレームへの変換は、適切な変換を関数に入力することで推定できます(以下参照)。


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


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


\Mr.X_b\ Y_b\ Z_b\ 1 ????? ) = ????? ) = ????? )_{}^{b}\\{R}_g & _{}^{b}\\{t}_g\\0_{1 ??(?????????????)\\\\♪♪♪♪♪♪♪~\]








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


\????? )X_c\ Y_c%% Z_c%% 1 ????? ) = ????? )_{}^{c}\\{R}_t & _{}^{c}\\{t}_t 0_{1 ??(?????????????)\\\\♪ X t\\ Y t ♪ Z t ♪ 1\ハンドアイ キャリブレーションではX_g\ Y_g\ Z_g\ 1 ardent{bmatrix} = ??? -? ????♪♪♪♪♪~\\\\X_c\ Y_cadows Z_cadows 1 end{bmatrix}.\この問題は別名、目と手の関係を表す


\♪♪~^{b}{\textrm{T}_g}^{(1)}\0.2em}になります。^{g}\textrm{T}_c \hspace{0.2em}^{c}{\\{T}_t}^{(1)} &= ????? )^{b}{\textrm{T}_g}^{(2)}\ω^)ノ^{g}\textrm{T}_c \hspace{0.2em}^{c}{\textrm{T}_t}^{(2)}(^{b}{\\{T}_g}^{(2)})^{-1} ??? -? ????^{b}{\textrm{T}_g}^{(1)}\0.2em}になります。^{g}\\{T}_c &= ??? -? ????^{g}\textrm{T}_c \hspace{0.2em}^{c}{\\{T}_t}^{(2)} (^{c}{\\\{T}_t}^{(1)})^{-1} \\{A}_i ?? &= ???????????????????????????????????????????????????????\]








for an eye-to-hand configuration


\♪♪~^{g}{\textrm{T}_b}^{(1)}\0.2em}になります。^{b}\textrm{T}_c \hspace{0.2em}^{c}{\\{T}_t}^{(1)} &= ??? -? ????^{g}{\textrm{T}_b}^{(2)}\0.2em}になります。^{b}\textrm{T}_c \hspace{0.2em}^{c}{\textrm{T}_t}^{(2)}(^{g}{\\{T}_b}^{(2)})^{-1} ??? -? ????^{g}{\textrm{T}_b}^{(1)}\0.2em}になります。^{b}\\{T}_c &= \\\{T}_c^{b}\textrm{T}_c \hspace{0.2em}^{c}{\\{T}_t}^{(2)} (^{c}{\\\{T}_t}^{(1)})^{-1} ????? )\NoteAdditional information are found on this website.





手目線の変換を判定するためには、回転軸が平行でないモーションが最低2つ必要です。そのため、最低でも3種類のポーズが必要ですが、それ以上のポーズを使用することを強く推奨します。

元関数名(C#): calib3d_calibrateHandEye
元DLLエクスポート名: calib3d_calibrateHandEye
参照元CSファイル: Internal\PInvoke\NativeMethods\calib3d\NativeMethods_calib3d.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) calib3d_calibrateHandEye(
    cv::Mat **R_gripper2baseMats, const int32_t R_gripper2baseMatsSize,
    cv::Mat **t_gripper2baseMats, const int32_t t_gripper2baseMatsSize,
    cv::Mat **R_target2camMats, const int32_t R_target2camMatsSize,
    cv::Mat **t_target2camMats, const int32_t t_target2camMatsSize,
    cv::_OutputArray *R_cam2gripper, 
    cv::_OutputArray *t_cam2gripper,
    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_gripper2baseMats, R_gripper2baseMatsSize, R_gripper2base);
    toVec(t_gripper2baseMats, t_gripper2baseMatsSize, t_gripper2base);
    toVec(R_target2camMats, R_target2camMatsSize, R_target2cam);
    toVec(t_target2camMats, t_target2camMatsSize, t_target2cam);
    cv::calibrateHandEye(
        R_gripper2base, t_gripper2base, 
        R_target2cam, t_target2cam, 
        *R_cam2gripper, *t_cam2gripper,
        static_cast<cv::HandEyeCalibrationMethod>(method));
    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