课程内容与预备知识

  • 计算机视觉

    • 物体识别 (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十四讲】第一讲 概述与预备知识相关推荐

  1. 【视觉SLAM十四讲】第一章理论详解

    文章目录 第一讲 概述与预备知识 SLAM是什么 室内/室外定位 稀疏-半稠密重建 稠密重建 SLAM可以用在哪些地方? **作业1.** SLAM会在哪些场合中⽤到?⾄少列举三个⽅向. SLAM: ...

  2. 视觉SLAM十四讲学习记录 第一讲

    2022年6月16日,现在是大学本科毕业准研一的暑假,老师开组会让我们确定了研究方向,我的研究方向是协同探测与自动驾驶.与师兄交流后建议我阅读一本书<视觉SLAM十四讲从理论到实践>.怕自 ...

  3. 《视觉slam十四讲从理论到实践》第一讲习题自测解答

    0x00 前言 <视觉slam十四讲从理论到实践>第一讲习题自测解析. 借助自身知识储备和搜索引擎后完成习题,仅供参考. 部分答案会觉得没有说明的必要就会略   0x01 习题部分 1.有 ...

  4. 视觉 SLAM 十四讲 —— 第十三讲 建图

    视觉 SLAM 十四讲 -- 第十三讲 建图 在前端和后端中,我们重点关注同时估计相机运动轨迹与特征点空间位置的问题.然而,在实际使用 SLAM 时,除了对相机本体进行定位之外,还存在许多其他的需求. ...

  5. 视觉SLAM十四讲(1):预备知识

    最近在学习高翔博士的<视觉SLAM十四讲>(第二版),算是初学本书,配套资源还算蛮丰富的,有代码(第一版和第二版都有),B站上也有高翔博士对第一版录制的讲解视频,真的是很贴心. 来吧,让我 ...

  6. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  8. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  9. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

最新文章

  1. xshell启动报nssock2_nssock2.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  2. 不好意思,食言而肥了
  3. C# 反射中的GetType
  4. CentOS 修改线程数限制等(limits.conf)
  5. 二层网管交换机应用—环路检测
  6. 【.net 深呼吸】项目中是否有必要删去多余的引用
  7. 二元序列游程编码c语言,基于游程编码数据压缩算法设计与实现.doc
  8. 如何在 R 中进行 Fisher 精确检验
  9. 工作一周年,带你认识杭州最好的电商公司
  10. 刀魔王带你了解创口贴圆辊刀模的应用
  11. HTML5 新特性: Web Worker 的创建与使用(webpack + TS 环境)
  12. linux根目录不足,追加空间到根目录
  13. html中span跟div属性,HTML 的 div 和 span 标签
  14. Hadoop集群上的Hive安装时进行初始化元数据信息出现错误HiveSchemaTool:Parsing failed. Reason: Missing required option:
  15. Linux NAND FLASH驱动程序分析(mini2440)
  16. 计算机与打印机未连接,win7系统无法打印提示似乎未连接打印机的恢复步骤
  17. Python execjs(执行js脚本)
  18. Unity3d 游戏特效制作实战教程 第二部
  19. Java之static静态对象
  20. 北大软件工程与计算机,北京大学软件工程考研经验分享

热门文章

  1. 网吧无盘服务器ghost,无盘之家XP sp3 ghost G1 网吧专用加强版
  2. 破解无盘网吧全攻略(转)
  3. float为什么要比Long的取值范围大
  4. 根据折线经纬度获取的折线平行线
  5. 今天的码农女孩做了关于文件操作和文件拖拽的笔记 2022/1/21
  6. Channel 通信
  7. go语言实现HTML页面下载
  8. 202003 打印机安装、网络打印机安装 通用教程
  9. 幼儿stem教育法则
  10. 三年级能用计算机吗,三年级计算机上册教案