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

svo2论文

论文题目

SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems

内容

1) 具有最小特征漂移的长特征轨迹;
2) 图像平面中的大量均匀分布的特征;
3)新特征与旧地标的可靠关联(即环路闭合)。

算法不限于使用局部点特征(例如,角或斑点),而是可以跟踪边缘[14],或者更一般地,跟踪图像中具有梯度的所有像素时,例如,在具有少量或高频纹理的场景(例如,沙子[12]或沥青[13])中,许多像素被可靠跟踪的概率会增加,例如在密集[15]或半密集方法[16]中。

效率的提高是由于以下三个原因:首先,SVO只提取平行线程中选定关键帧的特征,因此与硬实时约束解耦。其次,所提出的直接跟踪算法消除了鲁棒数据关联的必要性。最后,与以前的直接方法相反,SVO只需要对环境进行稀疏重建

与svo1的提升:1本文的新颖之处在于推广到宽视场(FoV)透镜(见第VII节)、多摄像机系统(见第VIII节)、包含运动先验(见第IX节)和边缘特征的使用。

在这里插入图片描述
图4。拐角和小边的不同对齐策略。边缘特征的对齐被限制在边缘的法线方向n上。(a) 边缘对齐。(b) 拐角对齐。

Relaxation and Refinement

随着对准中帧之间距离的增加,不能保证对准的鲁棒性(见第XI-A节中的实验)。因此,我们建议放宽由三维点的重投影给出的几何约束,并对相应的特征块执行单独的二维对齐。相对于来自第一次提取特征的帧的参考补丁来执行新帧中的每个补丁的对准;因此,最老的帧是可能的,这应该最大限度地减少特征漂移。然而,二维对齐会产生重投影误差,即投影的三维点和对齐的特征之间的差异。因此,在最后一步中,我们执行束调整,以优化三维点的位置和相机姿态,从而将重新投影误差降至最低。我们特别注意位于强度梯度边缘上的特征。

对齐

对于点的
u ′ ∗ = u ′ + δ u ⋆ , with  u ′ = π ( T C B T k r T B C π ρ − 1 ( u ) ) δ u ⋆ = arg ⁡ min ⁡ δ u ∑ Δ u ∈ P 1 2 ∥ I k C ( u ′ + δ u + Δ u ) − I r C ( u + A Δ u ) ∥ 2 \begin{array}{l} \mathbf{u}^{\prime *}=\mathbf{u}^{\prime}+\delta \mathbf{u}^{\star}, \quad \text { with } \quad \mathbf{u}^{\prime}=\pi\left(\mathrm{T}_{\mathrm{CB}} \mathrm{T}_{k r} \mathrm{~T}_{\mathrm{BC}} \pi_\rho^{-1}(\mathbf{u})\right) \\ \delta \mathbf{u}^{\star}=\arg \min _{\delta \mathbf{u}} \sum_{\Delta \mathbf{u} \in \mathcal{P}} \frac{1}{2}\left\|\mathrm{I}_k^{\mathrm{C}}\left(\mathbf{u}^{\prime}+\delta \mathbf{u}+\Delta \mathbf{u}\right)-\mathrm{I}_r^{\mathrm{C}}(\mathbf{u}+\mathbf{A} \Delta \mathbf{u})\right\|^2 \end{array} u=u+δu, with u=π(TCBTkr TBCπρ1(u))δu=argminδuΔuP21 IkC(u+δu+Δu)IrC(u+AΔu) 2

对于边缘点的(这里的n是梯度方向)
u ′ ⋆ = u ′ + δ u ⋆ ⋅ n , with  δ u ⋆ = arg ⁡ min ⁡ δ u ∑ Δ u ∈ P 1 2 ∥ I k C ( u ′ + δ u ⋅ n + Δ u ) − I r C ( u + A Δ u ) ∥ 2 \begin{array}{l} \mathbf{u}^{\prime \star}=\mathbf{u}^{\prime}+\delta u^{\star} \cdot \mathbf{n}, \quad \text { with } \\ \delta u^{\star}=\arg \min _{\delta u} \sum_{\Delta \mathbf{u} \in \mathcal{P}} \frac{1}{2}\left\|\mathrm{I}_k^{\mathrm{C}}\left(\mathbf{u}^{\prime}+\delta u \cdot \mathbf{n}+\Delta \mathbf{u}\right)-\mathrm{I}_r^{\mathrm{C}}(\mathbf{u}+\mathbf{A} \Delta \mathbf{u})\right\|^2 \end{array} u=u+δun, with δu=argminδuΔuP21 IkC(u+δun+Δu)IrC(u+AΔu) 2

优化位姿

在特征对齐之后,我们建立了具有亚像素精度的特征对应关系。然而,特征对齐违反了对极约束,并引入了重投影误差δu,该误差通常远低于0.5像素。因此,在运动估计的最后一步中,我们通过最小化重投影误差的平方和来细化相机姿态和地标位置 X = T k W , ρ i X={T_{kW},ρi} X=TkWρi
X ⋆ = arg ⁡ min ⁡ X ∑ k ∈ K ∑ i ∈ L k C 1 2 ∥ u i ′ ∗ − π ( T C B T k W ρ i ) ∥ 2 + ∑ k ∈ K ∑ i ∈ L k E 1 2 ∥ n i ⊤ ( u i ′ ∗ − π ( T C B T k W ρ i ) ) ∥ 2 \begin{aligned} \mathcal{X}^{\star}= & \arg \min _{\mathcal{X}} \sum_{k \in \mathcal{K}} \sum_{i \in \mathcal{L}_k^C} \frac{1}{2}\left\|\mathbf{u}_i^{\prime *}-\pi\left(\mathrm{T}_{\mathrm{CB}} \mathrm{T}_{k \mathrm{~W}} \boldsymbol{\rho}_i\right)\right\|^2 \\ & +\sum_{k \in \mathcal{K}} \sum_{i \in \mathcal{L}_k^E} \frac{1}{2}\left\|\mathbf{n}_i^{\top}\left(\mathbf{u}_i^{\prime *}-\pi\left(\mathrm{T}_{\mathrm{CB}} \mathrm{T}_{k \mathrm{~W}} \boldsymbol{\rho}_i\right)\right)\right\|^2 \end{aligned} X=argXminkKiLkC21uiπ(TCBTk Wρi)2+kKiLkE21 ni(uiπ(TCBTk Wρi)) 2

大fov相机

为了估计新特征的深度(参见第六节),我们需要沿着核线对像素进行采样。对于失真的图像,极线是弯曲的(见图7)。因此,我们定期对大圆进行采样,大圆是对极平面与以感兴趣的相机姿态为中心的单位球体的交点。采样的角度分辨率大约对应于图像平面中的一个像素。对于每个样本,我们应用相机投影模型π(·)来获得弯曲核线上对应的像素坐标。

在这里插入图片描述
用于估计左图像中参考补丁中心像素深度的极线搜索示意图。给定两个图像的外在和内在校准,计算对应于参考像素的核线。由于自相似的纹理,沿着极线的错误匹配是经常发生的。

多相机系统

所提出的运动估计算法从相对姿态Tk k−1的优化开始。由于在第V-A节中,我们已经介绍了一个固定在相机上的机身框架B,因此现在可以直接将稀疏图像对齐推广到多个相机。给定具有M个相机的相机装备(见图9),我们假设单个相机c∈c相对于机身 T C B T_{CB} TCB的相对姿态是从外部校准中已知的。3为了将稀疏图像对准推广到多个相机,我们只需要在(1)的成本函数中添加一个额外的代价函数
T k k − 1 ⋆ = arg ⁡ min ⁡ T k − 1 ∑ C ∈ C ∑ u ∈ R ‾ k − 1 C 1 2 ∥ r I u C ( T k k − 1 ) ∥ Σ I 2 . \mathrm{T}_{k k-1}^{\star}=\arg \min _{\mathrm{T}_{k-1}} \sum_{\mathrm{C} \in \mathrm{C}} \sum_{\mathbf{u} \in \overline{\mathcal{R}}_{k-1}^{\mathrm{C}}} \frac{1}{2}\left\|\mathbf{r}_{\mathrm{I}_{\mathrm{u}}^{\mathrm{C}}}\left(\mathrm{T}_{k k-1}\right)\right\|_{\Sigma_{\mathrm{I}}}^2 . Tkk1=argTk1minCCuRk1C21 rIuC(Tkk1) ΣI2.

运动先验

在特征较差的环境中,在快速运动过程中,或在动态障碍物的情况下,使用运动先验可能非常有帮助。运动先验是在(11)中添加到成本函数的附加项,它惩罚与先验估计不一致的运动。因此,可以抑制由于无约束DoF或异常值引起的运动估计中的“跳跃”。例如,在汽车场景中,可以假设等速运动模型,因为汽车的惯性阻止了从一帧到下一帧的突然变化。其他先验可能来自额外的传感器,如陀螺仪,这使我们能够测量两帧之间的增量旋转。
假设我们在 p k , k − 1 p_{k,k−1} pk,k1之前得到了相对平移(例如,来自恒定速度假设),在 R k , k − 1 R_{k,k−1} Rk,k1之后得到了相对旋转(例如,源自积分陀螺仪)。在这种情况下,我们可以通过向稀疏图像对齐步骤的成本添加附加项来使用运动先验

T k k − 1 ⋆ = arg ⁡ min ⁡ T k k − 1 ∑ c ∈ C ∑ u ∈ R ‾ k − 1 c 1 2 ∥ r I u C ( T k k − 1 ) ∥ Σ I 2 + 1 2 ∥ p k k − 1 − p ~ k k − 1 ∥ Σ p 2 + 1 2 ∥ log ⁡ ( R ~ k k − 1 ⊤ R k k − 1 ) ∨ ∥ Σ R 2 \begin{aligned} \mathrm{T}_{k k-1}^{\star}= & \arg \min _{\mathrm{T}_{k k-1}} \sum_{\mathbf{c} \in \mathrm{C}} \sum_{\mathbf{u} \in \overline{\mathcal{R}}_{k-1}^{\mathrm{c}}} \frac{1}{2}\left\|\mathbf{r}_{\mathrm{I}_{\mathbf{u}}^{\mathrm{C}}}\left(\mathrm{T}_{k k-1}\right)\right\|_{\Sigma_{\mathrm{I}}}^2 \\ & +\frac{1}{2}\left\|\mathbf{p}_{k k-1}-\tilde{\mathbf{p}}_{k k-1}\right\|_{\Sigma_{\mathbf{p}}}^2 \\ & +\frac{1}{2}\left\|\log \left(\tilde{\mathrm{R}}_{k k-1}^{\top} \mathrm{R}_{k k-1}\right)^{\vee}\right\|_{\Sigma_{\mathrm{R}}}^2 \end{aligned} Tkk1=argTkk1mincCuRk1c21 rIuC(Tkk1) ΣI2+21pkk1p~kk1Σp2+21 log(R~kk1Rkk1) ΣR2

实现细节

在本节中,我们将提供有关我们实施的各个方面的更多详细信息。

Initialization

该算法使用[58]中的五点相对姿态算法进行自举,以获得前两个关键帧的姿态和初始贴图。在多摄像机配置中,通过立体匹配来获得初始映射。

Sparse Image Alignment

对于稀疏图像对齐,我们使用4×4像素的补丁大小。在实验部分,我们证明了具有如此小的补丁大小的稀疏方法实现了可比性当帧间距离很小时,在鲁棒性方面优于半密集和密集方法,这对于帧到帧的运动估计来说通常是正确的。为了处理大的运动,我们以粗到细的方案应用稀疏图像对齐算法。因此,对图像进行半采样以创建五个级别的图像金字塔。然后,从初始条件 T k , k − 1 = I 4 × 4 T_{k ,k−1}=I_{4×4} Tk,k1=I4×4开始,在最粗略的水平上优化光度成本,直到收敛。随后,在下一个更精细的级别上继续优化,以提高结果的精度。为了节省处理时间,我们在第三级收敛后停止,在这个阶段,估计足够准确,可以初始化特征对齐。为了提高对动态障碍、遮挡和反射的鲁棒性,我们还采用了鲁棒成本函数[24],[34]。

Feature Alignment

对于特征对齐,我们使用8×8像素的补丁大小。由于参考补丁可能是多帧旧的,我们使用仿射照明模型来应对照明变化[59]。对于所有实验,我们将匹配特征的数量限制为180,以保证每帧的成本不变。

Mapping

在映射线程中,我们将图像划分为固定大小的单元(例如,32×32像素)。对于每个关键帧,在单元中得分最高的FAST角[60]处初始化一个新的深度过滤器,除非已经存在2-D到3-D的对应关系。在没有发现角的单元中,我们检测具有最高梯度大小的像素,并初始化边缘特征。这将在图像中产生均匀分布的特征。为了加快深度估计,我们只对沿极线的短距离进行采样;在我们的情况下,该范围对应于当前深度估计的标准偏差的两倍。我们使用8×8像素的补丁大小进行核极搜索。

总结

在本文中,我们提出了半直接VO算法“SVO”,它比当前最先进的VO算法快得多,同时实现了极具竞争力的精度。速度的提高是由于只为并行线程中选定的关键帧提取特征,并且使用新的稀疏图像对齐算法可以非常快速和稳健地建立特征匹配。稀疏图像对齐在极线约束下联合跟踪一组特征,当特征位置的场景深度已知时,可以使用稀疏图像对齐来代替KLT跟踪[69]。我们进一步建议使用明确建模异常值测量的鲁棒滤波器来估计场景深度。稳健的深度估计和直接跟踪使我们能够跟踪非常弱的拐角特征和边缘。SVO的另一个好处是,它直接从优化开始,这使我们能够轻松地集成来自多个相机的测量以及运动先验。公式可进一步在配有鱼眼和折反射透镜的大型FoV相机使用。SVO算法已被进一步证明在现实世界的应用中是成功的,例如基于视觉的四旋翼飞行[54]或智能手机的三维扫描应用。

相关文章:

svo2论文

论文题目 SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems 内容 1) 具有最小特征漂移的长特征轨迹; 2) 图像平面中的大量均匀分布的特征; 3)新特征与旧地标的可靠关联(即环路闭…...

【GoLang】MAC安装Go语言环境

小试牛刀 首先安装VScode软件 或者pycharmmac安装brew软件 brew install go 报了一个错误 不提供这个支持 重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env 可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc, # bre…...

epoll服务器创建

驱动 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #include <linux/uaccess.h> #include <linux/poll.h> unsigned int major; char kbuf[128]{0}…...

jdk11环境 提示“因为 accessExternalDTD 属性设置的限制导致不允许 ‘http‘ 访问“bug

在运行mybatis源码的时候&#xff0c;提示一下错误&#xff1a; Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.apache.ibatis.builder.BuilderException: Error creating docum…...

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …...

一个 SpringBoot 项目能处理多少请求

首先&#xff0c;这个问题有坑&#xff0c;因为 spring boot 不处理请求&#xff0c;只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。 使用 spring boot 进行开发相对于之前写配置文…...

Python中的r字符串前缀及其用法详解

Python中的r字符串前缀及其用法详解 1. 介绍 1.1 什么是r字符串前缀 在Python中&#xff0c;r字符串前缀是一种特殊的字符串前缀&#xff0c;用于表示原始字符串。当一个字符串以r前缀开始时&#xff0c;它将被视为原始字符串&#xff0c;其中的转义字符将被忽略。 1.2 r字…...

LabVIEW实现三相异步电机磁通模型

LabVIEW实现三相异步电机磁通模型 三相异步电动机由于经济和出色的机电坚固性而广泛用于工业化应用。这台机器的设计和驱动非常简单&#xff0c;但在控制扭矩和速度方面&#xff0c;它隐藏了相当大的功能复杂性。通过数学建模&#xff0c;可以理解机器动力学。 基于微分方程的…...

读书会-《影响力》

《影响力》这本书的作者罗伯特西奥迪尼时全球知名说服力研究权威。因其在影响力研究领域的开创性&#xff0c;人们将其称为“影响力研究领域的本杰明富兰克林”。这本书从人们的心理状态&#xff0c;进行了很多实验研究&#xff0c;总结出了7大规律。如果从事营销&#xff0c;需…...

141. 环形链表

简单 1.9K 相关企业 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链…...

学习笔记|大模型优质Prompt开发与应用课(二)|第一节:大模型应用密码—Prompt的一千种打开方式

文章目录 第一节:大模型应用密码—Prompt的一千种打开方式01你可能听过一个小故事1910华盛顿纺织厂罢工事件 02 小问题:哪些场景会被提效类目一︰减少重复性工作的成本&#xff08;降本)例如∶做策划初稿、写JD、润色文案prompt生成结果prompt生成结果prompt生成结果promptprom…...

QT chart进行画图

说明 QT Chart 是一个用于在 Qt 应用程序中绘制图表的开源库。它提供了多种类型的图表,如线图、柱状图、饼图等,可以用于可视化数据和统计信息。QT Chart 是一个基于 Qt 绘图框架的扩展,可以轻松集成到现有的 Qt 应用程序中。 使用 QT Chart,你可以通过简单的代码来创建和…...

Web3将自己写在合约中的代币添加到MetaMask中管理

上文 Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约 带着大家在智能合约中创建了一个自己的代币系统 我们可以在MetaMask中去导入 ganache环境下模拟出来的第一和第二个账号 我们这里 可以看到他们的 ETH 但看不到自己的代币符号 没关系 我们点击这下面的…...

【微信小程序】显示自带的弹窗,包括加载中,成功,错误,提示,警告

在微信小程序中&#xff0c;可以使用以下方法来显示自带的弹窗&#xff1a; 显示加载中的弹窗&#xff1a; wx.showLoading({title: 加载中,mask: true });显示成功的弹窗&#xff1a; wx.showToast({title: 成功,icon: success,duration: 2000 });显示错误的弹窗&#xff1…...

vue-element-plus-admin框架的tag上下文切换bug

问题 首先贴上该框架的链接&#xff1a;https://github.com/kailong321200875/vue-element-plus-admin 在对路由进行部分修改后&#xff0c;网站多次切换tag时&#xff0c;控制台会出现报错&#xff1a;Cannot read properties of undefined (reading offsetLeft)。 我在框架…...

vue中,父子组件传递参数 props 实现方式

通过 Prop 向子组件传递数据 001&#xff1a;父组件》子组件通信 <template><div><h1>这里是父元素</h1>//******<childComponent :detailMes"detailMes"/></div> </template><script>import childComponent from…...

Unity如何快速接入iOS和GooglePlay的成就排行榜等GameCenter功能

一般在游戏开发中&#xff0c;经常有成就排行榜的需求&#xff0c;按照我们的理解&#xff0c;通常是要自己导入谷歌的sdk&#xff0c;或者苹果的sdk&#xff0c;然后封装后通过桥接来调用。 不用这么复杂&#xff0c;本鱼蛋(egostudio 防爬)告诉大家一个方法&#xff0c;其实…...

Unity下如何实现低延迟的全景RTMP|RTSP流渲染

技术背景 Unity3D可以用于创建各种类型的的应用程序&#xff0c;包括虚拟现实、培训模拟器等。以下是一些可以使用Unity3D全景播放的场景&#xff1a; 虚拟现实体验&#xff1a;全景视频可以用来创建逼真的虚拟环境&#xff0c;使用户能够感受到身临其境的感觉&#xff1b;培…...

STM32 USB使用记录:HID类设备(后篇)

文章目录 目的基础说明项目构建与代码调整接收发送代码与测试示例链接报告描述符总结 目的 接上篇&#xff1a; 《STM32 USB使用记录&#xff1a;HID类设备&#xff08;前篇&#xff09;》 USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文…...

C# 快速写入日志 不卡线程 生产者 消费者模式

有这样一种场景需求&#xff0c;就是某个方法&#xff0c;对耗时要求很高&#xff0c;但是又要记录日志到数据库便于分析&#xff0c;由于访问数据库基本都要几十毫秒&#xff0c;可在方法里写入BlockingCollection&#xff0c;由另外的线程写入数据库。 可以看到&#xff0c;在…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...