萌新談相機與IMU的標定
1 人贊了文章
本文主要包括相機標定和imu_camera 標定,另附上imu標定文章(非本人)。
先從攝像頭的標定開始講起吧,SLAM新手上路,第一個要玩的肯定是ORBSLAM,光跑數據肯定不夠過癮啊,所以就要用自己的攝像頭轉一圈。下面進入正題,
前提條件:一個筆記本,一個能用攝像頭(單目或者雙目)
1.相機標定--opencv
camera_calibration - ROS Wiki其實wiki上已經介紹的夠清楚的了,先下載image_pipeline的源碼,然後下載一張棋盤紙
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/my_camera/image camera:=/my_camera
size 是指棋盤內部角點個數,我是用的標定板公有8x6個角點(即8列6行),square指方形的邊長,image為輸出圖像的話題,camera為相機的名稱(即在/image_raw前面部分)。比如我的無人機是ardrone2.0.運行起來應該是
rosrun cameracalibration cameracalibrator.py --size 8x6 --square 0.108 image:=/ardrone/front/image_rawosrun cameracalibration cameracalibrator.py --size 8x6 --square 0.108 image:=/ardrone/front/image_raw
但是再此之前別忘了檢查一下你的topic名字,可以輸入
rostopic list
roslaunch ardrone_autonomy ardrone.launch
然後你可以看到這個東西,
步驟就是左三圈右三圈,上三圈下三圈,換個姿勢再來幾圈.........
當標定完成的時候,那個calibrate 按鈕會變藍,然後你可以點擊保存和commit。這樣就會生成一個yaml文件。最後標定就完成啦!
二.相機標定--matlab
關於如何用matlab標定我就不贅述了,因為我自己沒有親自操作過,這裡附上幾篇文章,僅供參考
MATLAB標定工具箱的使用 - CSDN博客三.相機與imu標定
這裡用到的是大名鼎鼎ethz 開發的kalibr
https://github.com/ethz-asl/kalibr這個kalibr有兩個版本,一個是比較全的版本,但是裡面包比較多,一開始嘗試去編譯這個,結果電腦不爭氣,編譯一直卡死。所以後來我就用這個CDE版本。
ethz-asl/kalibr關於如何使用這個版本,下面這個鏈接裡面的視頻已經講的很清楚了。(需要翻牆)
https://www.youtube.com/watch?v=puNXsnrYWTY&app=desktop我把主要的命令寫一下,方便大家複製。
標定紙:https://drive.google.com/file/d/0B0T1sizOvRsUdjFJem9mQXdiMTQ/edit
yaml文件:https://drive.google.com/file/d/0B0T1sizOvRsUU2lGMTdWYWhPaWc/edit
別忘了修改yaml文件裡面的參數,比如格的邊長和行列數。具體情況根據你標定板大小而定。
(1)錄製一個rosbag
rosbag record /ardrone/front/image_raw /ardrone/imu
一個是你相機的topic,另一個是imu的topic。
然後拿著你的設備對準標定板,先是pitch三次,yaw三次,roll三次,up and down三次,左右三次,然後再隨意換幾個姿勢。標定時間按視頻裡面說,要小於60s。錄製完成之後再保存。
下一步就是去下載剛才那個cde版本,如果你的電腦足夠牛的話,可以用比較全的版本
ethz-asl/kalibr安裝依賴項sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-indigo-vision-opencv ros-indigo-image-transport-plugins ros-indigo-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev sudo pip install python-igraph --upgrade創建一個catkin 工作空間mkdir -p ~/kalibr_workspace/src cd ~/kalibr_workspace source /opt/ros/indigo/setup.bash catkin init catkin config --extend /opt/ros/indigo catkin config --merge-devel # Necessary for catkin_tools >= 0.4. catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release把kabibr放到工作空間里cd ~/kalibr_workspace/src git clone https://github.com/ethz-asl/Kalibr.git編譯cd ~/kalibr_workspace catkin build -DCMAKE_BUILD_TYPE=Release -j4這個時間會很長,你可以來盤王者或者吃雞等一會,有可能你的電腦會像我的一樣卡死,那就比較尷尬了。最後別忘了source一下路徑source ~/kalibr_workspace/devel/setup.bash
其實到這裡差不多已經準備就緒了,但是為了防止出現意外,我們最好先運行一下example測試一下環境。
下載這個數據集,把它放進之前的kalibr-cde文件夾下面
https://drive.google.com/file/d/0B0T1sizOvRsUcGpTWUNTRC14RzA/edit./kalibr_calibrate_imu_camera --target april_6x6.yaml --cam camchain.yaml --imu imu_adis16448.yaml --bag dynamic.bag --bag-from-to 5 45
假如example數據能跑通,說明kalibr工具準備好了,下面開始進入真實環境下的標定過程
(1)
上面那個example你應該可以發現,運行標定程序後面跟著四個文件,第一個是棋盤文件,就是之前需要修改的那個yaml文件,第二個是相機內參文件(這裡的內參文件和之前ros獲得的文件不同,需要用kalibr單獨獲得),第三個是imu雜訊文件,第四個是之前我們錄製好的rosbag
(2)
現在未獲得的只有第二個camchain文件,所以先播放一下rosbag看看有沒有問題
roscore&&rosbag play xxx.bag
在播放的過程中,檢查一下是否有相機和imu話題 rostopic list
(3)
cd kalibr-cde
./kalibr_calibrate_cameras --target april6x6.yaml --bag xxxx/xxx.bag --models pinhole-equi --topics /ardrone/front/image_raw
結束之後會得到一個report和pdf文件。
(4)
在做這一步之前。找到kalibr_calibrate_imu_camera文件,注釋掉以下幾行
#delete old resultsrm -f $HERE/*.pdf 2> /dev/nullrm -f $HERE/*.yaml 2> /dev/nullrm -f $HERE/*.txt 2> /dev/nullrm -f $HERE/*.bag 2> /dev/nullrm -rf $HERE/cde-root/output* 2> /dev/null
./kalibr_calibrate_imu_camera --target april_6x6.yaml --cam 之前獲得的相機文件.yaml --imu imu_adis16448.yaml --bag 錄製的bag路徑(比如example中的dynamic/dynamic).bag --bag-from-to 5 45
然後等待一會,就生成report啦!
如果有問題或者發現文章中有什麼錯誤可以私信或者留言,我都會回答的,雖然我自己也不怎麼會。
最後附上幾篇能用到的文章
雙目imu相機標定:雙目相機與IMU camera IMU 聯合標定工具箱使用方法--Kalibr
港科大imu標定工具: gaowenliang/imu_utils,相關的專欄文章介紹:Imu_tk演算法流程
http://cache.freescale.com/files/sensors/doc/app_note/AN5087.pdf
https://www.vectornav.com/support/library/gyroscope
Department of Computer Science and Technology
推薦閱讀:
TAG:同時定位和地圖構建SLAM | 視覺慣性里程計VIO |