轉(zhuǎn)載:https://news.qq.com/rain/a/20241231A01Q3000
下文主要梳理相機與激光雷達之間的標定。
1 什么叫標定
在自動駕駛領(lǐng)域的標定分為兩個部分,一個是傳感器內(nèi)部的映射關(guān)系,另外一個是各個傳感器之間的位姿關(guān)系,標定技術(shù)是多傳感器融合的基礎(chǔ)技術(shù)。
車載傳感器主要有激光雷達、環(huán)視相機、廣角相機、毫米波雷達、超聲波雷達、IMU、GNSS、GPS等等。激光雷達輸出結(jié)果是三維點云和反映物體材質(zhì)的強度值,相機輸出圖像,毫米波雷達輸出(距離,速度,角度,反射強度),超聲波雷達輸出(3m~5m距離), IMU輸出(加速度數(shù)據(jù)、角速度數(shù)據(jù)、磁場數(shù)據(jù))。
標定按照場景分為在線標定、離線標定,售后標定、產(chǎn)線標定,研發(fā)標定、數(shù)采標定、真值標定。
按照標定方法分類:有目標、無目標
2 精度驗證
1.通過可視化進行判斷:雷達和相機的標定可以查看圖像和點云是否對齊來進行判斷雷達和雷達的標定可以通過看雷達和雷達之間的配準來進行判斷相機和相機的標定可以通過看環(huán)視拼接效果進行可視化判斷
2.通過設(shè)計驗證標準可以根據(jù)某個標定的預期效果來設(shè)計定量評估標準。例如,相機畸變標定之后的 ”直線特征”
3.通過下游算法進行評估測距算法,測距是否準確來判斷相機內(nèi)外參是否標定準確。感知算法,不同傳感器感知融合的誤差是否過大來判斷外參標定是否準確。規(guī)控算法,車輛行駛是否正常,標定參數(shù)不對導致的規(guī)控異常
4.直接測量進行判斷測量傳感器之間的位移,判斷標定的位移量和測量之間差別是否過大。
3 產(chǎn)線標定(EOL標定)
下面兩張圖是某些廠家的產(chǎn)線標定間。可以實現(xiàn)激光雷達和相機的標定。地面的標定板實現(xiàn)環(huán)視相機的標定,墻體的圖案實現(xiàn)激光雷達或者前視、周視相機標定。

標定流程與算法:首先地面的車輛擺正器可以保證每次車輛都在同樣的位置。標定間的每個圖案的角點在車體坐標系的位置都是已知的,相機內(nèi)參已知,圖案角點在圖像坐標系已知,可以采用2d-3d的求解算法(pnp)計算出相機與車體坐標系的關(guān)系。激光雷達點云可以檢測到圖案角點在激光雷達坐標系位置,該點在車體坐標系已知,利用3D-3D求解算法(ICP)可以求出激光雷達和車體的位姿關(guān)系。
3.1 標定間
下圖的標定間屬于很多自動駕駛公司的方法。

標定流程與算法:采用多組3D和2D匹配點實現(xiàn)相機與激光雷達的外參標定。通過激光雷達作為中轉(zhuǎn),實現(xiàn)所有相機之間的位姿標定,另外也可以采用相機與相機共享區(qū)域的標定板來實現(xiàn)所有相機之間的外參標定。激光雷達與激光雷達之間的標定,首先通過主雷達實現(xiàn)建圖與軌跡記錄,采用初始外參將副雷達轉(zhuǎn)換到主雷達坐標系,估算出副雷達的每個點云對應的主雷達的位置和姿態(tài),然后采用最近鄰點云配匹配,利用點云配準算法初始化外參,多次配準,獲得最后的標定結(jié)果。

在空曠房間的墻面貼滿不同的二維碼,然后在標定間中間放置一個基于激光雷達的毫米級高精度Rigel激光掃描儀,通過對墻上二維碼的多次掃描,完成3D建模,獲得了標定間任何一個點的3D位置。根據(jù)建模結(jié)果輸出一個查找表,查找表由兩欄組成,第一欄是Tag_ID,表示各個二維碼的ID編號,第二欄是二維碼四個角的3D位置信息。之后即可在標定間進行不同傳感器的參數(shù)標定。最后依然采用PNP和ICP算法實現(xiàn)相機與激光雷達之間的標定。
4 離線標定
激光雷達與相機標定常規(guī)的標定都是先標定相機內(nèi)參,然后在標定外參,但是如果相機內(nèi)參不準,那么最后的結(jié)果都會不準,所以需要聯(lián)合標定。
4.1 手動標定
opencalib 工具提供了手動標定的算法。該工具通過將激光雷達點云反投影到圖片上查看,手動按鈕可以調(diào)整相機內(nèi)參和外參。實際使用經(jīng)驗來看只能微調(diào),而且必須三個以上場景都調(diào)整對齊才可以。

4.2 基于目標物的聯(lián)合標定(target-free)
opencalib 工具箱提供兩種算法。整體思路就是,將圖像進行分割,把車道線和路燈作為正交性質(zhì)利用起來,將點云投影到分割圖像上,落在車道線和路燈上最多,則說明標定結(jié)束。實際上是一種優(yōu)化算法,暴力采用多個外參進行投影,然后選擇投影點數(shù)量最多的外參。

4.3 基于標定板的聯(lián)合標定(target)
參考論文:Joint camera intrinsic and lidar-camera extrinsic calibration

思路:校準攝像頭初始內(nèi)參和攝像頭初始外參;然后,根據(jù)這些參數(shù)和標定板尺寸計算圖像的2D圓中心點。通過提取圓心在激光雷達的位置,利用激光雷達-攝像頭的標定參數(shù)將圓心3D點投影到圖像平面上。計算的2D點和投影的2D點形成多個2D點對。用這些點對之間的歐氏距離來細化標定參數(shù)。同時,在優(yōu)化過程中加入棋盤角點的3D-2D點重投影約束條件。
4.4 采用matlab 工具箱
參考鏈接:https://ww2.mathworks.cn/help/lidar/ug/lidar-and-camera-calibration.html
4.5 主要接口函數(shù)
主要調(diào)用了matlab 底層工具箱的方法
1、獲得棋盤格在相機坐標系下面的坐標
[imageCorners3d,checkerboardDimension,dataUsed] = estimateCheckerboardCorners3d(imageFileNames,intrinsic.cameraParams,squareSize);
2、檢測獲得點云的棋盤格表面
[lidarCheckerboardPlanes,framesUsed,indices] = detectRectangularPlanePoints(ptCloudFileNames,checkerboardDimension,ROI=roi);
3、這個函數(shù)接口可以獲得相機與激光雷達的位姿
[tform,errors] = estimateLidarCameraTransform(lidarCheckerboardPlanes, imageCorners3d,intrinsic.cameraParams);
4、通過可視化進行直觀驗證
點云投影到相機projectLidarPointsOnImage 與 相機投影到點云fuseCameraToLidar 和 可視化二者helperFuseLidarCamera
5、可視化 旋轉(zhuǎn)誤差、平移誤差和反投影誤差
helperShowError(errors)
4.6 注意事項
1、點云平板面不好檢測,我這里通過手動meshlable 清理了多余的點云,提高檢測率。實際采集時候可以通過在空曠地面采集數(shù)據(jù)。
2、相機內(nèi)參標定,采用針孔相機+8畸變系數(shù)時候,應該采集足夠多的圖片才可以,而且效果不太行。
3、整個過程采用了去畸變之后的圖像實現(xiàn)。
4.7 深度學習的方法
LCCNet:LIDAR and camera Self-Calibration using Cost Volume NetWork

損失函數(shù):1、外參的回歸損失,2、點云距離損失
4.8 激光雷達與激光雷達
手動標定
opencalib 也是提供了一個工具。類似相機與激光雷達界面。自動標定
基于ICP算法。兩種約束,1、先粗匹配,2、計算法向量(例如50個點組成面的法向量)。
空間占用格,1、空間分為很多小格子; 2、統(tǒng)計點云占用格子的數(shù)量; 3、優(yōu)化得到空間占用最少的外參

深度學習方法,opencalib:https://github.com/OpenCalib/LiDAR2LiDAR
-
在線標定
在車輛行駛過程中,由于地面不平導致震動等原因,會導致傳感器位置與原位置產(chǎn)生偏離,因此有必要每隔一定的時間對傳感器進行校準。
在線標定不標定位移,用測量值和CAD值,因此,對位移加一個限制以免影響整體優(yōu)化。
4.9 相機自標定
相機自標定:在車行駛過程中,通過車自身每一幀的位姿變換,與估計的相機每一幀的位姿變換,獲取相機與車中心的位姿關(guān)系,得到相機到車中心的旋轉(zhuǎn)矩陣R,大概20分鐘。該過程實際就是手眼標定(AX=XB)。已知兩個時刻,車體與車體之間的位姿A,相機與相機之間的位姿B,求解兩個傳感器之間的姿態(tài)X。A和B的求解方法有里程計和光流法。
4.10 激光雷達自標定
激光雷達自標定:在車行駛過程中,通過車自身每一幀的位姿變換,與估計的激光雷達每一幀的位姿變換,獲取激光雷達與車中心的位姿關(guān)系。運用手眼標定法,得到激光雷達到車中心的旋轉(zhuǎn)矩陣,整個過程耗時7到15分鐘。A求解采用點云特征(邊緣點和平面點)匹配求解。
4.11 lidar2lidar與lidar2camera
離線標定里面提到的深度學習方法也是在線標定。
4.12 在線標定自檢
通過二分類網(wǎng)絡(luò)進行自檢。https://github.com/OpenCalib/LiDAR2camera_self-check

4.13 camera2car
相機中消失點是指當一個物體在物體空間里沿著一條直線移動,而這條直線在投影到相機視圖中時,其端點會被重疊在同一個點上,這個點就稱為相機中消失點
消失點標定最早定義:B. Caprile and V. Torre, “Using vanishing points for camera calibration,” International journal of computer vision, vol. 4, no. 2, pp.127–139, 1990
基于深度學習的方法:https://github.com/jwlee-vcl/CTRL-C
4.14 lidar2car
1、得到點云地面平面(ax+by+cz+d=0)->利用車垂直于地面獲得約束->yaw、pitch、roll
2、要求走直線 H. Wang, C. Wang, C.-L. Chen, and L. Xie, “F-loam: Fast lidar odometry and mapping,” in 2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2021, pp. 4390–4396
5 環(huán)視相機標定
環(huán)視相機主要用于環(huán)視拼接、障礙物檢測和車位檢測。
5.1 手動標定
opencalib也提供了手動標定的工具。可以用于最后的微調(diào)。
5.2 產(chǎn)線標定
跟上面產(chǎn)線標定提到的算法一致,車輛和棋盤格的坐標都是嚴格已知的,然后pnp算法來計算外參。
5.3 在線標定
SLAM按誤差函數(shù)的形式可以分為兩類:最小化光度誤差;最小化重投影誤差。最小化光度誤差也稱直接法,誤差函數(shù)的形式是兩個像素的灰度值相減;
最小化重投影誤差也稱特征點法,誤差函數(shù)的形式是像素的坐標值相減。
利用上述內(nèi)容獲得關(guān)鍵點(紋理點),opencalib采用的策略是隨機搜索方法。將初始外參6個參數(shù)按照設(shè)定步長進行調(diào)整,用特征點的匹配作為損失函數(shù)。
6 開源標定工具
OpenCalib和Matlab標定工具箱,用于標定相機內(nèi)參,雙目相機標定,matlab 新版本支持lidar2camera
6.1 OpenCV與Matlab
OpenCalib和Matlab標定工具箱,用于標定相機內(nèi)參,雙目相機標定,matlab 新版本支持lidar2camera
6.2 autoware
Autoware.ai 一個開源的自動駕駛系統(tǒng) lidar2camera, lidar2lidar標定 代碼鏈接: https://github.com/Autoware-AI/autoware.ai
結(jié)論:手動選擇平面, 沒法反投影,使用起來麻煩
6.3 kalibr
Kalibr 一個專門用于slam多傳感器標定的功能包,可以實現(xiàn)單目相機標定、雙目標定以及單、雙目相機系統(tǒng)與IMU的聯(lián)合標定 代碼鏈接:https://github.com/ethz-asl/kalibr
6.4Teri4Calib
深藍學院標定開源代碼
相比較opencalib方法,他們的傳感器要少很多,建議docker。
6.5 opencalib
數(shù)據(jù)集采用的是仿真數(shù)據(jù)集,只考慮理想情況,只能作為參考使用。論文要落后于代碼