オブジェクトベースのキャリブレーションに関するガイドライン
Easy3Dキャリブレーションは、キャリブレーションオブジェクトをシングルスキャンすることで、レーザー三角測量設定をキャリブレーションします。
1. | キャリブレーションプロセスでは、キャリブレーションモデルを生成します。 |
2. | Easy3Dはこのキャリブレーションモデルを使用して、レーザープロファイルスキャン(または深度マップ)をメートル法で歪みのない点群に変換します。 |
● | キャリブレーションモデルには、この変換に必要なすべての幾何学的パラメータが含まれています。 |
□ | レーザーとカメラの相対位置。 |
□ | カメラの射影と歪みモデル。 |
□ | オブジェクトの相対運動 |
本ガイドラインでは、キャリブレーションオブジェクトの設計からOpen eVisionAPIまで、キャリブレーションプロセスに含まれるすべての手順について説明します。
キャリブレーションオブジェクト
Easy3Dキャリブレーションの基本原理は、既知のキャリブレーションオブジェクトのスキャンをその実物の幾何学的寸法に合わせることです。
二重ピラミッド
Open eVision2.7では、「二重ピラミッド」モデルよりも「二重切頭ピラミッド」のキャリブレーションオブジェクトが推奨されています。
X、Y、Z軸に沿った「二重ピラミッド」キャリブレーションオブジェクトの寸法は、それぞれA、B、Cです。
「二重ピラミッド」キャリブレーションモデル
二重切頭ピラミッド
● | X、Y、Z軸の「二重切頭ピラミッド」キャリブレーションオブジェクトの寸法は、それぞれA、B、Cです。 |
● | 二重切頭ピラミッドの設計は、下の図に示されている比率に従わなければなりません。 |
「二重切頭ピラミッド」キャリブレーションモデル(推奨)
● | たとえば、提供されているキャリブレーションオブジェクトのCADファイルでは、A = 4 cm、B = 6 cm、C = 1 cmが使用されます。キャリブレーションプロセスに必要なキャリブレーションオブジェクトサイズは、値A、B、Cです。 |
A = 4、B = 6、C = 1の「二重切頭ピラミッド」キャリブレーションモデル
キャリブレーションオブジェクトを作成する
全体の寸法
● | プロジェクトの作業領域に適合するキャリブレーションオブジェクトを作成してください。 |
● | たとえば、プロジェクトがPCB(図のようにプリント基板)の検査をターゲットにしている場合は、次のようにキャリブレーションオブジェクトを設計します。 |
a. | 寸法AまたはB(問題ではありません)は、PCBの幅と同じです。 |
b. | 数ミリの高さ(C)。 |
これは厳密な要件ではありませんが、スキャンされたオブジェクトがキャリブレーションオブジェクトよりわずかに大きいまたは小さい場合は、キャリブレーションプロセスは有効です。
関連するキャリブレーションオブジェクトを使用したPCBスキャン設定
キャリブレーションオブジェクトの寸法(A、B、C)は、PCBの幅と高さに一致します
スキャン中のキャリブレーションオブジェクトの向きに制限はありません。
- X軸は、動作方向またはレーザーラインと揃えることができます。
- キャリブレーションプロセスの後、3Dキャリブレーションされた点群の原点と軸は、レファレンスデザインの規則に従います。
原点と座標系の軸を持つキャリブレーション点群
3Dの原点は、より高いピラミッドの外側の角にあります。
精度と公差
キャリブレーションオブジェクトの適切な寸法は、ピラミッドの幅、長さ、および高さです(図ではA、B、およびCと呼ばれます)。
□ | A、B、Cの相対寸法(B/2、A/4…)は重要であり、それらを同じ精度で実行する必要があります。 |
□ | 寸法公差は全体的な予想精度に関係します。 |
点群を0.01 mmの精度で測定したい場合は、キャリブレーションオブジェクトの作成も同じ精度でなければなりません。
□ | これらの公差はピラミッド型の形状にのみ適用され、キャリブレーションプロセスではサポートの寸法は使用されません。 |
□ | 図示されているように、平面は目標公差によって分離された2つの平行な平面間で平坦でなければなりません。 |
ピラミッドの辺の公差は、表面全体を含む2つの平行な平面間の最小距離として定義されます。
材料および表面仕上げ
目標は、最大の反射エネルギーで、物体表面全体で、できるだけ薄いレーザープロファイルを取得することです。
造形材料と表面仕上げも重要であり、以下を持っている必要があります。
□ | 拡散反射を伴う良好な反射率(鏡面反射なし)。 |
□ | 材料内部での透過性と拡散の制限なし |
アルミ材とブラスト加工を使用して、良好に表面を仕上げられます。ブラスト加工により、表面がサテングレーに仕上がります。
マイクロブラストによる表面処理を施した2つのアルミ削り出しキャリブレーションオブジェクト
3D CADモデル
キャリブレーションオブジェクトモデルは、STEP、OBJ、STLなどのさまざまな3D CAD形式で利用できます。
これらのファイルは、追加リソースセクション(www.euresys.com/Support)のOpen eVisionダウンロードエリアからダウンロードしてください。
キャリブレーションオブジェクトモデルをダウンロードします
キャリブレーションオブジェクトをスキャンします
● | キャリブレーションオブジェクトスキャンによって深度マップが生成します。 |
● | キャリブレーションオブジェクトと正確なキャリブレーションモデルを正しく検出するためには、次の基準を満たす必要があります。 |
□ | キャリブレーションオブジェクトのすべての面が深度マップに表示されている必要があります(これはカメラとレーザーの両方の向きに影響します)。 |
□ | 他のオブジェクトは深度マップのキャリブレーションオブジェクトよりも高くなることはできません。 |
□ | 深度マップは少なくとも200 x 200ピクセルでなければなりません。 |
□ | キャリブレーションオブジェクトは深度マップで定義されたピクセルの少なくとも50%を含む必要があります。 |
● | 悪いスキャンの例: |
側面のピクセルが欠けている
行数の不足
キャリブレーションオブジェクトが深度マップ上で小さすぎる
Easy3D Studioによるキャリブレーション
Easy3D Studio はユーザーがレーザー三角測量スキャナーをセットアップするのをサポートする無料のアプリケーションです。Coaxlink Quad 3D LLEフレームグラバーの取得パラメータを簡単に設定してキャリブレーションを実行できます。
深度マップパネル
このパネルが表示されます。
□ | スキャンした画像 |
□ | 右側の取得パラメータ。 |
点群パネル
このパネルが表示されます。
□ | スキャンした画像の深度マップ。 |
□ | 右側にあるオブジェクトベースのキャリブレーションパラメータ。 |
□ | キャリブレーションボタンは、最後にスキャンされた深度マップを使ってキャリブレーションモデルを計算します。 |
□ | キャリブレーションモデルの準備が整うと、深度マップは点群に変換されます。 |
□ | 後で使用するためにキャリブレーションモデルをエクスポートできます。 |
必要なパラメータ
キャリブレーションオブジェクトに基づくキャリブレーションには、いくつかのパラメータが必要です。
● | オブジェクト型を二重ピラミッドまたは二重切頭ピラミッドとして設定します。 |
□ | 二重ピラミッドオブジェクト型は推奨されていません。 |
● | キャリブレーションオブジェクトの実際のサイズを表すようにオブジェクトサイズを設定します。 |
□ | キャリブレーションオブジェクトの底面が20 mm x 30 mm、高さが5 mmの場合は、オブジェクトサイズA/B/Cパラメータでこれらの値を設定します。 |
□ | キャリブレーション後の点群はミリメートル単位の座標を使用します。 |
● | キャリブレーションプロセスの時間を定義するには、パラメータの精度と速度のトレードオフを設定します。 |
□ | 設定可能な3つの値は、高速、バランス、高精度です。 |
● | 反復回数パラメータを設定して、キャリブレーションモデルを精度良くするための反復回数を定義します。 |
□ | 最も速い処理には1を設定してください。 |
□ | 処理時間は遅いが、より精度の良いキャリブレーションモデルを作るには3を設定してください。 |
Open eVisionでキャリブレーションを使用する
● | EObjectBasedCalibrationModelクラスはオブジェクトベースのキャリブレーションモデルのコンテナです。 |
● | クラスEObjectBasedCalibrationGeneratorは、入力としてEDepthMap8/16/32fを使用して、このモデルの計算を実行します。 |
次のコードスニペットは、キャリブレーションモデルの計算を示しています。
// Initialize a depth map from an image of a double truncated pyramid
EDepthMap16 depth_map;
depth_map.LoadImage("ctx1 calibration object.png"); // from Easy3D sample images
depth_map.SetZResolution(1.f / (1 << 5)); // 11.5 fixed point pixel format // Initialize the calibration generator
EObjectBasedCalibrationGenerator calib_generator;
calib_generator.SetCalibrationObjectType(EObjectBasedCalibrationType_TruncatedDoublePyramid);
calib_generator.SetCalibrationObjectSize(40.f, 60.f, 10.f); // Size of the calibration object // Compute the calibration model EObjectBasedCalibrationModel calib_model;
calib_model = calib_generator.Compute(depth_map);
float error = calib_model.GetCalibrationError(); // Save the calibration model
calib_model.Save("calib.model");
次のコードスニペットは、保存したキャリブレーションモデルの使用方法を示しています。
// Load the calibration model EObjectBasedCalibrationModel calib_model; calib_model.Load("calib.model"); // Load a depth map (captured in the same context) EDepthMap16 depth_map; depth_map.LoadImage("ctx1 shapes.png"); depth_map.SetZResolution(1.f / (1 << 5)); // Initialize a converter, use the loaded model EDepthMapToPointCloudConverter converter; converter.SetCalibrationModel(calib_model); // Convert the depth map to a metric point cloud and save it EPointCloud point_cloud; converter.Convert(depth_map, point_cloud); point_cloud.SavePCD("point_cloud.pcd");
Easy3Dキャリブレーションを試用して学ぶために、3DCalibrationと呼ばれるC++サンプルがOpen eVisionディストリビューションのソースコードと共に提供されています。