slam

SLAM拾萃(1):octomap

半城伤御伤魂 提交于 2020-01-26 01:56:42
前言   大家好,时隔多年之后,我又开始了博客旅程。经历了很多事情之后呢,我发现自己的想法真的很简单:好好读书做课题,闲下来时写写博客,服务大家。所以我会继续写SLAM相关的博客。如果你觉得它对你有帮助,那是最好不过的啦!写作过程中得到了许多热心读者的帮助与鼓励,有些读者还成了要好的朋友,在此向大家致谢啦!关于SLAM,读者也会有很多问题。由于我个人精力和学力都有限,无法一一回答,向大家说声抱歉!有些共同的问题,我肯定会在博客里介绍的!   前两天刚从珠海开会回来,与中山大学的同学们聚在一起玩耍,很开心!   《一起做》系列已经结束,事实上它是我以前探索过程中的一些总结。虽然仍然有很多令人不满意的地方,不过相信读了那个系列,读者应该对SLAM的流程有一定的了解了。尤其是通过代码,你能知道许多论文里没讲清楚的细节。在这之后,我现在有两个规划。一是对目前流行的SLAM程序做一个介绍,沿着《视觉SLAM实战》往下写;二是介绍一些好用的开源工具/库,写成一个《SLAM拾萃》。我觉得这两部分内容,对读者了解SLAM会有较大的帮助。当然,如果你对我的博客有任何建议,可以在下方评论或给我发邮件。   本篇是《SLAM拾萃》第一篇,介绍一个建图工具:octomap。和往常一样,我会介绍它的原理、安装与使用方式,并提供例程供读者学习。必要时也会请小萝卜过来吐槽。(小萝卜真是太好用了

自主移动机器人同时定位与地图创建(SLAM)方法概述

孤街醉人 提交于 2020-01-23 16:29:24
1.引言: 机器人的研究越来越多的得到关注和投入,随着计算机技术和人工智能的发展,智能自主移动机器人成为机器人领域的一个重要研究方向和研究热点。移动机器人的定位和地图创建是自主移动机器人领域的热点研究问题。对于已知环境中的机器人自主定位和已知机器人位置的地图创建已经有了一些实用的解决方法。然而在很多环境中机器人不能利用全局定位系统进行定位,而且事先获取机器人工作环境的地图很困难,甚至是不可能的。这时机器人需要在自身位置不确定的条件下,在完全未知环境中创建地图,同时利用地图进行自主定位和导航。这就是移动机器人的同时定位与地图创建(SLAM) 问题,最先是由SmithSelf 和Cheeseman在1988年提出来的,被认为是实现真正全自主移动机器人的关键。 SLAM问题可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和传感器数据进行自身定位,同时建造增量式地图。 在SLAM中,机器人利用自身携带的传感器识别未知环境中的特征标志,然后根据机器人与特征标志之间的相对位置和里程计的读数估计机器人和特征标志的全局坐标。这种在线的定位与地图创建需要保持机器人与特征标志之间的详细信息。近几年来,SLAM的研究取得了很大的进展,并已应用于各种不同的环境,如:室内环境、水下、室外环境。 2.SLAM的关键性问题 2.1地图的表示方式 目前各国研究者已经提出了多种表示法

unbutu rgbd slam v2+kinect2/kinect1

我们两清 提交于 2020-01-18 08:03:11
unbutu rgbd slam v2+kinect2/kinect1 第一步 安装和使用kinect v2摄像头 ibfreenect2安装 iai_kinect2安装 启动使用 第三步 用Kinect2跑RGB-D SLAM 保存点云和轨迹 保存数据集 第一步 安装和使用kinect v2摄像头 ibfreenect2安装 安装opencv 安装其他依赖: $ sudo apt - get install build - essential cmake pkg - config libturbojpeg libjpeg - turbo8 - dev mesa - common - dev freeglut3 - dev libxrandr - dev libxi - dev 下载libfreenect2驱动: $ cd ~ $ git clone https: / / github . com / OpenKinect / libfreenect2 . git $ cd libfreenect2 $ cd depends ; . / download_debs_trusty . sh 安装libusb $ sudo dpkg - i debs / libusb * deb 安装 TurboJPEG $ sudo apt - get install libturbojpeg

AR中的SLAM(一)

好久不见. 提交于 2020-01-12 15:12:21
写在前面 本系列打算讲讲个人对AR行业和AR中的SLAM算法的一点浅显的看法。才疏学浅,文中必然有很多疏漏和不足,还望能和大家多多讨论。今天先讲讲我对AR的一些认识。 AR的一点理解 AR是什么 AR是人类的第三只眼,让人类在现实世界中看到虚拟物体并与之交互。 VR是人类做梦的一种载体。 AR能做什么 AR有能力将二维交互变成三维交互,能让虚拟物体看起来像真的一样。举几个简单的场景。 你可以拥有一只虚拟宠物。你可以从各个方向观察一个虚拟小猫,绕着它转动。你会发现,走近看会显得大一些,离远了看着会变小。愿意的话,还可以挠挠它,和它玩耍。 你将拥有一个虚拟电视。它可以固定在任何地方(即使你到处走动),也可以随意移动。 你在和家人远程通话时能在自己房间看到家人的全息投影。 你将房间变成虚拟密室。 当然,你可以在任何地方唤醒任何APP。 我觉得,如果未来AR能够发展出更多的外延,那么在消费领域会有机会取代手机 ,然后并在若干年后沦为卖广告赚钱的工具 。而在工业领域,AR也有机会蹦跶几下 ,然后被机器人取代 。 AR怎么实现 目前AR需要通过外部设备来实现。比如在手机上,通过获取摄像头图像并在上面叠加虚拟物体。而专业的AR设备可以将虚拟物体成像在眼睛前面或投射入眼球。 AR需要什么 要实现前面提到的三维交互,AR设备需要具备下面三个功能 自我定位。指定位出自身在空间中的位置

kartoSLAM代码解读

天涯浪子 提交于 2020-01-11 06:24:56
在运行kartoslam的代码的时候,通过 这里的教程 我们通过roslaunch turtlebot_navigation rplidar_karto_demo.launch运行,但是运行之后发生了什么呢? rplidar_karto_demo.launch内容如下 <launch> <!-- Define laser type--> <arg name="laser_type" default="rplidar" /> <!-- laser driver --> <include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" /> <!-- karto.launch--> <arg name="custom_karto_launch_file" default="$(find turtlebot_navigation)/launch/includes/karto/$(arg laser_type)_karto.launch.xml"/> <include file="$(arg custom_karto_launch_file)"/> <!-- Move base --> <include file="$(find turtlebot_navigation)

研究生计划

北城以北 提交于 2020-01-10 04:18:24
我今天发现博客上可以悄咪咪的写日记,嘿嘿,不错,还好我有这个习惯,也有这个兴趣,可以多记录一下我的日程活动。 那我就这样安排:每天写纸质版的日总结,每周末在博客的私密文章上写周总结,然后月末对这几周学的东西进行整理并公开。 所以我也应该有点压力,毕竟发出来之后大家就都知道我这一个月有没有认真学东西了,也是对自己的一个监督吧 2020.1.9今天我正式进入实验室,老师给我的方向是三维点云处理,和我学的SLAM还是有关联的,那接下来我将主攻: SLAM+三维点云处理 ;一个是整体框架的完整学习,一个是某个点的深入学习。 三维点云处理: 这是实验室的东西,目前有两个硬核项目做支撑,有师兄师姐的积累,同届同学的协同讨论,和深蓝学院的课程支持,最重要的是我还要拿这个发论文,拿这个毕业,所以这个是我的工作的重中之重。 SLAM: 我投入了蛮多时间在里面,伴随着基础课程的学习,现在已经可以看懂一些当时理解并不深刻的东西,这不应该成为牵绊,应该两者都要强才行。 现阶段:①我已经报了slam/vio这门课,周五就要开课了;②而且老师希望我可以年前把创新点定下来,虽然师兄说不太现实,但是我还是想把一切工作往前赶,笨鸟先飞,所以这阶段我要平衡好这两者的关系;③还要好好写力扣,keep coding,让自己变强大 半年之后的我应该: ①学好slam这门课,阅读相关论文,拿到优秀学员

ORB-SLAM2 论文笔记

会有一股神秘感。 提交于 2020-01-10 01:54:57
单目相机具有成本低,设置简单的优点,但是同样存在尺度不确定、初始化需要足够视差,最终造成尺度漂移、无法处理纯旋转等问题。 ORB-SLAM2为SLAM的发展作出了以下几个贡献: 1.这是第一个同时提供单目,双目和RGB-D接口的SLAM开源系统,并且包含回环检测,重定位和地图重用。 2.通过BA对RBG-D进行优化,效果优于state-of-the-art的ICP或photometric and depth error minimization 3.通过使用近距离和远距离的双目点以及单目观测,使得其双目的精确度要高于state-of-the-art的直接使用双目的SLAM系统 4.通过禁用建图来实现利用已有地图,进行轻量级的定位。 ORB-SLAM2的框架和ORB-SLAM的框架几乎是一模一样的,包含了三个线程:Tracking,Local Mapping和Loop Closing。主要的区别还是在对于双目相机和RBG-D相机前端,是如何进行追踪并构建后端优化问题的。因此与ORB-SLAM相同的部分就不再赘述,详细可参考上一篇关于ORB-SLAM论文的博客。 A.Monocular, Close Stereo and Far Stereo Keypoints ORB-SLAM2是基于特征的SLAM系统,因此当从输入的图像中提取特征之后,图像不需要被保存而是直接丢弃,因此可以说ORB

ORB_SLAM installation on Ubuntu Xenial 16.04

孤街醉人 提交于 2020-01-04 13:05:15
问题 Is it possible to install ORB_SLAM/ORB_SLAM2 on last version of Ubuntu (Xenial 16.04) without black magic? I know that the recommendation is to use Ubuntu 14.04 according to https://github.com/raulmur/ORB_SLAM2, but I currently have last version and I don't really want to change it or install 14 together with 16. I use OpenCV 2.4.8 and ROS/catkin build system and get the next error: /home/roman/ORB_SLAM2/src/Optimizer.cc:1244:1: required from here /usr/include/eigen3/Eigen/src/Core/util

视觉SLAM学习——视觉里程计VO

我只是一个虾纸丫 提交于 2019-12-31 16:01:15
视觉SLAM学习——视觉里程计VO 本文为个人学习视觉slam之后的一些片面的理解,希望能够对大家有所帮助 文章目录 视觉SLAM学习——视觉里程计VO 特征点法 ORB特征检测 1、FAST特征点提取(设提取n个角点): 2、对FAST角点构建图像金字塔实现尺度不变性 3、对角点采用灰度质心法实现旋转不变性 4、获得角点的BRIEF描述子 特征匹配 相机位姿T估计及3D点P的求取 1、2D到2D过程 1.1、位姿T的获取: 1.2、3D点P的获取 1.3、最后可加入深度滤波器对获得的深度进行滤波 2、3D到2D过程 2.1 直接线性变换DLT: 2.2 非线性优化(Bundle Adjustment) 3、3D到3D过程 3.1 ICP(迭代最近点) 3.2 非线性优化方法 光流法 1、保留特征点,但只计算关键点,不计算描述子 2、LK光流法 3、ICP或对极几何估计相机运动T 4、三角测量获得特征点3D坐标P 直接法 1、保留特征点,但只计算关键点,不计算描述子 2、最小化光度误差求解相机位姿T: 3、三角测量获得特征点3D坐标P 特征点法 ORB特征检测 这里仅仅介绍ORB特征点的提取的算法过程: 1、FAST特征点提取(设提取n个角点): 1.1、选取像素p,获得其亮度为Ip 1.2、设置阈值T(如:Ip的 20%) 1.3、以p为中心选取半径为3的圆上的16个像素点 1

Format of parameters in KITTI's calibration file

与世无争的帅哥 提交于 2019-12-31 05:07:07
问题 I accessed calibration files from part odometry of KITTI, wherein contents of one calibration file are as follows: P0: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 0.000000000000e+00 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 P1: 7.188560000000e+02 0.000000000000e+00 6.071928000000e+02 -3.861448000000e+02 0.000000000000e+00 7.188560000000e+02 1.852157000000e+02 0