- 博客(39)
- 收藏
- 关注
原创 c++内存泄漏
在C++中,内存泄漏(Memory Leak)是指由于疏忽或错误导致无法释放已分配的内存。内存泄漏通常发生在动态内存分配后,由于某些原因,分配的内存没有被正确释放,导致程序随着时间推移消耗越来越多的内存,最终可能导致程序崩溃或系统资源耗尽。
2025-05-04 10:30:21
443
原创 More Effective C++学习笔记
条款1 指针与引用的区别条款2 尽量使用C++风格的类型转换条款3 不要对数组使用多态条款4 避免无用的缺省构造函数条款5 谨慎定义类型转换函数条款6 自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别条款7 不要重载“&&”,“||”, 或“,”条款8 理解各种不同含义的new和delete条款9 使用析构函数防止资源泄漏条款10 在构造函数中防止资源泄漏条款11 禁止异常信息(exceptions)传递到析构函数外条款12 理解“抛出一个异常”与“
2025-05-03 22:31:12
457
原创 关键字static
一个源文件中的函数,可以被其他源文件中的函数访问(同样需要extern关键字声明)。在类的数据成员前加上关键字static,类的数据成员就成为静态数据成员,我们主要从五个方面来进行说明:共享、初始化、类大小、存储、访问。静态函数本质和静态全局变量很像:函数本身也是有外部链接属性的,被static修饰后,函数的外部链接属性被修改成内部链接属性,使得这个。static修饰函数的与修饰全局变量十分相似,修饰函数时会改变函数的链接属性,从而使得函数的作用域变小。属于类,也属于对象,但终究属于类。
2025-04-11 23:25:37
136
原创 构造函数种类
该构造函数一般默认无参数(或者有默认参数),如果没有写一个构造函数,则编译器会为类自动生成一个默认构造函数。这种就是将int类型转换成了类参数的类型,所以使用explicit声明转换构造函数使其不能进行强转转换。拷贝构造函数的参数应该是一个const该类型的引用。移动构造函数接收的参数是A &&a。
2025-04-11 23:08:31
132
原创 详解左值和右值
在 C++ 中,左值(lvalue) 和 右值(rvalue) 是表达式的两种基本分类,它们描述了表达式的值在内存中的存储位置和生命周期。理解左值和右值是掌握 C++ 中移动语义、引用、以及现代 C++ 特性的基础。
2025-04-11 23:07:43
101
原创 C++并发编程第一章 基础概念
std::thread 的构造函数接受一个指向成员函数的指针和一个指向对象的指针。及线程同步的工具,如std::mutex 和std::condition_variable。std::condition_variable 用于线程间的同步,可以实现线程的等待和唤醒。std::thread 类是C++11 线程库的核心,它提供了创建、启动、加入和分离。在C++中,线程的创建和管理主要通过std::thread 类完成。线程分离意味着线程将独立于创建它的线程运行,即使创建线程已经结束,
2025-04-06 20:54:18
286
原创 设计模式的种类及其实现方法
设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。定义:其提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品。
2025-03-30 10:49:19
915
原创 UML类图
泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
2025-03-27 21:21:40
308
原创 cartographer中地图转换
像素坐标系是地图数据中的二维坐标系,其原点通常位于cartographer地图左上角(X -> 朝前,Y -> 朝左,Z -> 朝上),X轴向右,Y轴向下。世界坐标系中其坐标轴:Y -> 朝前,X -> 朝右,Z -> 朝上,将世界坐标系旋转90°即为ros坐标系和cartographer地图坐标系。ros坐标系中其坐标轴:X -> 朝前,Y -> 朝左,Z -> 朝上。
2025-03-22 21:51:58
378
原创 2Dslam前端分类
扫描到扫描匹配是最基本的扫描匹配方法,通过比较当前扫描数据与上一扫描数据之间的差异来估计机器人的位姿变化。常见的算法包括迭代最近点算法(ICP, Iterative Closest Point)和PL-ICP(Point-to-Line ICP),其中ICP适用于点云数据的精确匹配,而PL-ICP则更适合处理线性特征较多的场景。似然场扫描匹配方法基于概率模型,将激光雷达的扫描数据与地图中的栅格或点云进行比较,从而计算出当前位姿的可能性。ICP通过迭代优化两个点云之间的相对位姿,以实现精确的匹配和定位。
2025-03-22 21:01:36
518
原创 强制类型转换运算符
• 允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全)• reinterpret_cast 的一个实际用途是在哈希函数中,即,通过让两个不同的值几乎不以相同的索引结尾的方式将值映射到索引。• 可以在整个类层次结构中移动指针,子类转化为父类安全(向上转换),父类转化为子类不安全(因为子类可能有不在父类的字段或方法)• 对不明确的指针的转换将失败(返回 nullptr),但不引发异常。
2025-03-08 00:12:37
345
原创 虚函数、纯虚函数和虚继承
抽象类被继承后,子类可以继续是抽象类,也可以是普通类,而虚基类,是含有纯虚函数的类,它如果被继承,那么子类就必须实现虚基类里面的所有纯虚函数,其子类不能是抽象类。实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间,4字节)和虚基类表(不占用类对象的存储空间)(需要强调的是,纯虚函数是一种特殊的虚函数,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。虚函数、纯虚函数的联系。
2025-03-07 23:45:34
1025
原创 IMU预积分理论推导
将一段时间内的IMU测量数据(如加速度和角速度)累积起来,形成一个相对运动的增量模型。这种方法避免了直接对每一时刻的状态进行积分,而是通过累积增量来更新状态,从而简化了计算过程。
2025-03-07 21:53:08
236
原创 指针与引用
是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量,而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。都是地址的概念:指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。是它们都是在被调函数栈空间上的一个局部变量;4.引用传递和指针传递的。
2025-03-06 23:35:48
1063
原创 navigation_ros包功能介绍和组成
ROS导航功能包通过处理里程计数据、传感器数据和环境地图数据,根据发布的目标点位姿为机器人运动生成一条安全的路径。
2025-03-04 11:05:07
914
1
原创 Faster-LIO整体框架
faster-lio主要优化地图格式,采用体素增量(ivox)作为地图结构,并完成地图中点的增删改查。后端:利用反向传播构建点云残差和IMU积分的先验误差基于优化模型利用IKEF进行迭代优化求解。前端主要是提取面特征、线特征,并利用IMU数据估计先验位姿;反向传播的目的就是为了去除运动畸变,构建更准确的点云残差。前端:提取点云特征中面特征和线特征,
2025-03-02 19:38:58
456
原创 LIO-SAM整体框架
假设一个非线性运动模型矫正点云由于运动产生地畸变,基于IMU预积分估计的运动可作为激光里程计优化的初值。然后再基于激光里程计估计因子图中IMU的零偏。在机器人的轨迹估计时,基于因子图,我们有效地使用雷达和imu的测量值进行多传感器融合。融合来自不同源的多种因子集合在因子图中共同优化。a)IMU预积分约束,(b)激光里程计约束,(C)GPS因子约束,(d)回环检测因子(基于欧式距离进行实现)。
2025-03-02 19:04:01
256
原创 代价地图Costmap
代价地图(CostMap)在导航中发挥着重要的作用,它是一种用于描述环境中各个位置的导航代价的地图。反映了机器人在不同区域移动的相对难易程度,自动获取传感器信息完成自我更新。
2025-02-28 21:48:56
443
原创 DWA算法原理介绍
DWA算法是一种用于机器人避障的策略,它在速度空间中采样多组速度,模拟这些速度下一定时间内的多条轨迹,并用评价函数评估,选择最优轨迹。机器人的运动模型分为两种,一种是全向模型(有x轴速度、z轴角速度和y轴速度),另一种是非全向模型(只有x轴速度和z轴角速度)。C++实现中包含了动态窗口计算、最佳速度选择和轨迹预测等功能。,循环以此达到目的点,同时达到。
2025-02-28 21:13:58
1353
原创 cartographer前端组成架构
其实现原理:根据初始位姿和点云,以初始位姿为中心,在指定范围内枚举出所有候选位姿,并生成每个位姿对应的点云。位置、角度两残差顶多就是对匹配位姿的约束,防止点云匹配的结果和初值差太多,真正的扫描匹配的主角是点云匹配残差。需要CSM粗匹配把位姿推测器传来的预测值更新为一个好的初值,如果没有CSM粗匹配,就用位姿推测器传来的预测值作初值。cartographer的扫描匹配主要通过CSM粗匹配或者位姿推测器提供Ceres精匹配的初值后,通过Ceres精匹配优化将相关数据插入到子图中。
2025-02-23 12:23:30
737
原创 刚体变换(一)
基于右手坐标系(右手拇指指向旋转轴u 的正方向,这时其它四个手指弯曲的方向即为旋转的正方向.在上图中即为逆时针方向),假设我们有一个经过原点的(如果旋转轴不经过原点我们可以先将旋转轴平移到原点,进行旋转,再平移回原处)旋转轴。如果有一个复数𝑧 = 𝑎+𝑏𝑖,那么𝑧 与任意一个复数𝑐 相乘都会将𝑐 逆时针旋转θ= atan2(𝑏, 𝑎) 度,并将其缩放||z||倍。注意,其实z旋转矩阵如果写成复数形式的话就是复数(复数形式)z = cos(θ) + 𝑖 sin(θ).。如果||𝑧|| =
2025-02-23 11:08:23
898
原创 ROS坐标系的关系
ROS中常见的坐标系包括map坐标系、odom坐标系、base_link(base_footprint)坐标系和base_laser坐标系等;一般的连接关系都是map->odom->base_link->base_laser。
2025-02-22 21:26:50
964
原创 c++智能指针
C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己 管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的 概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常 时内存泄露等问题等,使用智能指针能更好的管理堆内存。C++里面的四个智能指针: auto_ptr,unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持, 并且第一个已经被C++11弃用。
2025-02-20 22:26:20
199
原创 c++多态
当基类和子类拥有同名同参同返回的方法,且该方法声明为虚方法,当基类对象、指针、引用指向的是派生类的对象的时候,基类对象、指针、引用在调用基类的虚函数,实际上调用的是派生类函数。多态是面向对象编程中的一个重要概念,它允许我们使用共同的接口来处理不同类型的对象,从而提高了代码的灵活性和可扩展性。当一个类中声明了虚函数,编译器会为该类生成一个虚函数表(vtable),表中存储了该类所有虚函数的地址。通过基类指针或引用调用虚函数时,编译时不确定具体调用哪个实现,而是在运行时根据对象的实际类型确定。
2025-02-20 22:15:58
857
原创 0.优化问题搭建
该框架的特点:该框架易于使用、可移植、广泛优化、低计算时间;对于任何一个优化问题,我们首先需要对问题进行建模,之后采用合适的优化方法,进行求解。所以在代码中使用优化库进行优化时,需要包含基本内容:建模、优化、求导方法。Ceres Solver是一个开源的c++库,用于建模和解决大型、复杂的优化问题。g2o是一个开源的通用框架,用于优化可以定义为图形的非线性函数,它的优点是易于扩展,高效,适用于广泛的问题。gtsam应用:GTSAM与各种传感器前端一起使用,SVO的变体使用GTSAM作为里程计的后端。
2025-02-15 19:05:07
714
原创 1.cartographer后端优化概括
流程:通过利用当前节点和构建子图(节点组成)、landmark、IMU和里程计数据构建。,结合线程池中将整体优化流程形成各个任务节点,并利用ceres库构建。
2025-02-10 21:15:08
546
原创 3. cartographer线程池管理(thread_pool)
当程序运行时,创建一定数量的线程,此时所有线程都处于空闲状态。当有新的任务进来时,任务将挂在任务队列中,等待着线程池中空闲线程获取,任务处理完后,该线程被放到线程池中。
2025-02-08 21:42:06
780
详细介绍旋转矩阵、复数之间存在的关系,并通过坐标系作为连通工具;详细介绍四元数、旋转矩阵、轴角和欧拉角之间的转换关系及其优缺点
2025-02-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人