1.安装Kalibr功能包
首先在Gitcode下载Kalibr功能包;
安装依赖:
sudo apt-get install -y \
git wget autoconf automake nano \
libeigen3-dev libboost-all-dev libsuitesparse-dev \
doxygen libopencv-dev \
libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev
# Ubuntu 16.04
sudo apt-get install -y python2.7-dev python-pip python-scipy \
python-matplotlib ipython python-wxgtk3.0 python-tk python-igraph
# Ubuntu 18.04
sudo apt-get install -y python3-dev python-pip python-scipy \
python-matplotlib ipython python-wxgtk4.0 python-tk python-igraph
# Ubuntu 20.04
sudo apt-get install -y python3-dev python3-pip python3-scipy \
python3-matplotlib ipython3 python3-wxgtk4.0 python3-tk python3-igraph
接着建立工作空间之后直接编译,看你自己电脑的工作环境能不能编译成功,我在编译的时候遇到了如下的问题:
fatal error: libv4l2.h: No such file or directory compilation terminated.
解决办法:在终端输入
sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp
我就可以编译成功了,我看其他的博客说是要安装相关的依赖,如果你的环境不能成功编译,则自行解决即可。
2.制定标定板(参考1 参考2)
安装依赖:
sudo apt-get install python-pyx
执行如下命令可以查看可用的指令
rosrun kalibr kalibr_create_target_pdf --h
执行下面的指令,生成5.5cm*5.5cm的aprilgrid
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.055 --tspace 0.3
标定板参数说明:
--type apriltag 标定板类型
--nx [NUM_COLS] 列个数
--ny [NUM_ROWS] 行个数
--tsize [TAG_WIDTH_M] 二维码方格长度,单位m
--tspace [TAG_SPACING_PERCENT] 小方格与二维码方格长度比例
其中tspace的计算方式如下图所示:
加入–eps参数,可以生成eps文件
rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.055 --tspace 0.3 --eps
生成的标定板图片位于你运行终端的目录下,如下图所示
3.相机内参的标定(参考1 参考2)
a.创建标定板的apriltag.yaml文件,如下所示:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.024 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
具体的值根据自己的标定板而定。
b.录制标定数据
启动相机节点,因为kalibr处理时建议图像频率不能太高,此处使用topic_tools/throttle(用法:参考1 参考2)对输出的图像话题降频,4Hz也是官方推荐的频率,如下所示:
# 启动对应的相机节点
roslaunch test pub.launch
# 对图像数据进行降低频率的操作
rosrun topic_tools throttle messages /camleft/video_image 4.0 /caml
其中/camleft/video_image为原先的相机话题名;4.0为话题发布的频率,这里即为1秒发布4次;/caml为修改后的话题名。
录制数据包
rosbag record /caml -O camlr1.bag
c.标定
rosrun kalibr kalibr_calibrate_cameras
--bag /home/luoteng/kalibr_ws/bag/camlr1.bag
--topics /caml
--models pinhole-radtan pinhole-radtan
--target /home/luoteng/kalibr_ws/doc/board/apriltag.yaml
--show-extraction
--bag-from-to 5 105
–bag后面是录制的数据包的绝对路径;
–topics后面是待标定的话题数据(已经控制频率后的);
–models后面是相机/畸变模型,有几目相机就要写几个,这里是两个针孔模型相机,所以是两个pinhole-radtan;相应地,其他支持的模型可以查看相机模型;
–target后面是标定板参数文件的绝对路径;
–show-extraction是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要;
–bag-from-to后面是想要使用数据时间段的起始时间和结束时间,单位:秒(s),这个参数可以剔除掉刚开始录制和结束时一些出入视野等画面。
d.创建相机内参的.yaml文件
cam0:
cam_overlaps: [1]
camera_model: pinhole
distortion_coeffs: [-0.11618573305493797, 0.06422069640456901, -0.00013436975723873972,
-0.001005182072042385]
distortion_model: radtan
intrinsics: [781.3078393884367, 777.6555008477854, 818.0060374225857, 637.1024477055486]
resolution: [1624, 1240]
rostopic: /caml
4.IMU内参的标定
制作IMU内参的.yaml文件
#Accelerometers
accelerometer_noise_density: 4.8641695361661035e-03 #Noise density (continuous-time)
accelerometer_random_walk: 2.3944306307068487e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 5.4583665041817392e-04 #Noise density (continuous-time)
gyroscope_random_walk: 6.1968037914410386e-06 #Bias random walk
rostopic: /imu #the IMU ROS topic
update_rate: 100.0 #Hz (for discretization of the values above)
按照标定的结果填入即可。
5.相机和IMU的外参标定(参考1 参考2)
a.录制数据集
按照kalibr作者的tips,录制数据包时:
i).充分激励IMU在三轴平移和三轴旋转上的运动;
ii).尽可能减少震动,尤其是在拿起和放下传感器时(关于这点,可以使用参数–bag-from-to指定数据包使用的时间,但在过程中依然要减少传感器的震动);
iii).通过保持较低的快门时间和良好的照明等来尽量减少图片的运动模糊。
关于充分激励IMU各轴,看B站。
录制数据包时同样也要控制图像数据频率,如下所示
rosrun topic_tools throttle messages /camleft/video_image 4.0 /caml
rosbag record /caml /imu -O camlr-imu1.bag
b.标定
rosrun kalibr kalibr_calibrate_imu_camera
--target /home/luoteng/kalibr_ws/doc/board/apriltag.yaml
--cam /home/luoteng/kalibr_ws/doc/stereo/camchain-homeluotengkalibr_wsbagcamlr1.yaml
--imu /home/luoteng/kalibr_ws/doc/imu/kalibr_imu.yaml
--bag /home/luoteng/kalibr_ws/bag/camlr-imu1.bag
--bag-from-to 20 280
--show-extraction
–target后面是标定板yaml的绝对路径;
–cam后面相机内外参yaml(camchain-xxx.yaml)的绝对路径;
–imu后面是对应格式的imu内参yaml的绝对路径;
–bag后面是录制的数据包的绝对路径;
–bag-from-to后面是想要使用数据时间段的起始时间和结束时间,单位:秒(s)
–show-extraction是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要