- 博客(35)
- 资源 (3)
- 收藏
- 关注
原创 C++设计模式学习(二)
定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。相对稳定的算法骨架是使用 Template Method 模式的前提。如果算法是完全稳定的或者是完全变化的那么都不能使用设计模式。因为设计模式是在算法的稳定中间设置隔离点去分离出来,将变化限制在一个范围之内。定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。
2023-05-26 09:30:52
1035
原创 C++设计模式学习(一)
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样就可以一次又一次的使用该方案而不必做重复的劳动“。(可复用面向对象软件基础)
2023-03-31 11:20:26
284
原创 chatGPT写的一篇动态环境下的视觉slam论文
今天尝试了一下chatGPT,虽然没有什么创新点,但是对各种概念的描写还是没问题的。Simultaneous localization and mapping (SLAM) using visual information has become an important topic in robotics and computer vision. However, existing methods for visual SLAM often assume a static environment, whic
2022-12-08 21:44:00
2418
1
原创 c++的sort函数及STL自定义排序规则
cmp比较函数对象(即满足比较 (Compare) 概念的对象),若第一参数小于(即先序于)第二参数则返回 true。语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序。cmp参数可以设置为函数、类或者lambda 表达式。通过cmp参数可以自定义排序规则。lambda 表达式。
2022-11-08 15:30:16
607
原创 C++基础——深拷贝与浅拷贝的区别
简单的赋值拷贝操作,还是指向同一块内存空间,其中一个改变,因为指向同一块内存另一个对象也随之改变。(只是增加了一个指针指向已存在的内存地址)在堆区重新申请一个空间,进行拷贝操作,两个对象相互独立。(增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存)使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。public:cout
2022-11-01 20:15:03
496
原创 C++基础——类的访问权限
注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。使用protected继承,父类的protected和public属性在子类中变为protected;使用private继承,父类的protected和public属性在子类中变为private;使用public继承,父类中的protected和public属性不发生改变;protected继承和private继承会降低子类继承到的访问权限。访问不能被任何其他访问,该类的对象也不能访问。
2022-10-31 19:50:48
460
原创 C++基础——面向对象的三大特性:封装、继承、多态
封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。C++ 通过创建类来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。
2022-10-28 21:32:29
633
原创 个人向学习计划
大概整理了下面试前需要的知识点包括c++开发面试和SLAM算法所需要的知识点,后面我会慢慢补充完整。行情不太好,所以既要准备SLAM算法的也要准备C++开发的。
2022-10-26 20:49:44
546
原创 opencv中的浅拷贝和深拷贝
昨天写代码时由于浅拷贝共享内存的原因出了点bug,故记录一下opencv中的浅拷贝和深拷贝opencv中的cv::Mat的复制方式有几种,
2022-10-18 11:19:11
716
原创 Ceres学习
LocalParameterization本身是一个虚基类,详细定义如下。用户可以自行定义自己需要使用的子类,或使用Ceres预先定义好的子类。/* 目的: 有时参数块x可能会过参数化问题min f(x)x例如,三维中的球体是嵌入在三维空间中的二维流形。在球面上的每一点上,它的平面切线定义了一个二维切线空间。对于这个球上定义的代价函数,给定一个点x,在这个点上向球的法线方向移动是没有用的。
2022-10-14 20:49:27
1009
原创 【c++基础】命名空间污染
命名空间本身就是为了解决在大型项目中,给函数和变量取名出现重复会导致代码冲突的问题。在命名空间出现之前的做法是数的做法是对每个模块的一组函数名加个特定前缀,这样的做法无疑给本来就有取名困难症的程序员们右加以一把火。于是就有了命名空间这个东西, 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。但是为什么还会有命名空间污染呢。这个命令的滥用,会导致在代码中在不同命名空间的相同名字的变量或者函数导致代码冲突。比如说我们常用的std这个标准库的命名空间就是这样子来的。
2022-10-12 10:56:15
1722
原创 Harris与Shi-Tomasi 角点检测原理
Shi-Tomasi角点是根据Harris改进而来的。所以本文首先介绍Harris的原理。Harris角点检测算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。
2022-09-05 19:42:49
960
原创 DynaVINS论文阅读笔记
(1)在存在动态物体的环境中,动态物体的移动造成位姿估计精度的降低。(2)动态物体在视野可见范围内的暂时静止且在视野外的运动(临时静态物体)造成回环检测的假阳性。
2022-09-03 20:08:16
3126
3
原创 VINS-FUSION代码解读【2】——参数读取和求解器参数设置
上一篇博客将rosNodeTest.cpp这个程序入口的代码进行了简单的解析。挖个坑,关于信息矩阵相关的知识顺便整合一下(更新了会直接放链接)。接下来的是estimator的设置参数,主要是设置求解器的参数。读了这个函数我们就可以更清晰的了解到参数文件每个参数的作用。关于外参可以根据给的代码中的pdf更好地帮助我们去理解。...
2022-08-31 22:15:50
1436
3
原创 VINS-FUSION代码解读【1】——程序入口
vins-fusion不像mono那样有三个node,它只有一个node,在rosNodeTest.cpp里。并且这个文件是整个vins-fusion的程序入口。所以我先从这个文件看起。本人基础不太扎实所以会把代码注释的比较详细,也会适当添加对应知识点的解读。以上就是对rosNodeTest.cpp代码的解读。rosNodeTest.cpp的文件级变量。接下来解析sync_process线程。.........
2022-08-30 21:51:21
2327
5
原创 记录一下对编译安装opencv 出现‘*LIBTIFF4.0‘未定义的引用这个小问题
一、重新编译opencv并在cmake的时候添加编译参数-DBUILD_TIFF=ON。三、TIFF的库和conda的TIFF库发生了冲突(对于我解决了问题)解决办法condaremovelibtiff。
2022-08-01 21:05:50
3984
2
原创 int main(int argc, char** argv)中的参数的意思
argc 是 argument count的缩写,表示传入main函数的参数个数;argv 是 argument vector的缩写表示传入main函数中的参数列表。在在线工具中执行就可得到说明最后的执行命令为./a.out,通过这两个参数我们可以实现在执行这个程序的时候通过命令行的输入与程序进行交互。...
2022-06-09 20:30:44
210
原创 C++中std::string::npos
std::string::npos(1)它是一个常量静态成员值,对于 size_t 类型的元素具有最高可能值。(2)它实际上意味着直到字符串的末尾。(3)它用作字符串成员函数中长度参数的值。(4)作为返回值,它通常用于表示没有匹配项。(5)数据类型为size_t的话string:npos常量被定义为-1,因为size_t是无符号整数类型,-1是该类型的最大可能表示值。使用示例作为没有匹配项的示例#include <iostream>#include <string>
2022-05-29 13:33:41
6858
原创 C++中设置常量#define和const的区别
C++中设置常量#define和const的区别简单总结下别人写的小知识比如说在设置常数PI 为3.14的时候,一般我们有两种写法:#defin PI 3.14或者是const double PI 3.14两者的区别(1)就编译器处理方式而言: #define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用。(2)就起作用的方式而言: #define仅仅是简单的文本替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。(3)
2022-05-28 16:30:51
409
原创 Lifelong Localization in Semi-Dynamic Environment阅读笔记(翻译)
半动态环境下的终身定位摘要非静态环境中的映射和定位是机器人技术的基本问题。以前的大多数方法主要关注环境中的静态和高动态对象,在半动态场景中可能会出现定位失败,而不考虑动态性较低的对象,例如停放的汽车和停止的行人。在本文中,我们介绍了语义映射和终身定位方法来识别非静态环境中的半动态对象。我们还提出了一个通用框架,可以将主流对象检测算法与SLAM算法相结合。 该映射方法结合了对象检测算法和SLAM算法来检测半动态对象,并构造出只包含环境中的半动态对象的语义图。 在导航过程中,定位方法可以对静态和非静..
2022-05-27 17:20:46
671
3
原创 MaskFusion阅读笔记
主要思想:(语义+几何)1. MaskRCNN进行语义分割,在基于每个对象都是不连续的假设基础上进行几何分割;一种实时、对象感知、语义和动态的RGB-D SLAM 系统。SLAM系统同时输出相机位姿和场景中运动物体位姿这个功能对于AR应用来说具有很大价值;系统实时性还有较大问题,系统需要两块GPU(实验平台:2 * Nvidia GTX Titan X),一块做语义识别(MaskRCNN),一块用于SLAM中的几何分割和模型渲染(OpenGL)。当环境中没有运动物体时系统速度为30Hz,当有
2022-05-27 14:45:00
403
原创 Detect-SLAM阅读笔记
Detect-SLAM: Making Object Detection and SLAM Mutually Beneficial主要思想:目标检测的网络并不能实时运行,所以只在关键帧中进行目标检测,然后通过特征点的传播将其结果传播到普通帧中1.只在关键帧中用SSD网络进行目标检测(得到的是矩形区域及其置信度),图割法剔除背景,得到更加精细的动态区域;2.在普通帧中,利用feature matching + matching point expansion两种机制,对每个特征点动态概率传播,至
2022-05-27 10:33:33
1211
原创 DS-SLAM阅读笔记
主要思想:(语义+几何)1.SegNet进行语义分割(单独一个线程);2.对于前后两帧图像,通过极线几何检测外点;3.如果某一物体外点数量过多,则认为是动态,剔除;4.建立了语义八叉树地图。讨论:这种四线程的结构以及极线约束的外点检测方法得到了很多论文的采纳,其缺点在于:1.极线约束的外点检测方法并不能找到所有外点,当物体沿极线方向运动时这种方法会失效2.用特征点中的外点的比例来判断该物体是否运动,这用方法存在局限性,特征点的数量受物体纹理的影响较大3.SegNet是201.
2022-05-27 10:31:59
3301
原创 VSCode个人使用的拓展
VSCode个人使用的拓展VSCode编程语言:C++和pythonC++相关拓展1.C/C++C/C++ 扩展为 Visual Studio Code 添加了对 C/C++ 的语言支持,包括 IntelliSense 和调试等功能。2.C/C++ Advanced Lint一个 Visual Studio Code 扩展,支持许多用于 C 和 C++ 代码的静态代码分析器3.C/C++ SnippetsVisual Studio Code 的此扩展添加了 C/C++ 的中文语言包
2022-05-27 09:42:37
2010
1
原创 ubuntu下设置code命令打开vscode
ubuntu下设置code命令打开vscodeubuntu下设置code命令打开vscode如过发现vscode无法用code命令打开,那么就在vscode界面使用ctrl+shift+p打开然后输入code选择第一个lcons:激活VSCode lcons,就可以在shell里面使用code命令打开vscode了。...
2022-05-27 09:23:17
4498
原创 李宏毅深度学习视频学习笔记(2)
本次学习笔记是观看P3-P4之后写的。本次的内容主要是对回归进行了简单地介绍。回归就是找到一个函数,通过特征,输出数值。回归模型步骤:(1)模型假设,选择模型框架(线性模型)(2)模型评估,如何判断模型的好坏(损失函数)(3)模型优化,如何筛选最优的模型(梯度下降)1.模型假设 - 线性模型线性模型分为:(1)一元线性模型(单个特征)(2)多元线性模型(多个特征)线性模型为y=b+∑wi∗xiy= b + \sum{w_{i}*x_{i}}y=b+∑wi∗xixix_ixi是各
2021-08-18 23:31:16
138
原创 李宏毅深度学习视频学习笔记(1)
本次学习笔记是观看P1-P2之后写的。本次的内容主要是对机器学习进行了简单地介绍。人工智能是我们希望实现的目标,机器学习是实现该目标的一种手段,深度学习有属于机器学习的一种方法。在机器学习出现之前,人们对于人工智能的实现都是对程序设定好规则,这样的话程序的智能就永远无法超脱这个规则也就无法超越制定规则的人。机器学习是为了让机器拥有自己学习的能力,希望以输入数据的形式让机器自己进行规则(函数)的建立。并且在函数建立之后,输入未输入过的数据,机器仍然可以进行正确的输出。机器学习分为三个步骤:(1)
2021-08-16 22:29:17
131
原创 【机器视觉】基于MATLAB+Hough变换对工件尺寸检测
【机器视觉】基于MATLAB+Hough变换对工件尺寸检测前言正文程序参考文献前言声明:图片来自参考论文大家好!这是我第一次写博客。本篇是根据数字图像处理的一次作业写的。有问题的地方欢迎指出。正文任务目标:检测图像中两个圆孔的圆心距和各自的半径。方案:用MATLAB复现《基于机器视觉的二维尺寸检测》作者:谢俊,吴荥荥,朱广韬,王路路,来自杂志《工具技术》。首先利用论文给出的10mm的标尺的图像确定实际尺寸和像素间的变换关系。现将图像二值化图像再进行细化。f = rgb2gray(f);
2020-06-09 20:54:40
9122
6
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人