自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(222)
  • 收藏
  • 关注

原创 SLAM秋招知识点总结——自动驾驶算法、3D视觉岗位(附有解答)

前言本文为楼主在学习SLAM过程中相关知识点总结,包含多视图几何、常见SLAM系统源码解析、相关数学知识、图像处理问题、机器视觉知识点、《十四讲》精品总结、基本库安装等系列。这些知识点帮助我在2020年秋招面试自动驾驶岗位过程中有了系统认知。2020年新冠疫情影响滞留在家,把之前学习的知识点做了系统总结,所有问题都有解答,并附有链接,希望可以帮助到之后寻找相关岗位的同学。目录一、多视图...

2020-04-07 12:18:14 3863 2

原创 一文详解单目VINS论文与代码解读目录

Vins-mono是香港科技大学开源的一个VIO算法,用紧耦合的方法,通过单目+IMU恢复出尺度,效果非常棒。VINS的功能模块可包括五个部分:数据预处理、初始化、后端非线性优化、闭环检测及闭环优化。代码中主要开启了四个线程,分别是:前端图像跟踪、后端非线性优化(其中初始化和IMU预积分在这个线程中)、闭环检测、闭环优化。1、VINS-mono 论文解读(IMU预积分+Marg...

2020-03-14 09:32:16 5516

原创 《剑指Offer》 目录

链表总结篇递归总结篇动态规划(基于递归的循环)二叉树遍历(前中后序、广度优先、深度优先)查找:二分查找、哈希表、二叉搜索树排序算法...

2019-07-18 20:18:49 440

原创 C++知识点目录(都有答案)

LZ发现每天吸收的知识很多了,可是C++知识点还只是零散的,所以非常需要这样一个思维导图来给自己一个C++学习的宏观框架。希望以后可以不断补充各板块内容目录C++ Tips关键字:const、static、explcit、overridemove、指向对象的指针动态内存:allocator类内存分配、动态内存、智能指针、动态数组函数指针与函数对象boost::s...

2019-07-18 11:03:20 614

原创 进程和线程主要区别与定义

抽象理解直接上图,CPU是工厂、电力资源是cpu 时间片、进程是车间、线程是车间工人。操作系统的资源分配与调度逻辑以多进程形式,允许多个任务同时运行;以多线程形式,允许单个任务分成不同的部分运行;提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。科学理解进程进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终

2020-06-28 17:33:51 633

原创 《wiki官网教程》2 编写简单的服务器service和客户端 client(C++)

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)。之前讲的是两个节点如果要通信需要经过话题topic,一个节点需要订阅话题并sub消息,另一个节点订阅话题并发布pub消息。使用方式:rosservice list 输出可用服务的信息rosservice call 调用带参数的服务rosservice type 输出服务类型rosservice find 依

2020-06-27 12:49:14 527

原创 VS Code创建、调试ROS项目

前言:在vs code下配置ROS项目开发的环境包括catkin创建编译工作空间,创建ROS项目,调试ROS节点一、创建工作空间首先创建一个cMake工作空间,用到了catkin_make其实就是cmake …make两个步骤的缩写。$ mkdir -p ~/ros_test/src$ cd ~/ros_test/$ catkin_make注意:每次打开工作空间ros_test文件要source一下cd ~/ros_testsource devel/setup.bash除此之

2020-06-23 19:03:54 2718 1

原创 Ubuntu18.04配置VS Code+CMake的C++开发环境

2020-06-14首先,介绍自己电脑:Ubuntu18.04、VS Code 1.46版本文目的:为VS Code配置好C++ 开发环境,以及VS Code +CMake的配置对于C++ 工程,有四个必要的json配置文件,先ctrl+shift+p打开输入指令分别是:c_cpp_properties.json :配置项目结构,自动生成和更新,输入C/C++:Edit configurationtask.json: 构建和编译运行项目,输入Task:Configure Task,模板,Othe

2020-06-16 16:03:37 2555 2

原创 从头到尾配置最好用的Ubuntu18.04

​​一、重装Ubuntu系统ubuntu18.04镜像直接上图接下来到了分区界面我的120G固态硬盘模板为:选择点击“+ - Change”中的“+”:/boot:主分区,300M/:主分区,20Gswap:逻辑分区,2G/home:逻辑分区,97G除了swap的文件格式为交换空间,其余都是EXT4.大功告成。二、禁用集成显卡,只用独显我们用software-properties-gtk这个程序来安装专有的Nvidia显卡驱动。在终端里输入下面的命令打开software

2020-06-12 15:07:06 1229

原创 多传感器融合定位2(封装KF和EKF)

有了上一节分别对激光雷达做KF、对毫米波雷达做EKF两种流程之后,我们合并KF和EKF的跟踪算法的代码,将他们封装在一个名为KalmanFilter的类中,方便后续调用。下面做一个多传感器融合定位实验,采集到的数据为两种交替出现的数据。代码整体框架如图所示:前言无论是KF处理线性问题还是EKF处理非线性问题,它都只涉及单一传感器的障碍物跟踪。激光雷达测量位置精度更高但是无法测量速度,毫米波...

2020-05-16 11:32:14 1828

原创 多传感器融合定位1(激光雷达+毫米波雷达)

前言LZ最近在看Udacity的无人驾驶课程,该课程主要分为三部分,第一部分的课程主要使用Python实现的车道线识别、车牌识别等计算机视觉项目。由于我对定位、建图等方面有些知识储备,所以先从第二部分课程开始。本节将用最简洁的话讲解卡尔曼滤波KF、非线性卡尔曼滤波EKF等知识点,并就此实现一个多传感器融合定位的小demo,后面会就粒子滤波PF专门开一个章节讲解。一、卡尔曼滤波 KF1、引子...

2020-05-16 11:30:28 5354

原创 粒子滤波定位

理论知识除了线性状态估计的KF和非线性状态估计的EKF,还有一种可以解决非线性、非高斯问题的粒子滤波算法,粒子滤波主要基于蒙特卡洛方法,使用粒子集来表示概率。粒子滤波主要分为四部分:初始化、预测、粒子权重更新、重采样,之后在重复的预测、更新、重采样,使得粒子逐渐向真实位置聚集。1、初始化粒子滤波初始化需要初始的位置(x,y),航向(yaw),以及高斯噪声。单纯用GPS的结果是有很大...

2020-05-16 11:29:24 3029 1

原创 激光雷达点云预处理:传感器时间同步、点云去畸变

一、传感器时间同步多传感器融合过程中由于传感器之间的采集频率不同,导致无法保证传感器数据同步。这里以激光雷达为核心传感器,每次收到一次雷达数据,便以当前雷达数据采集时刻作为要插入的时间点,该时刻另一传感器IMU的数据通过插值获得。这里同样可以参考VINS里相机和IMU时间同步的函数代码getMeasurements()。主程序在front_end_flow.cpp文件中的ReadData()函...

2020-05-14 12:27:34 9935 4

原创 基于NDT的前端里程计框架优化

本文旨在对上一讲基于NDT的前端里程计代码解析进行框架上的优化,主要参考知乎上专栏文章《从零开始做自动驾驶定位》,在此基础上进行更加清晰的代码框架解读。首先上一篇文章有以下缺点:1、没有专门的参数配置文件.yaml2、点云滤波、匹配作为常用的操作,应该专门设置模块。3、没有内存管理:每个关键帧都存了点云,所有关键帧在内存中随着时间推移严重影响运行速度。这里考虑除了滑动窗局部地图涉及的关...

2020-04-25 23:17:29 1253 3

原创 基于NDT的前端里程计代码解析

本文主要对Lidar_Localization文件中的三个源文件,front_end_node.cpp、front_end.h/cpp进行详细代码解读。前端激光雷达点云里程计主要分为:点云下采样滤波、点云匹配、位姿估计、关键帧选取等步骤。具体流程为:1)第一帧点云数据设置为地图2)提取关键帧点云,拼接成地图,保证稀疏点云数据。3)除了全局地图,还需要在当前帧附近形成滑动窗局部地图,减小计算...

2020-04-23 13:47:53 2371 5

原创 LOAM源码解析4——transformMaintenance

这一部分主要为了:融合后的Lidar轨迹(里程计位姿+地图优化的位姿)main函数订阅的两个消息节点:1、laserOdometry节点发布的/laser_odom_to_init消息(Lidar里程计估计位姿到初始坐标系的变换)2、laserMapping节点发布的/aft_mapped_to_init消息(laserMapping节点优化后的位姿到初始坐标系的变换)发布的节点:发布...

2020-04-20 12:47:38 720

原创 LOAM源码解析3——laserMapping

SLAM系统前面大多是先估计相邻两帧之间相对位姿估计,接下来开始建图,然后根据建图结果对现有姿态进行优化,最后把当前这特征点填充进地图,且估计当前帧相对于世界坐标系下的位姿。在扫描周期末尾激光雷达里程计输出畸变矫正过的点云Pk+1^\widehat{P_{k+1}}Pk+1​​,同时还有整个周期内每个点的姿态Tk+1LT_{k+1}^{L}Tk+1L​。雷达建图过程是为了把Pk+1^\wideh...

2020-04-20 12:11:31 1754 2

原创 LOAM源码解析2——laserOdometry

这是LOAM第二部分Lidar laserOdometry雷达里程计。在第一章提取完特征点后,需要对特征点云进行关联匹配,之后估计姿态。主要分为两部分:特征点关联使用scan-to-scan方式t和t+1时刻相邻两帧的点云数据进行配准,分为边缘点匹配和平面点匹配两部分。计算点到直线的距离和点到平面的距离。姿态解算根据匹配的特征点云使用LM算法估计接收端位姿。这部分代码完全是放在mai...

2020-04-18 22:22:38 1497

原创 LOAM源码解析——scanRegistration

入手激光雷达SLAM,从最经典的LOAM源码开始,之后会对秦通在此基础上改进的A-LOAM源码进行观看,应该就会很简单了,第三步是把LEGO-LOAM的源码进行解读。之前对LOAM的论文进行了详细解读。LOAM的源码主要分为scanRegistration提取特征点、laserOdometry 10HZ估计位姿、laserMapping 1HZ构建三维地图、transforMaintenance...

2020-04-12 20:04:47 1469 3

原创 激光雷达坐标系、方向角和仰角

激光雷达介绍单线的激光雷达Lidar,通过发射和接收激光束来计算与观测物体精确距离。光速测距:通过飞行时间TOF,首先激光发射器发射激光脉冲,计时器记录发射时间;脉冲经物体反射后由接收器接受,计时器记录接受时间;时间差乘上光速即得到距离的两倍。三维扫描点云:通过TOF时间差获得距离,通过水平旋转扫描测角度,并根据这两个参数建立二维的极坐标系,再通过获取不同俯仰角度获得三维的高度信息。下图...

2020-04-11 18:47:39 18124 4

原创 如何通过Git将本地项目上传到Github

一、Git下载安装先说下Git官网下载太慢的问题,通过下述链接,阿里的镜像可以实现快速下载。https://npm.taobao.org/mirrors/git-for-windows/一直下拉,找到如图所示这些链接(不同的安装方式与不同的系统)。二、将本地项目通过Git上传到Github上重点参考下面两个博客即可https://blog.csdn.net/Lucky_LX...

2020-04-09 13:16:37 203

原创 LeGO-LOAM:轻量级地面优化的建图

LEGO-LOAM 是基于LOAM优化的系统,相比之下,有以下优点:1)LeGO-LOAM是轻量级的,因为可以在嵌入式系统上实现实时姿态估计和建图。2)去除失真数据,在地面分离之后,执行点云分割以丢弃可能表示不可靠特征的点。3)LeGO-LOAM引入地面优化,因为我们引入了两步优化姿势估计。从地面提取的平面特征用于在第一步中获得[tz,θroll,θpitch][t_{z},\theta_{...

2020-04-07 22:37:19 5986

原创 LOAM:实时的雷达里程计和建图

之前对视觉SLAM主要的开源框架,ORB-SLAM2、SVO等进行了介绍,然后疫情期间对VINS-Mono进行了详细的源码解析,接下来考虑到工作原因需要用到激光雷达、GNSS、IMU等多传感器融合,所以接下来会对最经典的激光SLAM框架LOAM和LeGo-LOAM两个开源系统进行总结。之前对激光SLAM的印象就是激光雷达采集到点云数据,然后用ICP对准就可获得接收端位姿估计。第一篇经典的激光S...

2020-04-07 12:19:03 4842 1

原创 一文掌握百度Apollo Udacity自动驾驶课程笔记

目录一、高精地图1、高精地图与传统地图2、高精地图与定位、感知、规划的关系3、Apollo高精地图与构建二、定位(厘米级)1、GNSS RTK2、惯性导航3、激光雷达定位4、视觉定位5、Apollo定位三、感知1、计算机视觉2、Camera图像3、Lidar图像4、机器学习5、神经网络6、反向传递7、卷积神经网络CNN:8...

2020-04-07 12:17:00 4219 1

原创 Endnote连接Word自动插入毕业论文参考文献

一、Wod中自动插入参考文献1、在百度学术中导出endnote格式找到后点击“引用”,然后选择EndNote,就可以导出来了。2、导入到word中先打开Endnote库,把导出的文件打开,之后选中需要导入的文件,如下图蓝色所示。打开word,导航栏选择En的Note X9,先把光标放在打算插入参考文献标注的地方,然后选择Insert Selected Citiation...

2020-03-24 13:50:32 3012

原创 VINS-Mono 代码详细解读——回环检测与重定位、四自由度位姿图优化

本文主要介绍VINS的闭环检测重定位与位姿图优化部分,作为系列文章的最后一节。回环检测的关键就是如何有效检测出相机曾经经过同一个地方,这样可以避免较大的累积误差,使得当前帧和之前的某一帧迅速建立约束,形成新的较小的累积误差。由于回环检测提供了当前数据与所有历史数据的关联,在跟踪算法丢失后,还可以利用重定位。论文中主要分为两部分:回环检测与重定位、4-DOF的位姿图优化。第一部分主要是...

2020-03-22 23:02:19 3728 3

原创 VINS-Mono 代码详细解读——基于滑动窗口的紧耦合后端非线性优化 optimization()+滑动窗slideWindow()

上一篇文章是基于滑动窗的紧耦合后端非线性优化的理论部分,主要分为以下部分:VIO残差函数构建 视觉约束:视觉重投影误差residual、残差对状态量的Jacobian、协方差 IMU约束:residual、Jacobian、Covariance 基于舒尔补的边缘化本文将对Estimator::optimization()函数的代码进行详细讲解。目录一、VIO残差函数构建...

2020-03-21 12:14:28 4893 3

原创 VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化

本讲是VINS最核心部分了,前面经历了 1)视觉跟踪feature_tracker、IMU预积分integrationBase类;2)初始化中SFM纯视觉估计滑动窗中所有帧的位姿和3D路标点深度、SFM与IMU预积分松耦合对齐求解初始化参数。本节将进行第3部分,基于滑动窗的紧耦合后端非线性优化:将视觉约束、IMU约束、闭环约束放到一个大的目标函数中进行非线性优化,求解出滑动窗口中所有帧的PVQ、bias等。

2020-03-17 23:27:45 4574 2

原创 VINS-Mono 代码详细解读——基础储备:在线Cam到IMU的外参标定 InitialEXRotation类

本讲还是为了estimator类中最主要的函数processImage()做知识储备。前面两讲知识储备主要讲了IMU预积分相关的integrationBase类以及图像特征点管理器feature_manager.cpp,本节将对processImage()的相机到IMU的外参矩阵的代码讲解。processImage()中:第一步为检测当前输入的image是否为关键帧,f_mana...

2020-03-17 12:39:02 2514 3

原创 C++ STL find和find_if

find则更偏向于普通的数值或者字符比较find_if针对查找的对象中包含指针需要进行比较首先从简单的find寻找某个数值开始,其返回的是指向这个数值的迭代器。注意:需要加入#include <algorithm>头文件#include <vector>#include <algorithm>// 注意!!!#include <ios...

2020-03-16 15:55:31 398

原创 VINS-Mono 代码详细解读——feature_manager.cpp

LZ发现estimator.cpp中关键函数为processImage(),里面包含了IMU预积分、图像处理特征点跟踪等一系列流程,上一节中对processIMU()以及预积分的integrationBase类进行解读,本节继续做基础储备,对与estimator.cpp中的feature_manager.cpp进行详细介绍,主要是对特征点管理。特征点管理器主要就是FeatureManager类

2020-03-16 10:44:26 3410 3

原创 VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

IMU离散中值预积分1.1、IMU模型测量值:加速度计a^、陀螺仪w^, 加上了bias游走和随机白噪声。真实值:加速度计a、陀螺仪w。实际情况下,可以获得测量值a^和w^,需要反推真实值。一般忽略随机游走高斯噪声nw=w^-bg; a=qwb(a^-ba)-gw;1.2、连续时间IMU运动模型,积分 PVQ(两帧之间)将第k帧和第k+1帧所有的IMU进行积...

2020-03-15 22:25:17 7874 5

原创 VINS-Mono 代码详细解读——Estimator_node.cpp

getMeasurements()函数对imu和图像数据对齐组合,直到把缓存中图像数据或者IMU数据读取完,才能跳出函数,返回数据。std::vector<std::pair<std::vector<sensor_msgs::ImuConstPtr>, sensor_msgs::PointCloudConstPtr>>getMeasuremen...

2020-03-15 16:01:01 2837

原创 C++11多线程---互斥量mutex、锁lock、条件变量std::condition_variable

线程同步指线程间需要按照预定的先后顺序进行的行为线程(std::thread)和互斥量(std::mutex)中,互斥量是多线程间同时访问某一共享变量时,保证变量可被安全访问的手段。 通过条件变量。位于头文件condition_variable下condition_variable条件变量提供了两类操作:wait和notify,这两类操作构成了多线程同步。当 std::condit...

2020-03-14 17:50:27 2617 1

原创 VINS-Mono 代码详细解读——视觉跟踪 feature_trackers

原理视觉:1)提取Harris角点,KLT金字塔光流跟踪相邻帧;2)2 维特征点先矫正为不失真的,然后在通过外点剔除后投影到一个单位球面上;3)去除异常点:先进行F矩阵测试,通过RANSAC去除异常点;4)关键帧选取:1、当前帧相对最近的关键帧的特征平均视差大于一个阈值就为关键帧(因为视差可以根据平移和旋转共同得到,而纯旋转则导致不能三角化成功,所以这一步需要IMU预积分进...

2020-03-13 18:45:01 4900 2

原创 VINS-Mono 代码详细解读——初始化2:视觉惯性松耦合初始化 visualIntialAlign()

本节主要介绍Estimator模块的视觉惯性联合初始化模块,visualIntialAlign()函数内第一步VisualIMUAlignment()函数其中,步骤1的在线Cam到IMU的外参标定qbc 参考之前的博客。1、陀螺仪零偏bg标定2、优化 速度v、重力g和尺度初始化s。我们得到了陀螺仪偏置bias的初始校准,需要将陀螺仪偏置bg代入到IMU预积分重新计算预积分3、重力矢量修正

2020-03-10 21:20:01 3274 18

原创 VINS-Mono 代码详细解读——初始化1:视觉SFM详解 processImage()+initialStructure()

1.检查两帧的视差判断是否为关键帧f_manager.addFeatureCheckParallax()在VINS-Mono 代码详细解读——feature_manager.cpp中已经解释2.IMU预积分IntegrationBase 在VINS-Mono 代码详细解读——IMU离散中值预积分 中解释3.在线标定外参CalibrationExRotation 在VINS-Mono 代码详细解读——基础储备:在线Cam到IMU的外参标定 InitialEXRotation类 中已经解释

2020-03-05 22:36:43 4776

原创 extern关键字

1、extern用于两个或多个文件共享相同的全局变量或者函数。对于所有的程序文件是可用的。2、而且当使用extern时可以找到已经定义的变量或函数的引用。\第一个文件:int count ;int main(){ count=5;}第二个文件:extern int count ;void func(){ cout <<"count is "&...

2020-03-02 21:27:07 147

原创 VINS未读懂代码

run_euroc.cpp主函数中pSystem.reset(new System(sConfig_path));// shared_ptr引用计数减一,这里的用法是?????

2020-03-02 19:55:22 571

原创 目标跟踪--模板匹配

模板匹配原理 算法步骤 opencv调用函数 matchTemplate minMaxLoc cvSetMouseCallback Rect rectangle 代码 模板匹配原理根据已知模板图像T在被搜索图S中平移,寻找与模板相似度最大的区域,并记录坐标。其中,子图S(i,j)与模板有相同的尺寸、方向。算法步骤(1)首先取得待跟踪...

2019-12-05 16:57:13 1692

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除