一步一步学习S-MSCKF(五)观测更新 \left[\begin{matrix} \end{matrix}\right]

测量模型

考虑一个特征点\(f_j\)被位置在\((^{C_i}_Gq,{^{G}p}_{C_i})\)的双目相机观测到。双目的左右相机位姿可以表示为\((^{C_{i,1}}_Gq,^{G}p_{C_{i,1}})\)和\((^{C_{i,2}}_Gq,^{G}p_{C_{i,2}})\)。虽然状态向量仅仅包含左相机的位姿,但是相机左目与右目的位姿可以通过双目相机的外参产生联系。

双目的观测值(归一化坐标)可以表达为:

\[z^{j}_i=
\left[\begin{matrix}
u_{i,1}^{j} \\ v_{i,1}^{j} \\ u_{i,2}^{j} \\ v_{i,2}^{j}
\end{matrix}\right]=
\left[\begin{matrix}
\frac{1}{^{C_{i,1}}Z_j}I_{2\times 2} & 0_{2\times 2} \\
0_{2\times 2} & \frac{1}{^{C_{i,2}}Z_j}I_{2\times 2}
\end{matrix}\right]
\left[\begin{matrix}
^{C_{i,1}X_j} \\ ^{C_{i,1}Y_j} \\ ^{C_{i,2}X_j} \\ ^{C_{i,2}Y_j}
\end{matrix}\right]+n_i^j
\]

左右目的观测值与相机的位姿的关系为:

\[^{C_{i,1}}p_j=\left[\begin{matrix}{^{C_{i,1}}X_j} \\ {^{C_{i,1}}Y_j} \\ {^{C_{i,1}}Z_j}\end{matrix}\right]=C({^{C_{i,1}}_Gq})({^Gp_j}-{^Gp_{C_{i,1}}})
\]

\[^{C_{i,2}}p_j=\left[\begin{matrix}{^{C_{i,2}}X_j} \\ {^{C_{i,2}}Y_j} \\ {^{C_{i,2}}Z_j}\end{matrix}\right]=C({^{C_{i,2}}_Gq})({^Gp_j}-{^Gp_{C_{i,2}}})=
C(^{C_{i,2}}_{C_{i,1}}q)(^{C_{i,1}}p_j-{^{C_{i,1}}p_{C_{i,2}}})
\]

从上面可以发现右目观测量可以用左目位姿来表示。其中\(^Gp_j\)是前面已经计算得到的特征点三维坐标。

对\(z_i^j\)在估计值\(\hat x\)处泰勒展开得到:

\[z_i^j=
\left[\begin{matrix}
\hat u_{i,1}^{j} \\ \hat v_{i,1}^{j} \\ \hat u_{i,2}^{j} \\ \hat v_{i,2}^{j}
\end{matrix}\right]+
\frac{\partial z^j_i}{\partial x_{C_{i,1}}}\tilde x_{C_i}+
\frac{\partial z^j_i}{\partial {^Gp_j}} {^G \tilde p_j}+n_i^j
\]

原文地址:https://www.cnblogs.com/liuzhenbo/p/12614652.html

时间: 2024-11-01 12:43:45

一步一步学习S-MSCKF(五)观测更新 \left[\begin{matrix} \end{matrix}\right]的相关文章

【转】朱兆祺带你一步一步学习嵌入式(连载)

原文网址:http://bbs.elecfans.com/jishu_357014_2_1.html#comment_top  从最初涉及嵌入式Linux开始到现在,深深的知道嵌入式的每一步学习都是举步维艰.从去年11月份开始,我就着手整理各种学习资料,希望推动嵌入式学习的前进贡献自己微不足道的一份力量.从去年到现在,将C语言的学习经验整理成<攻破C语言笔试与机试陷阱及难点>(现在仍在更新),这份资料已经在电子发烧友论坛的单片机论坛连载(http://bbs.elecfans.com/jish

一步一步学习SignalR进行实时通信_1_简单介绍

原文:一步一步学习SignalR进行实时通信_1_简单介绍 一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 前言 本来前几个月想写一系列的关于SignalR的文章,但是由于在做项目,时间非常的紧急,花了1天的时间大致了解了下SignalR,并实现了个在线聊天的小功能,本来记录一系列关于SignalR的文章,没想到写了MVC5使用SignalR进

一步一步学习Vue(十一)

本篇继续学习vuex,还是以实例为主:我们以一步一步学Vue(四)中讲述的例子为基础,对其改造,基于vuex重构一遍,这是原始的代码: todolist.js ; (function () { var list = []; var Todo = (function () { var id = 1; return function (title, desc) { this.title = title; this.desc = desc; this.id = id++; } })(); /** *

一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询

这两天加班,不能兼顾博客的更新,请大家见谅. 有时候我们创建完索引之后,数据源可能有更新的内容,而我们又想像数据库那样能直接体现在查询中,这里就是我们所说的增量索引.对于这样的需求我们怎么来实现呢?lucene内部是没有提供这种增量索引的实现的: 这里我们一般可能会想到,将之前的索引全部删除,然后进行索引的重建.对于这种做法,如果数据源的条数不是特别大的情况下倒还可以,如果数据源的条数特别大的话,势必会造成查询数据耗时,同时索引的构建也是比较耗时的,几相叠加,势必可能造成查询的时候数据缺失的情况

一步一步跟我学习lucene(9)---lucene搜索之拼写检查和相似度查询提示(spellcheck)

suggest应用场景 用户的输入行为是不确定的,而我们在写程序的时候总是想让用户按照指定的内容或指定格式的内容进行搜索,这里就要进行人工干预用户输入的搜索条件了:我们在用百度谷歌等搜索引擎的时候经常会看到按键放下的时候直接会提示用户是否想搜索某些相关的内容,恰好lucene在开发的时候想到了这一点,lucene提供的suggest包正是用来解决上述问题的. suggest包联想词相关介绍 suggest包提供了lucene的自动补全或者拼写检查的支持: 拼写检查相关的类在org.apache.

一步一步学习IdentityServer3 (1)

学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自由定制目前也在学习中. 网络飞速发展的今天,庞大的数据,庞大的用户,庞大的业务,都需要登录的支撑,登录授权完全看作一个单独的一门技术,Web端需要登录,App端需要登录,Api需要授权访问等等,除此以外大型业务系统,子系统之间其实也需要这样一个登陆授权,所以,登录不再是单一的一个功能点了,简单的查询

一步一步学习SignalR进行实时通信_8_案例2

原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建立DrawingHub 页面 javascript 实现效果 结束语 参考文献 前言 这讲分析一个案例,在一个画板上画画实时在其他客户端上显示. 配置Hub 在Startup中进行配置: public void Configuration(IAppBuilder app) { app.MapSign

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt