自动驾驶之多传感器融合--相机与IMU的同步

2023-05-16

作者 | 韦韦道来  编辑 | 韦心雕AI

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【多传感器融合】技术交流群

后台回复【多传感器融合综述】获取图像/激光雷达/毫米波雷达融合综述等干货资料!

    最近的事情比较多,已经将近两个月没有好好维护了。很有幸迎来一位新的常驻小伙伴,贝塔。贝塔也将不定期的推送一些论文笔记。今天来叨叨自动驾驶多传感器融合系列的相机与IMU同步内容。

在自动驾驶中,往往认为IMU所在的位置为车体坐标系的原点(不绝对),所以需要计算相机到IMU之间的时空同步。相机与IMU具有互补性:相机在高速运动、光照改变情况下容易失效,但能够获得丰富的环境信息;而IMU能够获得车辆的运动信息,并且不受周围环境的影响,从而弥补相机的不足。可以通过视觉匹配完成回环检测与回环校正,有效的修正IMU的累计漂移误差,即所谓的相机与IMU的相对位姿。

c5ed5ad8e000da86215163713eaedce2.png 

1)相机与IMU的相对位姿:

相机与IMU之间的相对位姿,就是相机坐标系与IMU坐标系之间的变换,包括相对旋转角和相对平移量。其变换关系满足如下:

12afe6eca88551398ee75c0ff267c7ba.png 

其中wc表示相机坐标系,wb表示IMU坐标系,cb表示相对坐标系。将上式展开可以得到相机坐标系与IMU坐标系之间旋转角和平移量的变换关系:

4b20b2587b618dd447769e65074c047b.png 

2)相机与IMU的时间同步:

由于触发、传输等延时的存在,相机与IMU采样的时间和时间戳的时间并不匹配,如下图,这会导致相机与IMU之间存在时间差656619dd5217f3d664d6dda0120c126d.png

d4b917e9de06c0cd228781a2ab36cfe9.png 

这里时间差的计算为:

d2a1764808b13aa61dd98a21e4a550ee.png 

即将相机的时间戳平移td后,相机与IMU之间实现了同步。

相机与IMU的时空同步目前有很多开源的框架,如熟知的VINS就是集合了相机与IMU状态估计和标定的系统框架,也是目前个人比较推荐的一个应用框架。首先给出VINS的系统图。

4eaed1d1e762fee91899b9fe576d7584.png 

首先进行相机与IMU之间相对旋转角的标定,标定完成之后进行初始化和相机与IMU之间相对平移量的标定。标定和初始化完成后进行视觉惯性联合的状态估计,并且把标定量也当做待估计的状态放入联合优化中。VINS除了可以标定相对姿态,还能够进行时间标定。原理如下:假设在较短时间内相机从79ccc423d7cde16d0011944161a7a7c2.png匀速运动到1099b461a001d8e4d4b0663e1d42d118.png,特征点在像素平面上的投影也从6d3020b6b32a376c89c5fe4a0608e719.png匀速运动至f24255b0ecbfcfeeb5b056336d105ec1.png,像素匀速运动的速度为6866ecf01322668f522fed80e73ac117.png。如下图:

153f509f507dead8bd071995ce4e99d3.png 

通过平移像素坐标,将时间差作为优化变量加入投影误差的表达式中,如下式:

85ee7992df52b4d4d268dbbfb6dcc331.png 

此投影误差项与IMU误差项和初始值误差项相加进行联合非线性优化。每一次优化结束后对时间差进行补偿,最终时间差的标定量逐渐趋于0。

当然,为了获取更精确的标定结果,还可以将时间差加入到IMU预积分表达式中,作为优化变量参与联合非线性优化。

关于VINS的其他应用,后续有机会再来介绍,这里再来介绍另外一种方法,即基于basis-functions来估计时间偏移的方法,用于统计相机与IMU之间固定延迟timeoffset的统一框架,然后将离散的数据在时间上连续化,最后基于最大似然估计得出矫正后的结果。并由此衍生的camera-imu的外参标定和时间同步方法。

1)基于basis-functions的时间偏移估计

使用一组基函数加权和来表示随时间变换的状态量,如D维度状态量892e0c1ef4796e5912badcd4c252d73d.png可以表示为:

d1d72a10e2f35ce807fe6f1b5f85c5fe.png 

其中,每个e1a7dcdce609e7cec08489571e19c8c3.png是D维时间函数,1017a908e394636406c32db8b2e9368b.png是DxB的矩阵。为了估计6ac7b7e83f303c3d831d36d9c9dd5c95.png,只需要估计D维向量C即可。

当从测量数据估计时间差时,令误差项如下:

4753df8501a1a750935aa4fcc8ed2713.png 

其中,b22c06ca5f577658e64685e62d9ed283.pngd9efc680cd48d595c65d0af6a9a3ff82.png时刻的测量值,165273d2ddfdeeb0b3263a74728d0706.png是由状态量5999d6ab552655c41572ddf6b211460e.png计算测量值的模型,d为待估计的时间差。将前面提到的状态变量代入上式可得:

b25545c8bdba95a7f5d7cfc984787dc0.png 

通过优化误差结果可以得到最优时间差d的结果。为了求解上式的最小二乘问题,需要知道相应的jacobian矩阵87e7446c12907ec27d09ff30b3d46d1b.png,对于给定的初值856e05086258b12113c8b5cabf210b0b.png,对应的变化量为e23a064d9992ecb2150f10b4da50d74e.png,那么上式可以表示为:

aa2184be8d6ba00627db5f91988fa8d5.png 

其中:

2b07658a2653ea95cf5657ab6b150cf5.png 

这样做有两个好处,首先可以将时间差估计问题转换为最大似然估计问题来处理,其次将离散的量变为连续的,可以很容易得到timeoffsets的jacobian矩阵。所以,多传感器之间的估计问题就可以统一了,也就形成了统一的处理框架。

2)camera-imu的时空标定

这里来介绍一下camera-imu的实际应用。收集一到两分钟的数据,时间为6cdb0f313129ed252d0d35737f2cc929.png,这里有三个坐标系,分别为:世界坐标系a98bd1ec5522099d89a42e3bfd3e9e96.png用于状态估计,imu系下17e5234388283630eee2178438503733.png进行加速度和角速度估计,以及图像坐标系c9e20453eaf4c0dc304c0900a223a080.png。假设设备在标签前运动,那么有如下几个估计量:世界坐标系下的重力加速度9347097cc58af91276261ed7ce88e2fc.png,imu到camera的外参be8a7e9386453e53bcdb6b75c80f53fe.png,以及camera与imu时间戳之间的时间偏差d。

这里IMU的位姿是一个6维向量函数,包含转向姿态和平移向量,是随时间变化的状态量。使用B-spline函数来表示状态量,如下:

d7d5f580134b80bf4540eb7c89dea427.png 

其中,cdf1946a06efc213e997d4a0e296350f.png表示转向姿态参数,05274efd2282c7239e3edf132334ee6b.png表示从参数化函数到旋转矩阵的映射。bd6f7cf2b4b6df910f6bf7717ba17e85.png表示位移,速度和加速度在世界坐标系中的表示如下:

55bad637cf265a12f9578d1708b4126f.png 

那么角速度可以表示成:

f02111a868dec2705d24bb5582761102.png 

其中c4cfa0448ee620d3d9bfb6103fd19e51.png表示旋转向量到旋转角的映射。

将IMU数据与相机数据结合得到如下模型:

e489887143eb9950dd0fc5040c036f72.png 

其中2a7f1361d78853aa2f4ac3c983763111.png324ade69620ab39ebecd9c307c522591.png分别是8cbfc05493fdf0fc663d144330334bf3.png时刻的加速度和角速度的测量值,1e0f5f9e3442c8b441db7bb2e3d16e91.png是世界坐标系下的m个观测点,其对应图像上的像素坐标为97d383b447226bf184c6fbfddfa91c30.png4584a657a97655b11389a261a14c0ade.png是图像时间戳,adbb23b8129ba47ab2e5c41743f90e25.png是需要估计的时间偏差,308894a6b07fde788544cbd7c55bf9a1.png并假设相互独立,e7803b1795812d756f3ce1be14524af0.png表示相机投影模型。

上述模型中误差项考虑了图像相对IMU数据的时间延迟d,这个时间延迟可正可负,假设IMU零偏满足随机游走,那么模型如下:

c3617053a4b2f95fa7412341f9cd46e3.png 

并假设彼此独立,即97b061fe3be97d07b9bcd7837066f085.png(由于高斯分布是独立性和不相干性等价,所以可以使用不相关性条件来表示)。

那么对上述的几个变量构建估计模型,根据测量值和估计值之间建立误差项,那么IMU的bias模型给出积分误差项,如下:

fea4e5b14b4f778e79665e31b037c003.png 

最后,使用LM算法(Levenberg-Marquardt)进行最小化下式即可:

b528081d1bd7938565e3ec1ce6fc98d0.png 

这里给出整体的标定流程图:

c2d131a66becb1fe24fafb2b0e637eb1.png 

其整个位姿标定的效果图如下:

17f5a0bad3f2fd12f940561082fead3c.png 

    写在最后的话:惊奇的发现,公众号居然可以贴公式了。其实关于相机与IMU,最难的还是如何进行时间的同步。这里通过姿态的校正来同步两个传感器,1)通过视觉匹配完成回环检测与回环校正;2)修正IMU的累计漂移误差。

往期回顾

史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)

视频课程来了!

自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

9c72f3fd8e3d49f9626c4d9b096f9c6f.png

(扫码学习最新视频)

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

3d92debdb2e3d2b9623893f072181be3.jpeg

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

7c15b249b740e1f82e3cd9250f899390.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动驾驶之多传感器融合--相机与IMU的同步 的相关文章

  • vscode快捷键 & java/c++环境

    vscode快捷键 amp java c 43 43 环境 vscode快捷键环境配置javac 43 43 个人习惯设置参考 vscode快捷键 快捷键功能Ctrl 43 Shift 43 P 或 F1显示所有命令Ctrl 43 空格触发
  • IIC通信协议(简单易理解版)

    IIC通信协议简介 xff1a IIC xff08 也记为I2C xff0c 读作I 2C xff0c inter integrated Circuit集成电路总线 xff0c 最早是飞利浦在1982年开发设计并用于自己的芯片上 xff0c
  • linux防病毒软件_十大Linux最佳防病毒软件-Linux防病毒软件列表!

    linux防病毒软件 Today s article is all about the best Antivirus for Linux But if Linux is so secure why do we need to have an
  • Python isinstance()

    Python isinstance function is used to check if an object is an instance of the specified class or not Python的isinstance
  • 使用git下载仓库_使用Git仓库

    使用git下载仓库 Whenever we start a project we will need to store all files in a repository So let 39 s start by first creatin
  • 在Raspberry Pi(ARM32)上的Docker中构建,运行和测试.NET Core和ASP.NET Core 2.1

    I love me some Raspberry Pi They are great little learning machines and are super fun for kids to play with Even if thos
  • 什么是Ubuntu LTS?与常规Ubuntu版本有何不同?

    Ubuntu distributions are released at given time intervals Every release has a code name that is related to an animal nam
  • 定义一个protobuf消息并生成Go代码

    大家好 xff01 让我们开始gRPC课程的动手部分 整个部分的目标是构建 个人计算机 Web服务 xff0c 该服务将使我们能够管理和搜索笔记本电脑配置 Here 39 s the link to the full gRPC course
  • 学科起源(漫画版)

    发几张收藏的图 xff0c 让大家对学科起源有点了解 xff0c 避免因学科纷争而引起不和 xff0c 生命科学也罢 xff0c 神经网络也罢都摆脱不了从物理和数学的角度去解释 xff0c 因为机器学习中很大的一部分 xff0c 尤其是神经
  • 【沧海拾昧】WiFi串口通信ESP8266模块基本介绍(附野火WiFi透传实例)

    C0104 沧海茫茫千钟粟 xff0c 且拾吾昧一微尘 沧海拾昧集 64 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 xff0c 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 xff0c 切勿深究 目录 前言一
  • linux shell

    转自 xff1a http blog csdn net fly sky520 article details 8853537 最近在linux下面编写shell脚本 xff0c 差不多是边学边写 在此记录一些学习心得 一 xff09 she
  • 软件开发遇到的难题_软件开发团队如何处理管理难题

    软件开发遇到的难题 通常是这样的 项目经理或产品负责人传达了来自公司食品链上层人士的消息 xff0c 即必须在给定日期之前交付软件 日期背后的原因可能是已知的 xff0c 但可能不是 反过来 xff0c 项目经理通知软件开发团队必须在该日期
  • Ubuntu20.04由于分辨率问题安装界面显示不完整

    使用vmware安装ubuntu的时候 xff0c 由于分辨率的问题 xff0c 导致安装界面显示不完整 xff0c button被隐藏 xff0c 无法进行下一步鼠标操作 同学遇到的问题 xff0c 迟迟不能解决 xff0c 参考别人的解
  • 数据结构排序算法及代码整理

    排序 xff1b 1 插入排序 xff08 直接插入排序和希尔排序 xff09 2 选择排序 xff08 直接选择排序和堆排序 xff09 3 交换排序 xff08 冒泡排序和快速排序 xff09 4 归并排序 5 基数排序 xff0d x
  • 排序算法性能比较

    各种排序方法的综合比较 结论 排序方法 平均时间 最坏时间 辅助存储 简单排序 O n2 O n2 O 1 快速排序 O nlogn O n2 O logn 堆排序 O nlogn O nlogn O 1 归并排序 O nlogn O nl
  • c++标准容器类(表格介绍)

    1 STL有6种序列容器类型 xff08 1 xff09 vector 它提供对元素的随即访问 xff0c 在尾部添加和删除元素的时间是固定的 xff0c 在头部或中部插入和删除元素的复杂度为线性时间 xff08 2 xff09 deque
  • 各大公司薪水一览表

    转自 http blog sina com cn s blog 4997a23a0100b2xc html 最近终于把自己给卖了 xff0c 这几个月来自己陆陆续续的面试的有30多家公司 xff0c 主要是IT公司 xff0c 准备把今年我
  • strtol

    转自 xff1a http hi baidu com qwpsmile blog item 9bc44efa4f41018a9f514637 html 今天 xff0c 在review 一些代码的时候 xff0c 看到了strtol 这个函
  • 学会做自己的朋友

    转自 http www 5xue com modules article view article php a2233 你是否经历过 xff1a 我们常会怪罪自己 xff0c 给自己很低的评价 xff0c 也习惯对结果做最坏的打算 xff1
  • 二值信号量和互斥信号量的区别

    互斥信号量和二进制信号量的区别 互斥型信号量必须是同一个任务申请 xff0c 同一个任务释放 xff0c 其他任务释放无效 同一个任务可以递归申请 二进制信号量 xff0c 一个任务申请成功后 xff0c 可以由另一个任务释放 二进制信号量

随机推荐

  • 敏捷开发

    这两个圆圈表示不同的视角上的敏捷实践 xff0c 包括开发者视角和项目管理的视角 接下来从里向外进行介绍 xff0c 因为有些实践我了解得不清楚 xff0c 如果下面有哪些说得不对的地方也请大家指出 Test Driven Developm
  • c++结构体的二进制文件,python如何解析

    c 43 43 结构体的二进制文件 xff0c python如何解析 场景分析 现有如下场景 xff1a 有一个二进制文件需要解析成可读数据已知条件 xff1a 该文件符合c 43 43 结构体对应的结构体数据 xff0c 因此我们可以通过
  • LeetCode刷题记录(Python3)——线性表

    LeetCode27 移除元素 简单 问题描述 xff1a 给定一个数组nums和一个值val xff0c 你需要原地 移除所有数值等于val的元素 xff0c 并返回移除后数组的新长度 不要使用额外的数组空间 xff0c 必须仅使用 O
  • 使用百度网盘上传大文件到云服务器

    因为需要把几个7G大小左右的数据上传至服务器 xff0c 但无奈使用的是共享服务器 xff0c 上传速度非常慢 管理员建议可以用奶牛快传 xff08 目前收费 xff09 中转 xff0c 百度搜了一下 xff0c 百度网盘有相同作用 xf
  • ubuntu操作系统中TCP客户端和服务器端的开发

    网络编程在Python中的应用 xff0c 三次握手和四次挥手的理解 TCP客户端和服务器端流程图 xff1a TCP客户端开发流程 xff1a 1 创建客户端套接字 2 和服务端套接字建立连接 3 发送数据 4 接收数据 5 关闭客户端套
  • sphinx 文档_Sphinx轻松漂亮的文档

    sphinx 文档 Sphinx是允许开发人员以纯文本格式编写文档的工具 xff0c 可轻松生成满足各种需求的格式的输出 使用版本控制系统跟踪更改时 xff0c 这将很有帮助 纯文本文档对于跨不同系统的协作者也很有用 纯文本是当前可用的最可
  • 经典激光雷达SLAM系统:LeGO-LOAM

    作者 密斯特李 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 511968459 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之
  • 经典激光雷达SLAM系统:LOAM-Livox

    作者 密斯特李 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 515732721 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之
  • SLAM中姿态估计的图优化方法比较(g2o/Ceres/GTSAM/SE-Sync)

    编辑 深蓝AI 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 后台回复 SLAM综述 获取视觉SLAM 激光SLAM RGBD SLAM等多篇综述 xff01 本文是对论文 A Compari
  • 多传感器融合 | 详解PointPainting和MVP

    作者 谷溢 编辑 深蓝AI 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 多传感器融合综述 获取图像 激光雷达 毫米波雷达融合综述等干货资料 xff
  • 2022最新!视觉SLAM综述(多传感器/姿态估计/动态环境/视觉里程计)

    目录 摘要 视觉SLAM算法的发展 相关综述 VSLAM 设置标准 传感器和数据采集 目标环境 视觉特征处理 系统评估 语义等级 基于主要目标的VSLAM方法 目标一 xff1a 多传感器处理 目标二 xff1a 姿态估计 目标三 xff1
  • 自动驾驶路径规划五大常用算法(Dijkstra/人工势场/图搜索等)

    编辑 希骥智能网联汽车 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 规划控制 技术交流群 后台回复 规划控制综述 获取自动驾驶 智能机器人规划控制最新综述论文 xff
  • 论文汇总!物体级SLAM(定位/建图/重定位/回环检测)

    作者 黑桃K 编辑 汽车人 原文链接 xff1a https zhuanlan zhihu com p 570562248 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心
  • VSLAM与VIO的3D建图,重定位与世界观综述

    作者 紫川Purple River 编辑 汽车人 原文链接 xff1a zhuanlan zhihu com p 592225457 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自
  • 3D激光雷达-IMU的无目标外参标定

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 全栈算法 技术交流群 后台回复 相机标定 获取超详细的单目双目相机模型介绍 内外参标定算法原理视频 xff01 摘要 xf
  • 力扣刷题路线-c++学习笔记(1)

    1 数组 数组的在内存空间的地址是连续的 xff0c 所以我们在删除或者增添元素的时候 xff0c 就难免要移动其他元素的地址 如下所示 数组的元素是不能删的 xff0c 只能覆盖 可以看出在C 43 43 中二维数组在地址空间上是连续的
  • 最新Benchmark | 4Seasons:面向挑战场景的自动驾驶视觉SLAM基准

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 SLAM 技术交流群 后台回复 4Seasons 获取论文和数据集下载地址 xff01 xff01 xff01 1摘要 论
  • 20余家自动驾驶规控岗位技能知识点梳理

    规划控制是自动驾驶的核心模块之一 它的主要作用是 xff1a 无人车在感知到周边环境的基础上 xff0c 结合车辆自身的目的地 当前位置以及地图信息 xff0c 对车辆自身做出最合理的决策动作 决策后 xff0c 车辆会规划一条新的轨迹 x
  • 视觉大模型 | SEEM:比SAM更强!

    作者 派派星 编辑 CVHub 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 语义分割 技术交流群 Title Segment Everything Everywher
  • 自动驾驶之多传感器融合--相机与IMU的同步

    作者 韦韦道来 编辑 韦心雕AI 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 多传感器融合 技术交流群 后台回复 多传感器融合综述 获取图像 激光雷达 毫米波雷达融合