[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 |
URL | https://hsp.moe/ |
備考 | #include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as" 使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること |
タイプ | OpenCVSharpラッパーDLL |
グループ | NativeMethods_calib3d |
対応環境 |
|
hs ファイル | hsphelp\OpenCvSharpExtern.hs |