
SLAM
Felaim
Hey, you're not a nobody. You're a somebody.
展开
-
ROS下怎么使用USB摄像机
首先,先说一下LZ用的呢是Ubuntu14.04,ROS是我事先安装indigo版,已经安装好了,就不赘述啦,回到整体,做SLAM经常会遇到的一个问题就是要使用自己的摄像头,但是怎么使用呢,有是个bug,O(∩_∩)O哈哈~ 首先:git clone https://github.com/bosch-ros-pkg/usb_cam.git从github下载原来的代码,指令下载下来进入这个node,原创 2017-03-03 20:03:55 · 5684 阅读 · 0 评论 -
PCL:关于pcd数据显示的一个小问题
为了分析点云数据,然后想查看一下原始的pcd,结果使用cat查看时出现乱码,因为保存形式二进制形式,所以这里就是简单的一个pcd另存为的操作!#include <iostream>#include <cstring>#include <pcl/io/pcd_io.h>#include <pcl/point_cloud.h>#include <pcl/point_types.h>bool L原创 2017-08-30 12:44:17 · 2792 阅读 · 1 评论 -
ORB-SLAM2的源码阅读(一):系统的整体构建
春节后又要开工啦,加油ヾ(◍°∇°◍)ノ゙ORB-SLAM2在SLAM界算的上是火遍大江南北,无数更新的版本在github上发布,这么厉害的代码怎么样也得拜读一下。原谅我的脑力有限,一次性是没法读完这整套代码的,当然在当中也会有不理解的地方或者理解错误的地方,如果理解有误,还请批评指正。ORB-SLAM2源自于ORB-SLAM,为什么有名?因为完善,集合了单目,双目,RGB-D多种模型。更重要的一点原创 2018-02-26 15:26:18 · 4303 阅读 · 2 评论 -
ORB-SLAM2的源码阅读(二):ORB特征提取
怎么读一个工程?代码菜鸟不敢妄言。LZ也就尝试化整为零,逐个击破,再化零为整,全局理解。下面代码来自ORB_SLAM2的ORBextractor.h和ORBextractor.cc.为什么要写这个博客,因为笨,看代码怕忘了。自己写一遍加深下记忆。为什么不直接转载?大神很多,转载自己思考很少,自己动手虽然比不过大神,但是还是会有所收获。如果有好的,可以把链接加在参考博客位置。#ifndef ...原创 2018-02-27 11:05:28 · 5381 阅读 · 12 评论 -
ORB-SLAM2的源码阅读(三):Frame类
看到网上介绍ORB-SLAM2,基本上介绍一个系统的框架,或者按照线程,Tracking,Local Mapping, Loop Closing,介绍大致流程,但是细节讲的不是很多,只能说懂个大概原理。LZ还是自己慢慢阅读吧,虽然这样的代码注释有点啰嗦,请高手勿喷^_^在ORB-SLAM2中,头文件中作者都写的很清楚各个函数的定义,这个LZ就不在赘述了。#ifndef FRAME_H#define原创 2018-02-27 20:32:23 · 3464 阅读 · 3 评论 -
ORB-SLAM2的源码阅读(四):Map类
这个类别算是比较简单,主要是负责维护其中关键帧和地图点,就是后面要讲的几类。包括设置参考地图点用于绘制地图。还有一些计数和保存地图点,关键帧ID的功能。#ifndef MAP_H#define MAP_H#include "MapPoint.h"#include "KeyFrame.h"#include <set>#include <mutex>namespace ORB_SLAM2{cla原创 2018-02-28 09:51:00 · 1198 阅读 · 0 评论 -
ORB-SLAM2的源码阅读(五):MapPoint类
说太多,又要被说矫情了。。。#ifndef MAPPOINT_H#define MAPPOINT_H#include"KeyFrame.h"#include"Frame.h"#include"Map.h"#include<opencv2/core/core.hpp>#include<mutex>namespace ORB_SLAM2{class KeyFrame;class Map;c原创 2018-02-28 20:26:24 · 2634 阅读 · 1 评论 -
ORB-SLAM2的源码阅读(六):KeyFrameDataBase类
嗯,要做一个早睡早起,身体棒,每天精力充沛的好LZ。认认真真完成学业O(∩_∩)O哈哈~关键帧数据是通过预先训练好的词典,维护一个vector的链表,每个链表对应一个vocabulary的id,对应存储含有这个vocabulary的关键帧链表。#ifndef KEYFRAMEDATABASE_H#define KEYFRAMEDATABASE_H#include <vector>#include原创 2018-03-02 08:43:33 · 1658 阅读 · 2 评论 -
ORB-SLAM2的源码阅读(七):KeyFrame类
话不多说,直接上代码了。。。#ifndef KEYFRAME_H#define KEYFRAME_H#include "MapPoint.h"#include "Thirdparty/DBoW2/DBoW2/BowVector.h"#include "Thirdparty/DBoW2/DBoW2/FeatureVector.h"#include "ORBVocabulary.h"#incl原创 2018-03-02 13:42:26 · 3104 阅读 · 0 评论 -
ORB-SLAM2的源码阅读(八):ORBmatcher类
#ifndef ORBMATCHER_H#define ORBMATCHER_H#include<vector>#include<opencv2/core/core.hpp>#include<opencv2/features2d/features2d.hpp>#include"MapPoint.h"#include"KeyFrame.h"#in...原创 2018-03-02 19:49:35 · 3153 阅读 · 0 评论 -
ORB-SLAM2的源码阅读(九):Initializer类
还是博客写的顺序有些问题,应该一开始就写初始化来着。。。#ifndef INITIALIZER_H#define INITIALIZER_H#include<opencv2/opencv.hpp>#include "Frame.h"namespace ORB_SLAM2{// THIS IS THE INITIALIZER FOR MONOCULAR SLAM....原创 2018-03-03 10:42:35 · 1562 阅读 · 1 评论 -
ORB-SLAM2的源码阅读(十):LocalMapping类
今天LZ的效率有些低下,为啥?说出来让大家娱乐娱乐吧,毕竟程序员需要自己找乐子。LZ今天用尾巴骨测试了学校楼梯的硬度。实验对象为食堂的楼梯和LZ的尾巴骨,实验共重复了5次,分别在相同的重力加速度下进行迅速撞击,最后的测试结果是楼梯硬!尾巴骨完败,不说了LZ趴着歇会去了。。。#ifndef LOCALMAPPING_H#define LOCALMAPPING_H#include "KeyF...原创 2018-03-04 21:10:32 · 1731 阅读 · 0 评论 -
ORB-SLAM2的源码阅读(十一):LoopClosing类
第一次过ORB_SLAM2的代码,其实还有很多算法细节还是没有弄明白,接下来的任务是弄明白具体算法并对其增加部分小功能O(∩_∩)O哈哈~#ifndef LOOPCLOSING_H#define LOOPCLOSING_H#include "KeyFrame.h"#include "LocalMapping.h"#include "Map.h"#include "ORBVocabu...原创 2018-03-05 15:55:21 · 1735 阅读 · 1 评论 -
ROS(三):使用ROS跑通ORB_SLAM2
ORB_SLAM2小伙伴们应该相当熟悉了,但是怎么在ROS下来跑ORB_SLAM2呢?下面是LZ的一点心得,也许可以帮助一些小伙伴减少点弯路(⊙o⊙)?1.安装依赖项 主要的依赖项有eigen3,Pangolin,OpenCV, c++ or c++0x Compiler这些在之前slam安装大全中基本上都已经描述过了,这里就不在赘述了。DBoW2和g2o在下来的源文件中就有,也不用单独...原创 2018-03-19 15:36:12 · 11500 阅读 · 4 评论 -
ORB-SLAM2的地图保存
“女生不适合弄硬件”,这句话真的深有体会,今天为了让Pioneer 3-AT给Kinect供电,真的是路途坎坷.首先机器人尘封很久,螺丝都是拧死的,LZ拿着螺丝头去拧,发现螺丝纹丝不动,好吧!需要师兄的协助.找到供电板的12V电源接口,因为操作问题…导致保险丝熔断,LZ的心情啊…默默的买了对应的保险丝,心里想着还是乖乖写代码吧…回归正题,如文章题目所示,如何保存ORB-SLAM的地图?如何...原创 2018-03-23 17:17:59 · 15073 阅读 · 50 评论 -
ORB-SLAM2地图加载
前一篇讲了地图保存,经测试是可以使用的,现在进行之前保存地图的读取模式,但是这个代码会有几个问题,后续还得慢慢解决。首先在Map.h加入函数的定义,Map.cc中用到SystemSetting,Map.h中需要加入SystemSetting.h,也需要添加“class SystemSetting;”后面会涉及到。void Load( const string &filename...原创 2018-03-23 18:32:27 · 5303 阅读 · 17 评论 -
ORB-SLAM2的源码阅读(十二):Optimizer类
ORB_SLAM2主要都是进行图优化,把关键帧的位姿和路标点的坐标设为图的顶点,如果在对应关键帧中有观测到该路标点则产生一条边,这就是共视图的定义。然后Essential graph则还要对权重也就是观测到的路标点进行设定,文中是100。当中还利用卡方分布判断是内点还是外点,对外点进行删除。关于求解对应SE(3)的雅各比矩阵可以在g2o/types里面都已经定义好了,所以可以直接进行优化。...原创 2018-03-22 12:02:23 · 3004 阅读 · 1 评论 -
RGBD-SLAM V2 indigo 版本的安装
LZ的系统是Ubuntu4.04+indigo+Kinect v1.首先RGBD-SLAM需要很多的依赖项,如下: RGBDSLAMv2 is based on the open source projects, ROS, OpenCV, OpenGL, PCL, OctoMap, SiftGPU, g2o, and more这里LZ假设ros已经成功安装了,下面创建新的工作空间,LZ因...原创 2018-06-11 21:12:53 · 985 阅读 · 6 评论 -
PCL:遇到的一些问题及解决方案
最近学习PCL也是各种bug,遇到第二遍才觉得应该要记录下来,不然很可能遇到第三遍,再满世界百度还不如查自己的博客来的简单明了。表面上看,好像写博客比较费事,但是实际上是对问题的总结和反思,应该收获会更大些吧O(∩_∩)O哈哈~*1.plane_fitting02: /usr/include/boost/smart_ptr/shared_ptr.hpp:653: typename boost::de原创 2017-08-23 13:15:02 · 13009 阅读 · 2 评论 -
PCL:点云的法线估计(并显示)
#include <iostream>#include <pcl/point_types.h>#include <pcl/features/normal_3d.h>#include <pcl/io/io.h>#include <pcl/io/pcd_io.h>#include <pcl/visualization/pcl_visualizer.h>int main(int argc, ch原创 2017-08-23 21:24:05 · 7910 阅读 · 10 评论 -
PCL:使用StatisticalOutlierRemoval filter移除点云异常值
激光扫描通常产生不同点密度的点云数据集。此外,测量误差导致了更多的稀疏异常值,会得到更不好的结果。这使局部点云特征的估计复杂化,例如表面法线或曲率变化,导致错误的值,这又可能导致点云注册失败。其中一些不好的点云可以通过对每个点的邻域进行统计分析,并修剪不符合某些标准的那些。我们的稀疏异常值去除是基于输入数据集中点对点距离的分布的计算。对于每个点,我们计算从它到其所有邻居的平均距离。通过假设所得到的分原创 2017-08-15 21:58:50 · 3891 阅读 · 0 评论 -
DSO SLAM编译
之前因为版本兼容问题,弄的LZ几乎都要崩溃了,不过和软件打交道,如果没有强大的心里承受能力,感觉基本上是只能GG了。实验室老师也经常说,全身心投入科研,膜拜中…… 重头戏来了,怎么快速编译通过dso slam呢 dso的以来比较少,所以想要跑通这个程序还是比较容易的。 1.安装一些必备的依赖项sudo apt-get install libsuitesparse-dev libeigen3-d原创 2017-03-16 10:12:10 · 4653 阅读 · 3 评论 -
Direct Sparse Odometry 读后感
这是原文的PDF,链接: http://pan.baidu.com/s/1nuRIcsT 密码: 32pq,有兴趣的小伙伴可以看下原文,因为接触slam也不是很久,一知半解,如果有理解不对的地方欢迎批评指正。首先,LZ假设小伙伴对以下几个概念已经有了一定的了解: 1.SLAM 2.Odometry(Visual Odometry) 3.Intrinsics & Extrinsics & Cam原创 2017-04-19 15:50:22 · 3440 阅读 · 0 评论 -
SLAM环境配置大全,O(∩_∩)O哈哈~
学SLAM的小姑娘 2017年1月20号正式定下了研究生期间的研究方向:slam,之前的我是完全不懂什么叫SLAM(Simultaneous Localization and Mapping),叫做同时定位与地图重建,主要解决了机器人的位姿和地图构建,从我现在的理解,也就是这样了。 本学期开始,重装了系统,用的时Ubuntu14.04,瞬间感觉自己电脑无比干净,因为是个Linux菜鸟,上学期原创 2017-03-03 13:25:18 · 5004 阅读 · 5 评论 -
SLAM中常用库的CMake写法(如何添加各种依赖库)
之前LZ写过一个SLAM依赖库安装大全,如果按照之前大全安装的方式进行安装,后续在编译自己的工程时需要链接各种库文件和头文件,但是具体在CMakeLists.txt里怎么使用呢?这篇博客就准备汇总各种SLAM常用库的链接方法。1.EigenEigen通过apt-get安装之后,我们要怎么使用这个依赖库呢?Eigen有一点很奇怪,Eigen库只有头文件,所以我们在CMakeLists.txt中是不需要原创 2017-05-22 10:00:13 · 9231 阅读 · 8 评论 -
如何使用Matlab标定自己的摄像头?
在计算机视觉中,通常都会碰到自己制作数据集的情况,有些时候需要自己写爬虫程序从网站上下载不同标签的图片。而有些情况下,我们则需要利用自己的摄像头进行数据的获取。在特定的领域,比如说三维重建,slam这些应用领域,在不使用深度学习的情况下,是需要在配置文件中给出相机的内参的,外参一般就用程序跑出来了。对于不同型号的摄像头,其内参一般是不一样的,下面给出一种简便的方法,对单目摄像头进行标定。LZ使用的是原创 2017-07-01 15:05:14 · 5195 阅读 · 7 评论 -
PCL:将点云投影到参数模型上
这个程序是将点云投影到一个参数模型上(例如:球形, 或者是平面上),假如是平面的话,通过给定coefficients,就可以了,代码具体如下:#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/ModelCoefficients.h>#include <pcl/filte原创 2017-08-16 17:34:31 · 3982 阅读 · 4 评论 -
PCL:通过条件设置或者半径设置去除指定点云
#include <iostream>#include <pcl/point_types.h>#include <pcl/filters/radius_outlier_removal.h>#include <pcl/filters/conditional_removal.h>#include <pcl/io/pcd_io.h>int main(int argc, char **argv) {原创 2017-08-17 15:37:46 · 6076 阅读 · 9 评论 -
PCL:从PCD中读取点云
从PCD中读取点云数据#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>int main(int argc, char **argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ原创 2017-08-17 19:23:36 · 1280 阅读 · 0 评论 -
PCL:将点云写入PCD文件中
#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>int main(int argc, char **argv) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); clou原创 2017-08-17 20:28:13 · 1409 阅读 · 0 评论 -
PCL:从深度图(pcd文件)中提取NARF关键点
NARF(Normal Aligned Radial Feature)关键点是为了从深度图像中识别物体而提出的,对NARF关键点的提取过程有以下要求: a) 提取的过程考虑边缘以及物体表面变化信息在内;b)在不同视角关键点可以被重复探测;c)关键点所在位置有足够的支持区域,可以计算描述子和进行唯一的估计法向量。 其对应的探测步骤如下: (1) 遍历每个深度图像点,通过寻找在近邻区域有深度变化的原创 2017-08-17 20:54:51 · 4129 阅读 · 5 评论 -
PCL:kd-tree
其实还蛮早就听过kd-tree的,但是对其中的原理一直是一知半解,之前听Ng讲ML的时候,说要对kd-tree,O(),等一些基本概念要有所了解,当时也没有人带,不知道具体的学习一些机器学习包括深度学习的一些流程,上来就是卷积神经网络等等,理解不算深刻,到现在才稍稍有点明白其中一些关系。何为kd-tree?都是外国人发明的简称,全名是k dimensional search tree,说白了,就是一原创 2017-08-18 11:06:14 · 1164 阅读 · 0 评论 -
PCL:octree
可能最近的项目和数据结构之类的杠上了,开始恶补一些数据结构的知识,加上学习PCL经常会使用kd-tree,octree之类的,作为知识储备也好,或者觉得其实这些也挺有趣的,记录下来方便以后查阅也罢,总之还是会努力加油的啦O(∩_∩)O哈哈~八叉树(Octree)是一种用于描述三维空间的树状数据结构,每个根节点有8个子节点(理想情况下),也许就是八叉树名字的由来。我们先从一维开始,如何快速的在x轴上找原创 2017-08-19 11:05:41 · 4464 阅读 · 0 评论 -
PCL:点云的可视化(程序中在线显示)
CloudViewer是简单显示点云的可视化工具,可以使用比较少的代码查看点云,但是这个是不能用于多线程应用程序当中的。下面的代码的工作是关于如何在可视化线程中运行代码的例子,PCLVisualizer是CloudViewer的后端,但它在自己的线程中运行,如果要使用PCLVisualizer类必须使用调用函数,这样可以避免可视化的并发问题。但是在实际调用的时候要注意,以防出现核心已转储这一类很麻烦原创 2017-08-22 09:31:10 · 11812 阅读 · 0 评论 -
PCL:使用PCLVisualizer对点云的一些处理
#include <iostream>#include <boost/thread/thread.hpp>#include <pcl/common/common_headers.h>#include <pcl/features/normal_3d.h>#include <pcl/io/pcd_io.h>#include <pcl/visualization/pcl_visualizer.h>原创 2017-08-22 14:43:14 · 4771 阅读 · 0 评论 -
PCL:1.7.2使用时的一个问题(core dumped与-std=c++11)
今天在使用PCL的时候,写了一个测试使用的一个小程序,代码很简单,但是就是一直属于dowm掉,直接就是不运行了!Segmentation fault (core dumped)后来通过用gdb查错,查看core文件,显示如下问题warning: exec file is newer than core file.[New LWP 9802][Thread debugging using libt原创 2017-09-04 10:13:11 · 2369 阅读 · 0 评论 -
PCL:对点云进行直通滤波
先上代码#include <iostream>#include <pcl/point_types.h>#include <pcl/filters/passthrough.h>int main (int argc, char** argv){//initialize point cloud pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl原创 2017-08-15 20:30:59 · 1652 阅读 · 0 评论 -
PCL:使用VoxelGrid filter对点云进行下采样
使用VoxelGrid filter对点云进行下采样,VoxelGrid可以堪称是个小的3D小方盒, 所有存在的点将以它们的质心近似(如,下采样)。这种方法比使用体素的中心近似慢,但它更准确地表示底层表面。#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/filters原创 2017-08-15 21:03:31 · 12968 阅读 · 2 评论 -
关于TUM rgbd数据集的associate问题
之前下载过TUM的rgbd数据集应该知道对应一个数据集是如下的数据结构.但是深度传感器和相机获得数据的时间是不一致的,需要进行对齐.ROS的话可以对深度图进行注册,直接获得匹配的图像.数据集则需要一个python文件进行associate.新建一个python脚本associate.py,其实tum官网上可以直接下载的,因为有的时候网不好,就直接黏贴下来,下次使用也方便.#!/us...原创 2018-05-30 15:26:31 · 3290 阅读 · 1 评论