视觉SLAM十四讲|【五】相机与IMU时间戳同步
视觉SLAM十四讲|【五】相机与IMU时间戳同步
相机成像方程
Z [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] = K P Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}= \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}= KP Z uv1 = fx000fy0cxcy1 XYZ =KP
其中,
K = [ f x 0 c x 0 f y c y 0 0 1 ] K=\begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K= fx000fy0cxcy1
时间戳同步
假设视觉特征在图像平面上匀速移动,则特征在相机成像平面上的运动速度为
V l k = ( [ u l k + 1 v l k + 1 ] − [ u l k v l k ] ) / ( t k + 1 − t k ) V_l^k =( \begin{bmatrix} u_l^{k+1} \\ v_l^{k+1} \end{bmatrix} - \begin{bmatrix} u_l^{k} \\ v_l^{k} \end{bmatrix})/(t_{k+1}-t_k) Vlk=([ulk+1vlk+1]−[ulkvlk])/(tk+1−tk)
设世界坐标系中 l l l个地图点坐标为
f l w = [ x , y , z ] T f_l^w = [x, y,z]^T flw=[x,y,z]T
变换到相机坐标系下则为
f l c i = R c b R w b i T ( f l w − p w b i ) + p c b f_l^{c_i} = R_{cb}R_{wb_i}^T(f_l^w - p_{wb_i}) + p_{cb} flci=RcbRwbiT(flw−pwbi)+pcb再投影到图像平面,并计算重投影残差
r c = [ x l i z l i − u l i , y l i z l i − v l i ] T r_c = [\frac{x_l^i}{z_l^i}-u_l^i, \frac{y_l^i}{z_l^i}-v_l^i]^T rc=[zlixli−uli,zliyli−vli]T
考虑时间延迟对特征坐标的补偿为
z l i ( t d ) = [ u l i , v l i ] T + t d v l i z_l^i(t_d) = [u_l^i, v_l^i]^T + t_d v_l^i zli(td)=[uli,vli]T+tdvli
逆深度参数化方式
SLAM中特征点的参数化表示有很多,最直接的是用三维坐标XYZ来表示,但通常大家更喜欢用逆深度表示,因为逆深度优势在于能够建模无穷远点。回顾相机成像方程
Z [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] = K P Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}= \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}= KP Z uv1 = fx000fy0cxcy1 XYZ =KP
有
P = 1 λ K − 1 [ u v 1 ] P=\frac{1}{\lambda}K^{-1} \begin{bmatrix}u \\v \\ 1 \end{bmatrix} P=λ1K−1 uv1
对于世界坐标系中的某相机观测点 f l c i f_l^{c_i} flci,可以用相机逆深度成像公式得到,如下所示
f l c i = 1 λ K − 1 [ u l i v l i 1 ] f_l^{c_i}=\frac{1}{\lambda}K^{-1} \begin{bmatrix}u_l^i \\v_l^i \\ 1 \end{bmatrix} flci=λ1K−1 ulivli1
考虑到坐标系转换关系
f l w = R w c i f l c i + p w c i f_l^w = R_{wc_i}f_l^{c_i}+p_{wc_i} flw=Rwciflci+pwci
观测点 f l c i f_l^{c_i} flci也可以通过运动姿态进行推测,有
f l c i ~ = R c i w f l w + p c i w \tilde{{f_l^{c_i}}} = R_{c_iw}f_l^w+p_{c_iw} flci~=Rciwflw+pciw
我们研究的是投影面内的残差,因此,不考虑时间延迟的残差可以写为如下形式
r c 3 = [ u l j v l j 1 ] − λ K f l c j ~ r_{c3} = \begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} - \lambda K \tilde{{f_l^{c_j}}} rc3= uljvlj1 −λKflcj~
r c 3 = [ u l j v l j 1 ] − λ K ( R c j w f l w + p c j w ) r_{c3} = \begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} - \lambda K(R_{c_jw}f_l^w + p_{c_jw}) rc3= uljvlj1 −λK(Rcjwflw+pcjw)
r c 3 = [ u l j v l j 1 ] − λ K ( R c j w ( R w c i f l c i + p w c i ) + p c j w ) r_{c3} = \begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} - \lambda K(R_{c_jw}(R_{w c_i}f_l^{c_i}+p_{wc_i})+ p_{c_jw}) rc3= uljvlj1 −λK(Rcjw(Rwciflci+pwci)+pcjw)
又因为
f l c i = 1 λ K − 1 [ u l i v l i 1 ] f_l^{c_i}=\frac{1}{\lambda}K^{-1} \begin{bmatrix}u_l^i \\v_l^i \\ 1 \end{bmatrix} flci=λ1K−1 ulivli1
r c 3 = [ u l j v l j 1 ] − λ K ( R c j w ( R w c i ( 1 λ K − 1 [ u l i v l i 1 ] ) + p w c i ) + p c j w ) r_{c3} = \begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} - \lambda K(R_{c_jw}(R_{w c_i}(\frac{1}{\lambda}K^{-1} \begin{bmatrix}u_l^i \\v_l^i \\ 1 \end{bmatrix})+p_{wc_i})+ p_{c_jw}) rc3= uljvlj1 −λK(Rcjw(Rwci(λ1K−1 ulivli1 )+pwci)+pcjw)
[ u l j v l j ] = [ 1 0 0 0 1 0 ] [ u l j v l j 1 ] \begin{bmatrix} u_l^j\\ v_l^j \end{bmatrix} = \begin{bmatrix} 1 & 0 &0 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} [uljvlj]=[100100] uljvlj1
令
C = [ 1 0 0 0 1 0 ] C = \begin{bmatrix} 1 & 0 &0 \\ 0 & 1 & 0 \end{bmatrix} C=[100100]
有
r c = C r c 3 r_c = C r_{c3} rc=Crc3
r c = C [ u l j v l j 1 ] − λ C K ( R c j w ( R w c i ( 1 λ K − 1 [ u l i v l i 1 ] ) + p w c i ) + p c j w ) r_{c} = C\begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} - \lambda CK(R_{c_jw}(R_{w c_i}(\frac{1}{\lambda}K^{-1} \begin{bmatrix}u_l^i \\v_l^i \\ 1 \end{bmatrix})+p_{wc_i})+ p_{c_jw}) rc=C uljvlj1 −λCK(Rcjw(Rwci(λ1K−1 ulivli1 )+pwci)+pcjw)
现在考虑时间延迟
r c = C ( [ u l j v l j 1 ] + v j t d ) − λ C K ( R c j w ( R w c i ( 1 λ K − 1 [ u l i v l i 1 ] ) + p w c i ) + p c j w ) r_{c} = C(\begin{bmatrix} u_l^j\\ v_l^j \\1 \end{bmatrix} + v_jt_d) - \lambda CK(R_{c_jw}(R_{w c_i}(\frac{1}{\lambda}K^{-1} \begin{bmatrix}u_l^i \\v_l^i \\ 1 \end{bmatrix})+p_{wc_i})+ p_{c_jw}) rc=C( uljvlj1 +vjtd)−λCK(Rcjw(Rwci(λ1K−1 ulivli1 )+pwci)+pcjw)
其中
v j = ( [ u k + 1 v k + 1 1 ] − [ u k v k 1 ] ) / ( t k + 1 − t k ) v_j =(\begin{bmatrix} u_{k+1} \\ v_{k+1} \\ 1\end{bmatrix} - \begin{bmatrix} u_{k} \\ v_{k} \\ 1\end{bmatrix})/(t_{k+1}-t_k) vj=( uk+1vk+11 − ukvk1 )/(tk+1−tk)
相关文章:
视觉SLAM十四讲|【五】相机与IMU时间戳同步
视觉SLAM十四讲|【五】相机与IMU时间戳同步 相机成像方程 Z [ u v 1 ] [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] K P Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \…...
js null和undefined的区别
null和undefined在JavaScript中都表示“无”的概念,但它们在使用和含义上有一些重要的区别。 含义: null 是一个表示“无”的对象,当转换为数值时结果为0。 undefined 是一个表示“缺少值”的原始值,当转换为数值时结果为NaN。…...
Arduino| IDE下载、安装和设置以及开发板的连接
IDE下载、安装和设置以及开发板的连接 IDE下载IDE安装IDE设置首选项——设置语言、字体、主题、地址等等开发板管理器——添加开发板 开发板的连接 IDE下载 第一步:进入Arduino官网https://www.arduino.cc。 第二步:选择导航栏的Software,然…...
Linux之Ubuntu环境Jenkins部署前端项目
今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs,需要安装相关插件 点击插件管理,输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型:如果不填 默认npm …...
QT下的几种实现modbus的库,记录
QModbus QT提供了一个名为QModbus的模块,可以实现Modbus的主机或从机功能 pro需要添加 QT += serialbus serialport相关头文件 #include <QModbusTcpClient> #include <QModbusDataUnit> 具体使用参考: https://blog.csdn.net/XCJandLL/article/details/1…...
HarmonyOS4.0系统性深入开发18公共事件简介
公共事件简介 HarmonyOS通过CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 系统公共事件:CES内部定义的公共事…...
华为路由器OSPF动态链路路由协议配置
R1配置 interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.252 interface LoopBack0ip address 1.1.1.1 255.255.255.255 ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 10.1.12.0 0.0.0.3 R2配置 interface GigabitEthernet0/0/0i…...
常用注解/代码解释(仅个人使用)
目录 第一章、代码解释①trim() 方法以及(Arrays.asList(str.split(reg)));②查询字典项②构建后端镜像shell命令解释 第二章、注解解释①PropertySource注解与Configurationproperties注解的区别 第三章、小知识①Linux系统中使用$符号表示变量 友情提醒: 先看文章目录&#…...
2024阿里云服务器ECS介绍_全方位解析_CPU性能详解
阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…...
向伟人学习反焦虑,在逆境中崛起
第一、乐观的精神。 伟人在长期以来的读书、思考和实践,突破了思想认知限制,并最终在更高的思维层面上,建立起了强大的精神信念感。 在危险环境中表示绝望的人, 在黑暗中看不见光明的人, 只是懦夫与机会主义者。 —— …...
线上问题整理
JVM 案例 案例一:服务器内存不足,影响Java应用 问题: 收到报警,某Java应用集群中一台服务器可用内存不足,超过报警阈值。 排查过程: 首先,通过Hickwall查看该应用各项指标,发现无论…...
【elastic search】详解elastic search集群
目录 1.与集群有关的一些概念 2.集群搭建 3.集群搭建 4.kibana链接集群 5.选举流程 6.请求流程 7.master的作用 1.与集群有关的一些概念 数据分片: 数据分片(shard),单台服务器的存储容量是有限的,把一份数据…...
近红外光谱分析技术与基于深度学习的化学计量学方法
郁磊【副教授】:主要从事AI人工智能与大数据分析等相关研究,长期致力于人工智能与近红外生物医学工程等领域融合,主持并完成多项科研课题。著有《神经网络43个案例分析》等书籍。 // 讲座内容 1、近红外光谱基本理论、近红外光谱仪基本原理…...
Elasticsearch windows开箱即用【记录】
一、准备工作 安装ES之前要在本机安装好JDK,对应的兼容性见官网链接:https://www.elastic.co/cn/support/matrix ES官网链接:https://www.elastic.co/cn/, 我本机安装的是JDK8,测试使用的是7.3.0版本的ES和Kibana。 1、首先去…...
第 3 课 ROS 常用术语及命令说明
1.ROS文件系统的组成 ROS 文件是由 Packages 和 Manifests ( package.xml )组成。 Packages:功能包,是 ROS 软件中的基本单元,包含节点源码、配置文件、数据定义等。 Manifest( package xml &#x…...
基于AidLux的智慧教育版面分析应用
基于AidLux的智慧教育版面分析应用 1. Aidlux平台介绍 融合架构操作系统AidLux,可以为单一ARM设备同时提供Android和Linux运行环境,双系统既能独立使用又能相互通信。 非虚拟机方式实现双系统融合并行 同时拥有两个系统的完整用户体验无需重启即可在两个系统之间…...
Spring | Spring框架最基本核心的jar包、Spring的入门程序、依赖注入
目录: 1.Spring框架最基本、最核心的jar包2.Spring的入门程序3.依赖注入3.1 依赖注入的概念3.2 依赖注入的实现方式 1.Spring框架最基本、最核心的jar包 Spring是一个轻量级框架,Spring最基本、最核心的的jar包括 : beans、context、core、expression。 …...
[晓理紫]每日论文推送(有中文摘要,源码或项目地址)--大模型相关、扩散模型、视觉导航
专属领域论文订阅 VX关注{晓理紫|小李子},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能,机器人强化学习开放词汇,检测分割 LLM 标题:…...
【软件项目管理_软件工程】软件项目管理课后相关习题
(1)需求分析是回答系统必须(A)的问题。 A.做什么 B.怎么做 C.何时做 D.为谁做(2)WBS非常重要,下列哪项不是其很重要的原因(D)。 A.帮助组织工作 B.防止遗漏工作 C.为项目估算提供…...
Docker-Compose:教你入门到精通
引言 在当今的软件开发和运维领域,容器技术已经成为了一种非常重要的技术。而Docker-Compose作为Docker的重要工具之一,可以帮助我们轻松地管理和运行容器化的应用程序。本文将详细介绍Docker-Compose的入门到精通知识,帮助你更好地掌握这项技…...
深入Fast DDS传输层:从UDP、TCP到共享内存,如何为你的ROS2应用选择最佳通信方式?
Fast DDS传输层深度解析:UDP、TCP与共享内存的工程实践指南 在分布式系统架构中,通信中间件的性能直接影响整个系统的响应速度和可靠性。作为ROS 2的默认通信中间件,Fast DDS提供了多种传输协议选择,但如何根据实际场景做出最优决…...
告别盲目点优化!手把手教你用Zemax 2024构建‘先结构后像差’的高效优化工作流
告别盲目点优化!手把手教你用Zemax 2024构建‘先结构后像差’的高效优化工作流 在光学设计领域,Zemax作为行业标杆工具,其优化功能强大却也让许多设计师陷入"不断点击优化按钮"的困境。真正高效的设计不在于反复试错,而…...
从DataBinding到Compose:一个老Android的UI数据绑定演进思考
从DataBinding到Compose:一个老Android的UI数据绑定演进思考 作为一名从Eclipse时代走过来的Android开发者,我见证了UI开发方式的多次变革。从最初手工调用findViewById的繁琐,到ButterKnife的注解简化,再到DataBinding带来的声明…...
国际首都公报:湖北省放飞炬人国际控股集团国际总裁方达炬批准《湖北省放飞炬人国际控股集团国际军务涉军事法院规章》施行
国际首都公报:湖北省放飞炬人国际控股集团国际总裁方达炬批准《湖北省放飞炬人国际控股集团国际军务涉军事法院规章》施行...
实战指南:Whisper 的 `prompt` 与 `initial_prompt` 参数在语音转文字中的高效应用
1. Whisper 语音转文字的核心参数解析 第一次用 Whisper 做语音转文字时,我发现同样的音频文件,同事转出来的结果总比我的准确率高。后来才发现,原来他偷偷用了一个叫 prompt 的秘密武器。这就像考试时的"小抄",给模型…...
FRCRN命令行工具使用详解:从音频文件到降噪输出的完整流程
FRCRN命令行工具使用详解:从音频文件到降噪输出的完整流程 你是不是也遇到过这种情况?手头有一堆录音文件,背景里混杂着各种杂音——可能是空调的嗡嗡声、键盘的敲击声,或者是窗外的车流声。手动处理这些音频不仅费时费力&#x…...
K型热电偶的5个常见设计坑:从运放选型到单片机ADC采样的避坑指南
K型热电偶的5个常见设计坑:从运放选型到单片机ADC采样的避坑指南 在工业测温领域,K型热电偶凭借其宽温区、高性价比和良好的线性度,成为工程师们的首选传感器之一。然而,许多初入行业的硬件工程师在实际应用中常常踩入一些"…...
零基础玩转BEYOND REALITY Z-Image:手把手教你搭建高精度文生图引擎
零基础玩转BEYOND REALITY Z-Image:手把手教你搭建高精度文生图引擎 1. 引言:为什么选择BEYOND REALITY Z-Image 在当今AI图像生成领域,BEYOND REALITY Z-Image以其卓越的写实表现力脱颖而出。这款基于Z-Image-Turbo底座和BEYOND REALITY S…...
Cadence Virtuoso仿真避坑指南:从网表生成到FFT分析的20个常见错误解决方案
Cadence Virtuoso仿真避坑指南:从网表生成到FFT分析的20个常见错误解决方案 在集成电路设计领域,Cadence Virtuoso作为行业标准工具链的核心组件,其仿真功能的正确使用直接关系到设计效率与结果可靠性。本文将系统梳理从网表生成到FFT分析全流…...
Java面试高频:阿里真实面试题——Redis分布式锁实现(3分钟速通,不会直接挂)
一、真实面试场景(代入感拉满) 上周,一个候选人来面试阿里P6。 技术面已经过了两轮,表现都不错。 最后一轮,面试官只问了一个问题: “你们项目里用过Redis分布式锁吗?怎么实现的?…...
