簡単な手動キャリブレーションアルゴリズムは、Yuxiang ROS マスターの handeye-calib ROS 機能パッケージを使用しており、インストールから展開までの詳細な使用方法がマスターによって説明されています。
関数パッケージのキャリブレーション出力のスクリーンショット:
キャリブレーション用の関数パッケージでは、一般的に使用されるいくつかのキャリブレーション アルゴリズムが使用され、出力結果はそれぞれ平均値、分散 var、標準偏差 std として計算されます。出力結果の選択には、標準偏差 std を使用して、std が小さいほどデータが安定していることを判断できます。
標準偏差の説明 (Baidu Encyclopedia から引用):
標準偏差 (Standard Deviation) は数学用語であり、平均偏差の 2 乗からの算術平均(つまり、分散)の算術平方根であり、σ で表されます。標準偏差は、標準偏差または実験標準偏差とも呼ばれ、統計的分布の範囲の尺度として確率統計で最も一般的に使用されます。標準偏差が小さいほど、値は平均からの乖離が少なくなり、その逆も同様です。
標準偏差は、分散の算術平方根です。標準偏差は、データセットの分散の程度を反映する場合があります。同じ平均値を持つ 2 つのデータ セットは、必ずしも同じ標準偏差を持つとは限りません。
アルゴリズム関数パッケージの出力は、平行移動 [x, y, z]、回転 [Rx, Ry, Rz] を含む、base_link-->camera の座標変換です。これは、base_link 座標におけるカメラ座標系の記述を意味します。システムと回転の出力オイラー角の形式で出力されます ROS で TF を使用して Base_link-->camera を公開する場合は、オイラー角を四元数に変換する必要があります。オイラー角を四元数にするには、次を使用できますPython のtransform3d ライブラリを使用するか、次のオンライン サイトを使用して変換を行います。
3D回転コンバータ:https://www.andre-gaschler.com/rotationconverter/
キャリブレーション マトリックスを個別に使用する場合は、まずマトリックスに関する関連する概要を参照してください。
Pythonでの同次行列演算方法:
import math
import numpy as np
import transform3d as tfs
def Homogeneous_generate(x,y,z,rx,ry,rz, degrees=0):
"""
齐次矩阵生成,传入参数单位为 m, rad
"""
if degrees == 1:
rx = math.degrees(rx)
ry = math.degrees(ry)
rz = math.degrees(rz)
R = tfs.euler.euler2mat(rx, ry, rz, "sxyz") # R = Rz * Ry * Rz
print(degrees)
T = np.asarray([x, y, z])
# 合成齐次矩阵
homogeneous_matrix = tfs.affines.compose(T, R, [1,1,1])
#print("homogeneous_matrix:\n", homogeneous_matrix)
return homogeneous_matrix
if __name__ == "__main__":
# 将标定的数据带入下面的函数中,即可得到camera坐标系到base_link坐标系转换的齐次矩阵
T_C2B = Homogeneous_generate( 0.104953, -0.38583, 0.525413, 0.0146642, -0.847495, -1.20245)
カメラによって認識されたポーズをロボット アーム本体の Base_link の下の変換メソッドに変換するには、次の例を示します。
なぜこのように行列が乗算されるのかわからない場合は、オブジェクトの変換と同様に、変換関係を右から左に順番に列挙できます (これが最初に混乱したところです)。ここでの行列の乗算は左乗算を使用します。