当前位置: 首页 > news >正文

一起自学SLAM算法:第9章-视觉SLAM系统

连载文章,长期更新,欢迎关注:

上一章介绍了以激光雷达做为数据输入的激光SLAM系统,激光雷达的优点在于数据稳定性好、测距精度高、扫描范围广,但缺点是价格昂贵、数据信息量低、安装部署位置不能有遮挡、雨天烟雾等环境容易失效。相比于激光雷达,视觉传感器价格便宜许多、所采集到的图像数据信息量更高、室内室外场景都能适用并且雨天烟雾场景影响较小,不过视觉传感器数据稳定性和精度较差、巨大的数据量也消耗更大的计算资源。主流的视觉传感器包括单目、双目和RGB-D这3类相机,其原理见4.3节相关内容。依据对图像数据的不同处理方式,视觉SLAM可以分为特征点法、直接法和半直接法。下面按照特征点法、直接法和半直接法分类,列出了几种常见的视觉SLAM算法,如表9-1所示。

表9-1  几种常见的视觉SLAM算法

算法名称

传感器

前端

后端

闭环

地图

时间

特征点法

MonoSLAM

Mono

数据关联

&

VO

EKF滤波

-

稀疏

2007

PTAM

Mono

优化

-

稀疏

2007

ORB-SLAM2

Mono

Stereo

RGB-D

BOW

稀疏

2016

直接法

DTAM

Mono

-

稠密

2011

LSD-SLAM

Mono

Stereo

Omni

FABMAP

半稠密

2014

DSO

Mono

-

稀疏

2016

半直接法

SVO

Mono

-

-

稀疏

2014

在特征点法中,首先对输入图像进行特征提取(比如SIFT、SURF、ORB特征,详细过程见3.4节相关内容),然后进行特征匹配,这里特征提取和匹配的过程就是所谓的数据关联;接着就可以利用数据关联信息计算相机运动,也就是前端视觉里程计(Visual Odometry,VO);最后进行后端优化和全局建图。在直接法中,不需要对图像进行特征提取和匹配,而是直接利用图像灰度信息进行数据关联同时计算相机运动。也就是说直接法中的前端VO是直接在图像灰度信息上进行的,这样就省去了很多花费在特征提取上的时间。接下来的后端处理过程,其实和特征点法都类似。在半直接法中,结合了特征点法和直接法这两种思路,优点是处理速度大大提升。

典型的特征点法SLAM算法主要有MonoSLAM、PTAM和ORB-SLAM2。其中MonoSLAM[1]算得上是首个基于纯单目相机的视觉SLAM系统,系统前端从输入的灰度图像中提取Shi-Tomasi角点特征,并采用匀速运动模型进行运动预测,最后将相机状态和路标特征点当成一个整体状态估计量放入后端EKF滤波器利用观测做更新。很遗憾,MonoSLAM由于采用滤波方法进行求解,因此只能构建很小规模的地图;并且其中的Shi-Tomasi角点特征不具备旋转不变特性,故特征稳定性受运动影响较大。

而PTAM[2]则是首个采用优化方法求解的视觉SLAM系统,PTAM也是以纯单目相机为输入传感器,系统前端从图像中提取FAST特征并用相邻两帧间的匹配特征点对构建重投影误差函数来求解VO,系统后端进行优化得到地图。PTAM中有两大创新,一个创新是将前端和后端在代码中用双线程来实现,另一个创新是引入了关键帧机制。所谓双线程,就是将前端特征提取、匹配、VO这些跟定位相关的逻辑放在一个单独线程中实现,而将后端全局优化和局部优化这些跟建图相关的逻辑放在另一个单独线程中实现,这样运行较慢的后端线程就不会拖累运行较快的前端线程以保证前端定位的实时性。关键帧顾名思义就是某些具有代表性的图像输入帧,所谓关键帧机制,就是整个算法在运行途中维护一个由一系列关键帧组成的关键帧序列,前端在定位丢失时能借助关键帧信息快速重定位,后端在关键帧序列上进行全局优化和局部优化从而避免将大量冗余输入帧纳入优化过程带来的计算资源浪费。

毫不夸张来说,ORB-SLAM是目前为止效果最好的视觉SLAM系统。该算法有两个版本,第一代算法ORB-SLAM[3]只支持单目相机,由于单目SLAM普遍存在尺度不确定性问题,因此第二代算法ORB-SLAM2[4]支持了单目、双目和RGB-D这3种相机。该算法借鉴了PTAM双线程的思想,并增加了一个线程用于闭环检测,也就是说算法用前端、后端、闭环这3个线程实现。系统前端从图像中提取ORB特征并用相邻两帧间的匹配特征点对构建重投影误差函数来求解VO,其所提取的特征ORB正是该算法名称之由来,ORB特征具有极好的稳定性和极快的提取速度。后端进行局部优化建图,并且当闭环检测成功后触发全局优化。全局优化过程在相机位姿图上进行而不考虑地图特征点,这样能大大加快优化速度。除了在前端提取选择ORB特征和引入闭环检测外,该算法还在很多程序细节上做了大量创新,因此这个算法非常具有学习和研究的价值。

典型的直接法SLAM算法主要有DTAM、LSD-SLAM和DSO。其中DTAM[5]的思路是采用单目直接法构建稠密地图,系统前端直接利用图像像素构建代价函数求解VO,并利用逆深度(也就是深度值的倒数)描述每个像素的深度,在系统后端全局优化中为图像中每个像素都恢复其深度图,这样就构建出了3D稠密地图。可想而知,为每个像素都恢复稠密深度将非常消耗计算资源,因此这个算法也只能在GPU加速下才能跑得动。

LSD-SLAM[6,7,8]构建出来的是半稠密地图,这与DTAM直接构建稠密地图有所区别。系统前端直接利用当前图像和当前关键帧之间的像素构建代价函数求解VO,系统后端会在每个关键帧中按梯度大小抽取部分像素用深度滤波器恢复其深度值,这样就构建出了3D半稠密地图,系统闭环检测成功后触发在相机位姿图上进行的全局优化。刚开始LSD-SLAM仅支持单目相机,后来作者将其扩展到单目、双目和全景这3种相机。

DSO[9]与LSD-SLAM相比地图更为稀疏,系统前端采用直接法求解VO,系统后端将关键帧中梯度比较突出的像素抽取出来用于深度恢复,算法整个优化是在光度标定模型、相机内参数、相机外参和逆深度上进行的,所以求解精度会更高。

其实特征点法与直接法的区别就在于数据关联,特征点法的数据关联是由特征提取和特征匹配这两个过程来完成,而直接法则是一步到位直接在图像像素上完成数据关联。SVO[10]算法中结合了特征点法特征提取与匹配的鲁棒性优势和直接法计算快速性优势,因此具有更快速更稳定的性能,这种方法也称之为半直接法。不过由于开源出来的SVO是经过阉割后的版本,并没有后端优化和闭环检测环节,严格意义上并不能称之为SLAM系统,确切点说只是一个VO而已。

由于篇幅限制,就分别选取特征点法、直接法和半直接法中的代表性算法ORB-SLAM2、LSD-SLAM和SVO,在下文中展开具体分析。


9.1 ORB-SLAM2算法

        9.1.1 ORB-SLAM2原理分析

        9.1.2 ORB-SLAM2源码解读

        9.1.3 ORB-SLAM2安装与运行

        9.1.4 拓展

9.2 LSD-SLAM算法

        9.2.1 LSD-SLAM原理分析

        9.2.2 LSD-SLAM源码解读

        9.2.3 LSD-SLAM安装与运行

9.3 SVO算法

        9.3.1 SVO原理分析

        9.3.2 SVO源码解读


本章选取了ORB-SLAM2、LSD-SLAM和SVO,分别作为视觉SLAM算法中特征点法、直接法和半直接法的一种代表性算法进行分析。其中ORB-SLAM2具有较高的研究价值和商业价值,并且代码书写得非常规范易读,需要作为重点内容进行学习并掌握。而LSD-SLAM和SVO的代码存在较多瑕疵,仅需了解原理即可,不要求掌握。特征点法需要借助特征提取和特征匹配建立数据关联,然后最小化重投影误;直接法则省去了特征提取和特征匹配步骤,直接在两帧图像的像素上建立数据关联,然后最小光度误差;半直接法则是结合了特征点法和直接法的优势,提取特征点,然后利用直接法建立数据关联。这里的关键概念是重投影误差和光度误差,一定要搞清楚两者的区别。

虽然激光SLAM和视觉SLAM已经能够覆盖到目前绝大部分的机器人应用了,但是还有一些其他类型的SLAM也备受关注,比如激光+视觉融合SLAM、IMU+视觉融合SLAM、基于深度学习的端到端SLAM、基于模式识别的语义SLAM等,将在下一章中讨论。

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

相关文章:

压榨数据库的真实处理速度

引子 你了解你们线上数据库的真实处理速度吗?请认真思考半分钟再回答。我先来回答一下:的确知道,因为我特别关注这块内容,咨询过DBA同学。其他朋友欢迎在评论区留言,大家一起探讨。 为什么会突然提出这样一个问题呢,因为前几天看到一篇文章是讲电商系统中如何优化库存预占…...

探索1688、淘宝、京东搜索商品聚合API接口:一站式电商搜索解决方案

随着电商行业的不断发展,电商平台的数量和商品种类都在快速增长。商家和开发者在运营过程中,需要经常进行跨平台的商品搜索和数据分析。然而,由于各个电商平台的数据接口存在差异,直接对接多个平台不仅效率低下,而且维…...

【go从入门到精通】go命令使用

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢…...

详解MySQL常用的数据类型

前言 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。本文将详细介绍MySQL中的数据类型,包括数值类型、字符…...

LeetCode:盛最多水的容器

文章收录于LeetCode专栏 盛最多水的容器 给你n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i, ai) 。在坐标内画 n 条垂直线,垂直线i的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线,使得它们与…...

2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法

文本渲染指令 文本渲染指令-v-html与v-text Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue的模板都是 合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。 在前面,我们一直使用的是字符串插…...

一起自学SLAM算法:第9章-视觉SLAM系统

连载文章,长期更新,欢迎关注: 上一章介绍了以激光雷达做为数据输入的激光SLAM系统,激光雷达的优点在于数据稳定性好、测距精度高、扫描范围广,但缺点是价格昂贵、数据信息量低、安装部署位置不能有遮挡、雨天烟雾等环境…...

LeetCode 437. 路径总和 III

LeetCode 437. 路径总和 III 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的&#xff…...

LinuxC—高级IO

高级IO 1 非阻塞IO/有限状态机编程 1.1 基本概念 定义 有限状态机(Finite State Machine) 缩写为 FSM,状态机有 3 个组成部分:状态、事件、动作。 状态:所有可能存在的状态。包括当前状态和条件满足后要迁移的状态。事件:也称为…...

WebSocket 入门:简易聊天室

大家好,我是前端西瓜哥,今天我们用 WebSocket 来实现一个简单的聊天室。 WebSocket 是一个应用层协议,有点类似 HTTP。但和 HTTP 不一样的是,它支持真正的全双工,即不仅客户端可以主动发消息给服务端,服务…...

Windows10添加WebDav地址时报错“输入的文件夹无效,请选择另一个”

一、问题描述在使用Windows10添加WebDav网络地址时,报错“输入的文件夹无效,请选择另一个”,如下图所示:二、问题分析这是由于Windows10的WebDav默认只支持https协议,没有支持http协议导致的。三、解决办法3.1、修改注…...

Cadence PCB仿真使用Allegro PCB SI生成串扰总结报告Crosstalk Summary Report及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 Crosstalk Summary Report是各种串扰问题的一个简要总结报告。本文简单介绍使用Allegro PCB SI生成Crosstalk Summary Report报告的方法,及其要点导读。…...

【5-卷积神经网络】北京大学TensorFlow2.0

课程地址:【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲:神经网络计算:神经网络的计算过程,搭建第一个神经网络模型神经网络优化:神经网络的优化方法,掌握学习率、激活函数、损…...

C++初阶:vector类

文章目录1 vector介绍2 实现vector2.1 类的定义2.2 默认成员函数2.2.1 构造函数2.2.2 析构函数2.2.3 拷贝构造2.2.4 赋值重载2.3访问接口2.4 容量接口2.5 修改接口2.5.1 尾插尾删2.5.2 任意位置插入2.5.3 任意位置删除2.6 其他接口1 vector介绍 1 vector是表示可变大小数组的序…...

机器学习中软投票和硬投票的不同含义和理解

设置一个场景,比如对于今天音乐会韩红会出现的概率三个人三个观点 A:韩红出现的概率为47% B:韩红出现的概率为57% C:韩红出现的概率为97% 软投票:软投票会认为韩红出现的概率为1/3*(47%57%97%)67% 硬投票:…...

Linux系统之网络客户端工具

Linux系统之网络客户端工具一、Links工具1.Links工具介绍2.安装Links软件3.Links工具的使用4.打印网页源码输出5.打印url版本到标准格式输出二、wget工具1.wget工具介绍2.安装wget软件3.wget工具的使用三、curl工具1.curl工具的介绍2.curl的常用参数3.curl的基本使用四、scp工具…...

c++函数(2)

这里写自定义目录标题默认参数函数重载递归函数变量周期默认参数 可为形参指定默认值,如果在函数调用时,没有指定与形参对应的实参时,就自动使用默认值。 默认参数可简化复杂函数的调用。 默认参数在函数名第一次出现在程序中指定&#xff0…...

HackTheBox Stocker API滥用,CVE-2020-24815获取用户shell,目录遍历提权

靶机地址: https://app.hackthebox.com/machines/Stocker枚举 使用nmap枚举靶机 nmap -sC -sV 10.10.11.196机子开放了22,80端口,我们本地解析一下这个域名 echo "10.10.11.196 stocker.htb" >> /etc/hosts 去浏览器访问…...

Java线程池应用实例

线程池的学习基本概念好处应用场景ThreadPoolExecutor实例理解:执行流程自定义线程池4大核心参数测试demo结论:ExecutorService常用方法思考获取ExecutorService代码示例ScheduleExecutorService常用获取方式如下ScheduledExecutorService常用方法如下:代…...

数字签名技术

介绍数字签名 数字签名是一种用于确认数据的完整性、确认发送者身份的技术。 签名主要包含两个过程:做摘要、进行非对称加密。 做摘要:签名者使用消息摘要算法对消息做摘要;进行非对称加密,得到签名值:签名者使用私…...

WPF-3D图形

WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制,只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念, 以及常用到的命中测试、2d控件如何在3D对象中进行渲染,除此之外,还演示了如何导入外部…...

返回值的理解

前言 我们写的函数是怎么返回的,该如何返回一个临时变量,临时变量不是出栈就销毁了吗,为什么可以传递给调用方?返回对象的大小对使用的方式有影响吗?本文将带你探究这些问题,阅读本文需要对函数栈帧有一定…...

前端布局神器display:flex

Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性。首先举一个栗子,之前我们是这样实现一个div盒子水平垂直居中的。在知道对象高宽的情况下,对居中元素绝对百分比定位,然后…...

【Typescript学习】使用 React 和 TypeScript 构建web应用(三)所有组件

教程来自freecodeCamp:【英字】使用 React 和 TypeScript 构建应用程序 跟做,仅记录用 其他资料:https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第三天 以下是视频(0:40-0:60) 的内容 目录第三天1 创建Todo…...

7.3 矩阵范数

定义 向量有范数,矩阵也有范数,定义和向量范数类似,不过多了一条要求。它的定义如下: 正定性positivity,∥A∥≥0\parallel A\parallel\ge 0∥A∥≥0,只有A0A0A0时才取等号;非负齐次性homogeneity或scalin…...

Jetpack架构组件库:Hilt

Hilt Hilt 是基于 Dagger2 的依赖注入框架,Google团队将其专门为Android开发打造了一种纯注解的使用方式,相比 Dagger2 而言使用起来更加简单。 依赖注入框架的主要作用就是控制反转(IOC, Inversion of Control), 那么什么是控制…...

InstanceNorm LayerNorm

InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN:一个token就是一层layer,对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNorm&#xff…...

数据结构---堆

堆 定义 基本操作 建堆 堆排序 优先队列 一、堆的定义: 堆必须是一个完全二叉树 还得满足堆序性 什么是完全二叉树呢? 完全二叉树只允许最后一行不为满 且最后一行必须从左到右排序 最后一行元素之间不可有间隔,中间不可有空缺 如下几棵树…...

3小时精通opencv(五) 利用TrackBar进行颜色检测

3小时精通opencv(五) 利用TrackBar进行颜色检测 参考视频资源:3h精通Opencv-Python 本章内容介绍如何利用TrackBar调节色域, 手动提取到我们需要的颜色 文章目录3小时精通opencv(五) 利用TrackBar进行颜色检测创建Trackbar色彩检测创建Trackbar 在opencv中使用createTrackbar函…...

学习记录673@项目管理之进度管理案例

本文主要是进度管理之关键链路法的案例。 案例 Perfect 项目的建设方要求必须按合同规定的期限交付系统,承建方项目经理李某决定严格执行项目进度管理,以保证项目按期完成。他决定使用关键路径法来编制项目进度网络图。在对工作分解结构进行认真分析后&…...

【设计模式】结构型模式·组合模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易,如果您觉得写的不错,欢迎给博主来一波点赞、收藏~让博主更有动力吧! 一.概述 又称为部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依…...

Vue-Router详解

1、前端路由的发展历程 1.1、认识前端路由 路由其实是网络工程中的一个术语: 在架构一个网络时,非常重要的两个设备就是路由器和交换机。当然,目前在我们生活中路由器也是越来越被大家所熟知,因为我们生活中都会用到路由器&…...

Eclipse中的Build Path

Eclipse中的Build Path简介如果修改了Build Path中的中的JRE版本,记得还需要同步修改Java编译器的版本,如下图红框所示简介 Build Path是Java工程包含的资源属性合集,用来管理和配置此Java工程中【除当前工程自身代码以外的其他资源】的引用…...

Python与Matlab混合编程案例

前言因为项目需要,需要批处理很多Matlab的.m文件,从每个文件中提取结果合并到一个文件中。 很明显,如果手工统计,几百个文件会累死的。 因此立即想到了Python在批处理方面的优势,因此就在网上找了相关资料,…...

stack、queue、priority_queue

容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 其中stack和queue都是容器适配器,其中stack可以封装vector、list以及我们…...

高通平台开发系列讲解(GPS篇)gpsONE 系统架构

文章目录 一、系统架构图二、gpsONE系统组成三、gpsONE交互流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢高通的定位系统模块,名称叫gpsONE。 一、系统架构图 二、gpsONE系统组成 GPS系统架构可以分为六个部分: APP层Framework Client端(LocationManager API…...

zkMove——针对Move合约生态的zkVM

1. 引言 Move为不同于Solidity的,开源的安全的智能合约开发语言,最早由Facebook为Diem链创造开发。不过,Move本身设计为与平台无关的语言,具有通用的库、工具,并使得采用完全不同数据模型和执行模型的链的开发者社区都…...

贪心算法的题目

每一步都做出一个局部最优的选择,最终的结果就是全局最优 只有一部分问题才能用贪心算法(严格来讲,一个问题能不能用贪心算法需要证明的) 2022.8.30 蔚来笔试题: 有a个y,b个o,c个u,用这些字母拼成一个字符串&#xf…...

线程控制--Linux

文章目录线程理解线程的优点与缺点进程的多个线程共享线程控制线程创建线程终止线程等待线程分离总结线程理解 谈及线程,就不得不谈起进程与线程的关系了。学习完前面有关进程的知识,之前我们对进程的定义是:内核数据结构代码和数据。但是今…...

17 | 如何做好面试复盘?将经验提升为能力

前言 前言:面试是最好的查漏补缺机会,做好面试复盘又是十分的重要。 文章目录前言一. 关于复盘1. 什么是复盘(What)2. 复盘的目的(Why)3. 什么时候需要复盘(When)4. 怎么进行复盘&am…...

数据结构-树

1. 二叉树遍历 #include <stdbool.h> #include "stdio.h" #include "stdlib.h"typedef struct TNode *Position; typedef Position BinTree; // 二叉树类型 typedef char ElementType;// 树结点定义 struct TNode {ElementType Data; // 结点数据Bin…...

Python3 循环语句

本章节将为大家介绍 Python 循环语句的使用。 Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示&#xff1a; while 循环 Python 中 while 语句的一般形式&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)…… 执行流程…...

时序数据处理中的拟合问题

对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(…...

[数据结构基础]排序算法第一弹 -- 直接插入排序和希尔排序

目录 一. 排序的概念及分类 1.1 排序的概念 1.2 常见的排序算法 二. 直接插入排序 2.1 直接插入排序的实现逻辑 2.2 直接插入排序的实现代码 2.3 直接插入排序的时间复杂度分析 三. 希尔排序 3.1 希尔排序的实现逻辑 3.2 希尔排序实现代码 3.3 希尔排序的效率测试 …...

厚积薄发打卡Day115:Debug设计模式<简单工厂、工厂方法、抽象工厂>

厚积薄发打卡Day115&#xff1a;Debug设计模式<简单工厂、工厂方法、抽象工厂> 简单工厂 定义 由一个工厂对象决定创建出哪一种产品类的实例&#xff08;严格意义并不是设计模式&#xff0c;更是一种风格&#xff09; 类型&#xff1a;创建型&#xff0c;但不属于GOF…...

python元组

python元组 文章目录python元组一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建元组2.访问元组3.修改元组4.删除元组5.索引及截取6.元组运算符7.内置函数总结一、实验目的 掌握元组的用法 二、实验原理 Python 的元组与列表类似&#xff0c;不同之处在…...

gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__

今天在看Linux系统编程这本书的代码的时候看到了__GNUC__&#xff0c;不太清楚这个宏所以去查了一下&#xff0c;以此记录。GNU C预定义了一系列的宏&#xff0c;这些宏都是以双下划线开始的&#xff0c;这里只讲一下__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__&#xff0c;完…...

AxMath使用教程(持续更新中)

前言 这两天学了学Latex&#xff0c;主要是为了以后写毕业论文做铺垫&#xff0c;而且Latex在数学公式这一方面&#xff0c;要比Word方便许多&#xff0c;于是我就下载了一款国产的公式编辑器——AxMath。永久会员不贵&#xff0c;只要36元&#xff0c;而且软件很好用&#xf…...

day11 栈和队列 | 20、有效的括号 1047、删除字符串中的所有相邻重复项 150、逆波兰表达式求值

题目 20、有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序…...

【前端面试】http面试整理

"一问一答"模型的协议 客户端通过http请求&#xff1b;服务器端根据请求返回客户想要的资源&#xff1b;客户端接收到资源&#xff1b;http是什么 HTTP是超文本传输协议&#xff0c;是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约…...

倒霉倒霉倒霉(传送门 bfs 三维数组 递归 综合运用

题目描述“啊&#xff01;倒霉倒霉倒霉~”龙叔被困在一座大厦里了&#xff0c;可恶的瓦龙把这座大厦点燃了&#xff0c;他借机消灭龙叔。这座大厦有L层&#xff0c;每一层都有R*C个房间。熊熊火焰蔓延十分快&#xff0c;有的房间已经着火了&#xff0c;龙叔没办法通过。这时老爹…...

C++函数定义和调用介绍

C函数定义和调用介绍 函数的意义&#xff1a;利用率高&#xff0c;可读性强&#xff0c;利于移植。 一个C程序中主函数有且只有一个&#xff0c;是程序的入口&#xff0c;而函数&#xff08;或称子函数&#xff09;可以有很多。 每个 C 程序都至少有一个函数&#xff0c;即主…...

手把手带初学者快速入门 JAVA Web SSM 框架

博主也是刚开始学习SSM&#xff0c;为了帮大家节省时间&#xff0c;写下SSM快速入门博客 有什么不对的地方还请 私信 或者 评论区 指出 ​只是一个简单的整合项目&#xff0c;让初学者了解一下SSM的大致结构 项目先把框架写好&#xff0c;之后在填写内容 项目压缩包 完整的蓝奏…...

RocketMQ源码本地搭建调试

1 GitHub源码 git clone https://github.com/apache/rocketmq.git导入IDEA&#xff0c;可在命令行执行mvn compile一下&#xff0c;保证源码能够正确编译。本次我使用的master分支的版本-4.8.0。下面我们开始准备启动Namesrv。 2 启动Namesrv 到namesrv模块找到NamesrvStart…...

Axios 二次封装并使用

index.js import axios from "axios";let token localStorage.getItem("token"); // let token "123213"; class Request {// 自定义变量instance;constructor(config) {// console.log(config)// 创建axios 实例&#xff0c;变量接收this.in…...

【SpringCloud】Nacos集群搭建

集群结构图官方给出的Nacos集群图如下&#xff1a;其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们接下来要尝试 Nacos集群搭建&#xff0c;效果图如下所示&#xff1a;三个nacos节点的地址&#xff1a;节点ipportnacos1l…...

Microsoft Threat Modeling Tool 使用(二)

主界面 翻译 详细描述 选择了 “SDL TM Knowledge Base (Core)” 模板并打开了一个新的威胁模型。这个界面主要用于绘制数据流图&#xff08;Data Flow Diagram, DFD&#xff09;&#xff0c;它帮助您可视化系统的组成部分和它们之间的交互。以下是界面中各个部分的功能介绍&a…...

鸿蒙OpenHarmony【标准系统 烧录】(基于RK3568开发板)

烧录 烧录是指将编译后的程序文件下载到芯片开发板上的动作&#xff0c;为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能&#xff0c;操作简单&#xff0c;能快捷、高效的完成程序烧录&#xff0c;提升烧录的效率。 RK3568的镜像烧录通过Windows环境进行烧录&…...

mybatis配置获取自增主键

mybatis配置获取自增主键 【/n】 01 使用场景 当需要刚刚插入数据库的数据对应的新增主键时&#xff0c;通过配置xml文件&#xff0c;使数据库返回新增主键id&#xff0c;并把主键id与类参数对应 02 涉及配置 注解TableId(type IdType.AUTO)&#xff1a;在类主键id通过配…...

恒创科技「5月活动」中国香港/美国服务器配置及价格汇总

值此 5 月&#xff0c;各大云服务商的促销活动也是接连不断。近日&#xff0c;恒创科技上线了 5 月出海乐购“惠”活动&#xff0c;从 4 月 28 日开始&#xff0c;持续整个 5 月份。活动分精选云产品、主流物理服务器、DDoS 防护、免费试用等四大专区&#xff0c;包含几十款企业…...

个人出租房屋收入需汇算吗?柯桥会计培训

2023年度个人所得税综合所得汇算清缴正在进行&#xff0c;个人出租房屋的收入需并入汇算清缴吗&#xff1f;汇算最后一步显示免申报是什么意思&#xff1f; 1 个人出租房屋的收入需并入汇算清缴吗&#xff1f; 答&#xff1a;不用。根据《国家税务总局关于办理2023年度个人所…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月7日,星期二

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月7日 星期二 农历三月廿九 1、 八部门&#xff1a;到2025年末全国重症医学床位力争达到15张/10万人。 2、 工信部&#xff1a;电动自行车用锂离子蓄电池安全技术规范11月1日正式实施。 3、 市监总局征求意见&#xff1…...

WPF之多种视图切换

1&#xff0c;View切换&#xff0c;效果呈现 视图1 视图2 视图3 2&#xff0c;在Xaml中添加Listview控件&#xff0c;Combobox控件。 <Grid ><Grid.RowDefinitions><RowDefinition Height"143*"/><RowDefinition Height"30"/>&l…...

主播美颜技术探秘:计算机视觉赋能的直播美颜SDK

今天&#xff0c;我们将深入探讨直播美颜技术背后的计算机视觉原理&#xff0c;以及赋能这一技术的直播美颜SDK。 一、计算机视觉与直播美颜 计算机视觉是一门研究如何使机器“看”的学科&#xff0c;它利用数字图像处理和模式识别等技术&#xff0c;使计算机能够模拟人类视觉…...

淘宝数据分析——Python爬虫模式♥

大数据时代&#xff0c; 数据收集不仅是科学研究的基石&#xff0c; 更是企业决策的关键。 然而&#xff0c;如何高效地收集数据 成了摆在我们面前的一项重要任务。 本文将为你揭示&#xff0c; 一系列实时数据采集方法&#xff0c; 助你在信息洪流中&#xff0c; 找到…...

Ansible自动化运维工具---Playbook

一、playbook playbook是剧本的意思 通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 playbook本身由以下各部分组成&#xff1a; Tasks: 任务&#xff0c;即调用模块完成的某操作Variables: 变量Templates: 模板Handlers: 处理器&#xff0c;当某条…...

语音识别--光谱门控降噪

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计7267字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…...

说说数据库中的primary key才能设置auto_increment

我每次给大家分享一个知识,都是我通过询问大模型,把没有搞懂的搞明白了,然后分享给大家,每次把不会的东西搞明白了,我都有成就感,感觉自己越来越强大了,也就慢慢不再焦虑了,给大家分享知识也是一种快乐 在mysql中,一个属性只有设置了primary key这才是主键,但是不能插入null,在…...