Kalibrツールの学習--CameraとIMUの共同標定プロセス
8598 ワード
前節では、kalibrツールでcameraを標定する操作の流れを紹介し、cameraが標定された後、cameraとIMUを組み合わせて標定する操作の学習を行い、すなわちカメラとIMU間の変換関係(座標系間の相対姿勢行列)を求める.まずカメラの内外パラメータ(単目的内外パラメータと両目の内外パラメータ)を知る必要があり、kalibrツールで単目標定または両目標定の前節で紹介した.ここでは両目+IMUを例にカメラとIMUの連合標定を紹介し、マルチセンサ融合とも呼ばれる.
一、camera-IMUカメラ標定紹介
参照リンク:https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration(一)標定された出力ファイルは、1.画像とIMUデータを含むbagパケット;(cam_imu.bagファイル):カメラ画像とIMUデータを収集する2.カメラパラメータファイル;(camchain.yamlファイル):カメラの内部パラメータと歪みパラメータを含むYAMLファイル(カメラの内部パラメータと外部パラメータのキャリブレーションとカメラに対するIMUの空間と時間キャリブレーションパラメータを含む)3.IMUパラメータファイル;(imu.yamlファイル):IMUの基本パラメータ、ノイズなどを含む4.ボードパラメータ;(target.yamlファイル):ボード規格 (二)上記のファイルが準備されている場合、コマンドライン: を実行する.
データは収集中に開始と終了にイライラと励起が存在するため、5〜45秒のデータしか使用されない.(3)出力結果:report-imucam-%BAGNAME.pdf: Report in PDF format. Contains all plots for documentation. results-imucam-%BAGNAME%.txt: Result summary as a text file. camchain-imucam-%BAGNAME%.yaml:このファイルは入力ファイルcamchainです.yamlに基づいて,標定後のcam-imu情報の結果ファイルを追加した.私たちが欲しいT_cam_imu行列はここにあります.
二、標定データ作成過程
1.データ収集:データ収集の過程は標定を必要とする設備を手に持って、同時にcameraとimuデバイスを活性化してそれぞれ画像とimuデータを収集して、予め作成した標定板に対して、画像とIMUのデータは、(異なる角度、回転と平行移動、標定板の写真撮影、IMUのaccelとgyroの2つのデバイスの3つの軸がアクティブになるように)十分に励起された場合に、同時に保存される.収集されたデータは以下のように(両目+IMU):(単一の目的であればcam 0とimu 0.csvだけを保持すればよい.)
imu0.csvはテキストファイルであり、IMUのデータであり、各行はgyroとaccelのある時点での読み取りであり、以下に示す:19ビットタイムスタンプ(nsまで正確)、角速度、重力を含む加速度
2.制作Bagパッケージ:連続時間で取得した撮影パネルの画像とIMUのデータファイル(上記:cam 0、cam 1、imu 0.csv)をkalibrツールで変換します.kalibrのすべてのアプリケーションがROSパッケージを画像とIMUのデータのソースとして使用しているためです.bagファイル作成の参考:https://github.com/ethz-asl/kalibr/wiki/bag-format;コマンドライン(ROSパッケージの作成):kalibr_bagcreater --folder dataset-dir/. --output-bag awsome.bag dataset-dir/. は、データ入力パスです.内部ファイル構造は、dataset-dir/cam 0/image_raw dataset-dir/cam1/image_raw dataset-dir/imu0 awsome.bagは作成したbagファイルです.出力のデフォルトはkalibr_bagcreater同ディレクトリの下.注意:a.画像を含むフォルダの同じディレクトリの下にoutput空白フォルダが必要です.そうでない場合.bagファイルはb.生成を生成できない.bagファイル使用:rosbag info XX.bagは生成に成功したか否かを判定し、4 kbのみでは生成に失敗するが、一般的には経路問題c.calibは単目+imuを標定することができ、bag内に単目画像のみを配置し、パラメータ付き運転中のパラメータを修正すればよい.
3.カメラパラメータファイル:camchain.yaml camchain.yamlファイルテンプレート:
camchain.yamlファイルの内容説明:
4.IMUパラメータファイル:imu.yaml imu.yamlファイルテンプレート:(このファイルを作成するにはimuのマニュアルが必要です.)
5.ボードファイル:target.yaml Kalibrは、Aprilgrid、Checkerboard、Circlegridの3つの標定ボードをサポートしています.パラメータは比較的簡単です:参照https://github.com/ethz-asl/kalibr/wiki/calibration-targets target.yamlファイルテンプレート:1)aprilボードについて.yamlファイルのフォーマットは次のとおりです.
2)checkboardボードについて.yamlファイルのフォーマットは次のとおりです.
3)circleボードの場合.yamlファイルのフォーマットは次のとおりです.
三、Camera-IMU連合標定DEMO:
公式サイトDownloadsからデータセットIMU-camera calibrationをダウンロードします.ダウンロード内容:4ファイルapril_6x6.yaml標定板パラメータcamchain.yamlカメラ標定パラメータimu_adis16448.yaml IMU標定パラメータdynamic.bag撮影内容cdからbagがあるディレクトリの下でkalibr_を使用bagextractor復号dynamic.bag解凍コマンド:
結果:cam 0,cam 1,imu 0.csvは、上記3つのファイルを用いる作成する.bagファイル:
標定プログラムを実行します.
実行後:report-imucam-dynamic.pdf results-imucam-dynamic.txtは:1を含む.カメラの再投影誤差、IMUの誤差(加速度とジャイロ)は、先行誤差としてデータ融合の重み問題に影響を与えることができる2.カメラとIMUそれぞれの標定パラメータ、2つの.yamlファイルが与える3.IMUとカメラ間の相対姿勢標定(正逆回転マトリクス)cam 1 to imu 0もある
標定コマンドラインを使用して、標定のプレゼンテーションを完了します.
参考ブログ:https://blog.csdn.net/wwchen61/article/details/78013962 https://blog.csdn.net/heyijia0327/article/details/83583360 https://blog.csdn.net/zhubaohua_bupt/article/details/80222321 https://blog.csdn.net/w492751512/article/details/81218618 https://blog.csdn.net/xinmei4275/article/details/84998506 http://www.mamicode.com/info-detail-1719627.html
一、camera-IMUカメラ標定紹介
参照リンク:https://github.com/ethz-asl/kalibr/wiki/camera-imu-calibration
kalibr_calibrate_imu_camera –target xx/target.yaml –cam xx/camchain.yaml –imu xx/IMU.yaml –bag xx/xx.bag –bag-from-to 5 45
データは収集中に開始と終了にイライラと励起が存在するため、5〜45秒のデータしか使用されない.
二、標定データ作成過程
1.データ収集:データ収集の過程は標定を必要とする設備を手に持って、同時にcameraとimuデバイスを活性化してそれぞれ画像とimuデータを収集して、予め作成した標定板に対して、画像とIMUのデータは、(異なる角度、回転と平行移動、標定板の写真撮影、IMUのaccelとgyroの2つのデバイスの3つの軸がアクティブになるように)十分に励起された場合に、同時に保存される.収集されたデータは以下のように(両目+IMU):(単一の目的であればcam 0とimu 0.csvだけを保持すればよい.)
+-- dataset-dir
+-- cam0
│ +-- 1385030208726607500.png
│ +-- ...
│ -- 1385030212176607500.png
+-- cam1
│ +-- 1385030208726607500.png
│ +-- ...
│ -- 1385030212176607500.png
-- imu0.csv
imu0.csvはテキストファイルであり、IMUのデータであり、各行はgyroとaccelのある時点での読み取りであり、以下に示す:19ビットタイムスタンプ(nsまで正確)、角速度、重力を含む加速度
(timestamps=[ns], omega=[rad/s], alpha=[m/s^2])
timestamp,omega_x,omega_y,omega_z,alpha_x,alpha_y,alpha_z
1385030208736607488,0.5,-0.2,-0.1,8.1,-1.9,-3.3
...
1386030208736607488,0.5,-0.1,-0.1,8.1,-1.9,-3.3
2.制作Bagパッケージ:連続時間で取得した撮影パネルの画像とIMUのデータファイル(上記:cam 0、cam 1、imu 0.csv)をkalibrツールで変換します.kalibrのすべてのアプリケーションがROSパッケージを画像とIMUのデータのソースとして使用しているためです.bagファイル作成の参考:https://github.com/ethz-asl/kalibr/wiki/bag-format;コマンドライン(ROSパッケージの作成):kalibr_bagcreater --folder dataset-dir/. --output-bag awsome.bag dataset-dir/. は、データ入力パスです.内部ファイル構造は、dataset-dir/cam 0/image_raw dataset-dir/cam1/image_raw dataset-dir/imu0 awsome.bagは作成したbagファイルです.出力のデフォルトはkalibr_bagcreater同ディレクトリの下.注意:a.画像を含むフォルダの同じディレクトリの下にoutput空白フォルダが必要です.そうでない場合.bagファイルはb.生成を生成できない.bagファイル使用:rosbag info XX.bagは生成に成功したか否かを判定し、4 kbのみでは生成に失敗するが、一般的には経路問題c.calibは単目+imuを標定することができ、bag内に単目画像のみを配置し、パラメータ付き運転中のパラメータを修正すればよい.
3.カメラパラメータファイル:camchain.yaml camchain.yamlファイルテンプレート:
cam0:
camera_model: pinhole
intrinsics: [461.629, 460.152, 362.680, 246.049]
distortion_model: radtan
distortion_coeffs: [-0.27695497, 0.06712482, 0.00087538, 0.00011556]
T_cam_imu:
- [0.01779318, 0.99967549,-0.01822936, 0.07008565]
- [-0.9998017, 0.01795239, 0.00860714,-0.01771023]
- [0.00893160, 0.01807260, 0.99979678, 0.00399246]
- [0.0, 0.0, 0.0, 1.0]
timeshift_cam_imu: -8.121e-05
rostopic: /cam0/image_raw
resolution: [752, 480]
cam1:
camera_model: omni
intrinsics: [0.80065662, 833.006, 830.345, 373.850, 253.749]
distortion_model: radtan
distortion_coeffs: [-0.33518750, 0.13211436, 0.00055967, 0.00057686]
T_cn_cnm1:
- [ 0.99998854, 0.00216014, 0.00427195,-0.11003785]
- [-0.00221074, 0.99992702, 0.01187697, 0.00045792]
- [-0.00424598,-0.01188627, 0.99992034,-0.00064487]
- [0.0, 0.0, 0.0, 1.0]
T_cam_imu:
- [ 0.01567142, 0.99978002,-0.01393948,-0.03997419]
- [-0.99966203, 0.01595569, 0.02052137,-0.01735854]
- [ 0.02073927, 0.01361317, 0.99969223, 0.00326019]
- [0.0, 0.0, 0.0, 1.0]
timeshift_cam_imu: -8.681e-05
rostopic: /cam1/image_raw
resolution: [752, 480]
camchain.yamlファイルの内容説明:
CAMERA_MODEL
camera_model(pinhole / omni)( 、 )
intrinsics
。 :
pinhole:[fu fv pu pv]
omni:[xi fu fv pu pv]
ds:[xi alpha fu fv pu pv]
eucm:[alpha beta fu fv pu pv]
distortion_model
distortion_model(radtan /equidistant)
distortion_coeffs
T_cn_cnm1
,
( cam1:T_cn_cnm1 = T_c1_c0, cam0 cam1 )
T_cam_imu
IMU extrinsics: IMU (T_c_i)
timeshift_cam_imu
IMU , (t_imu = t_cam + shift)
rostopic
resolution
[width,height]
4.IMUパラメータファイル:imu.yaml imu.yamlファイルテンプレート:(このファイルを作成するにはimuのマニュアルが必要です.)
#Accelerometers
accelerometer_noise_density: 1.86e-03 #Noise density (continuous-time)
accelerometer_random_walk: 4.33e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 1.87e-04 #Noise density (continuous-time)
gyroscope_random_walk: 2.66e-05 #Bias random walk
rostopic: /imu0 #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
5.ボードファイル:target.yaml Kalibrは、Aprilgrid、Checkerboard、Circlegridの3つの標定ボードをサポートしています.パラメータは比較的簡単です:参照https://github.com/ethz-asl/kalibr/wiki/calibration-targets target.yamlファイルテンプレート:1)aprilボードについて.yamlファイルのフォーマットは次のとおりです.
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.088 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize, example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25
2)checkboardボードについて.yamlファイルのフォーマットは次のとおりです.
target_type: 'checkerboard' #gridtype
targetCols: 6 #number of internal chessboard corners
targetRows: 7 #number of internal chessboard corners
rowSpacingMeters: 0.06 #size of one chessboard square [m]
colSpacingMeters: 0.06 #size of one chessboard square [m]
3)circleボードの場合.yamlファイルのフォーマットは次のとおりです.
target_type: 'circlegrid' #gridtype
targetCols: 6 #number of circles (cols)
targetRows: 7 #number of circles (rows)
spacingMeters: 0.02 #distance between circles [m]
asymmetricGrid: False #use asymmetric grid (opencv) [bool]
三、Camera-IMU連合標定DEMO:
公式サイトDownloadsからデータセットIMU-camera calibrationをダウンロードします.ダウンロード内容:4ファイルapril_6x6.yaml標定板パラメータcamchain.yamlカメラ標定パラメータimu_adis16448.yaml IMU標定パラメータdynamic.bag撮影内容cdからbagがあるディレクトリの下でkalibr_を使用bagextractor復号dynamic.bag解凍コマンド:
extractor --image-topics /cam0/image_raw /cam1/image_raw --imu-topics /imu0 --output-folder dataset-dir --bag dynamic.bag
結果:cam 0,cam 1,imu 0.csvは、上記3つのファイルを用いる作成する.bagファイル:
source /home/wcd/app/kalibr/devel/setup.bash
kalibr_bagcreater --folder dataset-dir/. --output-bag awsome.bag
標定プログラムを実行します.
kalibr_calibrate_imu_camera --target april_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag dynamic.bag --bag-from-to 5 45
実行後:report-imucam-dynamic.pdf results-imucam-dynamic.txtは:1を含む.カメラの再投影誤差、IMUの誤差(加速度とジャイロ)は、先行誤差としてデータ融合の重み問題に影響を与えることができる2.カメラとIMUそれぞれの標定パラメータ、2つの.yamlファイルが与える3.IMUとカメラ間の相対姿勢標定(正逆回転マトリクス)cam 1 to imu 0もある
T_ci: (imu0 to cam0):
[[ 0.01680206 0.99985864 -0.00062288 0.06847911]
[-0.99985871 0.01680236 0.00048881 -0.01472898]
[ 0.00049921 0.00061458 0.99999969 -0.00376988]
[ 0. 0. 0. 1. ]]
T_ic: (cam0 to imu0):
[[ 0.01680206 -0.99985871 0.00049921 -0.0158756 ]
[ 0.99985864 0.01680236 0.00061458 -0.06821963]
[-0.00062288 0.00048881 0.99999969 0.00381973]
[ 0. 0. 0. 1. ]]
( baseline):
Baseline (cam0 to cam1):
[[ 0.99999877 0.00118911 -0.00102243 -0.1101676 ]
[-0.00118838 0.99999904 0.00071255 -0.00032166]
[ 0.00102327 -0.00071134 0.99999922 0.00012079]
[ 0. 0. 0. 1. ]]
baseline norm: 0.110168134052 [m]
標定コマンドラインを使用して、標定のプレゼンテーションを完了します.
kalibr_calibrate_imu_camera –target xx/target.yaml –cam xx/camchain.yaml –imu xx/IMU.yaml –bag xx/xx.bag –bag-from-to 5 45
参考ブログ:https://blog.csdn.net/wwchen61/article/details/78013962 https://blog.csdn.net/heyijia0327/article/details/83583360 https://blog.csdn.net/zhubaohua_bupt/article/details/80222321 https://blog.csdn.net/w492751512/article/details/81218618 https://blog.csdn.net/xinmei4275/article/details/84998506 http://www.mamicode.com/info-detail-1719627.html