用Kalibr标定相机和IMU外参

该文详细介绍了在Ubuntu系统中如何安装Kalibr功能包,包括依赖库的安装和解决编译问题。然后,文章讲解了如何制定标定板,创建apriltag.yaml文件,并记录相机内参标定所需的数据。接着,提供了相机内参和IMU内参的标定步骤,以及相机和IMU外参标定的数据录制和标定方法。
摘要由CSDN通过智能技术生成

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是在标定过程中的一个显示界面,可以看到图片提取的过程,可以不要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值