利用 kalibr 标定多个相机(>=1)和 IMU 组合系统

目录

1、准备工作

1.1 编译 kalibr

1.2 制作标定板

2、 相机标定

2.1 相机话题降频

2.2 录制rosbag

2.3 相机标定

3、相机-IMU标定

3.1 准备文件

3.2 录制相机+IMU的 rosbag

3.3 标定

附注:


官方链接:Kalibr

官方 wiki 中的讲解非常清楚,但是需要花些时间好好消化一下。我在这里做一下流程汇总:

1、准备工作

1.1 编译 kalibr

先安装 ROS ,根据自己 Ubuntu 系统的版本来选择;然后 git clone 源码到自己的工作空间,与此同时可以安装一些依赖项,一定要注意涉及到 ros package 的安装包必须修改 ros 的版本号与自己安装的相对应。

mkdir -p kalibr_ws/src
cd kalibr_ws/src
catkin_init_workspace
git clone https://github.com/ethz-asl/kalibr.git
cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release
source devel/setup.bash

source 之后,在终端中输入 kalibr_  加 TAB 就会自动检索出所有可用的 kalibr 指令。

1.2 制作标定板

官网上的下载链接无法下载,但是可以直接利用 yaml 文件来生成标定板。

在 Calibration targets 页面中,找到 Aprilgrid 文件,将其中的内容粘贴出来写入本地文件 april_6x6.yaml 

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.088           #size of apriltag, edge to edge [m]
tagSpacing: 0.3          #ratio of space between tags to tagSize
                         #example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]

利用 kalibr_create_target_pdf 指令就可以生成对应以上设定的 pdf 文件

kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.88 --tspace 0.3

打印出来就可以了,实际测量一下打印之后方格的尺寸,修改到以上 ymal 文件中。

2、 相机标定

同时发布多个相机的 ros 话题,在相机标定中需要将相机话题的频率降低到 4 Hz,而且应当保持多个相机具有相对固定的安装位置,整个相机系统保持不动,移动标定板来录制 rosbag,

2.1 相机话题降频

rosrun topic_tools throttle messages /YOUR_IAMGE_TOPIC0 4.0 /image0
rosrun topic_tools throttle messages /YOUR_IAMGE_TOPIC1 4.0 /image1
.
.
.

降频后的话题分别是 /image0  /image1  ... ,更改了话题名称以便区分。

2.2 录制rosbag

rosbag record /image0 /image1 ...

2.3 相机标定

kalibr_calibrate_cameras --target YOUR_PATH/apri_6x6.yaml --bag YOUR_BAG.bag --models pinhole-radtan pinhole-radtan ... --topics /image0 /image1 ...  

这里的相机模型选择 pinhole-radtan 是最常用的相机模型,包括了径向畸变和切向畸变;排列顺序中相机模型与相机话题对应,顺序和数量都必须一致,否则会报错。

输出结果中有一个 camchain_ 打头的 yaml 文件,里面包含了每一个相机的内参以及每个相机对 cam0 的转移矩阵也就是外参;同时这个文件会应用到下一步的相机-IMU标定中。

3、相机-IMU标定

发布多个相机话题,同时发布IMU话题,这次不需要降频;所谓相机-IMU标定,就是计算出每个相机相对于IMU的转移矩阵。这里必须保证标定板固定不动,让相机-IMU系统运动,6个自由度的运动都必须有。

3.1 准备文件

标定板文件:april_6x6.yaml

camchain文件:从第二步相机标定中得到,但是一定一定记得必须修改 rostopic 名称与 3.2 中实际 rosbag 录制的 topic 名称一致

IMU文件:查阅IMU资料,需要的信息包括加速度、加速度的噪声和随机游走方差,参考 Yaml format 中的 imu.yaml 

#Accelerometers
accelerometer_noise_density: 1.86e-03   #Noise density (continuous-time)
accelerometer_random_walk:   4.33e-04   #Bias random walk

#Gyroscopes
gyroscope_noise_density:     1.87e-04   #Noise density (continuous-time)
gyroscope_random_walk:       2.66e-05   #Bias random walk

rostopic:                    /imu0      #the IMU ROS topic
update_rate:                 200.0      #Hz (for discretization of the values above)

在这里也必须修改 rostopic 名称与 3.2 中实际 rosbag 录制的 topic 名称一致

3.2 录制相机+IMU的 rosbag

rosbag record /YOUR_IMAGE_TOPIC0 /YOUR_IMAGE_TOPIC1 ... /YOUR_IMU_TOPIC

3.3 标定

kalibr_calibrate_imu_camera --bag YOUR_BAG.bag] --cam YOUR_camchain.yaml --imu YOUR_imu.yaml --target apri_6x6.yaml

需要比较长时间才能计算完成,请耐心等地。

附注:

看了很多帖子,先用 kalibr_bagextractor 指令拆解 rosbag, 再用 kalibr_bagcreater 生成新的 rosbag,这完全是浪费时间。只需要修改 camchain.yaml 中的 rostopic 名称与你录制的 rosbag 中相机的话题一致;修改 imu.ymal 中 rostopic 名称与你录制的 rosbag 中 IMU 的话题一致,即可。

你可能感兴趣的:(利用 kalibr 标定多个相机(>=1)和 IMU 组合系统)