自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++零散小记录】类中重载返回类型为常量引用和非常量引用的函数

【代码】【C++零散小记录】类中重载返回类型为常量引用和非常量引用的函数。

2024-02-01 15:10:12 186

原创 c++泛型算法相关笔记

泛型算法:可以支持多种类型的算法此处主要来讨论怎么使用标准库中定义的泛型算法numericranges. 在引入泛型算法之前,还有一种是方法的形式,比如说std::sort和,前者是算法,后者是list类中定义的函数(方法)为什么引入泛型算法,而不用方法的形式?但如果有方法和泛型算法同名,功能类似时,建议使用方法,比如std::find和,即只要类里面提供了这个方法就使用,因为一般这个类中的方法可以针对此类有更好的优化。

2024-01-14 23:31:36 998

原创 Apollo&Carla联合仿真基本操作

基于UE4开发的开源无人驾驶仿真器PythonAPI自动驾驶传感器(还有理想化的collision detection传感器)用于规划和控制的快速仿真地图生成交通场景(open scenario)仿真ROS集成自动驾驶baseline0.9.15新特性新的车型以及地图基于Omniverse的素材导入基于OSM的三维场景生成。

2024-01-10 23:13:47 1470

原创 侯捷C++面向对象程序设计笔记(上)-Object Based(基于对象)部分

基于对象就是对于单一class的设计。对于有指针的:complex.h complex-test.cpp对于没有指针的: string.h string-test.cpp没有指针成员——以复数complex类为例一. 头文件的写法从下图可以看到,头文件由四个部分组成:防卫式声明 即头文件的最上面两行和最下面两行前置声明类的声明类的定义A. 类的声明这里以构造复数类为例,可以看到这个类中明显的有数据和函数两部分。对于数据部分,这里定义的是double类。a. 模板如果我

2023-10-23 20:30:53 320

原创 线性代数的本质笔记

两个向量的叉积表示的是这两个向量围成的平行四边形的面积。如果v在w的右侧,此时面积值为正,而如果v在w的左侧,面积值为负(右手定则大拇指朝内为负/ 以基向量i和j的定向为基础)。也就是说,顺序对叉积会有影响。如果不想去判断方向,只想进行数值计算,那么也可以用行列式来求值,见05-行列式以上两种不算是严格的叉积。真正的叉积是通过两个三维向量生成一个新的三维向量。如下所示,垂直于平行四边形的会有两个向量,使用右手定则确定。

2023-10-20 16:25:06 1556 1

原创 SLAM中去除动态物体的部分方法(主要是视觉SLAM)

一. 基于多分辨率的range image1. RF-LIO: Removal-First Tightly-coupled Lidar Inertial Odometry in High Dynamic Environments利用的是多分辨率的range image。使用投影的range image的可见性来进行移动点识别。1)Fk+1F_{k+1}Fk+1​是当前关键帧,MkM_kMk​是对应的子地图,这个子地图是通过Fk+1F_{k+1}Fk+1​周围的滑窗创建的。考虑到实时性,使用了完整的一个

2022-07-29 17:25:16 5624

原创 论文笔记-LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

LIO-SAM的论文笔记

2022-07-02 23:18:29 632

原创 LMA上课笔记

数学公式或相关推导协方差矩阵一定是半正定的已知x‾\underline{x}x​和它的期望μ‾\underline{\mu}μ​,则的协方差矩阵为E[(x‾−μ‾)(x‾−μ‾)T]E[(\underline{x} - \underline{\mu})(\underline{x} - \underline{\mu})^T]E[(x​−μ​)(x​−μ​)T],对于任意向量y‾\underline{y}y​有:y‾TΣy‾=E[y‾T(x‾−μ‾)(x‾−μ‾)Ty‾]=E[((x‾−μ‾)Ty‾

2022-04-28 03:45:55 377 5

原创 2D-3D匹配问题的PnP算法对比:DLT,P3P,EPnP

一. 问题定义首先需要清楚什么叫做PnP(Perspective-n-Point)呢?是为了解决什么问题?已知信息:给定的n个3D参考点{c1,c2,...,cn}\{c_1, c_2, ..., c_n\}{c1​,c2​,...,cn​}(假设在A坐标系下)和某相机的图像上2D投影点的{u1,u2,...,un}\{u_1, u_2, ..., u_n\}{u1​,u2​,...,un​}的匹配关系(3D位置通常由三角化或者RGBD的深度图确定,对于双目或RGBD的里程计,可以直接用PnP估计相

2022-03-23 04:11:08 4827 1

原创 安装支持cuda的OpenCV过程记录

版本号nvidia driver : 470cuda : 11.0cudnn : 8.0.1(对应cuda就好)OpenCV: 4.5这里安装的是C++版本,如果是安装python或者在虚拟环境下安装,可以参考这个更全的记录:https://waltpeter.github.io/open-cv-basic/install-opencv-with-contrib-ubuntu/index.html安装过程之前安装了opencv4.5版本,但是没有安装contrib库,也没有打开支持gpu的按钮

2022-03-21 08:55:56 8535 1

原创 条款02:尽量以const, enum, inline替换#define

尽量少使用宏定义,如果ASPECT_RATIO被定义在一个非你所写的头文件内,为了追踪它会浪费很多时间。作为一个语言常量,AspectRatio肯定会被编译器看到,当然就会进入记号表内。对于浮点常量(比如本例),使用常量可能比使用#define导致更小量的码,因为预处理器“盲目地将宏名称ASPECT_RATIO替换为1.653”可能导致目标码(object code)出现多份1.653,如果改为常量AspectRatio绝不会出现相同的情况。#define ASPECT_RATIO 1.653//解决

2022-02-21 18:34:48 95

原创 什么是快速排序?

基本介绍在平均状况下,排序 n 个项目要 O(nlogn)Ο(nlogn)O(nlogn) 次比较。在最坏状况下则需要 O(n2)Ο(n^2)O(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来

2022-02-21 04:24:22 1459

原创 optical flow光流估计的评价指标

评价指标Endpoint error(EPE)计算的是估计光流和groundtruth光流的欧氏距离:EPE=((uest−ugt)2+(vest−vgt)2)EPE = \sqrt{((u_{est} - u_{gt})^2 + (v_{est} - v_{gt})^2)}EPE=((uest​−ugt​)2+(vest​−vgt​)2)​这是一种比较普遍的评估指标,通常会用EPE的均值来评估光流估计的结果。Angular error(AE)计算的是光流向量之间的角度误差:((u0,v0,1)

2022-02-12 02:25:50 6912 6

原创 C++中的Lamda表达式是什么?

在使用c++标准库时,往往会写一些东西来声明意图,如果自己不写就会使用默认版本。函数对象/仿函数可以用lambda的形式来写。C++ 11 introduced lambdas, allowing the definition of inline functionality, which can be used as a parameter or a local object. Lambdas change the way the C++ standard library is used.A la

2022-02-10 04:55:12 289

原创 条款01:视C++为一个语言联邦

C++是多重范型编程语言,可以同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式。Q:如何理解C++?A:不要把它当成一种单一语言,而是把它视为由相关语言组成的联邦,由多个“次语言”组成。这就导致了C++高效编程守则会视情况而变化,取决于我们使用的是哪个部分。 其主要的次语言有四个:C :包括了对区块blocks、语句statements、预处理器preprocessor、内置数据类型、数组、指针等形式。但C语言没有模板、异常、重载等。面向对象的C++: 这部分包括了classes(

2022-02-02 04:00:50 487

原创 两口气梳理完VDO-SLAM源码(一)

一. 主函数vdo_slam.cc从源码可以看到一些ORBSLAM的痕迹,主函数中,最关键的的地方就是SLAM.TrackRGBD(imRGB,imD_f,imFlow,imSem,mTcw_gt,vObjPose_gt,tframe,imTraj,nImages);,从这里就可以进入整个系统内部。这里要理解两件事:1. 这里的位姿真值矩阵怎么得到,有什么作用?2. 光流信息是什么样的,之后会被怎么使用?

2022-01-14 06:50:01 2966 9

原创 g2o图优化入门学习笔记-雏鹰起飞篇

大局观之整体流程SLAM里,图优化一般可以分解为两个任务:构建图。机器人位姿作为顶点,位姿间关系作为边。优化图。调整机器人的位姿(顶点)来尽量满足边的约束,使得误差最小。这里以g2o源码说明文件中的类图为基础,自己做了一个流程说明。蓝色框可以说明图是如何构成的,绿色框中则是说明了一些求解时的基本信息。小太阳是点出了整个类图最中心的部分SparseOptimizer,而橙色的箭头则是大概指出了写代码的流程。理解了流程之后,就可以对照一下代码:typedef g2o::BlockSolver&

2021-12-22 06:10:26 732

原创 多线程基础学习笔记

区别进程&线程进程: 进行中的可执行程序线程:进程可以包含多个线程;- 主线程:从main函数开始,到执行完毕,即主线程结束,进程结束- 其他线程:需要用户自行创建,线程入口可以是某个函数/类/lambda表达式- 进程执行完毕的标志:如果主线程执行完毕,代表整个进程执行完毕,如果此时还有子线程没有执行完也会强行终止多进程并发与多线程并发多进程并发:用一个进程采集slam数据,一个进程来处理数据多线程并发:一个进程中所有线程共享地址空间(共享内存);全局变量,全局内存,全局引

2021-12-21 06:25:38 201

原创 论文笔记VDO-SLAM: A Visual Dynamic Object-aware SLAM System

一.整体系统先建立一个感性认识:系统的输入:双目或单目的rgb图和深度图,像素级实例分割的结果,以及稠密光流。然后就会对静态背景和动态物体进行特征追踪,从而对相机位姿和物体运动进行估计,之后在全局BA使估计结果更加准确。在这个过程中会维护局部地图,并且随着每一个新帧都会更新。最终系统的输出是:相机位姿,静态结构,动态物体的追踪,动态物体的位姿二. 几何基础1. 位姿表示0Xk∈SE(3)^{0}X_k \in SE(3)0Xk​∈SE(3) : 机器人/相机的3D位姿,0为世界坐标系,k是时间

2021-12-10 00:59:29 3097 1

原创 DynaSLAM源码笔记-检测动态物体部分梳理

按照main函数向下细分的顺序大概记录一下rgbd情况下,动态物体去除(inpaint的部分不是重点)的源码的写法,并对应一下论文, 关于ORB-SLAM2本身的部分不会太涉及到。安装方法见:关于运行DynaSLAM源码这档子事(OpenCV3.x版)论文笔记见:论文笔记-DynaSLAM: Tracking, Mapping and Inpainting in Dynamic Scenes一. rgbd_tum.cc新增了一个命名空间和类来进行关于MaskRCNN的处理,先进行这个对象的初始化,

2021-11-17 19:57:09 3404 4

原创 论文笔记-DynaSLAM: Tracking, Mapping and Inpainting in Dynamic Scenes

I. INTRODUCTION在视觉SLAM中,动态物体会带来如下挑战:1)如何检测图像中的动态物体,从而:a. 防止tracking算法使用动态物体上的匹配点对b. 防止mapping算法把移动物体加入3D地图中2)怎么去补全3D地图中那些被移动物体挡住从而缺失了的部分。DynaSLAM是可以用于单目,双目,RGB-D的动态SLAM系统,相当于是在ORB-SLAM2上加了一个前端的模块,上面的两个挑战,这篇论文都给出了对应的解决办法。对于单目和双目:使用CNN进行像素分割,把图像中的人和车

2021-11-12 17:58:04 3024 2

原创 GDB调试入门笔记

官网手册:用户手册动机:学这个就是为了找到Segment Default报错的位置根据linux的版本或者是mac,有的可能不是gdb而是lldb,不过这两比较类似,可以类比。一. 基础操作安装时,在终端输入sudo apt-get install gdb 如果需要特定版本,去官网下载源码。Clion中自带gdb,和这个另外安装的是分开的。使用gdb调试之前:在CMakeLists中使用Debug模式set(CMAKE_BUILD_TYPE Debug),或者在编译选项中加入-g,set(

2021-11-05 23:11:36 493

原创 简单总结LEGO-LOAM相对于LOAM的一些改进及不同点

一. 地面点的提取1.动机:在LEGO-LOAM的实验数据中,有地面都是草坪的情况。对于这种地面,如果直接用LOAM,那么就会有一些边缘特征点落在草地上(因为草地的参差),这是拉了位姿估计的后腿的,结果会非常不稳定。2.缺点:LEGO-LOAM中用到的提取方法需要满足雷达水平安装,或者雷达倾斜安装但已知安装角度的前提。如果是手持设备,这个方法就不太可行,因为手持时不能保证雷达和地面一直都是平行的。3.方法:相邻行的激光点,求取垂直差距和水平面内差距的atan值,小于15度就可以被认为是地面点。这里有一

2021-11-05 00:11:01 2608 1

原创 关于运行DynaSLAM源码这档子事(OpenCV3.x版)

好的,又来到了一篇源码运行记录← ←一. 基础环境首先,是基于之前安装PanopticFCN的设置:nvidia driver : 470cuda : 11.0cudnn : 8.0.1(对应cuda就好)pytorch 17.0二. 成功编译ORB-SLAM2ORB-SLAM2的安装记录详情点击这里。有一些要预先安装的库比如C++11 or C++0x Compiler, Pangolin, OpenCV and Eigen3,如果不知道怎么装,可以再手动搜索一下。DynaSLAM

2021-11-01 18:41:40 6529 48

原创 论文笔记-DynaSLAM II: Tightly-Coupled Multi-Object Tracking and SLAM

I.Introduction关于动态SLAM,在这个部分,论文总结了现有三种方案思路:检测动态的区域,然后把他们从SLAM环节中去除在定位的环节外,把包含动态内容的现实图片中翻译成只有静态内容的图片一个小的却在发展的思路:把动态物体也放进问题里,不仅要去解决SLAM的问题,还要为动态物体的位姿提供信息。对于第三种思路,论文中也给出了几个解决思路:使用传统的多目标追踪。缺点是:准确度高度依赖于相机的位姿估计,但在复杂的动态环境下,位姿肯定是不准的(鸡生蛋蛋生鸡问题)近几年,大家开始尝试联合

2021-10-28 21:51:11 3017 12

原创 ORB-SLAM源码中的相机参数设置

在github看到很多关于相机参数设置的的讨论, 这一篇就是对看到的内容做一个整理和总结,一. 易混淆概念1.Camera.bf根据文档的注释,这个参数是指的:基线距离(单位:米) * fx(单位:像素)2.ThDepth这是一个深度阈值,用于区分哪些特征点是近点,哪些是远点。关于更多的信息,可以参考我之前的笔记。双目关键点双目关键点的深度如果小于40倍基线长度的值,就被叫做近关键点,否则就是远关键点。近关键点可以较好的被三角化,并提供尺度,平移,旋转信息。而远关键点可以提供比较好的旋转信

2021-10-10 18:28:33 3864

原创 SLAM中常用到的评价指标

主要是想整理一下关于tum rgbd数据集和kitti数据集的评价指标,之后比较结果不能只看数值大小,还要非常清楚背后的含义。一. 从TUM数据集出发前提假设:给出的位姿估计值为P1...Pn∈SE(3)P_1 ... P_n \in SE(3)P1​...Pn​∈SE(3), 真值为Q1...Qn∈SE(3)Q_1 ... Qn \in SE(3)Q1​...Qn∈SE(3), 下标代表时间t(或帧),这里假设估计位姿和真实位姿各帧时间已对齐,总帧数相同。1. 相对位姿误差RPE(relative

2021-10-05 15:41:11 7502 2

原创 论文笔记-PL-SLAM: Real-time monocular visual SLAM with points and lines

这一篇论文的主要贡献有两个,一个是在orb-slam的基础上加入了线特征,在不影响效率的情况下,提升了系统在低纹理的情况下的表现;二是提出了一个只用到线匹配就估计出初始地图的方法(连续三帧)。这篇论文是基于单目的,还有一个同名的PL-SLAM是双目的SLAM系统,不要弄混了~I. INTRODUCTION首先指出了为什么要使用线特征:对于ORB-SLAM,如果在低纹理场景,或者是图像有运动模糊时,系统就会失效,但是在这些场景中往往还有线条,所以就希望能够应用线特征。同时,论文也说明了使用的线特征的难

2021-09-24 06:05:31 1305 3

原创 论文笔记-ORB-SLAM2-双目与rgbd相机跟单目情况的区别

ORB-SLAM2的最大贡献就是把原来的系统扩展到了双目,rgbd上,这一篇也主要讲的是怎么使用双目或者深度相机的信息,以及他们和单目的区别。I.INTRODUCTIONPlace Recognition是SLAM中一个对回环很重要的模块,作用是:1)检测传感器是否返回已经建过图的区域。2)修正累计误差。 3)在追踪失败之后重新定位相机。单目SLAM的优缺点:优点:成本更低,传感器配置更简单缺点:由于无法直接获得深度信息,所以就需要利用多视图或者滤波来生成初始地图(在最开始无法进行三角化);

2021-09-23 09:20:52 4865 1

原创 论文笔记-LSD: a Line Segment Detector线特征提取

备注:关于LSD的原版论文可点击此处,这一篇是原课题组又添加了一点改进的版本。概要LSD是一个线性时间的线段检测器,提供亚像素的精确结果。它被设计成可以在任何数字图像上工作而不需要调整参数。它可以控制自己的错误检测数量:平均而言,每幅图像允许有一个false alarm。源码关于这篇论文的代码和展示页,请点击这里介绍这一小节主要是引入了几个概念,下面就进行说明。A.梯度和水平线LSD的目的是检测图像上的局部直线轮廓(原文为straight contours)。这就是我们所说的线段。Conto

2021-09-09 01:31:15 4127

原创 力扣剑指offer II-整数相关题目整理

剑指 Offer II 001. 整数除法给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1解题关键初始思路可以是用循环每一次都在被除数的

2021-08-29 21:42:28 225

原创 SLAM笔记-ORB-SLAM2中几种追踪方式的概述

在Tracking线程中,有几种追踪的方法粗估计:相机位姿初始值1.根据上一帧和运动模型估计:运动模型是匀速运动模型,也就是说,当前帧与上一帧之间的相对位姿变化量 = 上一帧和上上帧之间的相对位姿变化量。通过这个可以估计出当前帧的位姿初始值,根据这个值,把上一帧的MApPoints和当前帧的FeaturePoints匹配,之后根据匹配进行优化(?)。如果匹配的点对太少,就要使用关键帧进行估计了。2.重定位:如果上一帧跟踪失败了,也就是说根本就没有上一帧的位姿(此时,匀速运动假设也回天无力),所以就

2021-08-27 03:18:29 982

原创 关于运行PanopticFCN的那些事

在此粗糙的记录一下相关的过程。如果有错误,还请屏幕前的你当一回热心观众提出正解哈~一.安装过程四个字,曲折跌宕。作为一个深度学习门外汉,前期的环境配置和安装来来回回就挺折腾的,但最后也跑出来了就很开心。记录几个比较重要的点:1.各路基础套件版本nvidia driver : 470cuda : 11.0cudnn : 8.0.1(对应cuda就好)pytorch 17.02.安装detectron2的注意点首先,如果碰到安装失败,一定要耐心去报错信息里找问题在哪里,不要只看最后的报错信息!

2021-08-13 05:40:27 953

原创 安装CUDNN之后,检查版本时报错No such file or directory

之前在网上查的两条指令,都报错说找不到文件路径了://更早的版本:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2//新版本一般能用的:cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2后来发现在安装cudnn的samples时,终端显示了一个信息:可以看到,这里的头文件地址似乎有一个更改。点进相关的文件夹,最终找到了正确的文件。输入下面的

2021-08-07 21:56:06 2304 2

原创 重装cuda报错“Error installing Cuda toolkit: Existing package manager installation of the driver found”

1. 问题起因:因为之前CUDA版本安装的不对,所以需要卸载重装,卸载后,重新下载了新版本的.run文件,但是在命令行输入安装指令后就报错:Error installing Cuda toolkit: Existing package manager installation of the driver found2.解决办法:第一步:去usr/local目录下把带cuda的文件夹删除。然后使用指令sudo sh ./cuda_10.2.<spec>.run --toolkit --sil

2021-08-07 21:17:09 8103 1

原创 ORB_SLAM2 运行TUM RGBD数据集过程记录

这里是用ubuntu20.04,opencv4安装orbslam2的一点记录。报错信息经过搜索找到了对应的解决办法,在这里做一个笔记报错:FATAL_ERROR "OpenCV > 2.4.3 not found."的错误解决:将ORB_SLAM2/CMakeLists.txt中的opencv版本改成自己对应的版本报错:error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope解决: 把Examples文件夹里.cc文

2021-06-30 03:08:35 2966 3

原创 MOOC Python语言程序设计笔记 第三章 基本数据类型

数字类型及操作整数类型可正负pow(x,y):计算X的y次方四种进制表示形式:十进制:1010二进制:0b或0B开头,-0B101八进制:0o或0O开头十六进制:0x或0X开头浮点数类型即实数概念,带有小数点及小数的数字。浮点数取值范围和小数精度都存在限制,但通常可以忽略取值范围约-10308至10308,精度数量级10^(-16)注意:浮点数间运算存在不确定尾数,不是bu...

2018-10-12 01:14:43 981

原创 MOOC Python语言程序设计笔记 第二章 基本图形绘制

2.1深入理解Python语言C语言:不是面向对象的语言 设计时内存还很小 主要让机器更好运行 比较底层JAVA:主要解决跨平台问题 更适合软件类专业C++:计算机专业核心语言Python:解决计算问题特点:语法简洁,生态高产编程语言的种类:机器语言(二进制语言,CPU可以直接执行,与CPU类型有关)汇编语言(将二进制代码直接对应助记符的编程语言,与CPU类型有关,程序不通用,需...

2018-10-12 01:12:27 289

原创 MOOC Python语言程序设计笔记 第一章 基本语法元素

1.1程序设计基本方法计算机:功能性(对数据的操作:数据计算,输入输出,结果存储)可编程性(自动、可预测、准确完成操作者意图)编程语言的执行方式:源代码:采用某种编程语言编写的计算机程序,人类可读 result=2+3目标代码:计算机可直接执行,人类一般不可读(一堆二进制数)编译:通过编译器,将源代码一次性转换成目标代码。解释:将源代码逐条转换成目标代码同时逐条运行编程语言的分类...

2018-10-12 01:09:39 398

空空如也

空空如也

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

TA关注的人

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