Camera+IMU联合标定
作者:互联网
说明:
仅仅是自己根据别人 博客的理解,后面会根据数据进行详细的更新
一、安装Kalibr
1.1 安装依赖项
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 -i
pip install python_igraph
1.2 创建工作空间
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
1.3 下载并编译
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
1.4 设置环境变量
source ~/kalibr_workspace/devel/setup.bash
二、准备标定所需文件
2.1 标定板及其参数文件
标定板可以用 kalibr 提供的pdf, 里面有三种类型的标定板(Aprilgrid, Checkerboard, Circlegrid).具体信息及参数文件下载https://github.com/ethz-asl/kalibr/wiki/downloads(下载需要科学上网),我们这里采用的是Aprilgrid标定板。注意事项:打印标定板一定要打印全,不能为了追求实际尺寸只打印部分,否则会导致标定时初始化失败。打印完实际测量标定板参数,然后修改标定板参数文件。
2.2 .bag文件
这是在连续时间获得的拍摄标定版的图像和IMU数据包,需要自己采集后再利用kalibr提供的一个工具去转化成.bag包。.bag文件的具体内容是:标定需要的图像以及相对应的imu数据。
可以使用 rosbag info XX.bag 来查看生成的bag文件情况(包括图片、IMU、时间数据等);
当然,图像和IMU的数据也可以通过 文件的读取方式来获取,只要两者时间对齐就行!(个人比较喜欢后者)
2.3 Camera参数文件
相机参数标定 :https://blog.csdn.net/hltt3838/article/details/108861487
包含 相机的内参、畸变参数的文件,如果是双目的话,还包含两个相机的位置转换矩阵;Camera与IMU参数文件的标准格式参考https://github.com/ethz-asl/kalibr/wiki/yaml-formats
官网例子:Example chain.yaml
2.4 IMU参数文件
imu 参数标定: https://blog.csdn.net/hltt3838/article/details/110385724
2.5 标定板参数参数
target.yaml
tagCols 为标定格每行个数
tagRows 为标定格每列个数
tagSize 为标定格二维码边长,单位m
参考:https://github.com/ethz-asl/kalibr/wiki/calibration-targets
将标定板打印出来,置于平稳,光照充足的地方,注意要保持平整。使得相机与IMU位置相对固定,移动camera-IMU系统让IMU三个轴都被激活(不能只有转动,最好在转动的同时移动,确保加速度计也有输出)采集数据。参考:https://github.com/ethz-asl/kalibr 当需要的四个文件都有时,使用命令:
kalibr_calibrate_imu_camera –target xx/target.yaml –cam xx/camchain.yaml –imu xx/imu.yaml –bag xx/xx.bag –bag-from-to 5 45
即可完成标定。(5-45表示取的标定数据长度,开始部分数据和结束部分可能会有晃动,把它去除)在背后加上 --time—calibration 可以标定IMU相对于camera的延时。
三、标定
cd hltt3838/kalibr_workspace //程序保存的路径
catkin_make
source devel/setup.bash
kalibr_calibrate_imu_camera --target april_6x6_50x50cm.yaml --cam mynteye.yaml --imu imu.yaml --bag stereo_imu_calibra.bag
四、遇到的问题
2、 提示:“Spline Coefficient Buffer Exceeded. Set larger buffer margins”
在标定命令最后添加 --timeoffset-padding 0.1
3、图像和IMU过多导致计算量巨大,相机标定时可以降低图像topic发布的频率,而联合标定时不太需要处理,我做实验时近2000张图片,近20000条imu数据计算时间也不是很长。
4、优化失败,结果发散。猜测原因:bag包录制有问题,Camera与IMU参数文件中初始值不准确
五、标定实验结果
Timeshift表示的就是IMU相对于camera的延时;
参考文献
相机-IMU标定
https://blog.csdn.net/zhubaohua_bupt/article/details/80222321
matlab相机内参标定
https://www.cnblogs.com/li-yao7758258/p/5929145.html
yaml文件参数
https://blog.csdn.net/zhubaohua_bupt/article/details/80222321
.bag制作
https://blog.csdn.net/w492751512/article/details/81218618
https://blog.csdn.net/w492751512/article/details/81218618
https://blog.csdn.net/mxdsdo09/article/details/83514310
标签:标定,bag,Camera,IMU,https,imu,kalibr 来源: https://blog.csdn.net/hltt3838/article/details/111385735