IMU與camera標定、Kalibr
https://github.com/ethz-asl/kalibr
1.安裝
Kalibr 提供兩種使用方式。第一種為CDE下直接使用,作者將所需的庫檔案打包好,省去了配置dependency的步驟,可以直接從
https://github.com/ethz-asl/kalibr/wiki/downloads
下載, 注意需要科學瀏覽。
下載之後直接用
./cde-exec+命令 即可使用對應的工具。
例如如果我們想使用kalibr內的kalibr_calibrate_cameras功能,
使用
./ced-exec kalibr_calibrate_cameras --target april_6x6.yaml --bag static.bag --models pinhole-equi pinhole-equi omni-radtan omni-radtan --topics /cam0/image_raw /cam1/image_raw /cam2/image_raw /cam3/image_raw
即可。
但是此方法不能使用其中的某些功能,例如我們想使用calibration validator,在CDE環境下是無法使用的。
所以作者建議我們build from source。
根據https://github.com/ethz-asl/kalibr/wiki/installation的part B中的描述進行安裝。
在安裝過程中,可能會遇到wget相關的錯誤,比如說在安裝到suitesparse庫的時候,對應的cmakelists中會通過wget 下載壓縮包,若無法下載則整個kalibr都無法成功安裝,那麼我們需要進行一番修改。
當然你也可以自己編寫cmakelists,不過個人覺得有點麻煩。
首先開啟對應的cmakelists。
找到DOWNLOAD_COMMAND那一行,新增host agent 資訊,將語句替換類似如下
DOWNLOAD_COMMAND rm -f SuiteSparse-${VERSION}.tar.gz && wget "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-${VERSION}.tar.gz" --user-agent="Mozilla/5.0 (Ubuntu;U; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0"
即可,若terminal提示無法解析你的host agent部分,可以將此行註釋掉,因為檔案已經下載,加入一行
DOWNLOAD_COMMAND wget "https://www.baidu.com"
即可進行下面的步驟。
到了這裡應該沒有問題了,等待半個小時左右即可build完畢。
ps: 在非CDE環境下使用需要注意python版本為2.7時可以正常使用。使用anaconda或者其他python版本的需要將python版本切換。
2.開始標定
Kalibr不僅提供了IMU以及camera的聯合標定工具箱,也提供了camera標定工具箱。
在此我們先使用camera標定工具對相機進行標定。
首先我們需要製作標定板,在此推薦使用april tag,可以使用kalibr自帶工具自定義生成不同大小的標定板,命令如下
kalibr_create_target_pdf --type apriltag --nx [NUM_COLS] --ny [NUM_ROWS] --tsize [TAG_WIDTH_M] --tspace [TAG_SPACING_PERCENT]
將生成的pdf打印出來,置於平穩,光照充足的地方,注意要保持平整。
Kalibr作者推薦將camera固定,然後移動標定板,這樣可以提高標定的穩定性,但是鑑於我使用場景受限,我使用的是晃動camera方法。
之後就可以開始錄製bag了,使用
rosbag record /cam0/image_raw /cam1/image_raw /imu0
標定時注意啟用所有的軸,即可錄製包含三個topic的rosbag了。
注意錄製過程中camera不要距離標定板太近,否則會出現無法初始化focal length的錯誤。
Kalibr是一個十分強大的工具箱,提供了很多工具。我們可以使用calibration validator進行標定的驗證,原理是對重投影誤差進行量化分析。大家可以自行驗證。工具使用上一步驟的camera標定結果以及標定板的yaml檔案,具體命令如下:
kalibr_camera_validator --cam camchain.yaml --target target.yaml
若對相機標定結果滿意我們可以繼續進行camera以及imu的聯合標定步驟,此步使用瞭如下資訊:
1. 標定板yaml
2. 相機標定結果yaml
3. imu內參yaml
4. 前面使用的對應bag
有了如上材料即可進行聯合標定,具體如下
kalibr_calibrate_imu_camera --target aprilgrid6x4.yaml --cam camchain-2017-06-14-09-13-29.yaml --imu imu.yaml --bag 2017-06-14-09-13-29.bag --bag-from-to 5 45
最後的--bag_from_to是選取地5-45s的bag資料,去除了拾取防止裝置產生的抖動部分影響。我們建議進行多組標定之後將標定結果進行最佳無偏估計,不建議對R部分直接取平均值,可以將多組資料的R部分轉換成四元數。之後進行處理。
到此就將聯合標定簡單介紹完了。