- 博客(84)
- 收藏
- 关注
原创 Ubuntu 20.04 系统库管理详细教程
Ubuntu的库管理系统通过包管理器、环境变量、配置文件等多种机制协同工作。正确安装和使用第三方库解决编译和运行时的库依赖问题管理多版本库的共存创建可重现的开发环境每次安装软件需要设置环境变量的根本原因是Linux系统需要知道在哪里找到这些库和可执行文件,而环境变量就是告诉系统这些信息的标准方式。
2025-11-04 17:53:34
560
原创 VINS-Fusion代码解读-小白友好版
偏置补偿:递推过程中使用的加速度和角速度,都会减去当前估计的偏置值(acc - Bas[j]和 gyr - Bgs[j])。重力向量细化 (RefineGravity):初始求解时,重力向量被当作一个自由的3维向量来估计,这可能会引入误差,因为其模长应是固定的(约9.8 m/s²)。坐标系转换:加速度测量值会从IMU本体坐标系转换到世界坐标系(通常是第一帧的IMU坐标系)再进行积分。重力处理:在世界坐标系下积分速度时,需要加上重力加速度 g。
2025-10-25 18:08:55
596
原创 ros命令
打开图形化界面后,你可以在上方下拉菜单中选择 /cam0/image_raw、/cam1/image_raw 等话题;如果是图像话题 /cam0/image_raw,直接 echo 输出的数据会非常多,不建议这样做。要查看系统中有哪些正在发布的话题(topics),可以用以下几个命令 👇。适合检查相机是否发布图像、是否同步、画面是否正常。哪个节点发布 /cam0/image_raw。六、查看话题的消息结构(定义)三、实时查看某个话题的数据流。二、查看某个话题的数据类型。五、查看某个话题的发布频率。
2025-10-22 15:37:16
276
原创 一个旋转计算
VINS-Fusion中IMU用的是惯导坐标系:前x,右y,下z,重力向量G{0.0, 0.0, 9.8},相机使用的坐标系是,右x,下y,前z公司同事标定好的数据,将坐标系统一为相机坐标系,鄙人觉得这不甚优雅,所以要给他算回来,顺手记录一下运算过程。
2025-10-17 17:31:52
202
原创 Slam重定位(一)
摘要 重定位是SLAM系统在跟踪失败或漂移过大时恢复位姿的关键技术。当跟踪特征点不足(如VINS-Fusion中<30点)或光流残差过大(>3px)时触发。主要方法包括:基于特征的PnP匹配(ORB-SLAM)和点云配准(LiDAR-SLAM),通过重投影误差、匹配数量和一致性等指标评估定位质量。系统需维持特征点数量(约150个)并处理视野变化导致的特征丢失。重定位成功后通过图优化融合位姿,当结果不一致时优先选择误差小、置信度高的解。
2025-10-17 14:34:52
886
原创 VINS-Fuson+ROS1-noetic 仿真
本文介绍了ROS noetic和VINS-Fusion的完整安装配置流程。首先详细说明了ROS noetic的安装步骤,包括添加软件源、安装依赖、设置环境变量等,并通过小乌龟示例验证安装。然后详细指导了VINS-Fusion的编译过程,包括安装依赖库、修改源代码适配ROS noetic、编译及运行测试。重点说明了需要修改的5处代码内容,特别是OpenCV版本兼容性和C++标准调整。最后提供了运行数据集的命令,可通过RViz可视化验证安装结果。整个过程涵盖了从基础环境搭建到SLAM系统部署的完整流程。
2025-10-14 20:35:06
847
原创 自适应滑动窗口优化
在非线性优化的后端(Bundle Adjustment / 非线性最小二乘),为了保证计算可实时,不能无限保留所有历史关键帧和观测。在 processImage() 里,当新关键帧加入时,不再直接判断 frame_count == WINDOW_SIZE,每次边缘化后,会形成先验因子。如果发现先验信息过弱(如协方差过大,估计不稳定),则延缓边缘化,扩大窗口。窗口扩展:新关键帧加入窗口时,如果运动大/观测少,可以暂时允许窗口超过固定大小。如果先验信息较强(信息矩阵数值大),则可以大胆边缘化,缩小窗口。
2025-09-29 14:47:33
640
原创 梯度下降法、牛顿法、GN、LM,推导、优缺点
在实际应用中,LM算法因其卓越的稳健性和效率,通常是解决中小规模非线性最小二乘问题(如计算机视觉中的Bundle Adjustment、曲线拟合)的首选方法。牛顿法 (Newton) 二阶近似,使用完整Hessian 收敛速度极快(二阶) 计算存储开销巨大,需H正定 中小规模、Hessian易求的问题。梯度下降 (GD) 一阶近似,沿负梯度方向 实现简单,内存开销小 收敛慢,对步长敏感 大规模问题,深度学习。,在梯度下降和高斯-牛顿法之间自适应平滑切换,解决了 GN 法的不稳定问题。
2025-09-15 13:22:52
738
原创 左值引用与右值引用
省去了搬运的体力活!noexcept关键字向标准库承诺这个操作不会抛出异常,这很重要,因为标准库容器(如std::vector)在重新分配内存时会优先使用noexcept的移动操作而不是拷贝操作来转移元素,性能更高。“通常”这个词的含义:在现代编译器中,对于这种简单的返回局部对象的场景,RVO优化非常强大且几乎总是会发生(尤其是在Release模式下)。没有优化(C++03时代):你得先在A城找个仓库(函数栈帧)放家具,然后雇辆卡车,把家具一件件搬上卡车(拷贝),运到B城后,再一件件卸下来放到新家。
2025-09-09 22:15:14
687
原创 SLAM处理流程
IMU误差项的整合方式:在紧耦合优化中,IMU预积分误差并非在BA之后计算并用作修正,而是作为BA优化目标函数中的一个组成部分(约束项),与重投影误差同时被最小化。BA的规模:“对pnp获取到的位姿和3D点进行矫正”更准确地说是局部BA,它优化一个窗口内的帧和点。优化变量:通常是一个滑动窗口内的多个关键帧的位姿以及这些关键帧观测到的所有地图点。闭环约束:一旦检测到回环,会计算当前帧与回环关键帧之间的相对位姿约束。
2025-09-05 12:40:21
470
原创 算法面试题(上)
设计这个窗口就在于,把新得到的 f(n) 加进窗口,把最旧的 f(n−m) 移出窗口,计算窗口内m个f值的和,我们可以用循环数组或者双端队列实现。比如计算 f(5) 需要算 f(4) 和 f(3),而计算 f(4) 又需要算 f(3) 和 f(2)。DP是“自底向上”:我们从已知的 f(0)=1 开始,一步一步、从小到大地计算出所有台阶的方法数,直到算出我们想要的 f(n)。, f[i-m])。按 x 排序:(1,5), (2,3), (4,7), (5,4), (7,2), (8,1), (9,6)
2025-09-01 15:14:15
947
原创 yolov1-yolov11进化史
neck:YOLOv2 没有 FPN,但使用了一个轻量级特征融合模块:将中间层(如 26×26×512)的特征映射通过 reshape(空间压缩 + 通道扩展)连接到最终层(13×13)。Head(预测模块):在三个尺度(13×13, 26×26, 52×52)分别进行检测,并预测 bounding box、objectness、class 置信度。yolov3之后就不是yolo原作者了,v4没有什么原创的设计,但是做了相当多的对比实验,把很多当时有效果的模块或是创新都用上了。
2025-07-28 20:27:55
908
原创 yolo位置损失中的权重项的作用是什么
在YOLO(尤其是YOLOv1到YOLOv3)的目标检测损失函数中,位置损失(Localization Loss)的权重项(通常记为λcoord是一个关键的超参数,用于平衡不同损失分量(位置、置信度、分类)之间的贡献比例。
2025-07-17 17:44:42
321
原创 【图像成像原理】
RAW 图像是图像传感器(CMOS 或 CCD)直接输出的原始数据,它记录了每个像素点接收到的光强信息,通常是未经过任何颜色处理、降噪、锐化、白平衡等的“原始像素值”。通过聚焦光线,将物理世界的图像投影到图像传感器(CCD 或 CMOS)上,形成数字图像。CMOS(互补金属氧化物半导体)和 CCD(电荷耦合器件)是两种主流的图像传感器技术。镜头系统(多个透镜)将外部场景的光线聚焦到图像传感器(CMOS/CCD)上。每个像素只记录一个颜色(由前端 CFA (颜色滤光阵列)决定)。
2025-07-16 16:40:46
792
原创 虚拟项目[3D物体测量]
学了很久的SLAM,决定做一个最简单的虚拟项目(假装我有个项目),3D物体测量,只需要用到最基础的立体匹配,重投影,ICP就可以。假设两个双目相机固定在物体的俯视位置和平视位置,背景为黑色幕布(后续无需分割)以下是gpt给我的方案,由于立体匹配一般摄像头厂家出厂就自带了(能输出深度信息),我们只需要求得两个摄像头之间的旋转与平移就能将两个局部点云转换到同一个世界坐标系,但是为了学习,我们还是看一下立体匹配和视差图计算部分。
2025-07-10 15:50:29
755
原创 论文阅读-单目视觉惯性系统时间标定(二)
误差对优化状态(如姿态、速度、位置、偏置)求导,得到雅可比矩阵J。我们主要关心偏置对预积分变量的影响(因为偏置通常在滑窗中参与优化):为什么不是expΔ𝑅⋅𝐽⋅𝛿𝑏𝑔?𝑅−1𝑅⊤𝑅^{−1}=𝑅^⊤R−1R⊤协方差:误差不确定性的量化 预积分的误差是随机过程积分后累积的,即: IMU 本身存在高频噪声。bias 也在缓慢随机漂移。通过误差状态模型(通常是线性化的随机过程模型),可以推导出误差协方差P。
2025-06-21 00:59:01
1114
1
原创 论文阅读-单目视觉惯性系统时间标定
本文提出了一种在线标定视觉-惯性系统中相机与 IMU 之间时间偏移的方法。该方法将时间偏移视作一个待估参数,联合优化相机状态、IMU 状态与特征点位置,以实现高精度的时间同步。该方法具备以下优势:通用性强,可嵌入多种基于优化的 VIO 框架中;无需额外标定图案,如棋盘格即可在线运行,适合实际部署;实验显示,其标定精度与 Kalibr 等离线工具相当,甚至在稳定性和实时性方面更具优势;在 EuRoC 与实际场景测试中表现出优异的鲁棒性与轨迹精度。
2025-06-14 17:13:33
1183
1
原创 从零开始学SLAM-Lidar+相机标定
采集图像+点云帧]↓[图像识别棋盘 → PnP → 得到 (o_c, n_c)]↓[点云提取平面 → RANSAC → 得到 (o_l, n_l)]↓[构造误差模型,优化 R 和 t]↓[验证结果 → 投影对齐 → 保存标定外参]这里给一个参考视频,是一个博主拿他采集的数据使用Matlab进行标定的操作视频。
2025-05-28 00:36:49
1182
原创 ios系统安装miniforge+vscode+pcl+opencv
Homebrew 最初是由 Max Howell 在 2009 年开发的。当时 macOS 系统缺乏一个像 Linux 上的 apt-get 或 yum 那样的包管理工具,用户在安装软件时往往需要手动下载、编译和配置,过程繁琐且容易出错。Homebrew 的出现填补了这一空白,它借鉴了 Linux 上的包管理理念,并针对 macOS 系统进行了优化。$(curl-fsSLbrew install+‘‘要安装的包’’
2025-05-26 11:39:51
1023
原创 ORB特征点检测算法
角点是图像中灰度变化在两个方向上都比较剧烈的点。与边缘(只有一个方向变化剧烈)或平坦区域(灰度变化很小)不同,角点具有方向性和稳定性。tips:像素梯度计算。
2025-05-12 22:03:24
1279
原创 SIFT特征点检测
为了寻找DoG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小,在高斯差分金字塔中寻找极值点,除了考虑x,y方向的点,还要考虑σ(尺度) 方向的点,所以判断一个像素点是否为极值点,要与周围的26个点(一组有六个层的话就生成五个差分图像,在中间三层中寻找极值点,9*2+8=26)进行比较,找到极值点。每个组包含一系列逐渐平滑的图像,每个层对应于不同的尺度。搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻近的原图像特征点。
2025-04-30 15:11:51
870
原创 从零开始学习SLAM|技术路线
PnP (Perspective-n-Point):根据已知的3D点和其在图像中的投影,估计相机的旋转和位移,进而求得相机的 位姿(位置与朝向)。前端除了执行视觉里程计(估计相机相对运动)外,还会进行一些其他任务,例如:特征提取与匹配、位姿估计(通过方法如PNP等)、局部地图构建(局部优化),滑动窗口优化等。局部一致性:前端会维持一个 滑动窗口,随着新帧的加入,窗口中只保留当前的几帧,这样能够在局部范围内进行优化,使得前端的估计更加精确。局部优化:根据前端估计的相机位姿,进行局部地图的更新。
2025-04-24 18:04:55
1088
原创 从零开始学习SLAM | 用四元数插值来对齐IMU和图像帧
笔记来自IMU(Inertial Measurement Unit,惯性测量单元)是一种惯性传感器模块,用于测量物体的运动状态,包括加速度、角速度和(部分情况下)磁场强度。IMU的工作原理基于惯性原理,通过测量加速度和角速度,可以推断物体的运动状态,包括位置、速度和姿态。IMU广泛应用于导航系统、无人机、机器人、虚拟现实设备等领域。
2025-04-14 20:11:40
620
原创 从零开始学习Slam|ICP原理与应用
ICP全称Iterative Closest Point,翻译过来就是迭代最近点。ICP在点云配准(registration)领域应用的非常广泛.
2025-04-02 21:17:02
1066
原创 G2o顶点与边编程总结
G2o的顶点与边属于 HyperGraph 抽象类的继承OptimizableGraph 的继承。BaseVertex<D,T> D是预测点的维度(在流形空间的最小表示)T是待估计vertex的数据类型,比如用四元数表达三维旋转的话,T就是Quaternion 类型。
2025-03-14 18:07:28
536
原创 G2o顶点编程
它将优化问题建模为一个图,图中的节点表示优化变量(顶点),边表示变量之间的约束关系(误差项)。表示3D点与相机之间的投影关系,每条边连接一个3D点顶点和一个相机位姿顶点,表示该3D点在相机成像平面上的投影观测。边的优化目标是最小化观测值(图像上的2D点)与 根据当前估计的相机位姿和3D点投影得到的2D点之间的误差。给定一组世界坐标系下的3D点(p3d.txt)以及它在相机中对应的坐标(p2d.txt),以及相机的内参矩阵。边的优化就是最小化 实际得到的相机位姿与根据3D点投影得到2D坐标的误差。
2025-03-12 20:15:57
425
原创 从零开始学习Slam--数学概念
最直观的理解就是,给定群中的任意两个元素,它们经过群操作后得到的结果仍然是这个群的一个合法元素,而且这个操作需满足一系列的代数性质。具体来说,李括号运算是一个从李代数的两个元素到李代数的映射,记作 ([X, Y]),其中 (X) 和 (Y) 是李代数中的元素。具体到李代数与李群之间的关系,李代数可以被看作李群在单位元(即李群的恒等元素)的切空间,李括号反映了李群上流形局部的非交换性,即群操作在局部上的非交换性质。旋转矩阵属于特殊的正交群,即SO(n),这里n通常是3,所以SO(3)就是三维旋转矩阵的群。
2025-03-04 20:24:18
1167
原创 从点云到网格--从零开始学习Slam
本文是学习笔记,原文来自点云通常是三维的,包含大量无序的点。网格生成的目标是将这些点连接成三角面片或四边形面片,形成连续的表面。点云网格化就是用点云生成网格,最后得到的是一个连续(相对于前面的离散点)的表面。如果再加上纹理贴图,就能得到和真实物体一样的三维模型了。
2025-02-21 18:02:37
1475
2
原创 一些问题解释
一. 全连接层的作用全连接层(Fully Connected Layer,简称 FC 层)是神经网络中常见的一种层,主要用于将上一层的输出转换为目标输出。其主要作用如下:特征提取与组合全连接层通过权重矩阵对输入的特征进行线性变换,同时添加偏置项,再经过激活函数的非线性变换。这一过程可以将上层提取的特征重新组合,以捕获更加抽象或全局的信息。特征映射到目标空间全连接层的输出维度通常与具体任务相关:在分类任务中,全连接层的输出维度通常等于类别数,表示每个类别的得分或概率。
2025-01-06 16:51:21
757
原创 点云融合代码学习
例如,如果深度图的单位是毫米,而你的计算需要以米为单位表示深度值,那么 camera.scale 的值可能是 1000。深度图中的像素值(如d)可能需要乘以一个比例因子(即camera.scale)才能得到真实的深度值。深度图是深度传感器或深度相机生成的二维图像,其中每个像素的值表示相机到场景中对应点的距离。相机内参用于从空间点(X, Y, Z)投影到图像平面上的像素坐标(u, v)一般由焦距,主点坐标,缩放因子,与附加内参(径向畸变,切向畸变)等构成。函数中有下面的代码,作用是由图像坐标映射到空间坐标。
2024-12-16 20:32:43
1296
原创 ncnn-预备知识
NCNN 对 AVX 的支持NCNN 是一个高效的神经网络推理框架,主要针对移动端优化,但也支持桌面平台(x86 架构)。在桌面平台上,NCNN 会利用 CPU 的 SIMD 指令集(包括 AVX 和 AVX2)进行加速。如果 CPU 支持 AVX 或 AVX2,NCNN 会在编译时和运行时自动启用相关优化,从而提升计算性能。NCNN_AVX=ON: 启用 AVX 优化。如果 CPU 支持 AVX2,编译时会自动利用 AVX2 指令集。确保编译环境中启用了支持。
2024-12-03 14:31:01
698
1
原创 hello,点云
亲爱的观众朋友们大家好,这里是爱说标准c语言的老嫂子。。。公司的项目终于快做完了,我又可以学自己的东西了( •̀ ω •́ )y~。今天把plc库下载并安装了,准备正式入门到放弃三维。
2024-11-15 18:29:06
936
原创 点云基础知识储备(复习)
一个点的齐次坐标可以表示为(x,y,1),这种表示方法具备以下特征具有标量乘法不变性:点(x,y,z)与(kx, ky, kz)实际上表示的是同一个点矩阵表示的便利性:在齐次坐标中,变换一个点可以通过乘以一个变换矩阵来完成表示直线:直线ax+by+c = 0可以表示为齐次坐标中的点(a,b,0),这种表示方式允许我们将点和直线统一在一个框架内,并且可以轻松地转换为其他坐标系统。
2024-11-11 16:42:00
1105
原创 遇到0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突/无可用源【已解决】
例如,只要填充 1 字节即可让 data按 4 字节对齐,所以编译器智能地只插入了 1 个字节的填充,而不增加多余的填充。编译器智能地识别这一需求,计算出插入 1 字节就可以满足对齐要求,而无需插入多余的填充字节(不需要 3 个字节),因为这会浪费空间。在这个示例中,DefaultAlign 结构体的大小为 8 字节,而不是 7 字节,因为编译器在 uint8_t a 和 uint32_t b 之间添加了 3 个填充字节。这个指令结束了之前的对齐设置,恢复为默认的对齐方式。
2024-10-30 15:31:19
1547
2
原创 cv::Mat 成员函数
可以通过 CV_MAT_DEPTH() 和 CV_MAT_CN() 宏来分别获取图像深度和通道数。访问矩阵中 (x, y) 位置的像素值,T 是像素的类型。例如,如果是 8 位的灰度图像,可以使用 img.at(y, x) 来访问指定位置的像素值。elemSize() 返回每个像素的字节大小,等于 channels() * elemSize1()。elemSize1() 返回每个通道的元素大小,以字节为单位,即每个像素在某个通道中占用的字节数。分别代表图像的列数(宽度)和行数(高度),即图像的宽和高。
2024-10-16 11:29:32
464
原创 Yolov5 部分参数解释
2024年,ONNX的最新opset版本通常在17至20之间, 每个opset版本都引入了新的操作或改进现有操作的支持,具体使用的版本取决于你使用的框架和工具链是否支持最新的opset。推理时的原地处理:当你在使用导出的模型进行推理时(通常在 detect.py 或类似文件中),如果在推理过程中使用了 --inplace 参数,这意味着输入图像可以被直接修改。Pad (opset 11):在较早的opset版本中,Pad操作只能使用固定的填充尺寸,后来版本引入了对动态填充的支持。
2024-10-16 09:51:54
888
原创 使用c#制作一个小型桌面程序
创建.NET Framework新项目,将之前生成的dll放在Demo文件夹的bin ->debug或是 release中(看你自己用的什么模式),创建完成后 系统会自动生成一些文件,其中 pch.cpp 先不要修改,pch.h中先导入自己需要用到的库,下面是我的代码。布局完了之后会自动生成Form1.Designer.cs 的窗口设计代码,点击控件按F4 还可以修改他们的属性。完成之后点击生成 就可以在bin中出现的你的.exe文件咯,是不是很简单呀~[狗头]我们还需要一个入口主程序。
2024-09-14 17:02:52
5152
原创 c++多态、数据抽象、数据封装(一)
可以看到上面的代码中 通过虚函数实现了动态链接的操作,虚函数是在基类中使用关键字 virtual 声明的函数。您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。数据封装是指将对象的属性(数据)和方法(操作)绑定在一起,对外隐藏对象的内部状态,只允许通过对象的方法来访问和修改内部数据。有了多态,您可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。
2024-09-09 16:38:06
500
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅