ハンドアイキャリブレーションに関する注意事項と推奨事項

よくある間違い

画質

  • すべての画像において、キャリブレーション対象物が適切に露出され、ピントが合っていることを確認してください。

  • 対象物を 被写界深度 の範囲内に収めてください:

    • より高い \(f\) 値(より小さな絞り)を使用してください。

    • 露光時間を長くすることで補正してください。

  • 絞り値のばらつきによる変動を避けるため、すべての画像で同じ絞り設定を使用してください。

  • キャリブレーション対象物とロボットの両方の6つの自由度すべてを励起することにより、様々な視点からキャリブレーション対象物をキャプチャしてください。

  • Follow guidelines on How to get Good Quality Data on Zivid Calibration Object.

Zivid API

  • Zivid の点群はミリメートル(mm)単位で表されます。

  • したがって、ハンドアイキャリブレーション用のロボット入力姿勢においても、並進移動にミリメートル(mm)を使用するようにしてください。

  • その結果、ハンドアイキャリブレーションの出力変換値はミリメートル(mm)単位になります。

検出

  • Zivid calibration board を使用する場合は、すべてのポーズで ArUco マーカーが見えるようにしてください。そうでない場合、チェッカーボード検出は失敗します。

  • If using multiple ArUco markers as a calibration object, not all markers need to be visible in every pose. However, failure to detect the same markers across many poses can make the rotation residual large or invalid even when translation residuals still look good. Ensure mounting hardware (screws, brackets, clamps) does not block the view of a marker from some viewing angles.

検出 API は、検出が失敗した理由に関する情報を提供します。以下に、検出ステータスを確認する方法の例を示します。

ソースへ移動

source

const auto detectionResult = Zivid::Calibration::detectCalibrationBoard(frame);

if(detectionResult.valid())
{
    std::cout << "Calibration board detected " << std::endl;
    handEyeInput.emplace_back(robotPose, detectionResult);
    currentPoseId++;
}
else
{
    std::cout << "Failed to detect calibration board. " << detectionResult.statusDescription() << std::endl;
}
ソースへ移動

source

using (var frame = camera.Capture2D3D(settings))
{
    var detectionResult = Detector.DetectCalibrationBoard(frame);

    if (detectionResult.Valid())
    {
        Console.WriteLine("Calibration board detected");
        handEyeInput.Add(new HandEyeInput(robotPose, detectionResult));
        ++currentPoseId;
    }
    else
    {
        Console.WriteLine("Failed to detect calibration board, ensure that the entire board is in the view of the camera");
    }
}
ソースへ移動

source

detection_result = zivid.calibration.detect_calibration_board(frame)

if detection_result.valid():
    print("Calibration board detected")
    hand_eye_input.append(zivid.calibration.HandEyeInput(robot_pose, detection_result))
    current_pose_id += 1
else:
    print(f"Failed to detect calibration board. {detection_result.status_description()}")

ハンドアイ設定

Eye-to-hand
  • キャリブレーション対象物はロボットのエンドエフェクタに取り付けられ、ロボットと共に移動します。

  • 取り付けはフランジに直接固定することも、グリッパーで保持することもできます。

  • 正確な取り付け位置は重要ではありません(エンドエフェクタに対する位置関係を知る必要はありません)。

推奨事項:

  • ロボットの動作中に、キャリブレーション対象物がフランジやグリッパーに対して相対的に動かないようにしてください。

  • ブラケットやキャリブレーション対象物には剛性のある材料を使用してください(例: Zivid On-Arm Mount を使用して Zivid calibration board をロボットに取り付けます)。

  • 振動や位置ずれを防ぐため、加速度を制御してロボットのスムーズな動作を確保してください。

  • 画像取得中は、キャリブレーション対象物が静止していることを確認してください(例:ロボットが動いた後、振動が収まるまで数秒待ってからキャプチャするなど)。

Eye-in-hand
  • キャリブレーション対象物は、ロボットの作業空間内に静止しています。

  • 対象物の正確な位置は重要ではありません(ロボットのベースに対する対象物の姿勢を知る必要はありません)。

  • (エンドエフェクタに取り付けられた)カメラは、キャリブレーション対象物を複数の視点から捉えることができなければなりません。

推奨事項:

  • キャリブレーション対象物がしっかりと固定され、キャリブレーション中は動かないようにしてください(例: Zivid Stationary Mount または Zivid Stationary Quick Mount を使用して Zivid calibration board を作業台に取り付けます)。

  • キャリブレーション中は、カメラがしっかりと固定されていることを確認してください(例: Zivid On-Arm Mount を使用する)。

環境条件

キャリブレーション中はカメラの温度を安定させてください:

  • 温度変化による性能変動を最小限に抑えるため、 Thermal Stabilization が有効になっていることを確認してください。

  • 開始する前に ウォームアップ 手順を実行してください。

  • キャリブレーション条件は、想定される動作条件とほぼ同じに保ってください。

正確度と再キャリブレーション

ピッキングの正確度は以下に依存します:

  • カメラキャリブレーション

  • ハンドアイキャリブレーション

  • マシンビジョンソフトウェア

  • ロボットの位置決め

ロボットは再現性は高いものの、温度、関節摩擦、ペイロード、製造公差などの要因により、本質的に正確ではありません。

推奨事項:

  • ロボットに各関節の正確なゼロ位置を学習させるために、マスタリング(ゼロ設定)を実行してください。

  • ロボットの姿勢精度を向上させるために、キャリブレーションを行ってください。

  • ハンドアイキャリブレーションの前に Infield Correction を実行し、 ウォームアップ の後に実行してください。

  • 以下の場合は、ハンドアイキャリブレーションを繰り返してください:

    • ロボットのキャリブレーションが失われた場合。

    • カメラを取り外し、再度取り付けた場合。

  • システム性能を維持するために、定期的に再キャリブレーション(ロボットおよび/またはハンドアイ)を実施してください。

正しい方法の選択

  • ハンドアイキャリブレーション中に カメラ内部パラメータ を計算または必要とする方法は避けてください:

    • Zivid のカメラは、独自の複雑なモデルを用いて既にキャリブレーション済みです。

    • Zivid SDK は OpenCV および Halcon モデルの近似値を提供しますが、これらは(独自モデルとは異なり)正確度が低下します。

推奨事項:

  • 外部パラメータ計算に3D点群データを活用する Zivid ハンドアイキャリブレーションを使用してください。

  • CAD マッチングに基づく代替手法も有効です(これらも点群からカメラの外部パラメータを計算します)。ただし、 Zivid 固有の最適化が欠けている可能性があります。

  • Zivid 方式のその他の利点としては、ロボットセル内(アームマウントカメラ)またはロボット本体(固定マウントカメラ)に常時設置可能な ArUco マーカーをサポートしている点が挙げられます。

詳細な説明

サードパーティ製のハンドアイキャリブレーション手法の中には、カメラの内部パラメータと外部パラメータ、そしてカメラとロボットフレーム間の相対姿勢を計算するものがあります。しかし、これらの手法は Zivid カメラを適切にキャリブレーションされた3Dカメラとしてではなく、キャリブレーションされていない2Dカメラとして扱うため、推奨しません。

各 Zivid カメラユニットは、2D カラーカメラの内部パラメータの決定を含む広範なキャリブレーションプロセスを経ます。私たちのキャリブレーションでは、OpenCV カメラモデルなどのよく知られたピンホールカメラモデルよりも多くの内部パラメータを持つ複雑なカメラモデルを使用します。 Zivid カメラモデルは独自仕様であるため、内部カメラパラメータは SDK では利用できません。ただし、 Zivid SDK はカメラモデルから OpenCV および Halcon モデルの近似値を提供します( カメラ内部パラメータ を参照)。近似では情報が失われるため、 OpenCV または Halcon の内部パラメータを利用したハンドアイキャリブレーション方法を使用することも最良のアプローチではありません。

Zivid カメラは3Dデータを提供するため、点群からカメラの外部パラメータを計算することができます。 Zivid ハンドアイキャリブレーション方法はこの利点を活用しているため、これが推奨されるアプローチであり、当社のカメラに最も適した方法です。点群からカメラの外部パラメータを計算する可能性を利用する、 Zivid 以外の代替方法もあります。これらの方法は純粋に点群データに依存しており、その例としては CAD マッチングに基づくハンドアイキャリブレーションがあります。

Zivid ハンドアイキャリブレーションを使用するもう一つの理由は、 ArUco マーカーに対応していることです。 ArUco マーカーは比較的小型なので、ロボットセル内に常時設置できます。特に、ロボットフランジとグリッパーの間に設置できるため、固定マウントカメラ(アイ・トゥ・ハンド)に便利です。一方、ロボット搭載型カメラ(アイ・イン・ハンド)の場合は、マーカーをロボットの作業空間内のどこかに常時設置できます。

ハンドアイキャリブレーションを正常に実行できたことと思います。結果の正確度を確認するには、 ハンドアイキャリブレーションの検証方法 を参照してください。

バージョン履歴

SDK

変更点

2.15.0

検出が失敗した理由に関する情報が、検出 API に追加されました。