论文于祥读及复现——《VDO-SLAM: A Visual Dynamic Object-aware SLAM System》
论文详读之------《一个视觉动态对象感知SLAM系统》
- 0. 出发点(暨摘要)
- 1.引言
- 2. 相关工作
- 2.1 探索针对动态环境的健壮SLAM
- 2.2 分别执行SLAM和运动对象跟踪(MOT),作为传统SLAM的扩展,用于动态场景理解。
- 2.3 对象SLAM(通常包括静态和动态对象)
- 2.4 最近工作
- 3. 主要内容概括
- 3.1 预处理
- 3.1.1 对象实例分割
- 3.1.2 光流估计
- 3.2 追踪
- 3.2.1 模块一
- 3.2.2 模块二
- 3.3 建图
- 3.3.1 局部批量处理
- 3.3.2 全局批量处理
- 3.3.3 从建图到跟踪
- 4. 实验
- 4.1 深度模型设置
- 4.2 Oxford Multimotion数据集实验
- 1.3.png
- 4.3 KITTI数据集实验
- 4.3.1 相机位姿和物体运动
- 4.3.2对象跟踪和速度
- 4.3.3定性结果
- 4.3.4讨论
- 5. 本文总结
- 6. 个人读后感
论文网址:https://arxiv.org/pdf/2005.11052.pdf
源码网址:https://github.com/halajun/vdo_slam
0. 出发点(暨摘要)
将实时定位和建图(SLAM)估计与动态场景建模相结合,可以极大地促进机器人在动态环境中的自主性。机器人的路径规划和避障任务依赖于对场景中动态物体运动的准确估计。本文介绍了VDO-SLAM,这是一个健壮的视觉动态对象感知SLAM系统,它利用语义信息来实现对场景中动态刚性对象的精确运动估计和跟踪,而无需事先了解对象的形状或几何模型。该方法识别和跟踪环境中的动态对象和静态结构,并将这些信息集成到一个统一的SLAM框架中。最终获得高度精确的估计机器人的轨迹和物体的完整SE(3)运动,以及环境的时空地图。该系统能够从物体的SE(3)运动中提取线速度估计,为复杂动态环境中的导航提供了重要功能。我们在许多真实的室内和室外数据集上展示了所提出的系统的性能,结果显示出与最先进的算法相比,一致性和实质性的改进。源代码的开放源代码版本是可用的。
1.引言
下图1为视觉动态对象感知SLAM系统的框架。
- Input为输入模块,输入为单目或者是双目的RGB图和深度图。首先立体深度估计都方法提取深度信息。为了充分利用基于图像的语义信息,同时采用了基于学习的单目系统,获得单目相机的深度信息;
- Pre-processing为预处理模块,主要进行对象实例分割和光流估计;
- Tracking为追踪模块,主要工作为特征检测、相机位姿估计、动态目标追踪和目标运动估计;
- Mapping为建图模块,主要进行局部批量优化和全局批量优化
- Output为最终的输出。
本文的主要贡献为:
- 在机器人位姿、静态和动态3D点以及物体运动的统一估计框架中对动态场景建模的新公式;
- 准确估计SE(3)动态物体的运动,优于最先进的算法,以及一种提取物体在场景中的速度的方法;
- 一种鲁棒的方法来跟踪运动对象利用语义信息与处理间接遮挡的能力,导致语义对象分割失败;
- 在复杂和引人注目的现实世界场景中演示完整系统。
2. 相关工作
目前,在不同的研究目的下,对于动态场景下的SLAM的研究主要分为以下3类
2.1 探索针对动态环境的健壮SLAM
时期 | 方法 | 结果 |
---|---|---|
早期 | 检测和删除动态场景中提取到的信息 | 降低SLAM性能 |
发展 | 移除动态前景+修复获重建被遮挡的静态场景 | |
DynaSLAM | 经典几何+深度学习——>检测和移除动态对象多视角信息——>修复被遮挡的背景 | |
Light Field SLAM | 通过合成孔径成像(SAI)重建被遮挡的静态场景对重建的静态背景上的特征也进行了跟踪与利用 | 较好的SLAM性能 |
所有的方法几乎都是将动态信息丢弃,但是这些被丢弃的信息对SLAM也许会有潜在的好处;
除了SLAM之外,理解动态信息对机器人的其他任务(如:规划、控制和避障)也至关重要
2.2 分别执行SLAM和运动对象跟踪(MOT),作为传统SLAM的扩展,用于动态场景理解。
时期 | 方法 | 结果 |
---|---|---|
最新 | 将估计问题分解为两个独立的估计器以便实时更新两个滤波器并行解决运动中的结构和运动物体的跟踪问题系统输出统一包含静态结构和运行物体轨迹的的三维动态地图 | 解决了动态物体的SLAM物体 |
随后 | 整合语义约束进一步赶紧3D重建 | |
最近 | 基于立体的密集映射算法 | 具有大规模动态环境中,准确高效地重建静态背景和运动物体的优势 |
证明了将多目标跟踪与SLAM相结合的可行性,适用于动态场景的探索。
通过适当的开发和建立机器人与静态背景、静态和动态物体之间的时空关系。证明了SLAM和多目标跟踪问题是相互有益的。
2.3 对象SLAM(通常包括静态和动态对象)
这种算法通常需要对三维物体进行特定的建模和表示,有三维形状、曲面或体积模型、几何模型等,提取高级原语并整合到SLAM框架中。
类型 | 方法 | 效果 |
---|---|---|
SLAM++ | 该范式在物体表层表示杂乱的场景在相机和物体姿态之间构建显示图实现联合姿态图优化 | |
密集SLAM的同时重建、分割和识别 | 提出一种新颖的3D物体识别算法 | 保证系统的鲁棒性提高估计物体姿态的准确性 |
MaskFusion | 采用表面表示对场景中的物体进行建模和重建 | 无需预先了解对象模型 |
MID-Fusion | 采用基于八叉树的体积模型 | |
构建多目标动态SLAM系统 | 无需预先了解对象模型 |
2.4 最近工作
类型 | 方法 | 效果 |
---|---|---|
最近 | 使用基本集合来表示对象 | 复杂度低、易于集成到SLAM框架中 |
Quadric-SLAM | 紧凑参数化物体的大小和三维姿态将检测到的物体表示为椭球体将二次参数直接约束为几何误差并与相机位姿一起在因子图SLAM中进行联合估计 | |
CubeSLAM | 将二维和三维目标检测与SLAM相结合多视图捆绑调整与点和相机一起优化 |
仍然存在的问题:
以上方法都能证明被检测对象和SLAM之间的利用关系,但是主要关注的都是静态场景下的对象检测和SLAM,本文沿着这一方向,在SLAM框架内解决动态目标跟踪的挑战性问题,并利用动态目标与智能机器人、静态和动态结构之间的关系来获得潜在的优势。
3. 主要内容概括
对于论文还没有进行公式推理,所以此处先进行的系统分析。
这篇论文建立的SLAM系统可以稳健的估计相机和物体的运动以及环境的静态和动态结构。主要由预处理、跟踪、建图三部分组成。
为了充分利用基于图像的语义信息,采用了基于学习的单目系统。将单目或者双目的RGB图像和深度图像。
3.1 预处理
此模块的主要分为两部分:
- 鲁棒的分离静态背景和目标
- 保证对动态目标的长期追踪
方法:实例语义分割
+光流估计
3.1.1 对象实例分割
- 用于分割潜在的可移动对象;
- 利用语义信息进行先验;
- 有助于进一步将语义前景划分为不用的实例掩码,使得跟踪单独的对象变得更加容易;
- 掩码提供了精确的对象体边界,确保了对对象上的点进行鲁棒跟踪。
3.1.2 光流估计
使用的是稠密光流
- 用于最大化运动物体上被跟踪点的数量;
- 通过语义掩码内的所有点进行采样,大大增加了目标点的数量;
- 通过产生分配给对象掩模上的每个点的唯一对象标识符来一致地跟踪多个对象;
- 如果语义分割失败,它允许恢复对象掩码;这是一项使用稀疏特征匹配极其困难的任务。
3.2 追踪
包含两个模块:
模块一:特征检测+相机位姿估计
模块二:动态目标追踪+目标运动估计
3.2.1 模块一
- 特征检测
- 检测一组稀疏的焦点特征,利用光流跟踪它们。
- 每一帧中,只有与估计的相机运动相匹配的内层特征点被保存到地图中,并用于跟踪下一帧中的对应点。
- 如果内部轨迹的数量低于一定水平(默认为1200),则检测和添加新的特征。
- 这些稀疏特征是在静态背景上检测的,即不包括被分割对象的图像区域。
- 相机位姿估计
- 计算所有检测到的3D-2D静态点对应的相机位姿。
- 生成两个模型,并基于重投影误差比较内点数 通过相机之前的运动产生
- 通过使用RANSAC和P3P算法进行新的运动变换生成
- 选择生成的大多数内点的运动模型进行初始化
3.2.2 模块二
- 动态目标跟踪
第一步,从背景中分离对象
(虽然该算法可以估计所有分割对象的运动,但动态对象识别有助于减少所提出的系统的计算成本)
获取相机位姿–>描述场景流(理想情况下应该为0)
- 计算每个物体上所有采样点的场景流大小
- 当某点场景流>阈值时,则认为该点事动态的
- 当动态点的比例>总点的30%时,则认为该对象为动态物体,否则静态
第二步,只提供单个图像对象标签的实例级对象分割
运动模型随着时间推移而逐渐推进,所以需要跨帧进行对象追踪。
这里采用光流来关联跨帧的点标签。
点标签与点被采样的唯一对象标识符相同。
理想情况下,对于第k帧中检测到的每个物体与k-1帧中它们对应的标签唯一对齐。
实际实践中,受到噪声、图像边界和遮挡的影响。
解决:给所有的点分配标签 前一帧出现最多的标签是0,意味着该对象即将移动。 在边界处出现、从这当中重新出现,会被重新分配一个新的跟踪标签。
- 目标运动估计
目标通常以小块的形式出现在场景中,使得很难获得足够的稀疏特征来鲁棒的跟踪和估计其运动。
方法:
- 在一个对象掩码内,每隔三个点进行采样,并跨帧跟踪
- 内点被保存到地图,用于下一帧的跟踪
- 当跟踪到的目标点数量下降到一定水平时,会采样并添加新的目标点。
3.3 建图
构建并维护一个全局地图,同事从全局地图提取一个局部地图。
3.3.1 局部批量处理
- 维护和更新局部地图 局部批量优化目标是确保精确地相机位姿估计提供全局批量优化。
- 相机位姿估计对物体运动的准确性和算法的整体性有很大影响。
- 局部地图使用包含最后n帧信息的固定大小的滑动窗口来构建。
- 仅在窗口大小内局部优化相机位姿和静态结构。
- 执行因子优化图来细化局部地图内所有变量
- 最后,更新到全局地图
3.3.2 全局批量处理
- 由跟踪和局部批量优化的输出(相机位姿、物体运动和内部结构)组成。
- 随着每一帧的更新不断更新
- 所有输入真被处理后,给予全局地图构建因子图。
- 有效地探索时间约束,只将被跟踪超过3个实例的点添加到因子图中
- 优化结果为整个系统的输出
3.3.3 从建图到跟踪
- 利用上一帧的内点来跟踪当前帧的对应关系,并估计相机位姿和物体运动。
- 最后的相机位姿和物体运动也可以作为初始化当前估计的可能的先验模型
- 语义对象分割失败导致“间接遮挡”的情况下,目标点通过其先前分割的掩码,帮助跨帧关联语义掩码,以确保对目标的鲁棒跟踪。
4. 实验
从相机运动、物体运动和速度以及物体跟踪性能等方面对VDO-SLAM进行了评估。对室内场景的Oxford Multimotion数据集和室外场景的KITTI Tracking数据集进行了评估,并与其他最先进的方法(包括MVO、ClusterVO、DynaSLAM II和CubeSLAM)进行了比较。由于系统运行的不确定性,例如RANSAC处理,将每个序列运行5次,并将中值作为演示结果。所有结果都是通过在默认参数设置下运行所提出的系统得到的。开放源代码实现包括演示YAML文件和在两个数据集中运行系统的指令。
4.1 深度模型设置
- 对于实例分割,使用Mask-RCNN生成对象的分割掩码。实在COCO数据集上训练得到,没有进行任何微调。
- 对于稠密光流,使用PWC-Net,在FlyingChairs数据集上训练,在Sintel和KITTI数据集上微调。
- 特征检测,使用FAST完成
- 单目深度估计,MonoDepth实在深度特征分裂上进行训练的
4.2 Oxford Multimotion数据集实验
与MVO相比,本文提出的方法在相机位姿估计和摆动box和左下方面效果比较好。
与ClusterVO相比,本文在相机位姿估计和右下旋转框的平移方面的性能略差。
本文在估计物体方面比ClusterVO实现了两倍以上的改进。
下图是本文算法在Oxford Multimotion数据集上的轨迹输出结果。摆动盒子上的动态特征轨迹在视觉上与盒子的实际运动相对应。
(左) 相机的3D轨迹(红色)和四个方框的中心。(右)静态背景和物体体上的检测点。黑色对应于静态点,每个物体上的特征以不同的颜色显示。
4.3 KITTI数据集实验
4.3.1 相机位姿和物体运动
下表中展示了9个序列的相机位姿和运动结果的估计。与DynaSLAM II和CubeSLAM在KITTI数据集中提取的九个运动物体序列上的相机姿态和物体运动估计精度的比较。加粗的数字表示更好的结果。
与DynaSLAM II相比,本文在相机位姿估计方面具有竞争力和较高的精确度,旋转误差略低,平移误差较高
与CubeSLAM相比,本文的RGB-D在相机位姿上的误差更低一些,单目的略高,此处认为是因为单目输入无法准确捕捉深度尺度。
单目和RGB-D在目标运动估计中都有持续较低的误差。
CubeSLAM的平移和旋转误差都在3米和3度以上,极端情况下误差分别达到32米和5度。然而,在RGB-D情下,我们的平移误差在0.1-0. 3米之间,旋转误差在0.2-1.5度之间,在基于学习的单目情况下,我们的平移误差在0.1-0.3米之间,旋转误差在0.4-3. 1度之间,这表明我们的目标运动估计在大多数情况下都实现了数量级的提高。
色条表示在对数尺度上对应于左y轴的平移误差。圆圈表示旋转误差,对应于线性尺度的右y轴。
结果表明,基于点的物体运动/位姿估计方法比使用高级几何模型的方法更鲁棒和准确,这可能是因为几何模型提取可能导致信息丢失并引入更多的不确定性。
4.3.2对象跟踪和速度
下图展示了所有测试序列中一些选定对象(跟踪超过 20帧)的对象跟踪长度和对象速度的结果。本文的系统能够跟踪序列中80%以上出现的大多数物体。此外,本文估计的物体速度总是始终接近于地面真实值。
由于空间有限,部分选定目标(跟踪了 20帧以上)的目标跟踪长度和目标速度的结果。颜色条表示对象轨迹的长度,对应于左y轴。圆圈表示物体的速度,对应于右y轴。GT表示真值,EST.表示估计值。
4.3.3定性结果
下图显示了本文系统对三个KITTI序列的输出。所提出的系统能够在时空地图表示中输出相机姿态,以及场景中每个检测到的移动对象的静态结构和动态轨迹。
带有相机姿态、静态背景结构和动态物体轨迹的动态地图。KITTI序列的VDO-SLAM样本结果。黑色代表静态背景,每个检测到的物体都以不同的颜色显示。左上图代表Seq.01和序列末尾交叉口的放大图,右上图代表Seq.06,右下图代表Seq.03。
4.3.4讨论
定义了旋转,平移的误差项,还有速度的计算方法,这里主要是讨论了作者这么设计这个系统的一些好处:
联合光流的优化使得更多的点能被连续追踪,这就使得通过这些点求出来值的精度能有小幅提升(15%~20%)。
增强了对非直接遮挡情况的鲁棒性:对于语义分割,他可能会在发生直接遮挡以及非直接遮挡(光照变化)时失效, 在非直接遮挡的情况下,把之前的语义mask传播到当前帧可以解决这个问题。下面用图来举一个具体例子:
序列一共有88帧,要追踪其中的白色车子,从第33帧开始,语义分割失效,但是追踪仍然可以进行。可以看到序列的后半段平均误差较大,这是因为此时有局部的直接遮挡(有车子局部是看不到的),以及物体离相机太远。
右下角白车上的点是把之前追踪的特征点传播到了当前帧
对物体运动的全局精确化:从下面的图可以看出来,速度估计是不平滑的,而且在后半段有很大的误差,这主要是因为物体距离相机越来越远,只在整个场景中占据了一小部分。这时,如果只靠传感器的测量值来做运动估计是很困难的,所以就使用了前面的因子图优化,可以看到结果更加平滑且提升明显。
实时性:帧率在5-8帧,会受到场景中移动物体的数目的影响。全局优化的耗时受相机帧总数,每帧移动物体数目的影响
5. 本文总结
在本文中,提出了VDO-SLAM,这是一种新的基于动态特征的SLAM系统,它利用场景中基于图像的语义信息,而不需要额外的物体姿态或几何知识,来实现动态物体的同步定位、建图和跟踪。该系统在室内和具有挑战性的室外数据集上始终显示出鲁棒和准确的结果, 并在对象运动估计方面取得了最先进的性能。在对象运动估计中实现的高性能精度是由于系统是一个基于特征的系统。在SLAM系统中,特征点仍然是最容易检测、跟踪和集成的,并且不需要前端对对象模型有额外的了解,也不需要明确地提供有关其姿态的任何信息。
一个重要问题是具有动态对象的SLAM的计算复杂度需要减少。在长期应用中,可以应用不同的技术来限制图的增长。
6. 个人读后感
本文的系统分别在室内和室外进行了实验,并进行了评估讨论。在需要深度信息时,RGB-D相机要比单目效果好一些。针对动态场景中特征点的检测和追踪的处理相较之前的方法是一个较新的点;并针对观测到的动态物体有一个速度上的估计。总体来说收获颇多。
相关文章:

论文于祥读及复现——《VDO-SLAM: A Visual Dynamic Object-aware SLAM System》
论文详读之------《一个视觉动态对象感知SLAM系统》 0. 出发点(暨摘要)1.引言2. 相关工作2.1 探索针对动态环境的健壮SLAM2.2 分别执行SLAM和运动对象跟踪(MOT),作为传统SLAM的扩展,用于动态场景理解。2.3 对象SLAM(通…...

nuxt3项目使用pdfjs-dist预览pdf
使用的包的源代码是 pdfjs - npm 但是我们实际上项目中使用的是pdfjs打包后的dist文件,也就是pdfjs-dist - npm 所以我们需要使用这个命令 npm i pdfjs-dist 我们可以克隆pdfjs这个包来看源代码,里面有使用的例子,也可以根据源代码自己打…...

mybatis-generator-maven-plugin使用
前提说明 数据库:MYSQL57Mybatis : http://mybatis.org/generator/index.html 操作说明 引入插件 <plugins><!-- MyBatis 逆向工程 插件 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generat…...
基于SpringBoot开发的停车位管理系统(调用百度地图api)
文章目录 项目介绍主要功能截图:前台:后台部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot开发的停车位管…...

STC8单片机PWM定时器+EC11编码器实现计数
STC8单片机PWM定时器+EC11编码器实现计数 📌相关篇《STC单片机+EC11编码器实现调节PWM输出占空比》📍《stc单片机外部中断+EC11编码器实现计数功能》🔖STC8系列支持此功能的型号: ✨从上面的相关篇中有通过通用定时器加外部中断以及常规方法实现驱动EC11编码器的方法。本…...

MediaBox助力企业一站式获取音视频能力
以一只音视频百宝箱,应对「千行千面」。 洪炳峰、楚佩斯|作者 大家好,今天我分享的主题是MediaBox——行业音视频数字化再加速。 根据权威数据表明,65%的行业数字化信息来自视频,基于此,音视频技术对于行…...

仅做笔记用:Stable Diffusion 通过 ControlNet 扩展图片 / 扩图
发觉之前的 Outpainting 脚本效果仍旧不是很理想。这里又找了一下有没有效果更好的途径来扩图。于是就找到了通过 ControlNet 的方式来实现效果更好的扩图。这里临时记录一下在 Stable Diffusion 怎么使用 ControlNet 来扩展图片。 下载 control_v11p_sd15_inpaint_fp16.safet…...
代码随想录算法训练营19期第49天
121. 买卖股票的最佳时机 视频讲解:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili 代码随想录 初步思路:贪心。 总结: 分别考虑2种情况: 【1】dp[i][0] 表示第i天持有股票所得最多现金 【2】…...

用shell脚本实现一个对数组求和的函数,数组通过实参传递给函数,写一个函数,输出当前用户的uid和gid,并使用变量接收结果
目录 1.实现一个对数组求和的函数,数组通过实参传递给函数 结果为: 2.写一个函数,输出当前用户的uid和id,并使用变量接收结果 结果为: shell脚本指令前七个网页链接: 八、shell中的分支语句 【1】ife…...

运算符,switch
目录 算术运算符 逻辑运算符 强制类型转换 自增自减运算符 编辑 三目运算符 A?B:C 逗号表达式 switch 算术运算符 除法的运算结果和运算对象的数据类型有关,两个都是int商就是int,被除数或者除数只要有一个是浮点型数据,…...

运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar
朋友 我当你一秒朋友 朋友 我当你一世朋友 奇怪 过去再不堪回首 怀缅 时时其实还有 运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar 基本可以断定,是jar不完整导致的。不完整!!!记住关键字 检查1: …...
在找工作时的准备工作:结合现状,针对意向企业做好充分准备
在寻找工作时,充分准备是非常重要的。不仅要了解自己的现状和能力,还需要对意向企业进行深入了解,并提前准备好与该企业相关的技能和知识。尤其对于程序员来说,在面试IT技术岗位时,以下技巧可能会对你有所帮助…...

微服务·数据一致-事务与分布式事务
微服务数据一致-事务与分布式事务 概述 事务是计算机科学和数据库管理中的一个关键概念,用于确保数据的一致性和可靠想。事务管理是大多数应用程序和数据库系统中不可或缺的一部分。分布式事务扩展了事务的概念,用于多个分布式系统和服务的数据一致性管…...

GO语言篇之CGO
GO语言篇之CGO 文章目录 GO语言篇之CGO前言C代码嵌入GO代码C文件嵌入GO代码缺点 前言 Go语言可以通过内置的CGO调用C语言接口,从而实现C语言代码的交互,CGO提供了一种将Go代码嵌入到C代码中,或者从Go代码中调用C函数的方法 C代码嵌入GO代码…...

LVS负载均衡群集(NAT模式、IP隧道模式、DR模式)
目录 一、集群 1.1 含义即特点 1.2 群集的类型 1.3 LVS 的三种工作模式: 1.4 LVS 调度算法 1.5 负载均衡群集的结构 1.6 ipvsadm 工具 二、NAT模式 LVS-NAT模式配置步骤: 实例: 配置NFS服务器192.168.20.100 配置web1服务器192.168…...

PCL 使用克拉默法则进行三点定圆(二维)
目录 一、算法原理二、代码实现三、结果展示四、参考链接五、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 见:使用克拉默法则进行三点定圆(二维) 二、代码实现 #include <iostream>...
MCAL实战二(S32K324-NXP EB tresos GPT驱动配置详解)
目录 前言 一、配置之前 第一步 找时钟源 第二步 配置MCU时钟 二、开始配置 第一步 新建时钟参考点 第二步 硬件通道使能 第三步 配置连接 <...
Python 图形化界面基础篇:什么是 Tkinter 以及为什么选择它
Python 图形化界面基础篇:什么是 Tkinter 以及为什么选择它 引言第一部分:什么是 Tkinter? 1. 跨平台性2. Python 标准库的一部分3. 易学易用4. 社区和资源 第二部分:为什么选择 Tkinter? 1. 简单易用2. 跨平台兼容性3…...

Learning From Data 中英文对照 1.THE LEARNING PROBLEM (第7页)
为了简化感知器公式的表示法,我们将把偏差aaWpb与其他权重合并到一个向量中[wo,1,。…,wd]“,其中T表示向量的转置,所以w是acolumn向量,我们也将x作为列向量,并将其修改为x[o&#x…...

自己编译静态ffmpeg freetype2 not found问题解决
整理好依赖的ffmpeg仓库地址: https://github.com/pyke369/sffmpeg 报错:ERROR: freetype2 not found using pkg-config 网上查询说是需要安装freetype-devel sudo apt install libfreetype6-dev 安装后还是报一样的错,实…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...