利用kalibr工具進行camera-IMU標定
camera-IMU標定
一camera-IMU標定簡述
1標定目的:
我們進行camera-IMU的目的是為了得到IMU和相機座標系的相對位姿矩陣T。
2標定工具:
3輸入檔案:
以下內容預設為標定雙目相機。和靜態標定不同,本標定的輸入檔案包括
1 用帶imu的相機拍攝的視訊
2 視訊中imu實時資料
3 imu引數和cam的內外參
4標定板資訊
後面會詳細的介紹一下輸入檔案以及製作方法。
二 Kalibr安裝
Kalibr工程有兩種,一種是已經編譯好的包,叫CDE package,另一種是未經編譯的原始檔。
前者:安裝簡單,不需要依賴ROS,但是功能不全。
後者:安裝稍麻煩,但功能全,建議安裝這種。
後者安裝方法:
1安裝 ROS
2安裝依賴項
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-devlibboost-all-dev doxygen libopencv-dev ros-indigo-vision-opencvros-indigo-image-transport-plugins ros-indigo-cmake-modulespython-software-properties software-properties-common libpoco-devpython-matplotlib python-scipy python-git python-pip ipython libtbb-devlibblas-dev liblapack-dev python-catkin-tools libv4l-dev
sudo pip installpython-igraph --upgrade
注意:pip未安裝會報錯
3建立一個工作空間,這就是以後的工程根路徑
mkdir -p~/kalibr_workspace/src
cd ~/kalibr_workspace
source/opt/ros/indigo/setup.bash
catkin init
catkin config --extend /opt/ros/indigo
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
4下載工程程式碼並編譯
cd~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
注意:如果你電腦記憶體不太夠用,試著減少編譯時開的執行緒數,把引數 –j4換成-j2或直接省略。
5設定一下你剛才編譯工程的環境變數
source~/kalibr_workspace/devel/setup.bash
至此,安裝部分結束,標定需要的所有工具都在本工程的devel/bin/目錄下。
三camera-IMU標定需要輸入的四個檔案:
一個標定的例子:
它們分別是:包含圖形和imu資料的bag檔案、相機引數檔案、IMU引數檔案和標定板引數檔案。
1 bag 檔案
<1>. bag 檔案內容:
這是在連續時間獲得的拍攝標定版的影象和IMU資料包,需要自己採集後再利用kalibr提供的一個工具去轉化成.bag包。
.bag檔案的具體內容是:標定需要的影象以及相對應的imu資料。格式是:
+-- dataset-dir
+--cam0
│ +-- 1385030208726607500.png
│ +-- ...
│ \-- 1385030212176607500.png
+--cam1
│ +-- 1385030208726607500.png
│ +-- ...
│ \-- 1385030212176607500.png
\--imu0.csv
IMU檔案格式是:19位時間戳(精確到ns),角速度,含重力的加速度
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的製作工具:
kalibr_bagcreater--folder dataset-dir --output-bag awsome.bag
dataset-dir是資料輸入路徑:
其內檔案結構應是這樣:
/cam0/image_raw
/cam1/image_raw
/imu0
awsome.bag 是製作好的bag檔案。輸出預設在kalibr_bagcreater同目錄下。
2相機引數檔案: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]
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]
timeshift_cam_imu: -8.681e-05
rostopic:/cam1/image_raw
resolution: [752,480]
- camera_model//相機模型
camera projection type (pinhole / omni) - intrinsics//相機內參
vector containing the intrinsic parameters for the given projection type. elements are as follows:
pinhole: [fu fv pu pv]
omni: [xi fu fv pu pv]
distortion_model//畸變模型
lens distortion type (radtan / equidistant) - distortion_coeffs//畸變引數
parameter vector for the distortion model - T_cn_cnm1//左右攝像頭的相對位姿
camera extrinsic transformation, always with respect to the last camera in the chain
(e.g. cam1: T_cn_cnm1 = T_c1_c0, takes cam0 to cam1 coordinates) - timeshift_cam_imu//在捕捉資料時,imu資料和影象時間偏移
timeshift between camera and IMU timestamps in seconds (t_imu = t_cam + shift) - rostopic
topic of the camera's image stream - resolution
camera resolution [width,height]
3 IMU引數檔案:imu.yaml
#Accelerometers
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
update_rate: 200.0 #Hz //imu輸出資料頻率
編寫這個檔案需要imu的手冊。
4 標定板引數檔案:target.yam
Kalibr支援三種標定板,分別是Aprilgrid、Checkerboard和Circlegrid。
引數比較簡單:見https://github.com/ethz-asl/kalibr/wiki/calibration-targets
四執行標定
在製作完成標定需要檔案後,就可以對cam-imu進行標定了。
比如:你的標定板檔案是april_6x6.yaml,相機引數檔案時camchain.yaml,imu引數檔案是imu_adis16448.yaml,圖集檔案是dynamic.bag,--bag-from-to 5 45這裡的5和45是你想在標定時利用圖集資料的時間段,單位是S。執行
kalibr_calibrate_imu_camera --targetapril_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag dynamic.bag --bag-from-to 5 45
你會得到幾個輸出檔案。
- 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 virtual memory exhaust :原因:電腦記憶體不夠
2 如果電腦沒有安裝 numpy,會報錯,安裝numpy。
3 執行指令時如果找不到輸入檔案,附絕對路徑試試。
4 CDE包只支援64位linux系統
5注意:在採集標定圖集時
i,確保影象不要模糊,運動不要太快。
ii,最好要遍歷imu的所有軸,即充分旋轉和加速。
6calib可以標定單目+imu,bag內只放單目影象,修改帶參執行中的引數即可。
7雖然標定板有幾種可以選擇,但作者建議使用aprilgrid型別的標定板來標定,aprilgrid地址:https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit