VIO标定(相机和IMU的标定)

VIO标定

  • VIO标定分为三个部分,相机的标定,IMU的标定,相机和IMU的联合标定。

双目相机相机内参标定(单目相机可以用类似的方法)

  • 标定单目和标定双目的区别
    • 标定单目相机就是简单的把该相机模型的各种内参优化出来,而标定双目相机除了要标定两个摄像头的内参,还要标出两个镜头之间的变换矩阵,因此标定双目会有个帧同步的要求。
  1. 用opencv的api进行标定(不推荐)
    • opencv有单目相机和双目相机的标定的例程,但是用起来有点麻烦,而且看不到获得的图像数据集的评分好不好(比如是否充分在X,Y轴移动,是否充分占满屏幕,是否有足够倾斜的图像)。不推荐使用这种方法,但是如果相机SDK没有自带ros的发送节点的话,也可以用这个。
  2. 用ros自带工具camera_calibration进行标定(推荐)
    • ros有自带的用于相机标定的工具camera_calibration,这个工具用起来很方便,一行命令就可以搞定,用起来还有gui界面,还会对你的数据集进行评分。
    • 这个工具也存在小缺点:
      2.1 新手很难使四条评分值升到比较好的地方,容易让数据集有很多重复,导致数据集过大,优化一遍内参都要很长时间,普通笔记本上90多张图片的计算时间还是可以接受的,不是数据集越多优化出来的内参越好,要看四条评分的数值。
      2.2 不是每款相机的SDK都支持ros的消息发布节点,我之前用的小觅相机(标准版和深度版)是支持的,不过如果相机的SDK不支持的话,你可以自己写一个消息发布节点,写单目的ros消息发布节点还是很容易的,但是双目的话就一定要注意两个话题的帧同步的问题,一般的双目相机都会支持硬件帧同步(就算硬件上支持,软件上也要判断时间戳),不支持的话建议换相机,opencv标定双目也是要帧同步的。
      2.3 这个工具目前能标定的相机模型只有pinhole(小孔成像模型),畸变模型也是只有radtan(有径向畸变也有切向畸变的数学模型(两种畸变都是考虑都二阶就基本够了))。虽然这是最常用的相机模型和畸变模型,但是有时也要用其他的模型,所以这个时候不能用这个工具。

IMU的参数的标定

  • imu的参数有加速度计和陀螺仪三个轴的以及平均的高斯白噪声和随机游走噪声
  • 标定imu可以用港科大开源的imu_utils,该工具也是基于ros的,使用很简单,自己写一个launch文件(就是启动他的节点还有设置一些自己的相机的参数,比如ros话题路径,标定时长等),然后启动这个launch文件(启动launch文件之前要记得启动你的imu的消息发布的节点,也可以是rosbag),然后静止一段时间(时间长度可以在launch文件里面设置,github上默认是两个小时),就可以有数据。

摄像头和imu的联合标定

  • 摄像头和imu的联合标定,标定的是两个摄像头到imu的变换矩阵,这个在VIO里面是重要的。
  • kalibr进行标定
    kalibr是一个非常厉害的标定工具,除了用起来有点麻烦,找不到什么缺点,他不仅仅可以做摄像头和imu的联合标定,还可以用来只标定相机内参(包括单目和双目),这里的标定相机内参是可以有好几种相机模型和畸变模型可以选择的(比如pinhole, MEI),还可以单独标定imu的内参。而且标定完之后不仅是生成了要用的yaml文件,还会生成一个pdf格式的报告,有图表有数据,看起来非常舒服。kalibr是支持ros的。kalibr的所有数据的输入都是用的是rosbag,支持ros的用起来都是比较方便的。而为了减少数据集的量,防止计算时间过长,在rosbag record时建议用ros自带工具throttle来降低话题的发布频率。
    不降低频率也就是算的久一些,也不是不可以。
  • 做摄像头和imu的联合标定前要先分别标定好镜头和imu的内参,标定方法可以用我上面说的,如果你想标定的相机模型和畸变模型不是pinhole和radtan的的话,就用kalibr来先标定一遍,kalibr支持的相机和畸变模型见这里,kalibr_calibrate_cameras输入的参数包括一个描述棋盘属性的yaml文件(描述了行数列数,每个方格的宽度和高度),一个有录制了有标定棋盘的rosbag,以及相机和畸变模型的列表和ros话题的列表,其中录制的rosbag可以用kalibr提供的工具kalibr_bagcreater通过已有的图片集制作,介绍见这里,kalibr_bagcreater需要参数有输入数据的文件夹路径,而该文件夹可以由kalibr自带的工具kalibr_extractor来制作,而kalibr_extractor需要输入的就是一个录制了数据的rosbag,以及各个相机的ros话题路径。虽然过程比起ros自带的camera_calibration复杂,但是比较推荐使用这种方法来标定相机,应为可以标定其他的相机模型(比如鱼眼相机模型)和畸变模型,而且标定完还会生成pdf的报告,看起来比较舒服。标定完可以的到相机的内参以及两个相机的变换矩阵,这个和其他的标定工具是差不多的。
  • 搞定以上的准备工作就可以开始使用kalibr_calibrate_imu_cameras来开始camera和imu的联合标定了。使用kalibr_calibrate_imu_cameras需要输入参数包括目标棋盘的yaml文件(和3.1.1一样),相机的内参的参数文件(3.1.1中得到的),imu的内参参数文件(2.1中得到),以及录制好了数据集的rosbag,还可以选择rosbag的播放的时间段。注:github上的相机的yaml文件的格式说明里面还要写两个相机到imu的变换矩阵,这个可以不写。几个yaml文件制作好了之后就可以标定了,过程会有点长,取决于你的数据集的大小以及你的运算设备。然后就可以得到两个镜头和imu之间的变换矩阵。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值