kalibr标定相机内参和cam-imu外参

环境: ubuntu16.04 kinetic

官方下载和安装教程: https://github.com/ethz-asl/kalibr/wiki/installation
测试的数据集、标定板下载页面: https://github.com/ethz-asl/kalibr/wiki/downloads
只要注意作者用的ubuntu14.04 对应的ros版本indigo,这里改成kinetic


编译之前看到有人说在安装过程中,可能会遇到wget相关的错误,比如说在安装到suitesparse库的时候,对应的cmakelists中会通过wget 下载压缩包,若无法下载则整个kalibr都无法成功安装,所以改了下suitesparse下的CMakeLists.txt
更改如下:
找到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"

然后开始按照官方教程去编译

但是因为后面因为libnumpy-eigen找不到,我也跟着网上有人说的,把找库的后缀从.so改成了.dylib,然后会出现'module' object has no attribute 'OmniCameraGeometry',谷歌搜索了一下,并没有人有这个错误,所以我把之前的编译好的全删了,用最原始的代码重新编译了一遍,也直接编译成功了(没有更改任何原代码)


错误1: fatal error: numpy/arrayobject.h: No such file or directory
参考该处
解决方案:sudo apt-get install --reinstall python-numpy


错误2: libnumpy_eigen找不到
事实上,在kalibr_workspace下输入python,再import numpy_eigen的确找不到,但是输入python2,再import numpy_eigen却导入成功了。说明编译kalibr的时候,它去找了系统默认的python,而我的系统默认python是3,所以就出问题了
解决方案: 切换系统默认python版本,这个网上有很多教程,我是用的update-alternatives。但是看人家的教程,最后切换完后,系统默认python版本的确有换掉,但是我没有。后来发现,是终端默认开了anaconda的base环境,所以终端输入python一直显示的是anaconda下的python。所以退出终端的base环境,再输入python就是版本2了,此时再重新编译kalibr源码就没问题了


标定相机内参,其实我只想用它标定一个相机的内参,但是这个貌似是标定多个相机之间的,标定一个会有问题
错误3:

314521.998518 	42
314525.101367999 	42
314528.804769999 	42
314531.740800999 	42
314531.874255999 	42
314532.041076 	42
314532.074439999 	42
314532.107804 	42
314532.307987999 	42
314532.374715999 	42
Cameras are not connected through mutual observations, please check the dataset. Maybe adjust the approx. sync. tolerance.
Traceback (most recent call last):
  File "/home/mk/soft/kalibr_workspace/devel/bin/kalibr_calibrate_cameras", line 15, in 
    exec(compile(fh.read(), python_script, 'exec'), context)
  File "/home/mk/soft/kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 447, in 
    main()
  File "/home/mk/soft/kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 204, in main
    graph.plotGraph()
  File "/home/mk/soft/kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_camera_calibration/MulticamGraph.py", line 311, in plotGraph
    edge_label=self.G.es["weight"],
KeyError: 'Attribute does not exist'

参考此处,改一下命令就好 如下
官方解释

kalibr_calibrate_cameras --bag '/home/mk/Desktop/euroc-rotation/cam/test_2.bag' --topics /camera/image_raw --models pinhole-radtan --target '/home/mk/Desktop/euroc-rotation/cam/target.yaml' --show-extraction --approx-sync 0.04

相机和imu的标定
输入要准备四个文件:
四个文件的格式要求,官方也给出来了

bag包:存了图片和imu信息 看网上有人说kalibr提供了工具,可以将图片序列转换成bag包
camchain.yaml : 提供的是相机的内参、畸变参数等
IMU.yanl:提供的是IMU噪声、随机游走、帧率
target.yaml:提供的是标定板的信息

官方给的camchain.yaml有一个相机外参这个参数,当时很想不清楚,我都有相机外参了,那还标定什么cam-imu。后来大胆去掉了这个参数,然后运行 完全没问题

kalibr_calibrate_imu_camera --target '/home/mk/Desktop/euroc-rotation/cam2imu/target.yaml' --cam '/home/mk/Desktop/euroc-rotation/cam2imu/camchain.yaml' --imu '/home/mk/Desktop/euroc-rotation/cam2imu/IMU.yaml' --bag '/home/mk/Desktop/euroc-rotation/cam2imu/test_2.bag'

你可能感兴趣的:(slam)