功能包介紹
該功能包提供了一個手動校準Livox雷達和相機之間外參的方法,已經在Mid-40,Horizon和Tele-15上進行了驗證。
其中包含了計算相機內參,獲得標定數據,優化計算外參和雷達相機融合應用相關的代碼。
本方案中使用了標定板角點作為標定目標物,由于Livox雷達非重復性掃描的特點,點云的密度較大,比較易于找到雷達點云中角點的準確位置。
相機雷達的標定和融合也可以得到不錯的結果。
功能包名稱:livox_camera_lidar_calibration
功能包使用環境:Ubuntu 64-bit 16.04
使用步驟
采集數據
連接雷達檢查標定板角點是否在點云中
輸入點云可視化的命令查看點云
roslaunch livox_ros_driver livox_lidar_rviz.launch
這樣就在rviz中顯示了點云
連接相機檢查標定板角點是否在照片中
打開相機,檢查獲取照片的質量,并檢查標定板角點是否在照片中。具體方法根據相機型號來了。
采集照片和點云數據
拍攝照片運行指令錄制點云
roslaunch livox_ros_driver livox_lidar_msg.launchrosbag record /livox/lidar
每個位置保存一張照片和10s左右的rosbag即可
數據采集完成后,將照片放在data/photo文件夾下; 雷達rosbag放在data/lidar文件夾下
以上步驟數據就采集好了,下面進行標定工作
標定角點
設置相機內參
首先需要把得到的內參和畸變糾正參數以下圖的格式保存在data/parameters/intrinsic.txt文件下 。
distortion下面對應5個畸變糾正參數,按順序是k1和k2 (RadialDistortion),p1和p2 (TangentialDistortion),最后一個是k3,一般默認是0
獲得照片中的角點坐標
配置cornerPhoto.launch文件中的照片路徑,運行
roslaunch camera_lidar_calibration cornerPhoto.launch
程序會在UI中打開對應的照片。在這個UI界面上只要把鼠標移到標定板的各個角上,窗口左下角就會顯示對應的坐標數據。
確定一個順序,一般從左上角的角點開始,逆時針旋轉按順序記錄下四個角點坐標。
記錄完畢后選中顯示的圖片按任意鍵,進入坐標輸入流程。
把記錄下的四個坐標”x y”按順序輸入,x和y中間要有空格(比如: “635 487”),輸入完成后輸入”0 0”即可結束輸入流程(如下圖例所示)。
程序會算出四個更精確的float類型坐標顯示出來,并保存在data/corner_photo.txt中。然后按任意鍵結束整個流程。
更改cornerPhoto.launch文件中的照片路徑,重復上述流程,直至獲得所有照片的角點坐標。
獲得雷達點云中的角點坐標
檢查pcdTransfer.launch文件中的rosbag路徑,設置rosbag的數量,并將rosbag以0.bag, 1.bag…命名。
運行指令將rosbag批量轉化成PCD文件,PCD文件默認保存在data/pcdFiles文件夾中
roslaunch camera_lidar_calibration pcdTransfer.launch
使用pcl_viewer打開PCD文件,按住shift+左鍵點擊即可獲得對應的點坐標。注意和照片采用相同的角點順序
pcl_viewer -use_point_picking xx.pcd
將xyz角點坐標按如下格式保存在data/corner_lidar.txt中,將所有PCD文件中雷達點云的角點坐標保存下來。
上面的步驟把相機和雷達角點獲得了,也就是同名點,下面就是計算外參了
參數設置
外參計算節點會讀取data/corner_photo.txt和data/corner_lidar.txt中的標定數據來計算外參,數據需要保存成特定的格式才能被外參計算節點正確讀取。
參考以下格式,每行數據只有超過10個字母程序才會將其讀取為計算的參數,比如下圖用來編號的1234,lidar0和0.bmp這些標題不會被讀取為計算參數。
程序讀到空行就會停止讀取參數開始計算,所以保存時不要空行。
在計算前檢查一下雷達和相機兩個標定數據中是否每行對應的是同一個角點,并檢查數據量是否相同
計算外參
外參計算getExt1節點
計算前在getExt1.launch文件中配置好外參初值
輸入指令開始計算外參
roslaunch camera_lidar_calibration getExt1.launch
終端中可以看到每次迭代運算的cost,外參結果以齊次矩陣的格式保存到data/parameters/extrinsic.txt下。
可以根據優化后的殘差和重投影誤差評估一下得到的外參,重投影會把誤差較大的數據打印在屏幕上,可以剔除異常標定數據后再重新進行優化計算。
外參計算getExt2節點
getExt1節點只優化外參,而getExt2節點在計算的時候會將一開始計算的內參作為初值和外參一起優化。
輸入指令程序會得到一個新的內參和外參,并用新的參數來進行重投影驗證。
roslaunch camera_lidar_calibration getExt2.launch
一般使用getExt1節點即可,如果在外參初值驗證過,并且異常值已經剔除后,優化還是有較大的殘差,那么可以使用getExt2試一試。
使用的前提需要保證標定數據量較大,并且要充分驗證結果。
如果經過驗證getExt2計算的結果確實更好,那么把新的內參更新在data/parameters/intrinsic.txt中
通過上面步驟已經得到了外參的結果,結果的優略可以通過下面的驗證方法
結果驗證
獲得外參后我們可以用兩個方式看一下融合的效果。第一個是將點云投影到照片上,第二個是點云的著色。
投影點云到照片在projectCloud.launch文件中配置點云和照片的路徑后,運行指令,將rosbag中一定數量的點投影到照片上并且保存成新的照片。
roslaunch camera_lidar_calibration projectCloud.launch
點云著色在colorLidar.launch文件中配置點云和照片的路徑,運行指令,可以在rviz中檢查著色的效果。
roslaunch camera_lidar_calibration colorLidar.launch
審核編輯:劉清
-
PCL
+關注
關注
1文章
35瀏覽量
13679
原文標題:相機和livox激光雷達外參標定
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論