随笔分类 -  SLAM / 视觉SLAM十四讲

摘要:在学习g2o位姿图优化时,我曾被一行误差计算代码卡壳很久:`_error=(_measurement.inverse()*v1.inverse()*v2).log();`。看似简单的矩阵乘法,背后藏着SE3变换的核心逻辑——尤其是“SE3乘法不满足交换律”“A.inverse()*B表示从A到B的变 阅读全文
posted @ 2026-02-21 11:16 阳光天气 阅读(6) 评论(0) 推荐(0)
摘要:先明确 SE3 变换的本质 SE3 变换(记为T)描述的是 “从坐标系 A 到坐标系 B 的空间变换”,它包含两部分: 旋转:把 A 系的姿态转到 B 系的姿态; 平移:把 A 系的原点移到 B 系的原点。 数学上,SE3 可以表示为一个 4×4 的齐次变换矩阵,也可以用 “旋转矩阵 + 平移向量” 阅读全文
posted @ 2026-02-20 22:50 阳光天气 阅读(2) 评论(0) 推荐(0)
摘要:信息矩阵(Information Matrix)是 g2o 优化中用来表示 “观测数据可信度 / 权重” 的矩阵,本质是 “误差的协方差矩阵的逆”。 先搞懂 “协方差矩阵”(信息矩阵的 “前身”) 协方差矩阵(Σ)描述了 “观测误差的波动程度”: 数值越大 → 误差波动越大 → 观测数据越不可信; 阅读全文
posted @ 2026-02-19 20:11 阳光天气 阅读(3) 评论(0) 推荐(0)
摘要:1. 数学定义:向量 → 反对称矩阵 给定一个 3 维旋转向量 hat 算子把它变成一个 3×3 的反对称矩阵(skew-symmetric matrix): 特点: 对角线元素全为 0; 主对角线两侧元素互为相反数:Aij​=−Aji​; 因此满足 AT=−A,这是反对称矩阵的定义。 2. 物理意 阅读全文
posted @ 2026-02-18 12:41 阳光天气 阅读(6) 评论(0) 推荐(0)
摘要:李群(Lie Group)和李代数(Lie Algebra)是SLAM、机器人学等领域中表示旋转/位姿的核心概念。 李群是"连续的群"比如旋转矩阵群SO(3)、位姿矩阵群SE(3),描述的是“最终的变换结果”。 李代数是李群在单位元处的切空间,描述的是“变换的增量/速度”。 一、先搞懂“群”:李群的 阅读全文
posted @ 2026-02-10 11:44 阳光天气 阅读(16) 评论(0) 推荐(0)
摘要:mutable_points()返回的是double*类型,调试器只知道这是一个内存地址,不知道它指向的数组长度是多少。通过Eigen::Map指定长度为 3,调试器就知道要读取 3 个连续的 double 值,并以 3 维向量的形式展示,这样就直观了。 在调试器的对表达式求值窗口(Clion里右侧 阅读全文
posted @ 2026-02-06 16:50 阳光天气 阅读(3) 评论(0) 推荐(0)
摘要:tr_radius 是 Trust Region Radius 的缩写,直译是信赖域半径,是 Ceres信赖域(LM)算法的核心控制参数—— 它定义了算法每次迭代时,参数更新步长能探索的最大范围,简单说就是给参数更新画了一个「探索圈」,步长只能在这个圈子里试探,圈子的半径就是tr_radius。 结 阅读全文
posted @ 2026-02-06 14:09 阳光天气 阅读(3) 评论(0) 推荐(0)
摘要:tr_ratio 是 Trust Region Ratio 的缩写,直译是「信赖域比率」,是 Ceres 中信赖域(LM)算法判定步长是否有效的核心指标,本质是 **「实际代价下降量」和「预测代价下降量」的比值 **,用来判断本次迭代尝试的步长是否靠谱、是否能让优化更接近最优值,这个值的大小直接决定 阅读全文
posted @ 2026-02-06 13:35 阳光天气 阅读(5) 评论(0) 推荐(0)
摘要:meshlab只显示绿色的摄像机点,不显示正常3D点 解决思路:给ply中绿色的摄像机点和白色的普通点都加上坐标数值异常过滤 极大 / 极小的数值,这说明部分地图点的 3D 坐标是无效值(比如 NaN、inf 或者计算溢出的错误值),导致 MeshLab 显示出了异常的坐标刻度。 点击查看代码 vo 阅读全文
posted @ 2026-02-04 22:47 阳光天气 阅读(5) 评论(0) 推荐(0)
摘要:点击查看代码 // 计算相机中心:c = -R^T * t // 其中R是旋转矩阵(由角轴转换),t是平移向量 Eigen::VectorXd inverse_rotation = -angle_axis_ref; // 逆旋转(角轴取反) // 计算 R^T * t (通过角轴旋转点实现) Ang 阅读全文
posted @ 2026-01-29 10:22 阳光天气 阅读(1) 评论(0) 推荐(0)
摘要:点击查看代码 #include<iostream> using namespace std; int main() { //模拟BALProblem的核心逻辑:角轴数组->四元数数组 //1.初始化旧数组(角轴格式:假设1个相机,9维参数) int old_size = 9;//9*1个相机+0个点 阅读全文
posted @ 2026-01-26 10:12 阳光天气 阅读(4) 评论(0) 推荐(0)
摘要:核心差异:atan 是单参数、无象限区分、范围窄;atan2 是双参数、有象限区分、范围全,且无需提前做除法; 工程选择:SLAM / 机器人 / 图形学等需要精准计算角度的场景,优先用 atan2(y, x);atan 仅适用于已知角度在 [-90°, 90°] 的简单场景; 代码意义:atan2 阅读全文
posted @ 2026-01-24 21:32 阳光天气 阅读(11) 评论(0) 推荐(0)
摘要:一 Eigen::Map 核心概念回顾 先明确核心定位:Eigen::Map是Eigen库提供的内存映射工具, 能把一段连续的原始内存(C数组 malloc内存 缓冲区等)直接包装成Eigen的向量/矩阵对象, 无需拷贝数据,让Eigen的便捷接口操作原始内存。 目标Eigen类型:要映射成的类型( 阅读全文
posted @ 2026-01-20 10:32 阳光天气 阅读(16) 评论(0) 推荐(0)
摘要:![image](https://img2024.cnblogs.com/blog/3383332/202601/3383332-20260117223049475-515360681.png) ![image](https://img2024.cnblogs.com/blog/3383332/202601/3383332-20260117223145756-5395435.png) ![imag 阅读全文
posted @ 2026-01-17 22:35 阳光天气 阅读(2) 评论(0) 推荐(0)
摘要:咱们要的是「相机调一点点位置,像素颜色误差会变多少」(这是指导相机调整的核心依据),但这个关系没法直接算,所以拆成两步: 相机位置调整 → 像素坐标(u,v)变化 → 像素颜色(灰度)变化 → 颜色误差变化 J_pixel_xi:管第一步(相机调整 → 像素坐标变多少); J_img_pixel:管 阅读全文
posted @ 2026-01-12 10:05 阳光天气 阅读(4) 评论(0) 推荐(0)
摘要:关键代码解读 点击查看代码 if (inverse == false) { // 普通LK:每次迭代重置H和b(H随迭代变) H = Eigen::Matrix2d::Zero(); b = Eigen::Vector2d::Zero(); } else { // 逆公式LK:仅重置b,H只算一次( 阅读全文
posted @ 2026-01-09 10:01 阳光天气 阅读(4) 评论(0) 推荐(0)
摘要:点击查看代码 // 普通LK:J基于目标帧I2的梯度(因为J = -dI2/dx, -dI2/dy) // 梯度用中心差分近似:dI/dx = [I(x+1) - I(x-1)] / 2,dI/dy = [I(y+1) - I(y-1)] / 2 J = -1.0 * Eigen::Vector2d 阅读全文
posted @ 2026-01-08 11:35 阳光天气 阅读(4) 评论(0) 推荐(0)
摘要:海森矩阵(Hessian Matrix)的核心价值是描述目标函数的局部曲率,它包含了函数的二阶导数信息,这让优化算法能突破 “仅依赖梯度(一阶信息)” 的局限,实现更高效、更精准的寻优。在优化算法中,海森矩阵的应用主要集中在以下几个核心方向: 牛顿法与拟牛顿法:核心的搜索方向指导 牛顿法是二阶优化算 阅读全文
posted @ 2026-01-08 09:47 阳光天气 阅读(18) 评论(0) 推荐(0)
摘要:OpenCV 中 parallel_for_函数的具体用法,这个函数是OpenCV提供的并行化计算工具,能帮你高效低利用多核CPU加速循环类的计算任务。 一、parallel_for_ 核心概念 parallel_for_ 本质是OpenCV对多线程的封装,它会自动将一个大的循环任务拆分成多个子任务 阅读全文
posted @ 2026-01-07 11:46 阳光天气 阅读(33) 评论(0) 推荐(0)
摘要:一、GDB 是什么? GDB(GNU Debugger)是 Linux/macOS 下的命令行调试工具,核心作用是: 定位程序崩溃的具体代码行(如段错误、浮点异常); 实时查看 / 修改变量值、寄存器状态; 单步执行代码,逐步排查逻辑错误; 分析程序的函数调用栈(崩溃时的执行路径) GDB 是定位 阅读全文
posted @ 2026-01-01 21:01 阳光天气 阅读(11) 评论(0) 推荐(0)