目录
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 中的讲解非常清楚,但是需要花些时间好好消化一下。我在这里做一下流程汇总:
先安装 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 指令。
官网上的下载链接无法下载,但是可以直接利用 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 文件中。
同时发布多个相机的 ros 话题,在相机标定中需要将相机话题的频率降低到 4 Hz,而且应当保持多个相机具有相对固定的安装位置,整个相机系统保持不动,移动标定板来录制 rosbag,
rosrun topic_tools throttle messages /YOUR_IAMGE_TOPIC0 4.0 /image0
rosrun topic_tools throttle messages /YOUR_IAMGE_TOPIC1 4.0 /image1
.
.
.
降频后的话题分别是 /image0 /image1 ... ,更改了话题名称以便区分。
rosbag record /image0 /image1 ...
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标定中。
发布多个相机话题,同时发布IMU话题,这次不需要降频;所谓相机-IMU标定,就是计算出每个相机相对于IMU的转移矩阵。这里必须保证标定板固定不动,让相机-IMU系统运动,6个自由度的运动都必须有。
标定板文件: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 名称一致
rosbag record /YOUR_IMAGE_TOPIC0 /YOUR_IMAGE_TOPIC1 ... /YOUR_IMU_TOPIC
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 的话题一致,即可。