- 博客(104)
- 收藏
- 关注
原创 SLAM实战避坑指南——C++ 对象生命周期:从内存布局到析构顺序的完整指南
时间 ──────────────────────────────────────────────────────►① main() return (或 exit() 被调用)② atexit() 注册的处理函数执行││ 规则: LIFO (后注册先执行)│ 例: atexit(A);atexit(B);atexit(C);│ 执行顺序: C → B → A││ ✅ 此时堆还是健康的!适合做最后的清理工作│③ __cxa_finalize() 开始。
2026-06-02 19:00:00
437
原创 Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
收益维度具体表现系统可用性断电/SD 老化后自动恢复,无需人工干预运维成本减少现场排查和手动修复数据库的工作量数据安全损坏的数据库自动带时间戳备份(),保留事后分析的可能性代码质量Open()接口保持原始状态不变,降低回归风险架构清晰预检查逻辑独立为静态方法,职责单一,易于测试。
2026-05-28 22:30:00
530
原创 SLAM实战避坑笔记:基础矩阵退化场景分析与解决方案
没有万能阈值:2像素阈值是ORB-SLAM针对地面场景的优化,不是普适真理关注t/d比值:这是判断几何约束强弱的最物理指标弱几何 → 放宽阈值 + 视差检查:比坚持严格约束更有效平面场景用单应:高空俯视、地面机器人面对墙面等场景多模型融合鲁棒:同时考虑F/H,取质量更高的匹配可视化验证必要:极线图、匹配点对、三角化结果的可视化是调试关键。
2026-05-26 20:00:00
416
原创 SLAM实战避坑指南:对极几何与极点极线推导——吃透零空间与对极约束
极点 (e):另一个相机光心在当前图像上的投影。极线 (l):空间点所在的射线投影在图像上形成的直线。
2026-05-22 19:34:38
389
原创 SLAM实战避坑指南:OpenCV对极几何API全解析——别再搞反F矩阵的方向了
统一约定:始终使用计算F21F_{21}F21参数对应whichImage参数与输入点来源一致极点验证:计算后务必验证极点位置是否正确代码模板:使用本文提供的完整调用模板,避免低级错误物理直觉:时刻记住e1e_1e1是相机2在图像1上的投影,e2e_2e2是相机1在图像2上的投影对极几何是视觉SLAM、三维重建等领域的基石,理解 OpenCV 的实现细节能让你在后续开发中少走很多弯路。希望这篇指南能帮你彻底搞懂对极几何中的那些"坑"!对极几何与极点极线推导梳理。
2026-05-22 17:18:22
353
原创 COLMAP GUI模块架构深度解析
COLMAP (Structure-from-Motion and Multi-View Stereo) 是目前最优秀的开源 3D 重建工具之一,其 GUI 模块设计精巧、层次清晰。本文将从五个维度,完整剖析其架构设计与实现思想。后续准备以此为基础,开发适用于实时SLAM的可视化调试界面,以便实时、快速定位问题,优化SLAM性能。
2026-05-21 17:38:29
415
原创 【SLAM性能评估笔记】定制Vo性能评估工具理论推导
真值位姿:Pgtipgtiqgti∈SE3Pgtipgtiqgti∈SE3i1Ni1N估计位姿:Pestipestiqesti∈SE3Pestipestiqesti∈SE3i1Ni1N其中p∈R3p∈R3是平移,q\mathbf{q}q是四元数表示的旋转。RPE 衡量的是局部相对运动的准确性,对漂移更敏感。
2026-05-15 07:30:00
367
原创 【SLAM性能评估笔记】公开的Vo性能评估工具调研与局限性分析
评估指标t_error(平均平移误差百分比):t_error = (1/N) Σ ||trans(T_gt[i]^(-1) · T_est[i])||_2 / length_i × 100%r_error(平均旋转误差):r_error = (1/N) Σ angle(T_gt[i]^(-1) · T_est[i]) (deg/m)核心特点使用SE(3)刚体对齐(无尺度因子),因为KITTI的GT来自GPS/IMU/激光,有真实尺度。
2026-05-14 17:00:00
383
原创 【SLAM性能评估笔记】ATE/RPE对Vo精度评估的意义是什么?如何根据评估结果,对Vo进行诊断与针对性优化?
文章摘要 视觉里程计(VO)精度评估的核心在于ATE(绝对轨迹误差)和RPE(相对位姿误差)的合理应用。
2026-05-13 18:00:00
800
原创 20251204_线程安全问题及STL数据结构的存储规则
近日在工作中遇到多线程之间访问临界资源,引发数据竞争,导致程序崩溃的问题。主要是发生了哈希表rehasing导致桶索引更新,导致索引失效而崩溃。带着这些疑问,寻找到了答案,在此记录。
2025-12-04 21:20:23
746
原创 数据结构学习笔记(六)——排序
算法的稳定性: 若待排序表中有两个元素RiR_iRi和RjR_jRj,其对应的关键字keyi=keyjkey_i=key_jkeyi=keyj,且在排序前RiR_iRi在RjR_jRj前面,若使用某一排序算法排序后,RiR_iRi仍然在RjR_jRj的前面,则称这个排序算法是稳定的。否则称排序算法是不稳定的。在排序过程中,根据数据元素是否完全在内存中,可将排序算法分为两类:内部排序和外部排序。内部排序,是指在排序期间元素全部存放在内存中的排序;外部排序,是指在排序期间元素无法全部同时存放在
2022-07-04 10:41:00
401
原创 数据结构学习笔记(五)——查找
B树,又称多路平衡查找树,B树种所有结点的孩子结点数的最大值称为B数的阶,通常用m表示。一棵m阶B数或为空树,或为满足如下特性的m叉树: 树中每个结点至多有m棵子树(即至多有m-1个关键字); 若根结点不是终端结点,则至少由两棵子树。 除根结点外的所有非叶结点至少有[m/2](向上取整)棵子树(即至少含有[m/2]-1(向上取整)个关键字) …… ……...
2022-07-04 10:13:33
381
原创 数据结构学习笔记(四)——图
顶点集V和边集E对于任一有向图,如果他的邻接矩阵中对角线以下(或以上)的元素均为零,则存在拓扑序列(但可能不唯一) 。求解最短路径的算法通常都依赖于一种性质,即两点之间的最短路径也包含了路径上其他顶点间的最短路径。带权有向图G的最短路径问题一般可分为两类:一是单源最短路径,即求图中某一顶点到其他各顶点的最短路径,可通过经典的Dijkstra算法求解;而是求每对顶点间的最短路径,可通过Floyd-Warshall算法来求解。Dijkstra算法求单源最短路径问题Floyd算法求各顶点之间最短路径问题.....
2022-07-04 10:10:58
428
原创 数据结构学习笔记(三)——树与二叉树
树 森林 二叉树先根遍历 先序遍历 先序遍历后根遍历 中序遍历 中序遍历并查集是一种简单的集合表示,它支持一下3个操作:1. 平衡二叉树的定义为避免树的高度增长过快,降低二叉排序树的性能,我们规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度差的绝对值不超过1,这样的二叉树称为平衡二叉树,简称平衡树(AVL)。2. 平衡二叉树的插入二叉排序树保证平衡的基本思想如下:每当在二叉排序树栈中插入(删除)一个结点时,首先检查其插入路径上的结点是否因为此次操作而导致了不平衡。若导致了不平衡,则先找
2022-07-04 10:07:04
424
原创 数据结构学习笔记(零)——绪论
线性结构:非线性结构:数据的运算包括运算的定义和实现。算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。一个算法具有5个重要特性:
2022-07-04 09:41:27
251
原创 嵌入式开发—交叉编译OpenCV
编译平台:Ubuntu18.04 x86平台目标平台:ZYNQ-7100 Ubuntu20 ARM交叉编译工具:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu. 下载地址:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/
2022-04-04 23:44:22
5136
原创 计算机操作系统学习笔记(三)——内存管理
一、内存管理的概念1. 内存的基础知识什么是内存,有何作用存储单元、内存地址的概念和联系按字节编址vs按字编址进程运行的基本原理指令的工作原理操作码+若干参数(可能包含地址参数)逻辑地址vs物理地址从写程序到程序运行编辑源代码文件编译由源代码文件生成目标模块(高级语言“翻译”为机器语言)链接由目标模块生成装入模块,链接后形成完整的逻辑地址装入将装入模块装入内存,装入后形成物理地址三种装入方式绝对装入编译时产生绝对地址静态重定位(又称可重定位装入)装入时将逻辑地
2022-03-08 20:41:43
2131
原创 计算机操作系统学习笔记(二)——进程管理
一、进程与线程1. 进程的概念、组成与特征1.1 进程的概念程序是静态的,就是个存放在磁盘里的可执行文件,就是一系列的指令集合。进程是动态的,是程序的一次执行过程进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。1.2 进程实体的组成进程控制块(PCB)操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的的信息,都会被放在PCB中。进程描述信息进程标识符PID用户标识符UID进程控制和管理信息CPU、磁盘、网络流量使用情况统计……进程当前状态:
2022-03-07 23:43:40
2583
原创 计算机操作系统学习笔记(一)——计算机操作系统概述
一、操作系统的基本概念操作系统是指控制和管理整个计算机系统的软硬件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。二、操作系统的功能和目标1. 操作系统作为系统资源的管理者提供的功能处理机管理存储器管理文件管理设备管理目标安全、高效2. 向上层提供方便易用的服务封装思想:操作系统把一些丑陋的硬件功能封装成简单易用的服务,使用户能更方便地使用计算机,用户无需关系底层硬件的原理,只需要对操作系统发出命令即可
2022-03-07 21:01:17
821
原创 C++学习笔记(三)——面向过程编程的C++之内存模型和命名空间
一、存储持续性概述在第一篇中我们讨论了C++的内存方案,即存储类别如何影响信息在文件间的共享。C++使用三种(在C++11中是四种)不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间。自动存储持续性。在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。C++有两种存储持续性为自动的变量。静态存储持续性。在函数定义外定义的变量和使用关键字static定义的变量的存储持续性都为静态。它们在
2022-02-23 23:08:08
857
原创 C++学习笔记(二)——面向过程编程的C++之函数
一. 函数1 函数参数1.1 参数传递基础C++通常按值传递参数用于接收传递值得变量被称为形参;传递给函数的值被称为实参。处于简化的目的,C++标准使用参数(argument)来表示实参,使用参量(parameter)来表示形参,因此参数传递将参数赋给参量。1.2 数组作为函数参数基本的函数声明如下:int sum_arr(int arr[], int n); // arr 数组名 n 数组长度 arr其实是一个指针C++和C语言一样,也将数组名视为指针。上一篇介绍过,C++将数组
2022-02-23 17:24:23
709
原创 计算机网络学习笔记(六)——应用层
一、应用层协议应用层协议主要定义一下几个事情:应用进程交换的报文类型,请求还是响应?各种报文类型的语法,如报文中的各个字段及其详细描述字段的语义,即包含在字段中的信息的含义进程何时、如何发送报文,以及对报文进行响应的规则。二、应用层的功能文件传输、访问和管理电子邮件虚拟终端查询服务和远程作业登录三、重要协议FTPSMTP、POP3HTTPDNS四、网络应用模型4.1 C/S模型服务器提供计算服务的设备。永久提供服务永久性访问地址/域名客户机请求计
2022-02-01 16:39:27
500
原创 计算机网络学习笔记(五)——传输层
一、传输层的功能传输层提供进程和进程之间的逻辑通信。复用与分用复用指发送方不同的进程都可以使用同一个传输层的协议进行数据传输。分用指接收方的传输层接收到报文后能把数据送交给正确的进程。传输层对收到的报文进行差错检测传输层的两种协议:面向连接的传输控制协议TCP传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。特点: 可靠、面向连接、时延大、适用于大文件。
2022-02-01 16:17:49
2343
原创 计算机网络学习笔记(四)——网络层
一、主要任务与功能网络层的主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。 网络层传输单位是数据报。功能1:路由选择与转发 (最佳路径)功能2:异构网络互联功能3:拥塞控制若所有结点都来不及接收分组,而要丢弃大量分组的话,网络就处于拥塞状态。因此要采取一定措施,缓解这种拥塞。两种方式:开环控制静态闭环控制动态二、IP数据报格式需要强调的几个字段:首部长度单位是4B,最小为5总长度首部+数据的长度,单位是1B标识同一数据报的
2022-02-01 15:09:39
3734
原创 计算机网络学习笔记(三)——数据链路层
一、概述和功能数据链路层负责通过一个链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。1. 数据链路层功能概述数据链路层在物体层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。功能一: 为网络层提供服务。无确认无连接服务有确认无连接服务有确认有连接服务(有连接一定有确认!)功能二
2022-02-01 12:49:28
2526
原创 计算机网络学习笔记(二)——物理层
一、基本概念物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体物理层主要任务:确定与传输媒体接口有关的一些特性——定义标准机械特性定义物理连接的特性,规定物理连接时所采用的的规格、接口形状、引线数目、引脚数量和排列情况电气特性规定传输二进制位时,线路上信号的电压范围、阻抗匹配、传输速率和距离限制等。功能特性指明某条线上出现的某一电平表示何种意义,接口部件的信号线的用途。规程特性(过程特性) 定义各条物理线路的工作规程和时序关系。二、数据通信基础知识1
2022-02-01 12:04:24
5158
原创 计算机网络学习笔记(一)——计算机网络概述
一、概念计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。二、组成计算机网络的组成部分包括硬件、软件、协议。从工作方式上,分为边缘部分与核心部分。边缘部分是用户直接使用 ,包括C/S方式和P2P方式;核心部分为边缘部分服务。从功能组成上,分为通信子网和资源子网。通信子网主要负责实现数据通信,由各种传输介质、通信设备以及相应的网络协议组成。在七层网络模型中,主要是物理层、数据链路层、网络层这下三层;资源子网主要
2022-02-01 11:33:41
4729
2
原创 计算机网络学习笔记(零)——总体知识梳理
在这一专栏,我将整理计算机网络的重要知识点。首先对计算机网络中的各种性能指标、分层体系等进行概述。然后依次从物理层、数据链路层、网络层、传输层、应用层自底向上地梳理。相信通过此次整理,能对计算机网络有一个系统性地认识。主要参考王道考研的计算机网络复习教材,日后还需逐步完善,将一些图片展示出来,以便更好地理解。本专栏知识结构如下:一、计算机网络概述1. 性能指标传输时延排队时延传播时延往返时延RTT等2. 分层体系OSI七层TCP/IP四层二、物理层通信基本概念香农、奎氏
2022-02-01 10:44:32
1409
原创 C++学习笔记(零)——C++重要知识梳理
本专栏对C++最基本的语法,比如数据类型、分支、循环、关系表达式、逻辑运算符等十分基础的知识不再加以整理总结,以后若是有需要,会再重点总结。本专栏旨在对C++中高阶技术进行梳理。按照C++语言的特性,我们的内容也分为三个部分。第一部分是针对C++的过程性编程相关的知识点,比如指针、数组、引用、函数、内存模型等,这一部分是C++的基础语法中比较复杂的部分,也是后面两部分内容的基础。第二部分是针对C++的面向对象编程相关的知识点,比如类的各种构造函数的特性、运算符重载、多态(静态联编、动态联编)、虚函数深入
2022-01-09 22:32:09
496
原创 概率论与数理统计知识框架梳理
概率论与数理统计分为两个部分:概率论(1-4章)和数理统计(5-6章)第一章 随机事件与概率古典概型求概率几何概型求概率重要公式求概率事件的独立性第二章 一维随机变量及其分布判分布求分布用分布求函数分布第三章 多维随机变量及其分布判分布求分布用分布求函数分布第四章 数字特征期望方差常用的期望、方差协方差与相关系数独立性与相关性的判定切比雪夫不等式第五章 大数定律与中心极限定理依概率收敛大数定律切比雪夫大数定律伯努利大数定律辛钦
2021-11-24 23:07:37
2984
原创 线性代数知识框架梳理
线性代数首先前两章介绍了两个基本的处理线性代数的工具:行列式和矩阵;随后,介绍了线性代数研究的主要内容:方程组和向量组;最后,介绍了线性代数的应用:相似理论和二次型。下面是线性代数的总体知识框架。第一章 行列式具体型行列式的计算抽象型行列式的计算余子式与代数余子式的计算第二章 矩阵求AnA^nAn关于A∗,A−1A^*, A^{-1}A∗,A−1与初等矩阵矩阵方程矩阵的秩第三章 线性方程组具体型方程组解含参数的线性方程组求解两个方程组的公共解与同解问题抽
2021-11-24 22:46:32
3070
原创 高等数学知识框架梳理
高等数学分为上下册。上册主要有:极限、一元微分学、一元积分学三部分,下册主要有多元微分学、多元积分学、无穷级数、微分方程等部分。第一章 极限1. 函数极限1.1 函数极限的定义及使用五大性质——是常数唯一性局部有界性局部保号性等式脱帽法1.2 函数极限的计算化简先行洛必达法则泰勒公式无穷小比阶1.3 函数极限的存在条件具体型——若洛必达失效,用夹逼准则抽象型——单调有界准则1.4 函数极限的应用——连续与间断研究位置连续间断2. 数列极限2.1
2021-11-24 22:33:27
9295
原创 开发环境搭建Python+PyTorch+Anaconda+Pycharm+CUDA
开发环境Python 3.7 + Anaconda 5.3.1CUDA 10.0Pycharm Community本次我们采用的Python版本是3.7,并且为了大家的方便以及目前主流的选择,我们会选择安装Anaconda这个Python的包管理工具,可以自动下载管理第三方软件库的工具。然后,我们会进行在装有NVIDIA显卡的电脑上安装NVIDIA的显卡驱动以及统一的并行计算语言库CUDA10.0,CUDA是NVIDIA推出来的,可以利用显卡进行通用计算的开发语言API,大家可以使用这个API
2021-06-14 14:11:11
1238
2
转载 slam入门——十四讲笔记(六)
文章目录第7讲 视觉里程计17.1 特征点法7.1.1 特征点7.1.2 ORB特征7.1.3 特征匹配7.2 实践:特征提取和匹配7.3 2D-2D:对极几何7.3.1 对极约束7.3.2 本质矩阵7.3.3 单应矩阵7.4 实践:对极约束求解相机运动7.4.1 讨论7.5 三角测量7.6 实践:三角测量7.6.1 三角测量代码7.6.2 讨论7.7 3D-2D:PnP7.7.1 直接线性变换7.7.2 P3P7.7.3 Bundle Adjustment7.8 实践:求解PnP7.8.1 使用EPnP求
2021-02-16 12:44:05
675
原创 slam入门——十四讲笔记(五)
文章目录第六讲 非线性优化6.1 状态估计问题6.1.1 最大后验与最大似然6.1.2 最小二乘的引出6.2 非线性最小二乘6.2.1 一阶和二阶梯度法6.2.2 Gauss-Newton6.2.3 Levenberg-Marquadt6.2.4 小结6.3 实践:Ceres6.3.1 Ceres简介6.3.2 安装Ceres6.3.3 使用Ceres拟合曲线6.4 实践:g2o6.4.1 图优化理论简介6.4.2 g2o的编译与安装6.4.3 使用g2o拟合曲线6.5 小结第六讲 非线性优化6.1 状
2021-02-15 12:03:51
1358
1
原创 slam入门——十四讲笔记(四)
文章目录第五讲 相机与图像5.1 相机模型5.1.1 针孔相机模型5.1.2 畸变5.1.3 双目相机模型5.1.4 RGB-D相机模型5.2 图像5.2.1 计算机中图像的表示5.3 实践:图像的存取与访问5.3.1 安装OpenCV5.3.2 操作OpenCV图像5.4 实践:拼接点云第五讲 相机与图像【本节目标】理解针孔相机模型、内参与径向畸变参数理解一个空间点是如何投影到相机成像平面的掌握OpenCV的图像存储与表达方式学会基本的摄像头标定方法5.1 相机模型5.1.1 针孔相机
2021-02-14 21:12:22
1014
原创 线性代数(一)——行列式
文章目录行列式行列式的定义与性质本质定义(第一种定义)性质逆序数法定义(第二种定义)行列式的展开定理(第三种定义)几个重要的行列式行列式的计算具体型抽象型余子式与代数余子式的计算行列式行列式的定义与性质本质定义(第一种定义)2阶行列式是由两个2维向量组成的,其(运算规则的)结果为以这两个向量为邻边的平行四边形的面积SOABC=l⋅m⋅sin(β−α)S_{OABC}=l \cdot m \cdot sin(\beta-\alpha)SOABC=l⋅m⋅sin(β−α)3阶行列式是由三个3维
2021-01-07 11:53:26
1219
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅