自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LVI-SAM中激光点云辅助视觉特征点获取深度

本文提出了一种基于激光点云辅助的视觉特征点深度估计方法。首先将视觉特征点投影到单位球面,同时对激光点云进行角度下采样并归一化到单位球面。通过构建KDTree快速搜索与视觉特征点方向最近的三个激光点,利用三点拟合平面并计算视觉射线与平面的交点,从而估计特征点深度。该方法通过球面投影消除深度影响,仅基于方向差异进行匹配,实现了视觉特征与激光点云的高效关联。

2025-12-10 18:03:20 399

原创 A-LOAM

本文介绍了激光SLAM系统的三个核心节点:scanRegistration节点负责点云预处理,包括滤波、特征提取(边缘点和平面点);alaserOdometry节点通过点线/面残差优化实现帧间位姿估计;alaserMapping节点进行全局优化消除漂移。系统采用分层处理架构,先进行局部帧间匹配(odometry),再通过地图匹配(mapping)优化全局位姿。特征点提取采用曲率计算和分段采样,位姿优化使用Ceres求解器最小化残差。整个流程实现了从原始点云到位姿估计的完整处理链。

2025-12-06 17:24:47 872

原创 LVI-SAM/LIO-SAM/LEGO-LOAM中点到线/面残差计算及其雅可比矩阵推导

摘要:本文详细解析了LOAM系列SLAM算法中激光点云特征匹配的关键计算过程。重点阐述了点到线/面残差的计算方法及其雅可比矩阵推导:1)通过PCA主成分分析进行直线拟合,使用向量叉积计算点到直线距离;2)采用最小二乘法进行平面拟合,求解点到平面距离;3)推导残差函数对位姿的偏导数构造雅可比矩阵。最后介绍了基于高斯牛顿法的线性系统求解过程,实现位姿优化。文章以LVI-SAM源码为例,系统讲解了激光SLAM中特征匹配的核心数学原理。

2025-11-20 18:44:57 647

原创 Cartographer源码-扫描匹配

本文摘要: Cartographer的扫描匹配过程分为两个主要步骤:相关性扫描匹配和基于Ceres的优化扫描匹配。 在相关性扫描匹配阶段,系统通过暴力搜索方法在指定窗口内(线性0.1m,角度20度)评估候选位姿。该过程先对点云进行多角度旋转预处理,然后计算每个候选位姿下点云与栅格地图的匹配得分,选取最优解作为初始位姿。 基于优化的扫描匹配则构建了包含三个残差项的最小二乘问题:1)地图残差,通过插值计算点云与地图的匹配程度;2)平移残差,限制位姿变化幅度;3)旋转残差,保持角度稳定性。Ceres求解器通过自动

2025-10-19 15:16:15 667

原创 Cartographer源码-激光数据走向

本文分析了Cartographer中激光雷达数据的处理流程:1. 数据订阅与回调注册:通过ROS节点订阅激光话题,使用模板函数和lambda表达式实现多参数回调;2. 数据转换:将LaserScan消息转换为带时间戳的三维点云,处理多回波数据并计算点云坐标;3. 数据分发:通过Collator和OrderedMultiQueue实现多传感器数据的时间同步;4. 扫描匹配:最终将处理后的点云数据送入LocalTrajectoryBuilder进行扫描匹配和位姿优化。系统采用分层处理架构,确保数据有序性和实时性

2025-09-28 16:13:05 1059

原创 Cartographer源码-概率栅格地图

本文主要介绍了Cartographer中2D概率栅格子图的构建过程,涉及LocalTrajectoryBuilder2D、ActiveSubmaps2D、Submap2D、ProbabilityGrid等核心类。通过扫描匹配后的点云数据被插入到两个活跃子图中,每个子图使用ProbabilityGrid存储栅格地图,并基于射线投射模型更新命中点和自由空间的概率值。文章详细分析了栅格地图的数据结构、坐标转换、概率更新机制以及地图扩容裁剪等关键实现细节。整个系统采用分层设计,通过智能指针管理地图对象。

2025-09-26 22:29:51 801

原创 Cartographer源码-位姿推测器pose_extrapolator

本文分析了Cartographer中位姿推测器(PoseExtrapolator)的实现细节。PoseExtrapolator通过融合IMU、里程计和扫描匹配数据来预测机器人位姿,主要包括: 核心组件: IMUTracker:基于IMU数据跟踪姿态和重力方向 数据队列:维护位姿、IMU和里程计的历史数据 速度估计:通过位姿变化和里程计计算线/角速度 关键流程: 数据添加:处理IMU、里程计和扫描匹配位姿 位姿预测:结合速度估计和IMU数据外推未来位姿 数据修剪:维护有效时间窗口内的数据 实现特点: 多传感器

2025-09-09 21:38:17 782

原创 Cartographer源码-扫描匹配前的点云预处理

本文分析了Cartographer中激光点云预处理的关键步骤,主要包括时间同步、去畸变和滤波处理。首先通过RangeDataCollator实现多雷达数据的时间同步;然后利用位姿推测器获取每个点采集时刻的位姿,将点云从tracking_frame转换到local_frame坐标系完成去畸变;接着通过体素滤波和自适应体素滤波减少数据量,其中自适应体素滤波会根据点云密度动态调整体素大小;最后将处理后的点云用于扫描匹配。这些预处理步骤确保了点云数据的准确性和高效性,为后续的定位和建图提供了可靠输入。

2025-09-02 21:58:35 1208

原创 Cartographer源码-从ordered_multi_queue的数据分发到GlobalTrajectoryBuilder::AddSensorData()

本文分析了Cartographer中从ordered_multi_queue的数据分发到GlobalTrajectoryBuilder::AddSensorData()流程:1) OrderedMultiQueue按时间顺序分发数据;2) 数据通过CollatedTrajectoryBuilder传递给GlobalTrajectoryBuilder;3) GlobalTrajectoryBuilder作为SLAM核心,连接前端(LocalTrajectoryBuilder)和后端(PoseGraph)

2025-09-02 13:37:28 863

原创 Cartographer中的gflag与lua文件

本文介绍了Google开源的命令行参数处理库gflags及其在Cartographer项目中的应用。gflags支持多种参数类型(bool、int、string等),通过DEFINE宏定义参数,FLAGS_name访问参数值。Cartographer通过gflags解析launch文件传入的Lua配置文件路径和名称,使用LuaParameterDictionary类读取配置内容并转换为NodeOptions和TrajectoryOptions结构体。Lua配置采用模块化设计,支持include机制和参数重写

2025-08-31 14:42:59 993

原创 catkin使用

本文介绍了ROS中创建自定义话题消息的完整流程。首先创建工作空间catkin_ws和功能包test_pkg,然后在msg目录下创建Person.msg定义消息类型。需要修改package.xml添加依赖,并在CMakeLists.txt中配置编译选项。最后给出了C++和Python两种语言的消息发布实现示例,包括初始化节点、创建发布者、填充消息内容和发布消息的过程。

2025-08-07 09:24:52 354

原创 github上传代码

【代码】github上传代码。

2025-07-19 11:36:08 340

原创 ros1命令

【代码】ros命令。

2025-07-09 13:25:03 376

原创 conda操作

【代码】conda操作。

2025-07-09 13:15:06 143

原创 蓝桥杯嵌入式 特殊操作

1.LCD反向显示 2.LCD一行中指定字符使用其他颜色显示 3.修改PWM的频率和占空比 4.单timer双通道测量PWM频率 5.单adc双通道测量

2025-06-11 21:55:30 385

原创 CT117E-M4 串口通信

本文介绍了基于STM32G431RBT6与DAP Link调试器的串口通信实现过程,主要用于接收串口数据并在LCD界面上显示。首先,通过CubeMX将PA10配置为USART1_RX、PA9配置为USART1_TX,并设置串口为异步通信、波特率为9600bps,同时启用中断。随后,在中断回调函数 HAL_UART_RxCpltCallback 中实现逐字节接收,并在 UART_proc() 函数中检测数据接收是否完成。若数据长度为22字节,则用 sscanf 解析成车类型、车牌号和时间信息;若长度错误,则通

2025-03-25 21:29:59 840

原创 CT117E-M4 IIC通信-EEPROM读写

1.原理图 2.CubeMX配置 3.代码编写 3.1 向EEPROM写入数据 3.2  从EEPROM读取数据 4.测试

2025-03-25 17:24:35 674

原创 CT117E-M4 模数转换ADC测量

上篇内容为,本篇笔记记录模数转换ADC。整个系列每篇笔记中的CubeMX配置、MDK-ARM配置以及代码编写,均在前一篇笔记的基础上进行,功能有关联代码会进行微调。

2025-03-25 14:44:16 354

原创 CT117E-M4 PWM信号输出

1.PWM信号输出 1.1 CubeMX配置 1.2 代码编写 2.PWM频率测量 2.1 CubeMX配置 2.2 代码编写 3.占空比测量

2025-03-25 12:48:35 1078

原创 CT117E-M4 按键短按长按

上篇内容为,本篇内容实现按键短按长按。整个系列每篇笔记中的CubeMX配置、MDK-ARM配置以及代码编写,均在前一篇笔记的基础上进行,功能有关联代码会进行微调。

2025-03-15 16:09:34 768

原创 CT117E-M4 LCD屏显示

上篇内容为LED显示,本篇内容实现LCD屏显示。整个系列每篇笔记中的CubeMX配置、MDK-ARM配置以及代码编写,均在前一篇笔记的基础上进行,功能有关联代码会进行微调。

2025-03-14 20:59:33 334

原创 CT117E-M4 LED点亮

上篇内容为CubeMX与MDK-ARM基础配置,本篇内容实现LED点亮。

2025-03-11 13:32:28 1054

原创 CT117E-M4 CubeMX与Keil5 MDK-ARM基础配置

1.CubeMX构建项目 2.芯片时钟配置2.1 芯片引脚配置 2.2 时钟树配置 3.调试接口配置 4.项目管理器Project Manager配置4.1 project4.2 Code Generator 5. 生成代码 6.MDK_ARM配置 6.1 编译器选择​ 6.2  调试器配置 7. 创建本地代码文件夹 8. #include 路径设置

2025-03-10 21:13:01 1103

原创 面向对象考试

一、面向对象二、三大特性三、类间关系1.继承(泛化)2.实现3.依赖4.关联5.聚合6.组合四、设计原则(1)单一职责原则(SRP)(2)开放-封闭原则(OCP)3. 里氏替换原则(LS)五、面向对象分析设计

2024-11-21 11:07:10 1178

原创 TCP/IP网络体系结构总结整理

物理层、数据链路层、将IP数据报封装成帧或拆帧、IP地址解析为MAC地址、完成相邻机器间的寻址与数据传输、差错控制、介质访问控制、网络层、对传输层传递的数据报进行分组的组装与拆分、路由选择、路由转发、拥塞控制、传输层、解决进程在主机中通信地址标识的问题、UDP、TCP、连接实质、面向字节流的通信、差错控制、流量控制、连接管理

2023-05-19 19:40:50 2362

原创 C/C++函数调用时参数传递过程、调用约定与可变参函数的实现

参数传递过程、参数压栈顺序从右至左的影响、调用约定、__cdecl C/C++ 缺省调用方式、 __stdcall 、 __fastcall (快速调用约定,通过寄存器来传送参数)、C++的函数名修饰方式、thiscall 本身调用、C语言可变参函数的实现、可变参函数需要使用__cdecl调用约定的原因

2023-05-14 15:10:50 2201

原创 在x86-64系统上的函数调用过程(参考)

传递控制权、传递数据、分配和释放内存、运行时栈的动作与转移控制、数据传送、参数传递、需要使用栈传递参数的情况、函数返回值传递

2023-05-12 19:45:37 1396 1

原创 Linux进程通信之消息队列

Linux进程通信、消息队列、消息队列与管道的区别、函数接口:msgget创建消息队列、msgsnd将消息添加到消息队列、msgrcv从消息队列中读取一条消息、msgclt控制消息队列

2023-04-02 20:50:39 941

原创 Linux进程通信之共享内存

共享内存、共享内存接口函数、sys/shm.h、shmget、shmat、shmdt、shmctl、信号量控制访问同步

2023-04-01 00:38:48 311

原创 C++类型推导 auto、decltype

类型推导、auto占位符、auto推导的要求、当定义为指针或引用时,auto的推导结果将保持初始化表达式的cv属性(const,volatile)、auto作为函数的形参类型、decltype

2023-03-26 22:54:21 616

原创 Linux进程通信之信号量 控制进程同步

信号量、信号量接口函数、semget函数、semctl函数、semop函数、ipcs 可以查看消息队列、共享内存、信号量的使用情况,使用 ipcrm 可以进行删除操作。

2023-03-26 01:15:44 1007

原创 Linux信号的使用

信号、常见信号值、修改对信号的响应方式、signal()、kill()、实现kill命令

2023-03-25 19:57:10 520

原创 C++ 名字空间(namespace)

作用域、全局域、局部域、块域、类域、名字空间域、::作用域解析符、名字空间::变量名/函数名、using namespace

2023-03-21 16:41:12 167

转载 new与malloc的10点区别

new与malloc的10点区别:1. 申请的内存所在位置、2.返回类型安全性、3.内存分配失败时的返回值、4.是否需要指定内存大小、5.是否调用构造函数/析构函数、6.对数组的处理、7.new与malloc是否可以相互调用、8.是否可以被重载、9. 能够直观地重新分配内存、10. 客户处理内存分配不足

2023-02-14 12:39:39 2351

原创 C++ 缺省参数、函数重载、名字粉碎与调用约定

缺省参数、定义 、函数调用、缺省参数值的得到方法(表达式、函数调用等)、缺省参数可以有多个、缺省参数不能重复指定值、函数重载、函数重载的概念、函数重载解析的步骤、函数重载与缺省参数、函数重载与const、指针、引用相结合、、名字粉碎(名字修饰)与调用约定、_stdcall调用约定、_cdecl调用约定、_fastcall调用约定、C++编译时函数名修饰约定规则、C++可以函数重载,而C语言不能重载的原因、extern关键字

2023-02-11 20:35:14 373

原创 C++ inline函数

inline内联函数、函数调用时系统的动作、inline与宏定义的区别、inline不建议函数声明与定义分离

2023-02-11 13:01:43 174

原创 C++ 引用&(左值引用)

引用的定义、引用的特点、引用作为形参代替指针、const与引用、const int&、int& const、&与数组、&与指针、引用与指针的差别、不可以对函数中的局部变量或对象以引用、指针的方式返回、&实质:int &p = a; int *const p = a、分析效率 函数形参:变量、指针、引用

2023-02-08 00:13:10 695

原创 C++同一初始化、输入输出、const

C++统一初始化、int a{10}、输入输出、cin、cout、>>、

2023-02-03 22:30:54 412

原创 进程通信之管道通信

进程通信、管道通信、半双工、mkfifo、FIFO、有名管道、无名管道

2022-12-29 17:07:15 1386

原创 进程替换exec系列函数

进程替换,不是创建一个新进程,而是并且,进程替换是与进程复制配合进行的。在进程复制时,我们根据fork()的返回值对父子进程进行区分,使其进行不同操作。在使用进程替换后,我们就可以使新进程更加直接的执行我们想要做的操作。进程复制时,父子进程代码相同,父子进程要进行的操作在同一份代码中,根据逻辑判断才进行区分。对于父进程来说,子进程要执行操作的代码就是冗余的。使用进程替换,我们就可以将想要执行的新操作封装在一个新程序中,在原进程中只用调用进程替换函数,替换为新进程执行就可以了。

2022-12-29 09:30:00 541

【概率论与数理统计】概率公式详解及其在SLAM中的应用:条件贝叶斯公式优化机器人状态估计概率

内容概要:本文详细介绍了概率论中的重要公式及其逻辑意义,包括独立性、条件独立性、全概率公式、条件概率公式、贝叶斯公式及其条件扩展。文中解释了这些公式的成立背景及应用场景,特别是它们在概率论基础理论和实际应用(如贝叶斯估计、SLAM概率建模)中的重要作用。特别强调了条件贝叶斯公式在SLAM(同步定位与地图构建)中的应用,通过具体实例展示了如何利用观测数据和先验信息更新机器人状态的认知,实现对机器人位姿和地图的精准估计。 适合人群:具备一定数学基础,对概率论和统计学感兴趣的读者,尤其是从事机器人技术、自动驾驶、人工智能等领域研发的专业人士。 使用场景及目标:①帮助读者深入理解概率公式背后的逻辑与实际意义;②为从事SLAM研究的技术人员提供理论支持,特别是在状态估计和地图构建方面;③指导如何在实际应用中简化贝叶斯公式的计算,提高计算效率。 其他说明:本文不仅提供了公式的推导过程,还结合实际案例进行了解释,使读者能够更好地掌握和应用这些概率论基础知识。此外,文章还探讨了在某些情况下省略归一化因子的原因,进一步简化了实际应用中的计算流程。

2025-07-21

空空如也

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

TA关注的人

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