cam_lidar_calibration のインストールと使用について (2021)
1. はじめに
LIDAR とカメラのキャリブレーション用の多くのオープン ソース プログラムの中で、cam_lidar_calibration は比較的うまく機能します。残りのオープン ソース プログラムは、キャリブレーション プロセスが複雑であるか、エラーが多すぎます。オープン ソース パッケージはいくつかの改訂を受けています。以下は、cam_lidar_calibration シリーズのオープンソース アルゴリズムです。
時間 | 対応用紙 | アルゴリズム解析 | オープンソースアルゴリズムのアドレス |
---|---|---|---|
2019 (最もオリジナルなバージョン) | 3D 点と平面の対応を使用したカメラと 3D Lidar 間の自動外部キャリブレーション | チェッカーボードをターゲットとして使用し、キャリブレーション ボードの幾何学的形状を使用して、LIDAR 点群内の正中点と法線ベクトルを計算し、カメラの下でその正中点と法線ベクトルを取得し、最適化後にキャリブレーションを完了します。 | https://gitlab.acfr.usyd.edu.au/sverma/cam_lidar_calibration |
2020年 | 同上 | 上記と同じ (2019 年のコードに従って少し修正が加えられましたが、ドキュメントは CSDN で支払う必要があります) | https://github.com/AbangLZU/cam_lidar_calibration |
2021年 | 堅牢なLIDAR カメラのキャリブレーションのためのサンプルの選択を最適化する |
これはシドニー大学の ACFR 研究室でもあり、2019 年の改良版に基づいており、品質変動 (VOQ) を採用してユーザー選択データの誤差を削減し、過剰適合の問題を克服し、2019 年版の校正プロセスよりも堅牢になっています。 | https://github.com/acfr/cam_lidar_calibration |
2. コードのインストールテスト
公式ドキュメントは非常に詳細に記載されており、ローカル インストールと Docker のインストールについて説明しています。
ローカルの Ubuntu20.04 インストールのみがテストされます。ローカル インストールを例に挙げます。
Github上のコードの作者はUbuntu18.04であり、一部のコードやコマンドは公式サイトの方法に従って修正する必要があります。インストール手順は次のとおりです。
-
依存関係をインストールする
sudo apt update && sudo apt-get install -y ros-noetic-pcl-conversions ros-noetic-pcl-ros ros-noetic-tf2-sensor-msgs # Ubuntu20.04默认为python3 sudo apt install python3-pip pip3 install pandas scipy
-
コードをダウンロードしてコンパイルしてインストールする
mkdir -p cam_lidar_calibration_ws/src cd cam_lidar_calibration_ws/src git clone https://github.com/acfr/cam_lidar_calibration.git cd .. catkin build source devel/setup.bash
コンパイル時に optimize.h に関するエラーが発生した場合 #include <opencv/cv.hpp> が存在しない場合は、これを #include <opencv2/opencv.hpp> に変更します。
-
テスト: ソース コードで、作成者はテスト用のキャリブレーション データ セットを作成し、テスト キャリブレーションを実行するコマンドを入力する必要があります。
roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=true
プログラムは、am_lidar_calibration_ws/src/cam_lidar_calibration/data/vlp/ フォルダー内のポーズ.csv に従ってキャリブレーションされ、このフォルダー内にキャリブレーション カメラと LIDAR の外部パラメーター ファイルを生成します。各行は反復の結果です。
その後、評価校正結果を取得します
roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_quickstart.csv" visualise:=true
-
実行して、自分のカメラと LIDAR の外部パラメータを調整します。
-
キャリブレーション ボードを作成します。キャリブレーション ボードはできるだけ大きくする必要があります。キャリブレーション ファイル PDF ダウンロード、設定されたサイズで、著者はA1 - 95 mm 正方形 - 7x5 頂点、8x6 正方形を使用しました。市松模様の紙の中心ができる限り一致し、辺が平行になるようにボードに固定します(後でパラメータを設定する必要があります)。下の写真はA1サイズ7*5内頂点、95mm角です。
-
設定パラメータの大幅な変更
cam_lidar_calibration/cfg/camera_info.yaml
とparams.yaml
-
camera_info.yaml
: 魚眼カメラかどうか、ピクセルの幅と高さ、内部参照マトリックス、歪み係数を設定します。カメラパラメータのセルフキャリブレーション、ROS公式キャリブレーションチュートリアルdistortion_model: "non-fisheye" width: 640 height: 480 D: [0,0,0,0] K: [617.68,0.0,325.963,0.0,617.875,242.513,0.0,0.0,1]
-
params.yaml
# Topics camera_topic: "/camera/color/image_raw" camera_info: "/camera/color/camera_info" lidar_topic: "/velodyne_points" #Dynamic rqt_reconfigure default bounds,点云的选取范围 feature_extraction: x_min: -10.0 x_max: 10.0 y_min: -8.0 y_max: 8.0 z_min: -5.0 z_max: 5.0 # Properties of chessboard calibration target chessboard: pattern_size: #棋盘的内部顶点7*5 height: 7 width: 5 square_length: 95 #棋盘格的长度mm board_dimension: # 安装棋盘打印的背板的宽度和高度。 width: 594 height: 897 translation_error: #棋盘中心与背板中心的偏移量(见下图)。 x: 0 y: 0
チェス盤の中心とバックプレーンの中心の間のオフセット
-
-
キャリブレーションを正式に開始します。
-
プログラムを起動してテーブル データを収集し、コマンドを実行します。
roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false
RVIZ および rqt_reconfigure ウィンドウが表示されます。RVIZ では、パネル -> 表示により、カメラのトピックと LIDAR 点群に対応するフレーム ID が変更されます。
-
データ収集:キャリブレーションボードの点群を分割する
rqt_reconfigure/feature_extractionのxyzの最大値と最小値を調整してキャリブレーションボードの点群を周囲の環境から切り離し、チェス盤だけが表示されるようにします。チェッカーボードが完全に分離されていない場合、チェッカーボードの平面フィッティングに影響を与え、チェッカーボードのサイズに大きな誤差が生じる可能性があります。以下の図は、点群をフィルタリングする前後の効果を示しています。
周囲の環境点群をフィルタリングした後、[サンプルをキャプチャ] をクリックして rviz でサンプルを収集すると、図に示すように、点群に従ってフィッティングされたキャリブレーション プレート平面を表す緑色のボックスが表示されます。緑色のフィットした四角形が表示されない場合は、点群の XYZ 範囲を再調整し、キャプチャ サンプルを実行してサンプルを収集する必要があります
。レーザー点群を校正ボードに印刷するには、少なくとも 7 つのリングが必要です。 -
キャリブレーション:
キャリブレーションを実行するには、少なくとも 3 つのサンプルを収集します。サンプルが多いほど良いため、10 個以上のサンプルを収集し、rviz で [最適化] をクリックしてキャリブレーションします。最適化プロセス中に、現在の時刻と日付のフォルダーが cam_lidar_calibration/data に生成され、キャリブレーション後に収集された画像、点群 pcd、ポーズ、およびカメラと LIDAR の外部参照ファイルが保存されます。 -
パラメータと再投影誤差を評価します。
roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/2022-02-10_13-48-12/calibration_2022-02-10_14-13-41.csv" visualise:=true
再投影効果の画像が表示されます。
キャリブレーション パラメータと再投影エラーが端末に表示されます。---- Calculating average reprojection error on 12 samples ---- 1/ 12 | dist= 4.069m, dimerr= 39.768mm | error: 2.948pix --> 20.033mm 2/ 12 | dist= 3.759m, dimerr= 43.992mm | error: 2.358pix --> 14.689mm 3/ 12 | dist= 3.038m, dimerr= 61.650mm | error: 0.240pix --> 1.213mm 4/ 12 | dist= 2.951m, dimerr= 52.597mm | error: 0.129pix --> 0.628mm 5/ 12 | dist= 2.913m, dimerr= 120.838mm | error: 0.782pix --> 3.798mm 6/ 12 | dist= 2.665m, dimerr= 76.147mm | error: 3.219pix --> 14.106mm 7/ 12 | dist= 2.482m, dimerr= 69.678mm | error: 2.728pix --> 11.332mm 8/ 12 | dist= 2.307m, dimerr= 36.923mm | error: 2.659pix --> 10.284mm 9/ 12 | dist= 2.118m, dimerr= 110.454mm | error: 6.066pix --> 21.332mm 10/ 12 | dist= 2.504m, dimerr= 66.145mm | error: 1.402pix --> 5.853mm 11/ 12 | dist= 2.845m, dimerr= 11.296mm | error: 1.408pix --> 6.616mm 12/ 12 | dist= 2.828m, dimerr= 98.653mm | error: 0.719pix --> 3.536mm Calibration params (roll,pitch,yaw,x,y,z): -1.5416,-0.0047,-1.4423,0.0059,-0.0062,0.0149 Mean reprojection error across 12 samples - Error (pix) = 2.055 pix, stdev = 1.663 - Error (mm) = 9.452 mm , stdev = 7.007
-
-
上記のコードに基づいて、少し変更しました。これにより、LIDAR カメラのジョイント キャリブレーションがより正確になりますhttps://github.com/Xjianhong123Allen/sensor_calibration/tree/master/cam_lidar_calibration