kalibr标定双目IMU

kalibr进行双目-IMU外参测定

    • 安装kalibr依赖
    • 生成标定板
    • 进行rosbag生成
    • 标定双目内外参
    • 标定双目-IMU外参

我的操作系统为Ubuntu18.04,所用相机为ZED2,ROS版本为melodic,opencv安装了3.5和2.7两个版本。

完全可以看kalibr的wiki来了解详细的kalibr标定相关的信息

安装kalibr依赖

首先先对kalibr各种依赖库进行安装,sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-modules 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
依赖库尽量保证全部装上,不然后面去进行kalibr编译或者运行会报很多缺module的错。

sudo pip install python-igraph --upgrade这一步可能会有问题,没安上就算了,或者用sudo apt-get方法去安装igraph模块。
后面在运行的时候有一个ImageFile module找不到,可以直接注释生成rosbag功能的src的py文件相关的那个import语句,并不影响后面标定过程
kalibr的安装和ROS安装忽略,一般不会有什么问题,当然kalibr在安装中有catkin init命令,需要安装catkin库(即是安装了ROS最全版也需要安装这个)

生成标定板

利用kalibr_create_target_pdf --type apriltag --nx [NUM_COLS] --ny [NUM_ROWS] --tsize [TAG_WIDTH_M] --tspace [TAG_SPACING_PERCENT]命令生成标定板
建议使用apriltag的标定板,因为存在序号和其他识别信息,可以避免相机运动过大等导致相机图像中棋盘格没有能完全拍摄进去。而且注意如果是A4纸来打印,一定要保证是原尺寸打印,不要在打印选项里按默认页边距缩放。标定板不需要太大,不过还是根据相机基线来选择,我用的是800800mm的6cm6cm的二维码格。

进行rosbag生成

ZED2我自己编了多线程去抓取图片和IMU数据,然后存成

/File
	-/cam0
  		--***.png
  		--***.png
  	-/cam1
  		--***.png
  		--***.png
	-imu.csv

图片命名是19位时间戳。然后调用kalibr_bagcreater --folder ./File --output-bag calib.bag
注意如果是双目的话一定要保证采集的图片时间戳对齐,图像数量相同。而且在采集标定图像时,要尽量保证背景是纯色的。imu文件的具体结构可以看wiki,大致是timestamp,gyr,acc

标定双目内外参

标定相机内外参的时候图像计算速度贼慢,所以建议是4HZ的图像采集频率采集标定图像。在背景不太干净或者相机运动过快时可能会报无法进行PnP解算,或者报四元数应该为单位四元数的错误。重录标定数据就行。.
调用kalibr_calibrate_cameras --bag ./calibra.bag --topics cam0/image_raw cam1/image_raw --models pinhole-radtan pinhole-radtan --target ./april.yaml进行标定,上述话题名是调用自带的rosbag制作包默认生成的,如果是自己用ROS采的,记得换成自己的ROS话题
radtan是其中的一种相机模型 ,适合于畸变比较小的。具体选择可以看wiki。

标定双目-IMU外参

标定完双目后,可以用结果标定文件来继续标定IMU和双目,这时候需要再录一个新的包,IMU200HZ、相机20HZ最好。录的时间不需要太长,然后调用
kalibr_calibrate_imu_camera --bag [filename.bag] --cam [camchain.yaml]
–imu [imu.yaml] --target [target.yaml] 即可

你可能感兴趣的:(SLAM)