- 博客(50)
- 收藏
- 关注

原创 C++ 常见知识积累
是一种可以指向函数的指针变量,允许你将函数作为参数传递、存储、动态调用等。它在回调机制、策略模式、动态调度等场景中非常常见。(inline 函数对象)的机制,写法简洁、灵活,非常适合用于临时函数逻辑、回调、STL 算法等场景。的用法在现代 C++ 中。
2025-05-21 16:30:59
186
原创 点云&图像描述子总结
应用目标推荐描述子点云配准(局部)FPFHSHOTRoPS配准 + 实时性FPFHFPFHColor点云识别VFHCVFHESF特征学习 + 匹配3DMatchD3FeatPPFNet强鲁棒 + 表达性SHOT(适合多种情况)图像描述子应用场景推荐描述子实时SLAM / 移动设备ORBBRISK精度要求高 / 离线配准SIFTSURFAKAZE极端光照/低纹理 / 多视角SuperPointD2-NetHardNet图像检索/重定位NetVLADDELF嵌入式/轻量级设备BRIEFORB。
2025-05-26 17:30:41
944
原创 Python修饰器
Python装饰器是一种强大的元编程工具,它能够:在不修改原函数代码的情况下扩展功能保持代码干净和可复用实现横切关注点(如日志、权限等)的集中管理通过组合装饰器创建复杂行为理解装饰器是掌握Python高级编程的重要一步,它广泛应用于Web框架(如Flask、Django)、测试框架和各种库中。
2025-05-25 21:16:38
400
原创 C++ STL6大组件
STL提供了一些常用的仿函数在// 算术仿函数// 加法// 8// 比较仿函数// 降序排序// 逻辑仿函数// false// 自定义仿函数// nums 变为 {1, 4, 9, 16}
2025-05-24 23:54:42
319
原创 C++单例模式详解
C++中的单例模式实现需要考虑线程安全、生命周期管理、可测试性等多方面因素。在C++11及以上版本中,推荐使用局部静态变量的实现方式,它简洁、安全且高效。对于更复杂的需求,可以考虑模板化单例或依赖注入等高级技术。
2025-05-23 19:33:43
720
原创 C++ 设计模式
设计模式是在软件工程中常见的问题的解决方案,它们是经过多年实践和总结出来的一套标准化的方法。创建型模式主要关注对象的创建过程,它们提供了创建对象的机制,增加了程序的灵活性和可重用性。行为型模式专注于算法和对象间职责的分配,它们定义了对象间的通信模式。:允许创建一个复杂对象的步骤一步步进行,而不同的构建者可以产生不同的结果。:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。:给定一个语言,定义它的文法的一种表示,并定义一个解释器。:提供一个统一的接口,用来访问子系统中的一群接口。
2025-05-23 14:49:57
992
原创 C++线程池的使用
线程池(Thread Pool)是一种多线程处理形式,它预先创建一组线程并保存在"池"中,当有任务到来时,从池中取出一个线程来执行任务,任务执行完毕后线程返回池中等待下一个任务,而不是销毁线程。:当某个线程的任务队列为空时,可以从其他线程的任务队列尾部"窃取"任务执行。:通过重复利用已创建的线程,减少线程创建和销毁的开销。:任务到达时可以直接使用已有线程,无需等待线程创建。:负责创建、销毁线程,管理线程生命周期。:每个线程维护自己的任务队列,减少竞争。:固定线程数,简单任务队列。任务被封装并放入任务队列。
2025-05-23 14:34:15
603
原创 激光雷达与相机标定外参数学原理
可以提取棋盘格的2D角点,通过相机内参求得棋盘格在相机坐标系下的3D姿态。:可以提取棋盘格对应的点云平面,获取该平面在雷达坐标系下的位置。因此可以基于多个姿态下的棋盘格,通过。
2025-05-21 11:34:57
185
原创 深度学习中常见损失函数&激活函数
损失函数损失函数:分类用交叉熵,回归用MSE/MAE。:类别不平衡时选择Focal Loss或Dice Loss。:异常值多时选用Huber Loss。:GAN需配合对抗损失,检测任务需IoU-aware损失(如DFL)。激活函数。
2025-05-19 15:42:30
290
原创 C++ 中的主要内存存储区
空间大,适合大对象或不确定生命周期的对象。:内存的高地址向低地址方向增长。:内存的低地址向高地址方向增长。存取速度快(在栈帧中连续分配)段:已初始化的全局/静态变量。段:未初始化的全局/静态变量。存储空间较小(通常几 MB)(多个程序共用同一个代码段)函数的返回地址、临时变量。,写入会导致程序崩溃。:由编译器自动完成。生命周期受作用域限制。容易内存泄漏或野指针。:从程序开始到结束。
2025-05-19 14:04:24
324
原创 卡尔曼滤波及变种 KF EKF ESKF的区别跟用法
简单高效适合线性系统不适用于复杂动态或非线性状态空间非线性系统可用,但要线性化有线性化误差(尤其是强非线性时)在SLAM、VIO(视觉惯性)中常用项目KFEKFESKF系统模型线性非线性,线性化整体非线性,线性化误差状态处理对象状态状态误差状态 + 主状态精度稳定性高(线性系统)一般(强非线性会误差大)更高(误差小量线性化,稳定)姿态处理不适用需要线性化旋转适合旋转(使用李群、四元数等误差表达)应用场景简单线性系统VIO, SLAM 中常用。
2025-05-16 10:51:13
325
原创 LeeCode刷题笔记
编程语言基础课 | 代码随想录LeetCode 热题 100 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台CSONCodeTop 面试题目总结
2025-05-15 09:25:22
131
原创 LIO-SAM框架理解
步骤名称作用使用的库1接收关键帧数据获取初估位姿/预积分ROS2构建因子图表示各类约束GTSAM3添加IMU因子提供连续运动约束IMU预积分4添加Lidar因子当前帧scan-to-map匹配结果前端输出5添加回环因子闭环检测6优化得到最优轨迹与地图iSAM27发布地图与轨迹给其他模块使用ROS 发布器。
2025-05-14 14:13:11
788
原创 SLAM论文——简析Cartographer
每日浅读SLAM论文——简析Cartographer_cartographer slam-CSDN博客
2025-05-13 15:02:51
177
原创 高斯牛顿法 梯度下降法 LM算法的区别
高斯-牛顿法(Gauss-Newton)、梯度下降法(Gradient Descent)和LM算法(Levenberg-Marquardt)都是用于最小化目标函数的优化算法,特别常用于非线性最小二乘问题中。它们之间的在于对目标函数的处理方式和每一步的迭代策略。下面是它们的。
2025-05-07 15:49:52
357
原创 ORB-SLAM3和VINS-MONO的对比
两者初始化过程的差异反映了其设计哲学:ORB-SLAM3以视觉为主导,IMU为辅助;ORB-SLAM3和VINS-Mono是两种基于不同理论框架的视觉SLAM系统,它们的初始化过程在目标、方法和对传感器数据的处理上存在显著差异。在滑动窗口内预积分IMU数据,计算帧间相对运动(旋转、速度、位置变化)。视觉匹配 → 三角化 → BA优化 →(若IMU)→ 视觉-惯性对齐。使用8点法或5点法计算帧间位姿,三角化特征点,构建局部地图。:将视觉和IMU的约束联合优化,初始化所有状态量。
2025-05-07 15:45:25
456
原创 DDS(数据分发服务)原理详解
Domain(域)通信的基本隔离单元,不同域的参与者无法直接通信通过Domain ID区分(通常为0-232范围内的整数)DomainParticipant(域参与者)应用程序接入DDS网络的入口点每个参与者可以包含多个发布者和订阅者Topic(主题)数据分类的基本单位,由名称和数据类型定义例如:"TemperatureSensorData"主题可能包含温度值和时间戳Publisher(发布者)/Subscriber(订阅者)发布者负责发送数据,订阅者接收感兴趣的数据支持一对多、多对多的通信模式。
2025-04-28 15:11:26
1229
原创 git clone 报错 SOCKS4 connection to ::1 not supported
fatal: 无法访问 'https://github.com/tanghaijian1992/yolov8_deploymethods.git/':SOCKS4 connection to ::1 not supported。最近使用github不知道为什么,git clone 的时候突然就报错了,之前是没问题的。正克隆到 'yolov8_deploymethods'...这个127.0.0.1:1080 是我电脑对应的端口号。改完之后git clone可以正常拉取。考虑可能是vpn端口的问题。
2025-04-23 14:07:57
150
原创 amcl蒙特卡洛算法
AMCL(Adaptive Monte Carlo Localization)是机器人领域中基于蒙特卡洛方法的自适应定位算法,用于机器人在已知地图中的位姿估计。其核心是(Particle Filter),通过一组随机采样的粒子(即假设的机器人位姿)逼近机器人真实位置的概率分布。
2025-04-21 11:51:03
600
原创 yolov8的rk3568量化部署
如果做量化,又要考虑到模型的有效性问题,因为量化后类别的输出和回归检测框的输出同时做归一化,一个范围是0-1,一个范围是0-640,必然导致类别的输出基本全部为0,导致量化模型没法用。下面会给出我按照该7种方法针对rk3568做部署的代码,我这里onnx的推理和生成rknn的方法和他的一致,不一样的是C++部署部分。他那里直接给出了官方模型调整后的onnx文件,如果想要使用自己的模型,onnx网络结构的修改可以参考我之前的文章。我主要参考的是我前同事的博客,他这里写的非常清楚。
2025-04-17 11:37:21
308
原创 手动修改onnx模型网络结构--onnx modifier
之前的做法一直是直接在源码ultralytics里面对模型的网络结构部分的代码就行修改,然后在推理那里增加一个保存onnx的操作,执行一遍推理,虽然推理会崩溃,但是可以顺利保存我们想要的onnx文件。4.启动脚本,并在浏览器上输入127.0.0.1:5000,即可访问onnx-modifier的界面,然后就可以打开onnx文件并做操作了。2.然后需要把onnx-modifier的源码下载下来 https://github.com/ZhangGe6/onnx-modifier。
2025-04-17 11:26:28
370
原创 C++ 智能指针
类型拥有权数量支持拷贝?自动释放引用计数循环引用问题unique_ptr1❌✅❌❌shared_ptr多✅✅✅⚠️(可能)weak_ptr0(观察者)✅❌❌❌。
2025-04-08 14:21:18
404
原创 C++ 原子变量与线程锁
一个“原子”操作就是:要么全部执行完,要么根本不执行,中间不会被其他线程打断。这就像存钱的时候,你一次性把钱塞进账户,中间不可能别人跑进来插队。
2025-04-08 11:50:43
376
原创 C++ 线程锁总结
多锁一定要统一加锁顺序或使用。推荐使用。如果需要灵活控制锁生命周期,用defer_lock。避免手动 lock 多个 mutex,极易出错。💡 死锁在运行中不是必然发生,而是取决于线程调度的时机和顺序。锁类型可重入支持超时支持共享读自动解锁推荐使用方式std::mutex❌❌❌❌lock_guard✅❌❌❌特殊场景使用❌✅❌❌超时控制场景❌❌✅❌多读少写lock_guard❌❌❌✅简单自动管理锁❌✅❌✅灵活控制锁。
2025-04-08 11:41:58
682
原创 对比yolov5的C3,yolov8的C2f,yolov11的C3k2
C3模块基于CSPNet(Cross Stage Partial Network)思想,由三个卷积层构成,分为两条分支:一条通过多个Bottleneck模块堆叠,另一条直接进行卷积操作,最终将两条分支的特征图拼接后输出。引入轻量化设计,如将第一个卷积的核大小从1x1改为3x3,恢复类似ResNet的Bottleneck结构。:在COCO数据集上,YOLOv11的模型参数比YOLOv8减少22%,同时保持更高的mAP。:通过动态结构和注意力机制,更适合复杂场景的高精度需求,但实现复杂度较高。
2025-03-28 14:51:04
1320
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人