从零手写VIO第一讲作业
这是我自己总结的第一讲的思维导图:从零手写VIO第一讲思维导图
前面几个综述问题大部分 完全参考的大佬的博客https://blog.csdn.net/learning_tortosie/article/details/102408738,(懒癌又犯了),本博客设为转载,以示敬意。
公式推导部分和大佬博客略有不同,如有错误,希望指正。
要说视觉与IMU融合之后有何优势,首先要明白视觉与IMU各自的局限:
(1)IMU虽然可以测得加速度和角速度,但这些量都存在明显的漂移,使得积分两次得到的位姿数据非常不可靠。好比说,我们将IMU放在桌上不动,用它的读数积分得到的位姿也会漂出十万八千里。但是,对于短时间内的快速运动,IMU能够提供一些较好的估计。这正是相机的弱点。当运动过快时,(卷帘快门的)相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉SLAM非常害怕快速的运动。而有IMU,即使在相机数据无效的那段时间内,我们还能保持一个较好的位姿估计,这是纯视觉SLAM无法做到的。
(2)相比于IMU,相机数据基本不会有漂移。如果相机放在原地固定不动,那么(在静态场景下)视觉SLAM 的位姿估计也是固定不动的。所以,相机数据可以有效地估计并修正IMU读数中的漂移,使得在慢速运动后的位姿估计依然有效。
(3)当图像发生变化时,本质上我们没法知道是相机自身发生了运动,还是外界条件发生了变化,所以纯视觉SLAM 难以处理动态的障碍物。而IMU能够感受到自己的运动信息,从某种程度上减轻动态物体的影响。
(4)对于单目视觉SLAM,存在尺度不确定性,融合IMU后可以恢复尺度。
(5)纯视觉SLAM在容易受弱纹理场景和光照变化的影响,在定位失败时,可以依靠IMU进行短暂的定位。
综上,视觉与IMU融合之后会弥补各自的劣势,可利用视觉定位信息来估计IMU的零偏,减少IMU由零偏导致的发散和累积误差;IMU可以为视觉提供快速运动时的定位,以及因为某种因素(场景特征点较少,光照变化较大等)定位失败时。
(1)常见的视觉+IMU融合方案
MSCKF
OKVIS
ROVIO
VIORB
VINS-Mono,VINS-Mobile,VINS-Fusion
以上方案基本都在Github上开源了。
(2)工业界应用
Google:Tango,ARCore
Apple:ARKit
Microsoft:HoloLens
百度:DuMix AR
要找学术研究的新进展,可以去Google Scholar通过关键词(VIO,Visual-Inertial Odometry)和限定时间(如2019年以来)来检索,还可以在机器人,计算机视觉等顶会(如IROS,ICRA,CVPR)上检索。检索是第一步,接下来就要阅读题目和摘要,筛选有意义的研究,然后再选择性精读论文。
目前,我对学术论文关注较少,今天正好看到有人在知乎上发布了VIO新进展,就简单地搬运到这里。
(1)传统方法新进展
[1] Usenko V , Demmel N , Schubert D , et al. Visual-Inertial Mapping with Non-Linear Factor Recovery[J]. 2019.
[2] Shao W , Vijayarangan S , Li C , et al. Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping[J]. 2019.
(2)基于学习方法的例子
[1] Clark R, Wang S, Wen H, et al. VINet: Visual-Inertial Odometry as a Sequence-to-Sequence Learning Problem[C]//AAAI. 2017: 3995-4001.
[2] Chen, Changhao, et al. “Selective Sensor Fusion for Neural Visual-Inertial Odometry.” arXiv preprint arXiv:1903.01534 (2019).
[3] Shamwell, E. Jared, et al. “Unsupervised Deep Visual-Inertial Odometry with Online Error Correction for RGB-D Imagery.” IEEE transactions on pattern analysis and machine intelligence (2019).
[4] Lee, Hongyun, Matthew McCrink, and James W. Gregory. “Visual-Inertial Odometry for Unmanned Aerial Vehicle using Deep Learning.” AIAA Scitech 2019 Forum. 2019.
[5] Wang, Chengze, Yuan Yuan, and Qi Wang. “Learning by Inertia: Self-supervised Monocular Visual Odometry for Road Vehicles.” ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019.
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Geometry>
#include "sophus/so3.h"
#include "sophus/se3.h"
using namespace std;
int main( int argc, char** argv )
{
// 沿Z轴转90度的旋转矩阵
Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI/2, Eigen::Vector3d(0,0,1)).toRotationMatrix();
cout << "R * R^t ?= I"<< endl << R * R.transpose() <<endl;
Sophus::SO3 SO3_R(R); // 从旋转矩阵构造Sophus::SO(3)
Eigen::Quaterniond q(R); // 从旋转矩阵构造四元数
// 李代数更新
Eigen::Vector3d update_so3(0.01, 0.02, 0.03); //更新量
Sophus::SO3 SO3_updated = SO3_R * Sophus::SO3::exp(update_so3);
cout<<"SO3 updated = "<< endl << SO3_updated.matrix() <<endl;
//四元数更新
Eigen::Quaterniond q_update(1, update_so3(0)/2, update_so3(1)/2, update_so3(2)/2);
Eigen::Quaterniond q_updated = (q * q_update).normalized(); //四元数归一化
cout<<"q2R = "<< endl << q_updated.toRotationMatrix() <<endl;
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(class1)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")
# 添加eigen
include_directories("/usr/include/eigen3/")
# 添加sophus
find_package(Sophus REQUIRED)
include_directories(${
Sophus_INCLUDE_DIRS})
# 添加可执行程序
add_executable(question2 question2.cpp)
target_link_libraries(question2
${
Sophus_LIBRARIES}
)
推导1:
推导2:
这个和参考的大佬的推得结果略微不同,但结果也应该错不了。
1、备份或删除yum源配置文件#cd /etc/yum.repos.d#mv /etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/rhel-debuginfo.repo.bak2、编辑vi /etc/yum.repos.d/CentOS-Base.repo,填入以下内容######################[base]name=Cent..._liunx5.5在线安装后yum
应公司要求,使用宇宙级最强IDE——VS2019下载vs2019社区版一如既往是免费使用的。直接访问微软官网,下载 vs_community_installer.exe。安装1、将下载好的 *.exe 直接运行。2、根据开发需要,勾选自己需要的组件,向下滑,有好多好多安装地址可改可不改,全看电脑配置,选择边下载边安装,当然也可以选择其他的。做web后端开发,使用 ..._win10 支持vs2019吗
飞凌嵌入式今年6月推出的——FET1043A-C核心板,采用NXP公司的QorIQ LS1043A处理器设计,拥有四颗ARMv8-A架构的Cortex-A53核,主频1.6G,低功耗,高能效。四通道高达10GB的SerDes包含多种灵活配置,在飞凌设计的配套底板中最大程度上发挥了QorIQLS1043A 处理器网络性能,采用一个万兆,六个千兆的设计,配合处理器内部的DPAA1加速引擎,再加上2...
医学统计学的重要性不言而喻。但是不是一定懂呐,我是不敢说自己懂。但是用还是要学会用的,现在有R语言,那今天就分享一下吧。方差分析:两样本比较用t.test,三样本及以上的比较呐?方差分析。此出说的观测变量时连续型变量。rm(list = ls())#1.单因素方差分析library(multcomp)data("cholesterol")head(cholesterol)#控制变量str有..._异方差检验r语言
莫以小善而不为,莫以恶小而为之。心善则美,心纯则真。怀善心,做善事,一生无愧。怀平常心,做平常事,日夜安宁。把浮躁的心静下来,去感悟真实的时间,静下心,常存感恩之心,做善事,一生无愧。怀平常心,做平常事,日夜安宁。人之欲望不止,一山还比一山高,岂能如愿?看淡纷争,看轻得失,心安即是归处。一杯茶,满也好,少也好,不要计较其间;浓也好,淡也好,其中自有值得品的味道。逆境时多学习,积累的就是福报,多学习..._vba 按条件提取
吃力的讲完boost::signals的ppt,然后接着就是做练习题。通过讲ppt,发现有一句话说的真好:你自己知道是一回事,你能给别人讲明白又是另外一回事。真的有些东西你自己理解,但是用语言去很难表达,是不是用语言难以表达暴露出自己对所理解的东西不是真正的理解?。。。。orz,不过讲完ppt之后,真的对boost::singals的理解又加深一层。好了废话不多说了,现在来看两个习题(ppt的内容_boost::signalslib::signal 绑定
WordPress加速及优化的13个技巧维护和加速WordPress的必备技巧 给WordPress博客加速 用.htaccess缓存图片,提高博客运行效率 WORDPRESS程序SEO优化方法大总结_wordpress加速访问
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。 第 15 章 HQL: Hibernate查询语言Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计...
想学机器学习的人比较多,打算通过这个方向今后从事相关行业的工作,同时对于学历有困惑的人更多,许多人说机器学习的门槛是研究生,导致许多本科学习的朋友怀疑自己。机器学习工作要求研究生吗?今天来聊聊这个问题。机器学习工作要求研究生吗?其实并不需要,前几天跟一个创业的朋友聊天,朋友说他最近招了一个本科生,做机器学习,小伙并非科班出身,但学习能力很强,做的相当出色。所以,个人感觉这跟学历没有多大关系,只要你肯学,要不要那个学位都一样。为什么很多公司招聘机器学习岗位只要硕士以上?对于机器学习、人工智能之类的技术导向的工_机器学习岗位要求高吗
ZOJ 3952 Fibonacci Sequence Chicken Edition题目链接题意当我读第一遍题时,心态是崩溃的。。。好吧,不多废话。其实就是让你编一个程序来输出另一个程序源码。(禁止套娃)另一个程序就是题中的OPEC。你编的程序输出的每一行 ‘c’ 的数量就是OPEC的一个操作码,有多少行输出便有多少个操作码。这时你会想这和斐波那契数列有啥关系,其实就是通过操作码来算出斐波那契数列第n个数的值(n≤30且n≥1)。思路首先特判a是否为1,不是则初始化f(0) =
1. Spring Tool Suite(sts)简介Spring Tool Suite(sts)就是一个基于Eclipse的开发环境, 用于开发Spring应用程序。它提供了一个现成的使用环境来实现, 调试, 运行, 和部署你的Spring应用程序。包括为关键的的服务器和云计算,Git, Maven, AspectJ, 和最新的Eclipse...
额、、当你打开这里的时候、估计已经尝试过截图并且失败一次了,别急。是的,以前在桌面使用grabWindow()截屏刷刷的,很好使的。但是在android下使用还要处理下。所以Qt在android截屏有至少有如下两种了。1.grabWindow()处理后使用,也就是给它个window句柄继续使用。当然今天我们这里不讲它。我们讲下一种方法。2.qml下截图。其实保存图片qml也给了_qml 整个窗口保存为图片