【视觉SLAM十四讲】第一讲 概述与预备知识
课程内容与预备知识
- 计算机视觉
- 物体识别 (2D/3D)
- 物体跟踪
- 物体检测
- 语义分割
- ……应用
- SLAM
- 现实世界中的相机
- 单目
- 双目
- 深度
- 视频序列
- 计算机视觉任务
- 应用:手持设备定位,自动驾驶定位,增强现实
SLAM是什么
SLAM:Simultaneous Localization and Mapping 同时定位与地图构建。
搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。
主要就是解决 1. 定位(估计传感器自身位置) 2. 地图构建(建立周围环境的模型) 两个问题。定位侧重对自身的了解,建图侧重对外在的了解。
相互关联 准确的定位需要精确的地图 -- 精确的地图来自准确的定位
若传感器主要为相机,则称为“视觉SLAM”。
传感器
机器人感知外界环境的手段
- 种类:内质的/外质的
- 内质:感受机器人本体信息
- IMU、激光、相机
- 外质:安装于环境中的
- 二维码Marker、GPS、导轨、磁条
环境限制了传感器的形式
- GPS:需要能接收到卫星信号的环境
- Marker、导轨:需要环境允许安装
相比之下,激光、相机等携带式传感器更加自由
相机
以一定速率采集图像、形成视频
分类
- 单目相机 Monocular (无深度 深度需要其他手段估计)
- 双目相机(立体相机) Stereo (通过视差计算深度)
- 深度相机 RGB-D (通过物理方法测量深度)
- 其他 全景、Event Camera
相机的特点
以二维投影形式记录了三维世界的信息,该过程丢掉了一个维度:距离
当相机运动时,可通过视差确定深度
视觉SLAM框架
前端:Visual Odometry 后端:Optimization 回环:Loop Closing 建图:Mapping
传感器信息读取
相机图像信息的读取和预处理
视觉里程计(VO)
估计相邻时刻的相机运动以及局部地图的样子
最简化:两个图像的相对运动
方法: 特征点法、直接法
累计漂移(accumulating drift):由于运动造成的误差会不断累计
后端优化
接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,得到全局一致的轨迹和地图
从带有噪声的数据中估计最优轨迹与地图
最大后验概率估计(MAP):从带噪声的数据中估计整体系统的状态,以及这个状态估计的不确定性有多大
空间状态的不确定性估计(Spatial Uncertainty)
滤波器,图优化
回环检测
解决位置估计随时间漂移的问题
检测相机是否到达过之前位置,判断与之前位置的差异,计算图像间相似性,词袋模型
建图
导航、规划、通讯、交互、可视化
- 度量地图
- 精确的表示地图中物体的位置关系
- 稀疏、稠密
- 大规模度量地图会出现一致性问题
- 拓扑地图
- 强调地图元素之间的关系
- 由节点和边组成的图,只考虑节点间的连通性
- 不擅长表达复杂结构地图
数学表述与框架
状态估计问题
当知道运动测量的读数u,以及传感器的读数z时,如何求解定位(估计x)和建图(估计y)的问题。
位置参数x-旋转+位移,与相机有关
求解方法
- 线性高斯系统(Linear Gaussian, LG)
- 最简单,无偏的最优估计可以由卡尔曼滤波器(KF)给出
- 非线性非高斯系统(NLNG)
- 扩展卡尔曼滤波器(EKF)和非线性优化
- 主流以图优化进行状态估计
课后习题
LINUX
1. 如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?
1)apt-get 方式的安装;
普通安装:sudo apt-get install XXX
修复安装:sudo apt-get -f install XXX
重新安装:sudo apt-get -f reinstall XXX
2)dpkg方式的安装
sudo dpkg -i package_name.deb
通常被安装在/usr/bin这个目录下
2. linux 的环境变量是什么?我如何定义新的环境变量?
Linux系统中的环境变量是用来指定系统运行环境的一些参数,比如我们使用命令的路径。
通过环境变量来帮助Linux系统构建起为用户服务的工作环境,是需要数百个变量来协同完成的。我们可以用env命令查看linux系统中所有的环境变量。
查看环境变量
export
添加临时环境变量
export PATH=/usr/local/bin:$PATH
// PATH是变量名,这里是指添加到PATH这个环境变量中
// =后面是要添加的环境变量
// :$PATH是指把新添加的环境变量与原先的环境变量重新赋值给PATH这个变量,这里可以看出如果有多个环境变量时,应该使用:进行分隔,如
// export PATH=/usr/local/php/bin:/usr/local/mysql/bin:$PATH
// 当然$PATH是放在开头还是最后是没有影响的
添加全局环境变量
vim /etc/profile
// 如果只修改当前用户的环境变量,则是`vim ~/.bashrc`
// 在文件的最后一行添加以下代码:
export PATH=$PATH:/usr/local/php/bin
// 规则和用法如第二条所说
3. linux 根⽬录下⾯的⽬录结构是什么样的?⾄少说出 3 个⽬录的⽤途。
/:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。/bin,/usr/bin:该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。/boot: 该目录中存放系统的内核文件和引导装载程序文件,/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可。/dev: 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等,常用的是挂载光驱mount /dev/cdrom/mnt。 /etc: 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系统有关)、/etc/sysconfig(与网络有关)、/etc/xinetd.d修改配置文件之前记得备份。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。/home: 系统默认的用户宿主目录,新增用户账号时,用户的宿主目录都存放在此目录下,~表示当前用户的宿主目录,~test表示用户test的宿主目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据。/lib,/usr/lib,/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,该目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令,目录/lib/modules包含了可加载的内核模块,/lib目录存放了所有重要的库文件,其他的库文件则大部分存放在/usr/lib目录下。/lost+fount: 在EXT2或EXT3文件系统中,当系统意外崩溃或机器意外关机,产生的一些文件碎片放在这里。在系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方法来修复,或者移动文件到运来的位置上/mnt,/media: mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如floppy,cdrom。这样当挂载了一个设备如光驱时,就可以通过访问目录/mnt/cdrom下的文件来访问相应的光驱上的文件了。/opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下。/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等。/root:系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。/sbin,/usr/sbin,/usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内。/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,/usr/local 存放软件升级包,/usr/share/doc 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间。/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log。/var/log/message: 所有的登录文件存放目录。/var/spool/mail: 邮件存放的目录。 /var/run: 程序或服务启动后。建议单独分区,设置较大的磁盘空间。/tmp:存放临时文件目录,一些命令和应用程序会用的到这个目录。该目录下的所有文件会被定时删除,以避免临时文件占满整个磁盘。
4. 假设我要给 a.sh 加上可执⾏权限,该输⼊什么命令?
chomd +x a.sh, r:4 w:2 x:1
5. 假设我要将 a.sh ⽂件的所有者改成 xiang:xiang,该输⼊什么命令?
chown xiang:xiang a.sh
SLAM 综述文献阅读
增强现实应用
动态场景、语义地图、多机器人协作
ORB-SLAM2复现
参考:
Linux添加环境变量_zhang-jianqiang的博客-CSDN博客_linux 设置环境变量SLAM基础Linux基础操作解答~《视觉SLAM十四讲》_人工智能博士的博客-CSDN博客
【视觉SLAM十四讲】第一讲 概述与预备知识相关推荐
- 【视觉SLAM十四讲】第一章理论详解
文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...
- 视觉SLAM十四讲学习记录 第一讲
2022年6月16日,现在是大学本科毕业准研一的暑假,老师开组会让我们确定了研究方向,我的研究方向是协同探测与自动驾驶.与师兄交流后建议我阅读一本书<视觉SLAM十四讲从理论到实践>.怕自 ...
- 《视觉slam十四讲从理论到实践》第一讲习题自测解答
0x00 前言 <视觉slam十四讲从理论到实践>第一讲习题自测解析. 借助自身知识储备和搜索引擎后完成习题,仅供参考. 部分答案会觉得没有说明的必要就会略 0x01 习题部分 1.有 ...
- 视觉 SLAM 十四讲 —— 第十三讲 建图
视觉 SLAM 十四讲 -- 第十三讲 建图 在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用 SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...
- 视觉SLAM十四讲(1):预备知识
最近在学习高翔博士的<视觉SLAM十四讲>(第二版),算是初学本书,配套资源还算蛮丰富的,有代码(第一版和第二版都有),B站上也有高翔博士对第一版录制的讲解视频,真的是很贴心. 来吧,让我 ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践
专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...
- 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵
专栏系列文章如下: 专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...
- 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理
第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...
- 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机
第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...
最新文章
- xshell启动报nssock2_nssock2.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- 不好意思,食言而肥了
- C# 反射中的GetType
- CentOS 修改线程数限制等(limits.conf)
- 二层网管交换机应用—环路检测
- 【.net 深呼吸】项目中是否有必要删去多余的引用
- 二元序列游程编码c语言,基于游程编码数据压缩算法设计与实现.doc
- 如何在 R 中进行 Fisher 精确检验
- 工作一周年,带你认识杭州最好的电商公司
- 刀魔王带你了解创口贴圆辊刀模的应用
- HTML5 新特性: Web Worker 的创建与使用(webpack + TS 环境)
- linux根目录不足,追加空间到根目录
- html中span跟div属性,HTML 的 div 和 span 标签
- Hadoop集群上的Hive安装时进行初始化元数据信息出现错误HiveSchemaTool:Parsing failed. Reason: Missing required option:
- Linux NAND FLASH驱动程序分析(mini2440)
- 计算机与打印机未连接,win7系统无法打印提示似乎未连接打印机的恢复步骤
- Python execjs(执行js脚本)
- Unity3d 游戏特效制作实战教程 第二部
- Java之static静态对象
- 北大软件工程与计算机,北京大学软件工程考研经验分享