- 博客(71)
- 收藏
- 关注
原创 LIO-SAM论文详解
在本文中,我们提出了一个通过smoothing and mapping实现的紧耦合激光惯性里程计框架,来解决上面提到的问题。首先我们假设一个非线性运动模型用于点云运动畸变的矫正,主要是使用IMU测量值估计雷达的运动。除了用于矫正点云之外,基于IMU估计的运动还可作为激光里程计优化的初值。然后再基于激光里程计估计因子图中IMU的零偏。在机器人的轨迹估计时,基于因子图,我们可以有效的使用雷达和imu的测量值进行多传感器融合,比如引入位置识别,引入GPS位置信息和指南针的朝向信息等绝对测量值。
2023-07-04 15:50:52 2149 1
原创 VINS-Mono论文详解
由相机和低成本惯性测量单元(IMU)组成的单目视觉惯性系统:VINS,是度量六自由度(DOF)状态估计的最小传感器组件。然而,不能直接测量距离,在IMU处理,估计器初始化,外部校准和非线性优化方面带来了重大挑战。在这项工作中,我们介绍了VINSMono:一种功能强大且用途广泛的单目视惯状态估计器。我们的方法从用于估计器初始化和失败恢复的robust的过程开始。是一种紧耦合的,基于非线性优化的方法,通过融合IMU预积分值和特征观测值来获得高精度的视惯里程计。
2023-06-27 10:41:07 995
原创 ORB-SLAM2论文详解
ORB-SLAM2 适用于单目,双目和RGB-D相机,包括闭环、重定位等功能,可用于室内环境、工业环境、飞行的无人机、行驶的汽车等。
2023-06-26 13:53:21 2208
原创 ORB-SLAM论文详解
本文介绍了ORB-SLAM,这是一种基于特征的单目SLAM系统,可在大小型室内外环境中实时运行。该系统对严重的运动模糊具有鲁棒性,可实现较宽的基线回环和重定位,并包括全自动的初始化。我们基于近年来的出色算法,从头开始设计了一个新颖的系统,该系统对所有SLAM任务使用相同的特征 :跟踪,映射,重定位和回环。利用优胜劣汰的策略选择关键帧和点,从而有出色的鲁棒性,并生成了紧凑的跟踪地图,该地图仅在场景内容发生变化时才会增长,从而实现持续运行。我们提供了来自最受欢迎数据集的27个序列的详尽评估。
2023-06-25 16:00:03 629
原创 RANSAC算法详解
dommpleonsensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声,比如说匹配中的误匹配和估计曲线中的离群点。所以,RANSAC也是一种“外点”检测算法。RANSAC算法是一种不确定算法,它只能在一种概率下产生结果,并且这个概率会随着迭代次数的增加而加大(之后会解释为什么这个算法是这样的)。
2023-06-21 18:08:51 598
原创 GN(高斯牛顿法)和LM(列文伯格-马夸尔特)的基本原理
1、实际使用中使用梯度下降法找到的通常是局部极小值,而不是全局最小值。2、具体找到的是哪个极小值和初始点位置有很大关系。3、如果函数是凸函数,那么梯度下降法可以保证收敛到全局最优解(最小值)4、梯度下降法收敛速度通常比较慢5、梯度下降法中搜索步长 λ 很关键,步长太长会导致找不到极值点甚至震荡发散,步长太小收敛非常慢。因此,前面的例子中,迷路的探险者可能花费了大量时间找到的却是一个假的山脚(山腰的某个低洼处,局部最小值)。
2023-06-21 17:06:09 5183 6
原创 ros中的消息同步message_filter
注: _1, _2为占位符, 代表接收的参数, 在函数真正调用的时候传入真正的参数。占位符的名字知识表示它在调用式中的顺序, 最多可以绑定9个占位符。注:第二个参数this指针指向当前对象, 从而可以调用当前对象的成员函数,因为this指针占用了一个占位符,所以最多绑定8个参数。4.等待, 直到能够确定最小的T, 那么这个T set为需要publish的set。3.计算每个队列中距离pivot最近的消息与pivot的消息差和, 为T。, 回调函数的输入类型必须是ConstPtr类型的共享指针。
2023-06-21 13:16:35 1185 1
原创 Hybrid A* (混合A*)路径规划算法
HybridAStar算法主要是在A* 基础上考虑车辆动力学相关的搜索算法,其放弃了A* 中对搜索空间离散化,利用Dubins或者Reeps-Shepp来考虑自车能够前进的位置,使得规划的轨迹满足车辆的非完整性约束,但是该Hybrid A* 牺牲了算法的完备性和最优性。1.在连续空间上扩张节点搜索最短路径2.路径平滑Hybrid A* 算法与A* 算法的差异对比如下表所示如下图所示,最左侧图是A算法的结果,最右侧是Hybrid A算法。(中间为A* 算法变种)
2023-06-21 10:12:23 3249
原创 RRT路径规划算法
快速扩展随机树(RRT)算法,是近十几年应用比较广泛的一种运动规划算法。它的大致原理为:原始的RRT算法通过一个初始点作为根节点,通过随机采样,增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中通过回溯的方式,找到这条从初始点到目标点的路径。
2023-06-20 10:19:42 1266
原创 teb局部路径规划算法
这样规划出的路径,更符合小车的硬件结构以及运动学,能够让小车流畅地行驶和绕障,且行驶速度和到点时间都有着优秀表现。但由于需考虑的参数较多,如何「合理地」配置参数,就成了最重要且最困难的一环。
2023-06-17 16:57:34 4883
原创 Dijkstra算法详解
首先从某个顶点出发,依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和该顶点有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。:从图中某顶点出发,依次访问的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。深度优先搜索和广度优先搜索分别类似于树的前序遍历和层次遍历。。
2023-06-17 15:54:33 1653
原创 A*算法详解
虽然掌握了 A* 算法的人认为它容易,但是对于初学者来说, A* 算法还是很复杂的。Ok ,现在你已经看完了整个的介绍,现在我们把所有步骤放在一起:1.把起点加入 open list。2.重复如下过程:a. 遍历 open list ,查找 F 值最小的节点,把它作为当前要处理的节点。b. 把这个节点移到 close list。c. 对当前方格的 8 个相邻方格的每一个方格?
2023-06-17 12:02:12 606
原创 C++设计模式---享元模式
是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。
2023-06-17 11:06:02 262
原创 C++设计模式---桥接模式
桥接模式是一种结构型设计模式, 可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发。桥接模式通过将继承改为组合的方式来解决这个问题。具体来说, 就是抽取其中一个维度并使之成为独立的类层次,这样就可以在初始类中引用这个新层次的对象,从而使得一个类不必拥有所有的状态和行为。层次结构中的第一层(通常称为抽象部分)将包含对第二层(实现部分)对象的引用。抽象部分将能将一些(有时是绝大部分)对自己的调用委派给实现部分的对象。所有的实现部分都有一个通用接口, 因此它们能在抽象部分内部相互替换。
2023-06-17 10:22:03 136
原创 C++设计模式---适配器模式
适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。好比日本现在就只提供110V的电压,而我的电脑就需要220V的电压,那怎么办啦?适配器就是干这活的,在不兼容的东西之间搭建一座桥梁,让二者能很好的兼容在一起工作。
2023-06-17 10:06:49 155
原创 C++设计模式---装饰模式
装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对 象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。
2023-06-17 09:43:37 107
原创 C++设计模式---代理模式
代理模式是构造型的设计模式之一,它可以为其他对象提供一种代理以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。
2023-06-17 09:33:47 420
原创 C++设计模式---单例设计模式
单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。
2023-06-16 20:00:00 67
原创 C++设计模式---建造者模式
建造者模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。官方说法就是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。
2023-06-16 18:04:21 87
原创 C++设计模式---抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
2023-06-16 17:46:52 366
原创 C++设计模式---工厂模式
工厂方法模式同样属于类的创建型模式又被称为多态工厂模式。工厂方法模式的意义是 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类 必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工 厂角色的情况下引进新的产品。
2023-06-16 17:26:25 62
原创 C++设计模式---简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2023-06-16 16:57:35 178
原创 cartographer源码解析(二)node_main.cc文件详解
cartographer学习笔记(二)这一篇主要分析node_main.cc的代码。
2023-06-14 15:47:36 237
原创 C++11新特性--新的类功能
原来C++类中,有6个默认成员函数:1.构造函数2.析构函数3.拷贝构造函数4.拷贝赋值重载5.取地址重载6.const 取地址重载最后重要的是前4个,后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。和。针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下:1.如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载都没有实现。那么编译器会自动生成一个默认移动构造。
2023-06-14 14:03:40 72
原创 C++11新特性--完美转发
模板中的&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。希望能够在传递过程中保持它的左值或者右值的属性, 就需要用完美转发来完成。但是引用类型的唯一作用就是限制了接收的类型,后续使用中都退化成了左值。std::forward(t)在传参的过程中保持了t的原生类型属性。模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力。
2023-06-14 13:28:00 68
原创 C++11新特性--右值引用和移动语义
传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,左值是一个表示数据的表达式(如变量名或解引用的指针),可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。
2023-06-14 11:02:52 66
原创 C++11新特性--列表初始化
在C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表时,可添加等号(=),也可不添加。总结:C++11里面扩展了{}初始化使用,基本都可以使用它来初始化但是建议还是按旧的用法来使用,一般new[]建议使用它来初始化。
2023-06-14 10:12:58 208
原创 C++ STL- 函数对象
概念:函数对象是一个类对象,实现类似函数调用的形式,所以也称之为仿函数重载的类,其对象常称为使用重载的()时,行为类似函数调用,也叫本质:函数对象(仿函数)是一个类,不是一个函数。
2023-06-13 16:06:54 47
原创 C++ STL- 常用容器map/multimap
map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序。
2023-06-13 14:48:41 98
原创 C++ STL- 常用容器set/ multiset
简介:所有元素都会在插入时自动被排序本质:set/multiset属于,底层结构是用实现。set和multiset区别:1.set不允许容器中有重复的元素2.multiset允许容器中有重复的元素。
2023-06-13 14:32:39 85
原创 C++ STL- 常用容器list
功能:将数据进行链式存储链表 list是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器list的优点:1.采用动态存储分配,不会造成内存浪费和溢出2.链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素list的缺点:1
2023-06-13 13:55:14 57
原创 C++ STL- 常用容器deque
它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 —队列中出数据称为 —
2023-06-13 13:28:06 58
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人