【VSLAM学习记录1】视觉SLAM
文章目录
- SLAM简介:
- 经典视觉SLAM流程:
- SLAM第一讲习题:
- 1.线性方程 AX=b 该如何求解,对A和b有何要求? Ps:(以向量空间的角度理解)
- 2.高斯分布(通常指正态分布概率密度函数):
- 3.1.C++中的类:
- 3.2.C++STL:
- 4.C++11标准:
- 5.linux目录结构:
- 6.linux常用命令:
- 7.linux安装软件的几种方法:
SLAM简介:
SLAM (simultaneous localization and mapping),中文译作"同时定位与地图构建",它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动,如果这里的传感器主要为相机,则称为’'视觉SLAM"
经典视觉SLAM流程:
1.传感器信息读取,在视觉SLAM中主要为相机图像信息的读取和预处理。
2.视觉里程计(Visual Odometry , VO).视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子。VO又称为前端(Front End)。
【里程计,顾名思义类似是用来完成某种运动估计的装置(测量速度,加速度,计算位移等)由于 受噪声影响其估计误差会逐渐累积,累计误差,这种现象叫漂移(drift)】
参考博客:https://blog.csdn.net/weixin_37251044/article/details/79009385
3.回环检测。判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
【我们的位姿约束都是与上一帧建立联系的,第5帧的位姿误差便已积累了前4帧位姿约束中的误差。但如果发现位姿5不一定由4推出,还可由1推出(回环),这样累计误差便减小了。但如何确定除4外5还可由谁推呢?找出可以建立这种位姿约束的历史帧,就是回环检测】
参考博客:https://blog.csdn.net/fishmarch/article/details/82892847
4.后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在VO之后,又称为后端(Back End)。
【把所有地图数据放到一起做一次完整的优化,从而降低各部分的误差】
参考博客: https://www.jianshu.com/p/e4a45ccd128f
5.建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。
SLAM第一讲习题:
1.线性方程 AX=b 该如何求解,对A和b有何要求? Ps:(以向量空间的角度理解)
1)若b==0,即AX==0:
若R(A)==n&&X!=0 即A张成的空间有n维,且x有n行(b也存在于n维空间),X存在的原始n维空间无法通过A的线性变换而降维,(或理解为构成A的向量组无法通过由b指导的线性组合而变为0向量),所以当且仅当X==0即X只有零解时,等式才成立。
若R(A)<n时,即A张成的空间小于其满秩时的维数(存在线性相关组),即X存在的原始空间通过A的线性变换降低了维度,则当X的方向恰为线性变换后降维的方向时,X存在非零解,其解集即基础解系的缩放版本(模变方向不变),而基础解系的多少取决于原始空间降低的维数。
2)若R(A)==R(A,b)==n:
即A满秩,X存在于n维空间,X的原始空间通过A的线性变换后不降维,则X通过A的线性变换必将成为一个相对于原始空间的新的向量,即b,b也存在于n维空间中,且仅有唯一解b。
3)若R(A)==R(A,b)<n:
即原始n维空间通过A变换降维且b与变换后的空间同维,而X存在于更高的n维空间,且X通过A变换后失去了降低的维度的信息成为b,此时X解不唯一,其解集即降维后X的’'剩余维度信息(常向量)"加上降维方向上丢失的向量系(基础解系),基础解系的数目多少取决于原始空间降低的维数,若当降维方向上的向量分量恰为0,则其特解便为基础解系中的常向量。
4)若R(A,b)>R(A):
即通过线性变换将X转化为与A同维(<=n)的向量,而转换后的向量b的维度却>R(A),故不存在这样的解。
解法:对于齐次线性方程,对系数矩阵进行初等行变换化为行最简,求解,若有多解则求通解;
对于非齐次线性方程,对增广矩阵进行初等行变换化为行最简,求解,若有多解则求通解。
2.高斯分布(通常指正态分布概率密度函数):
一维形式:
f(x)=12πσe(−(x−μ)22σ2),f(x) = \frac{1}{\sqrt[]{2\pi}\sigma}e^{(-\frac{(x-\mu)^2}{2\sigma^2})}, f(x)=2πσ1e(−2σ2(x−μ)2),
二维形式:
f(x,y)=(2πσ1σ2)−1e[−12(1−ρ2)((x−μ1)22σ12−2ρ(x−μ1)(y−μ2)σ1σ2+−(y−μ2)2σ22)],f(x,y) = (2\pi\sigma_{1}\sigma_{2})^{-1}e^{[-\frac{1}{2(1-\rho^2)}(\frac{(x-\mu_1)^2}{2\sigma_1^2}-\frac{2\rho(x-\mu_1)(y-\mu_2)}{\sigma_1\sigma_2}+-\frac{(y-\mu_2)^2}{\sigma_2^2})]}, f(x,y)=(2πσ1σ2)−1e[−2(1−ρ2)1(2σ12(x−μ1)2−σ1σ22ρ(x−μ1)(y−μ2)+−σ22(y−μ2)2)],
参考博客:https://www.cnblogs.com/bingjianing/p/9117330.html
3.1.C++中的类:
1)C++中的类是对C struct 的拓展和延伸,C中只能定义成员变量而不能定义成员函数,C++可以
2)C的结构体对内部成员变量的访问权限只有public而C++允许public,private,protected三种
3)C语言的结构体是不了继承的,C++的类可以从其他结构体或类继承过来.
参考博客:https://blog.csdn.net/u013925378/article/details/51661081
https://blog.csdn.net/ycwasdfasdf/article/details/51363756
#include<iostream>
//using namespace std;
int b=1000;
class test
{ public: //class默认是private; struct默认是public void sum(int a,int b=0); //C++初始化参数值只能靠右定义(int a=0,int b)是错误的 }; void test::sum(int a,int b) //test::注明sum是属于test类下的函数 {std::cout<<a+b<<","; //std::注明所使用的函数属于哪个库(命名空间) }int main(){int b=9999;test a[5];a[1].sum(1,2);a[2].sum(2,4);std::cout<<::b<<','; //::b注明b属于全局变量 std::cout<<b; //这里的b是局部变量 }
输出:3,6,1000,9999
3.2.C++STL:
C++标准库由三组库构成:C库,C++库,标准模板库(STL: Standard Template Library)简单来说就是封装好的一些组件
在C++标准中,STL被组织为下面的13个头文件:algorithm, deque, functional, iterator, vector, list, map, memory, numeric, queue, set, stack, utility
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。
为什么要学STL呢?
方便。比如你要实现一个链式队列,以及它的一系列功能,你需要敲几十乃至上百行代码,还要投入精力debug,可在STL里,给你做好现成的queue你用不用?现成的快排你用不用?平均复杂度O(nlogn)
的排序只要几句话,手写一个冒泡也得好几行吧?还卡时。
示例:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ int a,b;cin >>a>>b;swap(a,b); //交换函数 cout<<"swap:"<<a<<' '<<b<<'\n';int c[5]={1,2,3,4,5};int i;reverse(c,c+5); // 逆序函数 <algorithm>cout<<"reverse:"<<c[0]<<c[1]<<c[2]<<c[3]<<c[4]<<'\n'; cin >>a>>b;cout<<"gcd:"<<__gcd(a,b)<<'\n'; //最大公约数 (两个下划线) <algorithm>int e[]={1,2,2,3};cout<<"全排列:"<<'\n'; do{cout<<e[0]<<e[1]<<e[2]<<e[3]<<'\n';}while(next_permutation(e,e+3)); //全排列 <algorithm>}
输入输出:
12 21
swap:21
12
reverse:54321
23 46
gcd:23
全排列:
1223
1232
1322
2123
2132
2213
2231
2312
2321
3122
3212
3221
参考博客:https://blog.csdn.net/mMingfunnyTree/article/details/79182048
4.C++11标准:
参考博客:https://blog.csdn.net/whhitxjl/article/details/50703918
https://blog.csdn.net/xiaomu_347/article/details/82563688
5.linux目录结构:
参考博客: https://blog.csdn.net/wangrongrongwq/article/details/79624797
6.linux常用命令:
参考博客:https://blog.csdn.net/intflojx/article/details/85882002
https://blog.csdn.net/zanzhebo0157/article/details/87907123
7.linux安装软件的几种方法:
参考博客:https://blog.csdn.net/u010509774/article/details/50593231
全篇参考:https://www.cnblogs.com/NikkiNikita/p/9450772.html
【VSLAM学习记录1】视觉SLAM相关推荐
- VSLAM学习记录-求导:李群与李代数
旋转的求导过程 1.基础知识回顾:导数与微分 2.优化中的旋转量 2.1 背景 2.2 李群和李代数 2.2.1 李群 2.2.2 李代数与李群的关系:指数映射 2.2.3 如何求李代数 3.求导:左 ...
- ROS学习记录16【SLAM】仿真学习5——将cmd_vel转换为ackman小车的速度
零.前言 在ROS的机制下,绝大多数的速度模型都是:Twist,当然我们有符合阿克曼模型的:ackermann_msgs,不用那么麻烦,直接将Twist.linear.x作为后轮前进的速度.twist ...
- ROS学习记录17【SLAM】仿真学习6【完结】—— 无人驾驶
零.前言 这次使用Move_Base框架配置配置,就能实现自主导航了.仿真篇结束,后面找机会拿个实物来玩儿. 在整理包,后面会传到github和gitee上 一.安装与介绍 1.1 move_base ...
- 《视觉SLAM十四讲》学习笔记:第5讲相机与图像
<视觉SLAM十四讲>学习笔记:第5讲相机与图像 前言:本学习笔记将记录<视觉SLAM十四将>中一些重要的知识点,并对书中一些比较难的知识点添加上一些笔者个人的理解,以供笔者本 ...
- tensorflow 语义slam_研究《视觉SLAM十四讲从理论到实践第2版》PDF代码+《OpenCV+TensorFlow深度学习与计算机视觉实战》PDF代码笔记...
我们知道随着人工神经网络和深度学习的发展,通过模拟视觉所构建的卷积神经网络模型在图像识别和分类上取得了非常好的效果,借助于深度学习技术的发展,使用人工智能去处理常规劳动,理解语音语义,帮助医学诊断和支 ...
- 视觉SLAM十四讲学习记录 第二讲
书接上回: 第一讲 第二讲 初识SLAM 2.1 引子:小萝卜的例子 首先作者借"小萝卜"这类机器人引出了几个概念: 自主运动能力是很多高级功能的前提,需要定位与感知(建图)来 ...
- 学习记录-视觉SLAM十四讲第2版(二)
文章目录 前言 一.问题是什么? 二.工具是什么? 1.分类 2.三种相机 (1)单目相机 (2)双目相机 (3)深度相机 三.流程是什么? 1.总的流程框架 2.每个步骤说明 3.补充 四.尺度不确 ...
- 视觉SLAM十四讲学习记录 第五讲
之前第四讲的地址 以及第四讲习题的地址 第五讲 相机与图像 前面两讲中,我们介绍了"机器人如何表示自身位姿"的问题,部分地解释了SLAM经典模型中变量的含义和运动方程部分.本讲 ...
- 视觉SLAM十四讲学习记录 第一讲
2022年6月16日,现在是大学本科毕业准研一的暑假,老师开组会让我们确定了研究方向,我的研究方向是协同探测与自动驾驶.与师兄交流后建议我阅读一本书<视觉SLAM十四讲从理论到实践>.怕自 ...
最新文章
- python 重复采样,不重复采样
- 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)
- mysql 免安装重装_MYSQL的免安装的重装
- Linux shell条件判断
- 数据结构之线性查找和折半查找
- https及核心SSL
- antd 日期时间选择_【UI设计】日期选择器的常见样式总结
- 机器学习---人脸对齐的基于形状模型的训练
- 推荐一个ajax控件项目 ajax data control
- 使用TiledMap做的圈地游戏
- 法度远程视频审讯系统有哪些主要功能?
- PTES 测试执行标准
- Talk预告 | 北京大学人工智能研究院杨耀东:一个合作博弈的通用求解框架
- 100个超好用的Excel快捷键
- VMware-Esxi6.7各个版本镜像文件iso下载链接
- SuperMap iServer11i新功能----图例的发布和使用
- ChimeraX cryoEM 可视化教程:细菌ATP合酶
- 营养不良和口服万古霉素对人体肠道菌群和营养吸收的影响
- 地理坐标的六边形编码(PHXIS)
- C++满足条件的数累加
热门文章
- 【SLAM】SLAM环境配置 Win10+VS2019+OpenCV+PCL+g2o+Vcpkg
- OpenHarmony应用签名 - 厂商私有签名
- 二级建筑网络图计算机,浙江省计算机二级 办公软件 习题效果图-.pdf
- 坚如磐石的React.js基础:入门指南
- 数据库连接池了解和常用连接池对比
- 计算机中磁盘管理恢复分区,如何解决电脑出现好几个恢复分区
- 辟谣!男程序员都是秃头,女程序员满脸痘痘
- Web前端学习笔记——HTML基础
- 微信“史诗级”更新,小而美终于回来啦~
- OpenStack配置使用sriov