SLAM:Simultaneous Localization and Mapping 同时定位与地图构建。
搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。
主要就是解决 1. 定位(估计传感器自身位置) 2. 地图构建(建立周围环境的模型) 两个问题。定位侧重对自身的了解,建图侧重对外在的了解。
相互关联 准确的定位需要精确的地图 -- 精确的地图来自准确的定位
若传感器主要为相机,则称为“视觉SLAM”。
机器人感知外界环境的手段
环境限制了传感器的形式
相比之下,激光、相机等携带式传感器更加自由
以一定速率采集图像、形成视频
分类
相机的特点
以二维投影形式记录了三维世界的信息,该过程丢掉了一个维度:距离
当相机运动时,可通过视差确定深度
前端:Visual Odometry 后端:Optimization 回环:Loop Closing 建图:Mapping
传感器信息读取
相机图像信息的读取和预处理
视觉里程计(VO)
估计相邻时刻的相机运动以及局部地图的样子
最简化:两个图像的相对运动
方法: 特征点法、直接法
累计漂移(accumulating drift):由于运动造成的误差会不断累计
后端优化
接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,得到全局一致的轨迹和地图
从带有噪声的数据中估计最优轨迹与地图
最大后验概率估计(MAP):从带噪声的数据中估计整体系统的状态,以及这个状态估计的不确定性有多大
空间状态的不确定性估计(Spatial Uncertainty)
滤波器,图优化
回环检测
解决位置估计随时间漂移的问题
检测相机是否到达过之前位置,判断与之前位置的差异,计算图像间相似性,词袋模型
建图
导航、规划、通讯、交互、可视化
状态估计问题
当知道运动测量的读数u,以及传感器的读数z时,如何求解定位(估计x)和建图(估计y)的问题。
位置参数x-旋转+位移,与相机有关
求解方法
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
增强现实应用
动态场景、语义地图、多机器人协作
参考:
Linux添加环境变量_zhang-jianqiang的博客-CSDN博客_linux 设置环境变量SLAM基础Linux基础操作解答~《视觉SLAM十四讲》_人工智能博士的博客-CSDN博客