多传感器融合定位十五-多传感器时空标定(综述)

news2024/10/2 12:32:24

多传感器融合定位十五-多传感器时空标定

  • 1. 多传感器标定简介
    • 1.1 标定内容及方法
    • 1.2 讲解思路
  • 2. 内参标定
    • 2.1 雷达内参标定
    • 2.2 IMU内参标定
    • 2.3 编码器内参标定
    • 2.4 相机内参标定
  • 3. 外参标定
    • 3.1 雷达和相机外参标定
    • 3.2 多雷达外参标定
    • 3.3 手眼标定
    • 3.4 融合中标定
    • 3.5 总结
  • 4. 时间标定
    • 4.1 离散时间
    • 4.2 连续时间
    • 4.3 总结

Reference:

  1. 深蓝学院-多传感器融合
  2. 多传感器融合定位理论基础

文章跳转:

  1. 多传感器融合定位一-3D激光里程计其一:ICP
  2. 多传感器融合定位二-3D激光里程计其二:NDT
  3. 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
  4. 多传感器融合定位四-3D激光里程计其四:点云线面特征提取
  5. 多传感器融合定位五-点云地图构建及定位
  6. 多传感器融合定位六-惯性导航原理及误差分析
  7. 多传感器融合定位七-惯性导航解算及误差分析其一
  8. 多传感器融合定位八-惯性导航解算及误差分析其二
  9. 多传感器融合定位九-基于滤波的融合方法Ⅰ其一
  10. 多传感器融合定位十-基于滤波的融合方法Ⅰ其二
  11. 多传感器融合定位十一-基于滤波的融合方法Ⅱ
  12. 多传感器融合定位十二-基于图优化的建图方法其一
  13. 多传感器融合定位十三-基于图优化的建图方法其二
  14. 多传感器融合定位十四-基于图优化的定位方法
  15. 多传感器融合定位十五-多传感器时空标定(综述)

1. 多传感器标定简介

1.1 标定内容及方法

在这里插入图片描述

1.2 讲解思路

  1. 以思路讲解为主,并给出参考文献和开源代码,不做过多细节展开;
  2. 对已有方法做汇总分析,以求能在新的任务中掌握标定方案设计思路。

2. 内参标定

2.1 雷达内参标定

在这里插入图片描述

  1. 目的
    由于安装原因,线束之间的夹角和设计不一致,会导致测量不准。

  2. 方法
    多线束打在平面上,利用共面约束,求解夹角误差。

  3. 参考
    论文:Calibration of a rotating multi-beam Lidar
    论文:Improving the Intrinsic Calibration of a Velodyne LiDAR Sensor
    论文:3D LIDAR–camera intrinsic and extrinsic calibration: Identifiability and analytical least-squares-based initialization

2.2 IMU内参标定

  1. 目的
    由于加工原因,产生零偏、标度因数误差、安装误差。

  2. 方法
    分立级标定:基于转台;
    迭代优化标定:不需要转台。

  3. 参考
    论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments
    代码:https://github.com/Kyle-ak/imu_tk

2.3 编码器内参标定

  1. 目的
    用编码器输出解算车的位移增量和角度增量,需已知轮子半径和两轮轴距。

  2. 方法
    以车中心雷达/组合导航做观测,以此为真值,反推模型参数。

  3. 参考
    论文:Simultaneous Calibration of Odometry and Sensor Parameters for Mobile Robots

2.4 相机内参标定

在这里插入图片描述

  1. 目的
    相机与真实空间建立关联,需已知其内参。

  2. 方法
    张正友经典方法

3. 外参标定

3.1 雷达和相机外参标定

在这里插入图片描述

  1. 目的
    解算雷达和相机之间的相对旋转和平移。

  2. 方法
    PnP是主流,视觉提取特征点,雷达提取边缘,建立几何约束。

  3. 参考
    论文: LiDAR-Camera Calibration using 3D-3D Point correspondences
    代码: https://github.com/ankitdhall/lidar_camera_calibration
    论文: Automatic Extrinsic Calibration for Lidar-Stereo Vehicle Sensor Setups
    代码: https://github.com/beltransen/velo2cam_calibration

3.2 多雷达外参标定

在这里插入图片描述

  1. 目的
    多雷达是常见方案,使用时将点云直接拼接,但前提是已知雷达之间的外参(相对旋转和平移)。

  2. 方法
    基于特征(共面)建立几何约束,从而优化外参。

  3. 参考
    论文:A Novel Dual-Lidar Calibration Algorithm Using Planar Surfaces
    代码:https://github.com/ram-lab/lidar_appearance_calibration

3.3 手眼标定

在这里插入图片描述

  1. 目的
    手眼标定适用于所有无共视,但是能输出位姿的传感器之间标定。包括:
    • 无共视的相机、雷达,或雷达与雷达之间;
    • 相机与IMU,或雷达与IMU之间(前提是IMU要足够好,或直接使用组合导航)。

  2. 方法
    均基于公式 A X = X B AX=XB AX=XB

  3. 参考
    论文:LiDAR and Camera Calibration using Motion Estimated by Sensor Fusion Odometry
    代码:https://github.com/ethz-asl/lidar_align

3.4 融合中标定

  1. 目的
    • 脱离标靶,实现在线标定;
    • 某些器件无法提供准确位姿(如低精度IMU),不能手眼标定。

  2. 方法
    在融合模型中,增加外参作为待估参数。

  3. 参考
    众多vio/lio系统,如vins、 lio-mapping、 M-Loam 等

3.5 总结

  1. 这些方法中,推荐优先级从高到低为:
    a. 基于共视的标定
    b. 融合中标定
    c. 手眼标定

  2. 建议
    应在良好环境下标定,尽量避免不分场景的在线标定。良好环境指观测数据优良的场景,例如:
    a. GNSS 信号良好;
    b. 点云面特征丰富,没有特征退化;
    c. 动态物体较少

4. 时间标定

4.1 离散时间

  1. 目的
    在原有离散时间融合模式下,简单地解决时间同步问题。
    在这里插入图片描述

  2. 方案 I
    在这里插入图片描述简单但巧妙的策略: IMU时间保持不变,图像上特征点基于匀速运动模型修改位置。
    与不考虑时间误差时相比,架构不变,使用极小的改动,实现了期望的效果。
    e l k = z l k − π ( R c k w T ( P l − p c k w ) ) z l k = [ u l k v l k ] T . ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ e l k = z l k ( t d ) − π ( R c k w T ( P l − p c k w ) ) z l k ( t d ) = [ u l k v l k ] T + t d V l k . \begin{array}{l} \mathbf{e}_l^k=\mathbf{z}_l^k-\pi\left(\mathbf{R}_{c_k}^{w^T}\left(\mathbf{P}_l-\mathbf{p}_{c_k}^w\right)\right) \\ \mathbf{z}_l^k=\left[\begin{array}{ll} u_l^k & v_l^k \end{array}\right]^T . \\ \downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow \\ \mathbf{e}_l^k=\mathbf{z}_l^k\left(t_d\right)-\pi\left(\mathbf{R}_{c_k}^{w^T}\left(\mathbf{P}_l-\mathbf{p}_{c_k}^w\right)\right) \\ \mathbf{z}_l^k\left(t_d\right)=\left[\begin{array}{ll} u_l^k & v_l^k \end{array}\right]^T+t_d \mathbf{V}_l^k . \end{array} elk=zlkπ(RckwT(Plpckw))zlk=[ulkvlk]T.↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓elk=zlk(td)π(RckwT(Plpckw))zlk(td)=[ulkvlk]T+tdVlk.参考文献:Online Temporal Calibration for Monocular Visual-Inertial Systems

  3. 方案 II
    在滤波中计算相机位姿时,直接按时间差对积分区间进行调整。
    状态量: x = [ x I T I C q ‾ T C p I T t d c 1 T ⋯ c M T ] T \mathbf{x}=\left[\begin{array}{lllllll} \mathbf{x}_I^T & { }_I^C \overline{\mathbf{q}}^T & { }^C \mathbf{p}_I^T & t_d & \mathbf{c}_1^T & \cdots & \mathbf{c}_M^T \end{array}\right]^T x=[xITICqTCpITtdc1TcMT]T
    相机位姿估计: c ^ n e w = [ G C q ( t + t d ) ^ G p C ( t + t d ) ^ ] = [ I C q ^ ⊗ G I q ^ ( t + t ^ d ) G p ^ I ( t + t ^ d ) + G I R ^ ( t + t ^ d ) T I p ^ C ] \hat{\mathbf{c}}_{n e w}=\left[\begin{array}{c}{ }_G^C \widehat{\mathbf{q}\left(t+t_d\right)} \\ { }^G \widehat{\mathbf{p}_C\left(t+t_d\right)}\end{array}\right]=\left[\begin{array}{c}{ }_I^C \hat{\mathbf{q}} \otimes{ }_G^I \hat{\mathbf{q}}\left(t+\hat{t}_d\right) \\ { }^G \hat{\mathbf{p}}_I\left(t+\hat{t}_d\right)+{ }_G^I \hat{\mathbf{R}}\left(t+\hat{t}_d\right)^T{ }^I \hat{\mathbf{p}}_C\end{array}\right] c^new=[GCq(t+td) GpC(t+td) ]=[ICq^GIq^(t+t^d)Gp^I(t+t^d)+GIR^(t+t^d)TIp^C]
    参考文献:Online Temporal Calibration for Camera-IMU Systems: Theory and Algorithms

4.2 连续时间

  1. 原因
    预积分中把时间差作为待估状态量,对时间差进行建模,如下:
    Δ p m i = ∑ k = κ i − 1 ( Δ v m k Δ t k + Δ R m k 2 f ⁡ ( t k − δ t m − b f m ) Δ t k 2 ) Δ v m i = ∑ k = κ i − 1 Δ R m k f ( t k − δ t m ) − b f m ) Δ t k Δ R m i = ∏ k = κ i = 1 Exp ⁡ ( ω ( t k − δ t m ) − b ω m ) Δ t k ) , \begin{array}{l} \Delta \mathbf{p}_m^i=\sum_{k=\kappa}^{i-1}\left(\Delta \mathbf{v}_m^k \Delta t_k+\frac{\Delta \mathbf{R}_m^k}{2} \operatorname{f}\left(t_k-\delta_t^m-\mathbf{b}_f^m\right) \Delta t_k^2\right) \\ \left.\Delta \mathbf{v}_m^i=\sum_{k=\kappa}^{i-1} \Delta \mathbf{R}_m^k \mathbf{f}\left(t_k-\delta_t^m\right)-\mathbf{b}_f^m\right) \Delta t_k \\ \left.\Delta \mathbf{R}_m^i=\prod_{k=\kappa}^{i=1} \operatorname{Exp}\left(\omega\left(t_k-\delta_t^m\right)-\mathbf{b}_\omega^m\right) \Delta t_k\right), \end{array} Δpmi=k=κi1(ΔvmkΔtk+2ΔRmkf(tkδtmbfm)Δtk2)Δvmi=k=κi1ΔRmkf(tkδtm)bfm)ΔtkΔRmi=k=κi=1Exp(ω(tkδtm)bωm)Δtk),由于要对时间差求雅可比,因此插值函数必须可导,雅可比如下:
    Δ R m ( b ω , δ t ) i ≈ Δ R m ( b ˉ ω m , δ ˉ δ m ) i Exp ⁡ ( ∂ Δ R m i ∂ b ω b ^ ω m + ∂ Δ R m i ∂ δ t δ ^ t m ) . Δ v m ( b f , b ω , δ t ) i ≈ Δ Δ v m ( b ˉ f m , b ˉ m m , δ ˉ t m ) i + ∂ Δ v m i ∂ b f b ^ f m + ∂ Δ v m i ∂ b ω b ^ ω m + ∂ Δ v m i ∂ δ t δ ^ t m Δ p m ( b f , b ω , , δ t ) i ≈ Δ p m ( b f m ‾ , b ˉ m m , δ ˉ t m ) i + ∂ Δ p m m ∂ b f b ^ f m + ∂ Δ p m i ∂ b ω b ^ ω m + ∂ Δ p m i ∂ δ t δ ^ t m \begin{array}{l} \Delta \mathbf{R}_{m\left(\mathbf{b}_\omega, \delta_t\right)}^i \approx \Delta \mathbf{R}_{m\left(\bar{b}_\omega^m, \bar{\delta}_\delta^m\right)}^i \operatorname{Exp}\left(\frac{\partial \Delta \mathbf{R}_m^i}{\partial \mathbf{b}_\omega} \hat{\mathbf{b}}_\omega^m+\frac{\partial \Delta \mathbf{R}_m^i}{\partial \delta_t} \hat{\delta}_t^m\right). \\ \Delta \mathbf{v}_{m\left(\mathbf{b}_f, \mathbf{b}_\omega, \delta_t\right)}^i \approx \Delta \Delta \mathbf{v}_{m\left(\bar{b}_f^m, \bar{b}_m^m, \bar{\delta}_t^m\right)}^i+\frac{\partial \Delta \mathbf{v}_m^i}{\partial \mathbf{b}_f} \hat{\mathbf{b}}_f^m +\frac{\partial \Delta \mathbf{v}_m^i}{\partial \mathbf{b}_\omega} \hat{\mathbf{b}}_\omega^m+\frac{\partial \Delta \mathbf{v}_m^i}{\partial \delta_t} \hat{\delta}_t^m \\ \Delta \mathbf{p}_{m\left(\mathbf{b}_f, \mathbf{b}_{\omega,}, \delta_t\right)}^i \approx \Delta \mathbf{p}_{m\left(\overline{\mathbf{b}_f^m}, \bar{b}_m^m, \bar{\delta}_t^m\right)}^i+\frac{\partial \Delta \mathbf{p}_m^m}{\partial \mathbf{b}_f} \hat{\mathbf{b}}_f^m +\frac{\partial \Delta \mathbf{p}_m^i}{\partial \mathbf{b}_\omega} \hat{b}_\omega^m+\frac{\partial \Delta \mathbf{p}_m^i}{\partial \delta_t} \hat{\delta}_t^m \\ \end{array} ΔRm(bω,δt)iΔRm(bˉωm,δˉδm)iExp(bωΔRmib^ωm+δtΔRmiδ^tm).Δvm(bf,bω,δt)iΔΔvm(bˉfm,bˉmm,δˉtm)i+bfΔvmib^fm+bωΔvmib^ωm+δtΔvmiδ^tmΔpm(bf,bω,,δt)iΔpm(bfm,bˉmm,δˉtm)i+bfΔpmmb^fm+bωΔpmib^ωm+δtΔpmiδ^tm参考文献:3D Lidar-IMU Calibration based on Upsampled Preintegrated Measurements for Motion Distortion Correction
  2. 方法
    把输入建立为连续时间函数,从而可以在任意时间求导。
  3. 参考
    a. kalibr 系列
    论文:Continuous-Time Batch Estimation using Temporal Basis Functions
    论文:Unified Temporal and Spatial Calibration for Multi-Sensor Systems
    论文:Extending kalibr Calibrating the Extrinsics of Multiple IMUs and of Individual Axes
    代码:https://github.com/ethz-asl/kalibr
    b. 其他
    论文:Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation
    代码:https://github.com/APRIL-ZJU/lidar_IMU_calib

4.3 总结

  1. 时间差估计,在某些情况下不得已而为之,实际中应尽量创造条件实现硬同步;
  2. 不得不估计时,也应尽量在良好环境下估计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于live555源码的rtsp服务器

下载live555源码 http://www.live555.com/liveMedia/public/ 在Linux系统的自定义目录下输入,下载源码: wget http://www.live555.com/liveMedia/public/live.2023.01.19.tar.gz解压源码: tar -xvf live.2023.01.19.tar.gz当前目录下运行&…

前端卷算法系列(一)

前端卷算法系列(一) 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同…

无重复字符的最长子串-力扣3-java

一、题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s "bbbbb"输出: 1解释: 因为…

Springboot Web开发

文章目录一. 静态资源访问1. 配置静态资源访问前缀2. 修改默认静态资源存放目录3. Webjars4. 欢迎页支持5. 自定义Favicon二. 请求处理1. 路径变量2. 请求头处理3. 查询字符串处理4. 获取Cookie的值5. 获取请求体的值6. 获取请求域中的数据7. 矩阵变量一. 静态资源访问 只要静…

ChatGPT全球爆火,究竟有何特别之处?

​ 新年复工不过半月,职场人似乎就受到了来自AI的“威胁”,关于人工智能聊天系统ChatGPT的热搜频频上榜。 ChatGPT不仅拟人,更类人,甚至被认为是职场人的“敌人”。 那么,ChatGPT能替代哪些职业? 它自己的回…

STP协议基础

STP协议技术来源二层环路及危害二层交换机网络的冗余性与环路人为错误导致的二层环路二层环路带来的问题STP生成树协议STP概述STP基本概念桥ID根桥COSTRPC(Root Path Cost)根路径开销PORT ID端口IDBPDU桥协议数据单元STP的计算过程(1&#xf…

VS中安装gismo库

文章目录前言一、下载安装paraview直接下载压缩包安装就可以了解压后按步骤安装即可二、gismo库的安装gismo库网址第一种方法:第二种方法第三种方法:用Cmake软件直接安装首先下载cmake软件[网址](https://cmake.org/download/)安装gismo库三、gismo库的使…

ChatGPT闭包解答

怎么理解javaScript闭包 JavaScript 闭包是一种特殊的对象,它包含了函数及其相关作用域中的变量。它允许函数访问并保存其外部作用域中的变量,即使该函数已经离开了其作用域。 闭包的一个常见应用场景是封装私有变量。例如,在一个对象的方法内…

Android IO 框架 Okio 的实现原理,如何检测超时?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 在上一篇文章里,我们聊到了 Square 开源的 I/O 框架 Okio 的三个优势:精简且全面的 API、基于共享的缓冲区设计以…

电机参数中力矩单位kgf.cm,Nm,mNm表示的含义

力的基本知识 质量和力的比例系数 质量和重力的关系有一个重力系数:g≈9.8 N/kg≈10,后面看到的1kgf就相当于1kg物体的力也就是10N 杠杆原理 对于同一个支点,在不考虑杠杆的重量的情况下,实现同样的作用效果,距离支点越近&…

vscode搭建python Django网站开发环境

这里使用pip安装的方式,打开命令行,输入执行: pip install django2.2这里选择安装2.2版本是因为是新的lts版本,长期支持稳定版。 接下来再安装pillow,Django底层一部分是基于pillow进行的。 pip install pillowpylint…

SpringBoot + Disruptor实现高并发内存消息队列

1. 简介 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关…

【思维模型】概率思维的价值:找到你的人生算法,实现阶级跃迁!

把同样公平的机会放在放在很多人面前,不同的人生算法,会得到迥然不同的结果。 概率思维是什么? 【ChatGPT】概率思维是一种通过使用数学模型来思考和评估不确定性事件的方法。它通过计算不同可能性的概率来预测事件的结果,并评估风险和机会。 概率思维的价值在于它可以帮…

ChatYuan元语AI: 类似ChatGPT功能型对话大模型

ChatYuan元语AI 元语智能开发团队训练了一个类似ChatGPT的功能型对话大模型ChatYuan. 类似ChatGPT模型, 中文开源版,功能型对话大语言模型. 功能有:支持训练端到端文本生成文本生成情感分析句子相似度零样本分类命名实体识别翻译自然语言推理问答文本纠错文本摘要FAQ问答文本…

终于体验了一下ChatGPT

再次尝试 隔了一天,今天(2023-2-11)再试一下。真的是一下。。。(如果没有境外环境的,大家还是在网上找个共享账号试一下吧。网上有人分享的,大家细找一下就可以,我就不在这里发出来了。。。&…

微信小程序 Springboot校运会高校运动会管理系统

3.1小程序端 小程序登录页面,用户也可以在此页面进行注册并且登录等。 登录成功后可以在我的个人中心查看自己的个人信息或者修改信息等 在广播信息中我们可以查看校运会发布的一些信息情况。 在首页我们可以看到校运会具体有什么项目运动。 在查看具体有什么活动我…

“笨办法”学Python 3 ——练习 37. 复习各种符号

练习 37. 复习各种符号 关键词 可参考:https://www.knowledgedict.com/tutorial/python-keyword.html 数据类型 可参考:https://www.knowledgedict.com/tutorial/python-data-type.html 如果需要查看变量的类型。可以使用Python的内置类type。 例如…

【Python小游戏】通过这款专为程序员设计的《极限车神》小游戏,你的打字速度可以赢过专业录入员,这个秘密98%的人都不知道哦~(爆赞)

导语 哈喽,我是你们的木木子👸! 今天小编要为大家介绍一款小编自己用代码码出来的赛车风格的打字小游戏 取名暂定为《🚗极限车神🚗》打字小游戏。 这款Pygame小游戏在玩法上可以说十分创新,不仅能游戏还…

内存对齐计算方法(偏移量)

内存对齐简单来讲就是把一个数据存放到内存中,其内存的地址要与数据自己大小为整数倍。 处理器在执行指令去操作内存中的数据,这些数据通过地址来获取。 当一个数据所在的地址和它的大小对齐的时候,就说这个数据对齐了,否则就是没…

【GO】29.go-gin支持ssl/tls,即https示例

本文为演示采用自签名证书一.生成证书通过openssl工具生成证书1.1 安装opensslmacos通过brew安装brew install openssl1.2 生成跟证书私钥openssl genrsa -out ca.key 40961.3 准备配置文件vim ca.conf内容如下[ req ] default_bits 4096 distinguished_name req_disti…