自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 vio-视觉与IMU融合实现里程计(第六章)——视觉前端

算法耗时越多,效果越好. ORB使用的是带有描述子的特征点法(直接法比特征点法效果好),直接法可以利用特征点选取的多少来决定耗时的长短进而决定追踪效果的好怀.如果不插入关键帧,则会导致路标点深度信息一直不变,引起退化,插入关键帧后使用BA(光束法平差)将重投影误差进行平摊,使得后端对路标点的定位更加鲁棒.使用光流法对特征点或角点进行追踪时很容易丢失,而使用直接法进行追踪时曝光可能会受影响.放射变换包含了选中的该方块的旋转和平移。

2022-10-26 13:58:04 504 1

原创 vio-视觉与IMU融合实现里程计(第五章)——后端有化实践:逐行手写求解器

后端有化实践:逐行手写求解器

2022-10-25 14:22:46 365

原创 vio-视觉与IMU融合实现里程计(第四章)作业——基于滑动窗口算法的VIO系统:可观性和一致性

2.信息矩阵和协方差矩阵的逆之间的关系如下:3.

2022-10-24 20:19:41 332

原创 vio-视觉与IMU融合实现里程计(第三章)作业——基于优化的IMU和视觉信息融合

比较的结果是比方法三用时少(在第二个作业的基础上做修改)3.其他的阻尼更新策略。

2022-10-24 20:18:18 174

原创 多传感器融合——第二章 点云地图构建及基于地图的定位

Iq图对应的是一个二维的东西,我们需要将每一个列进行合并,此时进行Iq和Ic进行匹配的时候,只需要比较对应的数值,同时维度也降低了,对信息将维,会失去准确性,此时我们就需要在切割点的周围寻找更合适的切割点,又需要在切割后的小范围内进行高纬度的切割,进而达到减少计算量的同时提高准确性。下图是车在同一位置,但是在不同的朝向上得到的地图,由纯旋转导致的,为了提高相似度,我们需要对第一个图进行切割,但是切割的位置如何确定?RTK/组合导航的作用是为了消除重影。匹配的策略:线或者面。

2022-10-19 19:47:32 869

原创 多传感器融合——第一章 3D激光里程计

计算帧间匹配关系:上一步我们计算了残差,但是它并未与位姿中的旋转平移产生关系。而我们优化的目的就是通过残差和位姿之间的联系,用残差对位姿求偏导,然后用得到的梯度对位姿进行调整。机械雷达:通过机械旋转将雷达的一排激光束通过重复性扫描来进行物体的定位,同时由于是通过机械运动进行旋转的,所以寿命也会随着旋转的次数而损耗。这部分局部代码是LOAM中不知道这个激光点是哪根线发射是按线数进行分割的代码,即激光的发射线段与水平方向有一定的夹角。固态雷达:扫描的角度通常在30 ~60度之间,并且是一种非重复性扫描。

2022-10-18 16:31:46 247

原创 深蓝激光slam理论与实践-第九节笔记(基于已知位姿的构图算法)

语义地图的优点:通过语义标点可以极大的排除outliner,也可以极大的提高机器人定位的鲁棒性。t时刻的mi(地图估计) 等与t-1时刻的mi + t时刻的激光雷达逆观测模型。红色的线:激光通过,说明所有的栅格都是空闲,都是同时满足,所以如下式一所式。语义地图:加标签的尺度地图,slam的未来,是slam与深度学习的结合。蓝色箭头所指的地方:有一处被即中,则该处是占用,前面通过的是空闲。拓扑地图:两点是否连通,但是不管连通的路径如何。栅格地图,特征地图,点云地图:尺度地图(距离对应世界距离)

2022-09-21 12:48:24 161

原创 深蓝激光slam理论与实践-第八节笔记((基于图优化的激光slam方法)

基于图优化的激光slam方法

2022-09-20 17:10:19 186

原创 深蓝激光slam理论与实践-第五节笔记(基于滤波器的激光slam方法(Grid-based))

粒子耗散:粒子多样性的丧失,在建图中是致命的,而粒子多样性的丧失是由重采样造成的,重采样是有一定的概率的,假设每个粒子的权重都相同,然后一直进行重采样,每次重采样都有粒子会被丢掉,粒子会被复制,当采样趋于很大的时候,所有的粒子都由同一个粒子复制而来,重采样的过程是复制好粒子,丢掉差粒子,粒子数不变。用i个粒子进行状态传播,然后通过观测来评估每个粒子的权重,最后通过重采样进行机器人位值概率的校正,即粒子的重新分布(去除低权重的粒子,高权重的地方多撒些粒子)。目的:让粒子的分布更符合我们的后验分布。

2022-09-20 15:11:52 405

原创 深蓝激光slam理论与实践-第四节笔记(激光slam的前端配准方法)

PL-ICP的原理:激光的离散导致激光前后两帧打到的不是同一物理实体,或是同一个实体的不同部位,总之它们在空间中对应的不是同一个点,然后通过匹配算法PP-ICP强行对准相邻的任意点,那么自然会引入误差(点与点进行了匹配),PL-ICP发现这个问题后,通过点与该点相邻两点的连线进行匹配,即pj1与piw线段(向量)到pj1与pj2法向量上的投影。

2022-09-19 17:46:56 185

原创 深蓝激光slam理论与实践-第三节笔记(激光雷达运动畸变去除)

运动畸变的来源:每一个激光点都有不同的基准位姿,但是我们处理的时候认为所有的激光点都是同一基准位姿,帧率很高的时候可以认为是同一位姿,2ms的段时间内机器人运动很小可以忽略,但当激光帧率很低时,就不能这样认为了。位姿通过线性插值获取,在这K个位姿之间,再进行线性插值,第一个插值表示在里程计队列的数据间进行插值,使得激光点ts有对应的位姿,第二个插值指在得到的两个位姿间进行插值为每一个激光点分配位姿。使用高斯核对环境进行高斯模糊后,机器人微小的位姿变化不会造成期望值发生突变,使其能进行优化还能找到次优解。

2022-09-14 18:12:56 509

原创 深蓝激光slam理论与实践-第一节笔记

图优化:有节点和边,用图来表示机器人slam的整个过程,优化指机器人在构建图的过程中积累的误差我们通过非线性最小二乘的方式来优化这个建图过程中累积的误差,最终得到一个一致性的地图。在线标定:实时标定轮子的直径,例如服务形机器人载重时,会使轮子发生形变,为了提高标定的精度,需要对机器人进行实时的标定。尺度地图:gamp建立的地图是尺度地图,尺度不是真实的,实现方式分为两种:基于贝叶斯的和基于图优化的。前端:构图的构成,节点表示机器人的位姿,边表示机器人的空间约束关系(机器人的相对位置关系)。

2022-09-07 15:07:37 553

原创 vio-视觉与IMU融合实现里程计(第二章)——作业

1, 设置IMU仿真代码中的不同的参数,生成Allen方差标定曲线。课后习题中给出的代码中非ros的代码是用来处理第2题,显示离散时间下指定轨迹的角速度和加速度数据仿真,而ros的代码是用来生成静态的imu数据,用于allan方差标定曲线的,可以使用的工具有:imu_utils和kalibr_allan两种。对于ROS:专门生成静止IMU数据,用于allan方差标定1.1 使用imu_utils完成allan标定步骤ros下编译执行,生成imu.bagrosbag play -r 500 ..

2022-06-06 12:55:59 480

原创 vio-视觉与IMU融合实现里程计(第四章)——基于滑动窗口算法的VIO系统:可观性和一致性

第一节:从高斯分布到信息矩阵SLAM为什么使用最小二乘?本讲来看它的由来。∑−1\sum^{-1}∑−1放到EKF中相当于噪声矩阵Q,R,表示每次观测的有多准。第二节:舒尔补应用:边际概率,条件概率第三节:滑动窗口算法:图优化基础,基于边际概率的滑动窗口算法...

2022-05-25 17:17:19 404

原创 vio-视觉与IMU融合实现里程计(第三章)——基于优化的IMU和视觉信息融合

基于Bundle Adjustment的VIO融合通过调整q,p,使得预测值与观测值的平方误差或带权重的平方误差最小。∑\sum∑范数是调节各个误差分量的权重的矩阵_BA问题相机坐标系和IMU(body)坐标系之间可能有一个相对外参(R,t),图像采集的频率是30HZ,IMU采集到的频率是200HZ,使得相邻两张图像之间有多个IMU数据,需要通过预积分的方式,将两个相邻相机间多个IMU数据当作一个IMU来处理2.最小二乘的求解J代表梯度,Jd<0,最速下降法d的方向取J梯度的反方向..

2022-05-14 16:15:27 1198

原创 OpenCV中的图像直方图(22)

直方图在进行物体图像和视频信息分析的过程中,我们通常习惯与将看到的物体用直方图表示出来,得到比较直观的图像物体数据。直方图可以用不同的参数和事物来表示如物体的色彩分布,物体的边缘梯度模板,以及表示目标位置的当前假设的概率分布.1.1 图像直方图简单的说,直方图就是对数据进行统计的方法,并将统计值放到一系列事先定义好的bin(直条或组距)当中,直方图对应的数值就是从图像数据中计算出的特征统计量,这些特征可以是梯度,方向,色彩或任何其他特征.我们要讲的直方图是用以表示数学图像中亮度分布的直方图,绘制了图

2022-05-08 13:07:39 1196

原创 vio-视觉与IMU融合实现里程计(第二章)—— IMU传感器

注意:补充的部分用到了旋转矩阵的伴随性质。狄拉克函数,只有t1和t2相等时,函数值为1,其他时刻都为0.通常S阵是个单位阵。

2022-05-06 20:56:21 494

原创 OpenCV中的反向投影(21)

1 反向投影如果一幅图像的区域中显示的是一种结构纹理或者一个独特的物体,那么这个区域的置方图可以看作一个概率函数,其表现形式是某个像素属于该纹理或物体的概率。反向投影:是一种记录给定图像中的像素点如何适应直方图模型像素分布方式的一种方法。简单的讲,就是计算某一特征的直方图模型,然后使用模型去寻找图像中存在的该特征的方法。1.1 反向投影的工作原理使用模型直方图来检测测试图像中的区域,检测步骤:(1)对测试图像中的每个像素(p(i, j)),获取色调数据并找到该色调(hi,j,si,j)(h_{i,

2022-05-05 21:58:21 663

原创 vio-视觉与IMU融合实现里程计(第一章)——作业

1 视觉与IMU进行融合之后有何优势?IMU的缺点:加速计和陀螺仪均会受到零偏的影响,导致长时间积分后位姿会发生较大的漂移。相机的缺点:易受周围环境的影响,如弱纹理环境,光照明显的环境,多动态物体的环境,还会受到运动模糊的影响。相机和IMU是互补的关系,融合后会有以下优点: - 融合IMU可以恢复尺度,解决了单目尺度不确定的问题。 - 融合IMU可以提供一个较为准确的初始估计,防止非线性优化问题陷入局部最优解。 - 融合IMU可以解决单目纯旋转无法估计的问题,同时也可以在一定程度上解决图.

2022-05-05 18:57:48 1585

原创 vio-视觉与IMU融合实现里程计(第一章)—— vio概述和预备知识

VIO 概述我们之前学过的slam十四讲中相邻相机位姿的估计是由图像(视觉)来估计的,为了更好的进行里程计的状态估计引入互补的IMU单元(惯性测量单元)。之所以说IMU和视觉是互补的是因为IMU能测快的运动而视觉不能,但IMU也有自己的局限如漂移比较多,而视觉的漂移比较少。我们知道扫地机器人是有vo的odometry的,它的里程计(相对运动) 是可以通过底部的轮子转动的速度和转动的量来确定的,这是一种里程计的测量方式。相比于直接使用视觉的里程计测量由于不能快速的计算相对运动,所以我们融合了IMU即能快

2022-05-05 18:56:52 1788 1

原创 OpenCV中的模板匹配技术(20)

今天呢有小伙伴问我,基于模板匹配技术方面的问题。那针对他提出来的问题我们来看看什么是模板匹配技术。有学习过《slam十四讲》的同学知道我们在进行单目稠密重建的时候,首先需要做的就是在极线上去进行块匹配,那什么是极线,什么是块匹配呢,这个也做一个粗略的解释:极线:当前相机观测3维空间中的路标点时,会在该相机的归一化平面上有对应的投影像素点,那么该点的空间位置一定在相机光心与该像素点的连线方向上,从另一个视角看,该线段的投影也在该方向的相机成像平面下留下一条线段,这个线段就叫极线。确定了极线,在相机变换矩阵

2022-04-29 21:16:17 3231

原创 实践:设计SLAM系统

实现一个双目视觉里程计在Kitti数据集中的运行效果。这个视觉里程计由一个光流追踪的前端和一个局部BA的后端组成。双目只需单帧就可初始化,双目存在3D观测,实现效果比单目好。程序:数据结构+算法本例程的数据结构是:处理的最基本单元图像。在双目中是一对图像,为一帧。对帧提取特征点。特征点是有很多2D的点。图像之间寻找特征的关联。如果多次看到某个特征,就用三角化方法计算它的3D位置,即路标。所以图像,特征,路标是这个系统的最基本的结构。其中路标,路标点,地图点都指代3D空间中的点,语义是一样的。

2022-04-29 20:30:15 1464

原创 OpenCV中图像处理组件——漫水填充(19)

慢水填充1.1慢水填充的定义慢水填充是一种用于特定的颜色填充连同区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。

2022-04-29 08:30:51 635

原创 OpenCV中的图像金字塔与图片尺寸缩放(18)

本讲我们将来学习OpencCV中的函数pryUp和pyrDown是如何对图像进行向上和向下采样的,以及专门用于缩放图像尺寸的resize函数。1 图像金字塔图像金字塔是图像中多尺度表达的一种方式,多用于机器视觉和图像压缩。金字塔的低部是待处理图像的原始高分辨率表示,而顶部是低分辩率的近似。层次越高,图像越小,分辨率越低。OpenCV中有两种类型的图像金字塔经常使用:高斯金字塔:用来向下采样,主要的图像金字塔。 拉普拉斯金字塔:用来从金字塔低层图像重建上层采样图像,在数字图像中用来预测残差,

2022-04-27 22:11:23 4372 2

原创 深蓝-视觉slam-第八讲学习笔记

回环检测的意义:前端提供特征点的提取和轨迹,地图的初始化,后端负责优化这些数据。如果像里程计一样只考虑相邻时间上的关键帧,那么误差就会出现累积,无法构建全局一致的轨迹和地图。但是,回环检测模块能够给出除了相邻帧的一些时间更久远的约束,相机经过同一个地方,采集到了相似的数据。而回环检测的关键就是如何有效的检测出相机经过同一个地方,如果能够成功的检测到,就可以为后端的位姿图提供更多的数据,使之得到更好的估计,得到全局一致的估计。假阳性:感知偏差 假阴性:感知变异算法需要设置参数,当某个阈值提高.

2022-04-27 20:57:56 432

原创 SLAM第12讲 建图实践部分

1 实践:单目稠密重建我们需要下载示例程序所需要的数据集http://rpg.ifi.uzh.ch/datasets/remode_test_data.zip。它提供了一架无人机采集到的单目俯视图像,共200张,同时提供了每张图像对应的位姿。下面我们通过这些数据估算第一帧图像每个像素对应的深度值,即进行单目稠密重建。估计稠密深度的步骤:假设所有像素的深度满足某个初始的高斯分布;当新数据产生时,通过极线搜索和块匹配确定投影点位置;根据几何关系计算三角化后的深度及不确定性;将当前观测融合进上一次的

2022-04-27 20:57:30 2051 9

原创 深蓝-视觉slam-第七讲学习笔记

通过前面学的知识,我们了解到视觉里程计能得到短时间内的轨迹和地图,但由于不可避免的误差累积,这个地图在长时间内是不准确的。所以在视觉里程计的基础上,我们需构建一个尺度,规模更大的优化问题,来考虑长时间内最优的轨迹和地图。滤波器为主的后端非线性优化为主的后端假设了马尔科夫性(k时刻的状态只与k-1时刻的状态有关——扩展卡尔曼滤波器(EKF)为代表的滤波方法;k时刻的状态与之前所有的姿态都有关——以非线性优化为主体的优化框架;1.线性系统和KF线性KF——知道k-1时刻

2022-04-25 20:37:08 564

原创 深蓝-视觉slam-第七节习题

2.2 数据集下载好的数据集进行bzip2 -d xxx文件的解压,得到需要获取的数据集;思路整理:下载解压好的数据集需要读取其中的内容并将其进行可视化显示,数据集中给出的是没有噪声的数据,所以为了模拟真实的环境所观测到数据,需要在相机的外参,路标点,观测数据上分别加上噪声,并且在BA处理的过程中为了使数值更稳定,防止有极端情况下处理很大或很大偏移的BA问题,我们需要使用归一化函数(Normal)对原始数据进行归一化操作。(归一化是指将所有的路标点的中心置0, 然后最一个合适的.

2022-04-25 20:30:29 612

原创 实践:g2o位姿图优化,李代数位姿图优化(3)

2022-04-25 20:29:52 1127 2

原创 OpenCV中的improc组件形态学滤波——腐蚀与膨胀(16)

1 形态学图像处理中的形态学,指的是数学形态学,数学形态学是一门建立在格伦和拓扑基础上的图像分析学科,是数学形态图像处理的基本理论。最基本的运算有: 二值腐蚀和膨胀,二值开闭运算,骨架抽取,极限腐蚀,击中击不中变换,形态学梯度,Top-hat变换,颗粒分析,流域变换,灰值腐蚀和膨胀,灰值开闭运算,灰值形态学梯度。形态学操作就会i是基于形状的一些列图像处理操作。Opencv提供了进行图像的形态学变换的函数。首先我们来看最基本的两种形态学操作: 膨胀与腐蚀。膨胀和腐蚀的作用:消除噪声;分割处独立

2022-04-25 20:28:57 1990

原创 OpenCV中的improc组件形态学滤波——开运算,闭运算,形态学梯度,顶帽,黑帽(17)

形态滤波:开运算,闭运算,形态学梯度,顶帽,黑帽OpenCV中的morphologyEx函数,通过运用这两个形态学基本操作,实现了更高极的形态学变换,如开闭运算,形态学梯度,顶帽,黑帽等。1.1 开运算开运算(Opening Operation),就是先腐蚀后膨胀的过程。其数学表达公式为:dst = open(src, element) = dilate(erode(src, element))作用:可以用来消除小物体在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。1.2 闭

2022-04-25 20:28:02 1718

原创 OpenCV中的非线性滤波——中值滤波,双边滤波(15)

非线性滤波:中值滤波,双边滤波1.1 非线性滤波滤波器是线性的,即两个信号之和的响应是它们各自响应的和(每个像素的输出值是一些输入像素的加权和。线性滤波器易于构造,但是很多情况下,使用邻域像素的非线性滤波会达到更好的效果。比如:在噪声是散粒噪声而不是高斯噪声时,图像偶尔出现很大的值的时候,用高斯滤波器对图像进行模糊的话,噪声像素是不会被去除的,他们只会转换为更为柔和的但仍可见的散粒,此时可以使用中值滤波;1.2 中值滤波中值滤波是一种典型的非滤波技术,基本方法就是:用像素点领域灰度值的中值来代替..

2022-04-24 20:17:08 2752

原创 实践:g2o求解BA(2)

g2o使用步骤: - 创建线性求解器LinearSolver; - 创建BlockSolver,用于上面定义的线性求解器初始化; - 创建总求解器solver,使用GN/LM/DogLey任意一种增量求解方法; - 创建图优化核心:稀疏优化器; - 定义节点和边,并添加到稀疏优化器中; - 设置优化参数,开始优化;

2022-04-24 20:16:22 523

原创 实践:Ceres BA(1)

1.Ceres BA我们用BAL数据集进行BA,一个场景中的路标和相机位姿由文本给定,具体格式见:[http://grail.cs.washington.edu/projects/bal](http://grail.cs.washington.edu/projects/bal),使用common.h中定义的BALProblem类读入该文件的内容,然后分别用Ceres和g2o求解

2022-04-24 20:15:33 819 1

原创 OpenCV中的improc组件——三种线性滤波实例及综合实例(14)

1 线性滤波API函数1.1 方框滤波函数:boxFilter函数<1> . boxFilter()函数的作用:使用方框滤波来模糊一张图像。<2> . 函数原型:void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize,Point anchor=Point(-1, -1), boolnormalize=true, int borderType=BORDER_DEFAULT);<3&gt

2022-04-23 21:11:07 2730 1

原创 OpenCV中的improc组件——图像处理中的三种线性滤波(邻域算子)(13)

imgproc组件是Image 和Process的缩写,即图像处理图像处理模块包含以下内容:线性和非线性的图像滤波图像的几何变换其他图像转换直方图相关结果分析和形状描述运动分析和对象跟踪特征检测目标检测本将我们来学习基于图像处理的三种线性滤波:方框滤波,均值滤波,高斯滤波1. 线性滤波:方框滤波,均值滤波,高斯滤波1.1 平滑处理平滑处理就是模糊处理,是一种简单且使用频率很高的图像处理方法。平滑处理最常见的用来减少图像上的噪声点或者失真。在涉及到降低图像分辨率时,平滑处理是非.

2022-04-23 19:31:00 1094

原创 OpenCV中的Core组件——输入输出XML, YAML(12)

输入输出XML和YAML文件1.1 XML和YAML文件XML是一种元标记语言,所谓元标记就是可自定义标记< name> < book>.任何满足XML命名规则的都可以进行定义。XML是一种语义/结构化语言,它描述了文档的结果和语义;YAML仍是一种标识语言,但这个不是以标识语言为重点,以数据为中心。YAML是一种可读性高,用来表达资料序列的格式。它参考了其他的语言如:XML,C,Python,Perl等。YAML用了一种比XML更简洁的方式来完成XML的任务。1.2 F.

2022-04-21 20:48:24 695

原创 OpenCV中的图像处理——离散傅里叶变换实例(11)

我们通过这个示例来学习 一个以dft()为核心,对图像求傅里叶变换的过程。程序示例如何计算和显示傅里叶变换后的幅度图像。由于数字图像的离散性,我门也仅仅实现的是离散傅里叶变换,通过傅里叶变换得到图像中的几何结构信息。下面以输入图像的单通道灰度图为例。新函数部分参考上讲的内容: https://editor.csdn.net/md/?articleId=1242887611.【第一步】载入图像以灰度图模式读取原始图像,进行是否读取成功的判断,并显示图像。Mat srcImage = imrea.

2022-04-21 18:13:01 2054 2

原创 深蓝-视觉slam-第六节习题

1.LK光流2,直接法

2022-04-20 19:53:40 611

原创 OpenCV——分离颜色通道,图像对比度,亮度调整,离散傅里叶变换(10)

分离颜色通道,多通道图像混合之前我们将了如何用addWeight函数进行图像的混合操作,以及如何将ROI和addWeight函数结合起来,对指定区域进行图像混合操作。有时为了更好的观察一些图像的材料的特征,我们需要对RGB三个颜色通道的分量进行分别显示和调整。通过merge和split方法来实现。1.1 通道分离:split()函数split:用于将多通道数组分离为几个单通道数组.split两个c++版本的原型:void split(const Mat &src, Mat *mvb...

2022-04-20 19:10:03 1779

空空如也

空空如也

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

TA关注的人

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