之前博客《ROS學習筆記之——DAVIS346 calibration》已經實作了用dv-gui(Calibration [Tutorial] · DV)來標定event camera了,但是缺少了跟IMU的外參標定等等,本博文利用Kalibr庫來對其進行標定,
Kalibr安裝
先創建一個作業空間
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
source /opt/ros/melodic/setup.bash
catkin init
catkin config --extend /opt/ros/melodic
catkin config --merge-devel
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
可能會提示缺少libv4l,安裝依賴包即可:
sudo apt-get install libv4l-dev
建立完之后需要source一下
source ~/kalibr_workspace/devel/setup.bash
還是沒有辦法,,,,還要把操蛋的opencv4安裝了,,,,,
改為參考:melodic 安裝 kalibr_matthewsyc的博客-CSDN博客
sudo apt-get install python-setuptools python-rosinstall ipython
sudo apt-get install libeigen3-dev libboost-all-dev doxygen
sudo apt-get install ros-melodic-cmake-modules python-software-properties
sudo apt-get install software-properties-common libpoco-dev python-matplotlib
sudo apt-get install python-scipy python-git python-pip ipython libtbb-dev
sudo apt-get install libblas-dev liblapack-dev python-catkin-tools libv4l-dev
sudo apt-get install python-igraph
安裝完依賴后,編譯好像就比較正常了~
每次運行前,記得加入
source ~/kalibr_workspace/devel/setup.bash
IMU標定
產生資料寫入imu.yaml中,imu.yaml檔案要用于聯合標定,
imu_utils依賴code_utils,要先安裝code_utils再安裝imu_utils,
mkdir -p ~/imu_catkin_ws/src
cd ~/imu_catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
source ~/imu_catkin_ws/devel/setup.bash
cd ~/imu_catkin_ws/src
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make
可能出現報錯,試試運行
sudo apt-get install libdw-dev
catkin_make時出現backward.hpp沒有找到
解決方法:將sumpixel_test.cpp中# include "backward.hpp"改為:#include “code_utils/backward.hpp”
即可安裝成功!

然后下載imu_utils
cd ~/imu_catkin_ws/src/
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make
然后運行
roslaunch vins davis_testing.launch
rostopic list
rostopic echo /dvs/imu
記錄imu資訊,這個程序要保持imu靜止不動至少2個小時(這個太夸張了吧,,,)
17.26開始
在imu_utils檔案下的launch檔案目錄下添加一個launch檔案,我這里添加的是 imu.launch,并把以下代碼復制進檔案,代碼中的/IMU_data改成自己imu的topic,
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<!--TOPIC名稱-->
<param name="imu_topic" type="string" value= "/dvs/imu"/>
<!--imu_name 無所謂-->
<param name="imu_name" type="string" value= "imu_davis346"/>
<!--標定結果存放路徑-->s
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<!--資料錄制時間-min-->
<param name="max_time_min" type="int" value= "120"/>
<!--采樣頻率,即是IMU頻率,采樣頻率可以使用rostopic hz /dvs/imu查看,設定為400,為后面的rosbag play播放頻率-->
<param name="max_cluster" type="int" value= "400"/>
</node>
</launch>
運行之前要先source一下
source ~/imu_catkin_ws/devel/setup.bash
roslaunch imu_utils davis_imu.launch
rosbag play -r 400 /home/kwanwaipang/dataset/gwphku/hku_davis346_imu_2021-10-25-17-26-06.bag
rosbag play /home/kwanwaipang/dataset/gwphku/hku_davis346_imu_2021-10-25-17-26-06.bag
標定結束后在imu_catkin_ws/src/imu_utils/data中生成許多檔案,其中(d435i_imu_param.yaml)imu_davis346_imu_param.yaml就是我們想要的結果,展示如下:
%YAML:1.0
---
type: IMU
name: imu_davis346
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 3.4207443164969696e-03
gyr_w: 5.0328372766535944e-05
x-axis:
gyr_n: 2.8679837408646372e-03
gyr_w: 5.2377301938209580e-05
y-axis:
gyr_n: 3.4204365908127145e-03
gyr_w: 5.9820318994959333e-05
z-axis:
gyr_n: 3.9738126178135566e-03
gyr_w: 3.8787497366438921e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 4.0577448874376872e-02
acc_w: 8.7349218314222493e-04
x-axis:
acc_n: 3.6370001351966601e-02
acc_w: 9.6556492723349487e-04
y-axis:
acc_n: 3.4926548351679493e-02
acc_w: 8.3124335009033201e-04
z-axis:
acc_n: 5.0435796919484514e-02
acc_w: 8.2366827210284801e-04
撰寫imu.yaml,格式參考https://github.com/ethz-asl/kalibr/wiki/yaml-formats中的imu.yaml,具體引數使用之前imu標定得到的引數,示例如下:
#Accelerometers
accelerometer_noise_density: 4.0577448874376872e-02 #Noise density (continuous-time)
accelerometer_random_walk: 8.7349218314222493e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 3.4207443164969696e-03 #Noise density (continuous-time)
gyroscope_random_walk: 5.0328372766535944e-05 #Bias random walk
rostopic: /dvs/imu #the IMU ROS topic
update_rate: 1000.0 #Hz (for discretization of the values above)
若不加速播放rosbag得到的結果如下:
%YAML:1.0
---
type: IMU
name: imu_davis346
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 3.4869979619824697e-03
gyr_w: 4.4740603706140853e-05
x-axis:
gyr_n: 2.9539477648808021e-03
gyr_w: 5.0580216740422281e-05
y-axis:
gyr_n: 3.5214141180930189e-03
gyr_w: 5.4806050604838655e-05
z-axis:
gyr_n: 3.9856320029735878e-03
gyr_w: 2.8835543773161611e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 4.2153479580575477e-02
acc_w: 8.5654389798364998e-04
x-axis:
acc_n: 3.7662088244236419e-02
acc_w: 8.9242080034822346e-04
y-axis:
acc_n: 3.8469169601091632e-02
acc_w: 8.9970652031743314e-04
z-axis:
acc_n: 5.0329180896398394e-02
acc_w: 7.7750437328529356e-04
還是有點差別的~按這個來把~~~
camera標定
產生資料檔案也是用于聯合標定
1.標定板,可在kalibr的wiki中下載,地址:https://github.com/ethz-asl/kalibr/wiki/downloads
選擇
![]()
下載(然后發現根本下載不了,,,eth這群貨真的是,,,,event camera的驅動弄得崩潰,連標定的扳子也搞???)鏈接: 百度網盤 請輸入提取碼 提取碼: r4ts
然后縮放到40%,用A4紙就可以列印出來
原始pdf的格子引數是:
6*6的格子
大格子邊長:5.5cm
小格子邊長:1.65cm
小格子與大格子邊長比例:0.3
調整后的格子引數是:
大格子邊長:2.4cm
小格子邊長:0.75cm
小格子與大格子邊長比例:0.3125
但這只是理想情況,實際情況還得實際測量,
新建april_6x6_A4.yaml檔案,格式參考上圖的yaml,內容展示如下:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.024 #size of apriltag, edge to edge [m]
tagSpacing: 0.3125 #ratio of space between tags to tagSize
錄制bag,錄制bag 的同時,相機對準標定板,或是固定相機或是固定標定板,晃動另一個,動作不要太大,不要讓相機看不清標定板(就爭取把標定板晃動到過相機像素平面的每個地方)
注意:需要修改相機幀數(官方推薦是4Hz,盡管實際頻率不完全準確,但是不影響結果)
kalibr在處理標定資料的時候要求頻率不能太高,一般為4Hz,我們可以使用如下命令來更改topic的頻率,實際上是將原來的topic以新的頻率轉成新的topic,實際測驗infra1才是對應左目相機
roslaunch vins davis_testing.launch
rostopic list
rostopic hz /dvs/image_raw
rosrun topic_tools throttle messages /dvs/image_raw 4.0 /color
rostopic hz /color
roslaunch vins davis_raw_image_recording.launch
錄制的topic就是轉換頻率后的topic
rosbag play /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag
然后就使用上面安裝好的Kalibr進行標定
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag --models pinhole-equi --topics /color --show-extraction
其中–target …/yaml/april_6x6_A4.yaml是標定板的組態檔,注意如果選擇棋格盤,注意targetCols和targetRows表示的是內側角點的數量,不是格子數量,–bag multicameras_calibration.bag是錄制的資料包,models pinhole-equi pinhole-equi pinhole-equi表示三個攝像頭的相機模型和畸變模型(解釋參考https://github.com/ethz-asl/kalibr/wiki/supported-models,根據需要選取), --topics /infra_left /infra_right /color表示三個攝像頭對應的拍攝的資料話題,–bag-from-to 10 100表示處理bag中10-100秒的資料,–show-extraction表示顯示檢測特征點的程序,這些引數可以相應的調整,
kalibr_calibrate_cameras --target ../yaml/april_6x6_A4.yaml --bag multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction
出來的標定結果如下圖所示

得到的結果如下所示
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [0.023761891762741624, -0.6457616668645434, 2.070114304159524,
-2.4332476089446473]
distortion_model: equidistant
intrinsics: [333.6626192244177, 333.5395724565995, 162.74154656440015, 133.0594987830887]
resolution: [346, 260]
rostopic: /color
若改為降低速率前的topic效果如下:
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag --models pinhole-equi --topics /dvs/image_raw --show-extraction
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [0.007145831923439896, -0.4460587583609059, 1.2828141357453273,
-1.3797467604219862]
distortion_model: equidistant
intrinsics: [333.649413082246, 333.5165283699802, 162.51929394284377, 132.6341713511583]
resolution: [346, 260]
rostopic: /dvs/image_raw
撰寫camchain.yaml,格式參考Kalibr官方教程https://github.com/ethz-asl/kalibr/wiki/yaml-formats中的chain.yaml,具體的引數參考上面得到的yaml檔案,沒有的引數可以洗掉,最終結果示例如下:
cam0:
camera_model: pinhole
intrinsics: [333.649413082246, 333.5165283699802, 162.51929394284377, 132.6341713511583]
distortion_model: equidistant
distortion_coeffs: [0.007145831923439896, -0.4460587583609059, 1.2828141357453273, -1.3797467604219862]
T_cam_imu:
- [0.01779318, 0.99967549,-0.01822936, 0.07008565]
- [-0.9998017, 0.01795239, 0.00860714,-0.01771023]
- [0.00893160, 0.01807260, 0.99979678, 0.00399246]
- [0.0, 0.0, 0.0, 1.0]
timeshift_cam_imu: -8.121e-05
rostopic: /dvs/image_raw
resolution: [346, 260]
IMU與camera的聯合標定
將之前矯正好的檔案放好

source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_imu_camera --bag [filename.bag] --cam [camchain.yaml] --imu [imu.yaml] --target [target.yaml] --bag-from-to 15 75 --show-extraction
kalibr_calibrate_imu_camera --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_raw_imu_2021-10-26-14-31-10.bag --cam /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/camchain.yaml --imu /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/imu.yaml --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --show-extraction
也有一種說法需要調整引數頻率
注意選擇的camera失真模型(https://github.com/ethz-asl/kalibr/wiki/supported-models)
roslaunch vins davis_testing.launch
rosrun topic_tools throttle messages /dvs/image_raw 20.0 /image_raw
rosrun topic_tools throttle messages /dvs/imu 200.0 /imu
roslaunch vins davis_raw_image_imu_recording.launch
source ~/kalibr_workspace/devel/setup.bash
kalibr_calibrate_cameras --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_imu_2021-10-26-16-14-23.bag --models pinhole-radtan --topics /image_raw --show-extraction
kalibr_calibrate_imu_camera --bag /home/kwanwaipang/dataset/gwphku/hku_davis346_image_imu_2021-10-26-16-14-23.bag --cam /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/camchain_second.yaml --imu /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/imu_second.yaml --target /home/kwanwaipang/catkin_ws_dvs/src/EVIO/config/kalibr_davis/april_6x6_A4.yaml --show-extraction
至此,矯正完成!測驗一下這些引數,
出來的pdf report如下
camera校正的report




camera-imu校正的report







參考資料
GitHub - ethz-asl/kalibr: The Kalibr visual-inertial calibration toolbox
GitHub - gaowenliang/imu_utils: A ROS package tool to analyze the IMU performance.
GitHub - rpng/kalibr_allan: IMU Allan standard deviation charts for use with Kalibr and inertial kalman filters.
聯合標定雙目相機和imu,使用工具Kalibr_甜甜圈吃不完的博客-CSDN博客
聯合標定單目相機和imu,使用工具Kalibr_甜甜圈吃不完的博客-CSDN博客
realsenseD435i imu+雙目標定_crazyfox的博客-CSDN博客_d435i imu標定
Installation · ethz-asl/kalibr Wiki · GitHubhttps://blog.csdn.net/Hanghang_/article/details/103546033Installation · ethz-asl/kalibr Wiki · GitHub
Realsense D435i RGB+IMU標定_追-CSDN博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337604.html
標籤:其他
上一篇:CTF—Misc(wireshark-1、puer_color、Aesop_secret)
下一篇:秒殺專案07-安全優化
