专栏首页科学计算slam标定(三) vio系统

slam标定(三) vio系统

视觉标定(三) vio标定

一、vio标定原理

 vio由双目相机及imu构成,两者分别对应camera坐标系与body坐标系,我们需要对两个坐标系之间的位姿矩阵和图像与imu数据时间偏移进行标定。

 我们利用B样条曲线对vio系统进行标定。B样条曲线是贝塞尔曲线的延申,贝塞尔曲线是一种高阶曲线,可用于复杂模型的设计,但有两个缺点,一是阶数太高,二是改变局部影响整体。针对这两个缺点,B样条曲线应运而生,B样条曲线实现了指定阶数,实现了贝塞尔曲线的拼接。

 标定中我们只是借用B样条曲线实现残差方程的建立,这里我们不对B样条曲线的具体原理展开详述,只介绍其基本使用。B样条曲线主要由控制点,节点,基本函数表组成,我们只要指定了控制点与节点数量,即可按照基本函数表实现B样条曲线的估计,如下图所示,方形控制点,三角形节点。

 相机由原始的图像只能得到位姿数据,而imu可以得到三轴加速度及角速度,显然二者没有直接的联系,因此我们通过B样条曲线对相机进行估计,与imu建立残差方程,将加速度误差,角速度误差,零偏误差,位姿运动误差加入到BA优化方程当中,进行非线性优化迭代,如下所示:

for cam in self.CameraChain.camList:
    cam.findTimeshiftCameraImuPrior(self.ImuList[0], verbose)

############################################
## add error terms
############################################
#Add calibration target reprojection error terms for all camera in chain
self.CameraChain.addCameraChainErrorTerms(problem, self.poseDv, blakeZissermanDf=blakeZisserCam, timeOffsetPadding=timeOffsetPadding)

# Initialize IMU error terms.
for imu in self.ImuList:
    imu.addAccelerometerErrorTerms(problem, self.poseDv, self.gravityExpression, mSigma=huberAccel, accelNoiseScale=accelNoiseScale)
    imu.addGyroscopeErrorTerms(problem, self.poseDv, mSigma=huberGyro, gyroNoiseScale=gyroNoiseScale, g_w=self.gravityExpression)

    # Add the bias motion terms.
    if doBiasMotionError:
        imu.addBiasMotionTerms(problem)

# Add the pose motion terms.
if doPoseMotionError:
    self.addPoseMotionTerms(problem, mrTranslationVariance, mrRotationVariance)

# Add a gravity prior
self.problem = problem

 时间的偏移依然采用B样条曲线对相机的旋转角速度进行估计,将陀螺仪角速度作为测量,进行互相关计算,得到偏移索引。

二、标定步骤

 我们依然采用kalibr工具进行标定,采集vio数据时相比双目数据尽量运动较大充分激励imu,对于生成的bag文件,我们将之前imu与cams的标定结果拿来使用,然后执行下述命令进行标定:

kalibr_calibrate_imu_camera --bag voi.bag --target 2april_6x6.yaml --imu imu_bmx160.yaml --cams camchain-cam.yaml

 等待漫长的时间,cam0、cam1、陀螺仪、加速度误差如下图所示,由图可见,cams的重投影误差大于2个像素,标定结果不是很好,最后重新进行双目标定,陀螺仪与加速度误差正常:

 最终的标定结果如下所示:

cam0:
  T_cam_imu:
  - [-0.021640613967887967, 0.9996846699952313, 0.012737519523803142, 0.0943689450739029]
  - [-0.05318702193582009, -0.01387363738123537, 0.9984881886549353, -0.016075204084512736]
  - [0.9983500510966545, 0.020930426711856576, 0.0534704845028372, -0.002524643123212848]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [-0.029772066960790305, 0.06754143559647674, -0.05439220501790035,
    0.013562369372802113]
  distortion_model: equidistant
  intrinsics: [288.42279508017543, 288.2501118514416, 314.48227248976, 209.13222129484865]
  resolution: [640, 400]
  rostopic: /cam0/image_raw
  timeshift_cam_imu: 0.038078317290195576
cam1:
  T_cam_imu:
  - [0.01016316997918798, 0.9998444491129306, -0.014414837981561512, -0.020421941435881386]
  - [-0.03860727630216526, 0.014797185810593971, 0.9991448951521571, -0.011343342336408197]
  - [0.999202776313448, -0.009597961770464236, 0.038751657220695845, -0.003410126461149912]
  - [0.0, 0.0, 0.0, 1.0]
  T_cn_cnm1:
  - [0.9991256216395883, -0.028805073535218002, 0.03030280386253717, -0.11509491601667944]
  - [0.028354632585837286, 0.9994824918256658, 0.015190896776503355, 0.0020860975265854184]
  - [-0.030724696812546234, -0.01431838931524384, 0.9994253232399051, 0.0017823520038439426]
  - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [-0.028122535573276014, 0.06241390797743572, -0.050088085109920036,
    0.012376401933419342]
  distortion_model: equidistant
  intrinsics: [289.36201843178367, 289.2052912742452, 312.7097758328454, 210.45276733552467]
  resolution: [640, 400]
  rostopic: /cam1/image_raw
  timeshift_cam_imu: 0.03760055980093673

SLAM标定系列文章

1. slam标定(二) 双目立体视觉

2. slam标定(一) 单目视觉

3. IMU标定(三)确定误差的标定

4. IMU标定(二)随机误差的标定

5. IMU标定

本文分享自微信公众号 - 科学计算technomania(Quant_Times),作者:大亮

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kimera实时重建的语义SLAM系统

    Kimera是C++实现的一个具有实时度量的语义SLAM系统,使用的传感器有相机与IMU惯导数据来构建环境语义标注的3D网格,Kimera支持ROS运行在CPU...

    点云PCL博主
  • 旷视SLAM组负责人刘骁:三维视觉与机器人

    ----大家好,我是旷视研究院SLAM组负责人刘骁,很高兴能和大家分享机器人领域一些有关三维视觉技术的思考。

    CV君
  • 距离-视觉-惯性里程计:无激励的尺度可观测性(ICRA2021)

    Range-Visual-Inertial Odometry: Scale Observability Without Excitation

    计算机视觉
  • 立体视觉+惯导+激光雷达SLAM系统

    标题:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

    点云PCL博主
  • SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

    视觉SLAM的稳定性是一项技术挑战。因为基于单目的视觉SLAM需要初始化、尺度的不确定性和尺度漂移等问题[1]。尽管立体相机和RGB-D相机可以解决初始化和缩放...

    点云PCL博主
  • 用于机器人导航辅助的6自由度姿态估计的平面辅助视觉惯性里程计

    Plane-Aided Visual-Inertial Odometry for 6-DOF Pose Estimation of a Robotic Navi...

    计算机视觉
  • CodeVIO:基于可学习优化密集深度的视觉惯性里程计(ICRA2021)

    (Xingxing Zuo, Nate Merrill, Wei Li, Yong Liu, Marc Pollefeys, and GuoquanHuang....

    3D视觉工坊
  • R3LIVE:一个实时鲁棒、带有RGB颜色信息的激光雷达-惯性-视觉紧耦合系统(香港大学)

    R3LIVE: A Robust, Real-time, RGB-colored, LiDAR-Inertial-Visual tightly-coupled ...

    计算机视觉
  • Ultimate SLAM?利用事件相机解锁高速运动、高动态范围场景

    Rosinol Vidal, A., Rebecq, H., Horstschaefer, T., Scaramuzza, D., Ultimate SLAM?...

    3D视觉工坊
  • 双目视觉惯性里程计的在线初始化与自标定算法

    标题:An Online Initialization and Self-Calibration Method for Stereo Visual-Inerti...

    3D视觉工坊
  • 最近一年语义SLAM有哪些代表性工作?

    目前 Semantic SLAM (注意不是 Semantic Mapping)工作还比较初步,可能很多思路还没有打开,但可以预见未来几年工作会越来越多。语义 ...

    用户1150922
  • ICRA 2021| 聚焦距离的Camera-IMU-UWB融合定位方法

    Range-Focused Fusion of Camera-IMU-UWB for Accurate and Drift-Reduced Localizati...

    3D视觉工坊
  • CodeVIO:紧耦合神经网络与视觉惯导里程计的稠密深度重建(ICRA2021 Best Paper Finalist)

    大家好!在这篇文章里我将为大家简要介绍我们在ICRA2021上发表的论文"CodeVIO: Visual-Inertial Odometry with Lear...

    3D视觉工坊
  • SLAM综述(4)激光与视觉融合SLAM

    SLAM包含了两个主要的任务:定位与构图,在移动机器人或者自动驾驶中,这是一个十分重要的问题:机器人要精确的移动,就必须要有一个环境的地图,那么要构建环境的地图...

    点云PCL博主
  • SLAM轨迹全局误差计算

    SLAM结果输出之后,我们需要对其进行测量,判断定位的精确度如何。我们采用如下的高精度optitrack设备对SLAM设备进行GroundTruth数据的采集,...

    猫叔Rex
  • 【SLAM】开源 | 北大&谷歌--提出了一种用于立体视觉惯性里程计估计的新型SLAM框架,性能SOTA!

    论文地址: http://arxiv.org/pdf/2009.12662v1.pdf

    CNNer
  • 基于简化点云地图的语义边缘对齐的单目定位方法

    标题:Compact 3D Map-Based Monocular Localization Using Semantic Edge Alignment

    点云PCL博主
  • 一文详解ORB-SLAM3

    ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。

    3D视觉工坊
  • 一文详解ORB-SLAM3

    ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。

    计算机视觉

扫码关注云+社区

领取腾讯云代金券