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

One-4-All: Neural Potential Fields for Embodied Navigation 论文阅读

论文信息

题目:One-4-All: Neural Potential Fields for Embodied Navigation
作者:Sacha Morin, Miguel Saavedra-Ruiz
来源:arXiv
时间:2023

Abstract

现实世界的导航可能需要使用高维 RGB 图像进行长视野规划,这对基于端到端学习的方法提出了巨大的挑战。

目前的半参数方法通过将学习的模块与环境的拓扑记忆相结合来实现长范围导航,通常表示为先前收集的图像上的图形。
然而,在实践中使用这些图需要调整一些修剪启发法。这些启发式对于避免虚假边缘、限制运行时内存使用以及在大型环境中保持相当快速的图形查询是必要的。

我们提出了 One-4-All (O4A),这是一种利用自监督和流形学习来获得无图、端到端导航管道的方法,其中目标被指定为图像。导航是通过贪婪地最小化在图像嵌入上连续定义的势函数来实现的。我们的系统在 RGB 数据和控件的非专家探索序列上进行离线训练,并且不需要任何深度或姿势测量。

在这里插入图片描述

Introduction

导航问题的特点是机器人能够识别给定环境中起始姿势和目标姿势之间最有效和可行的路径。

标准方法包括首先在环境中驾驶机器人来构建度量地图(通常使用范围传感器),然后使用此表示进行规划 [1]。然而,这些方法的记忆复杂性随着环境的大小而扩展得很差,并且它们不利用语义信息或视觉线索[2]。

作为替代方案,基于学习的方法(也称为体验式学习 [3])由于能够直接处理高维数据(例如图像)并推理场景中的非几何概念而获得了发展势头。此外,这些方法对于非专业用户来说使用起来更加直观,因为它们允许使用地点或对象的图像而不是度量空间中的坐标来指定目标位置[4]。然而,端到端的体验式学习通常会学习一个将图像直接映射到动作的全局控制器,无法推理长期目标。此外,它们因数据效率低下而闻名

为了克服长视距导航的挑战,拓扑记忆表示[7]被用来将导航问题分为两部分。
首先,内存表示用于生成全局一致的导航计划,
然后使用学习的或经典的本地控制器[8]逐个航路点地跟踪该计划。
结合了基于记忆和学习的组件的方法被称为半参数,而仅依赖于学习的方法被称为全参数。

虽然半参数方法已被证明对于室内 [9]、[10]、[4]、[11] 和室外 [12]、[13] 基于图像的导航有效,但它们仍然遇到内存问题。这是拓扑记忆通常被编码为图的结果,其节点表示访问的状态,边表示可遍历性。随着环境规模的增加,图中需要更多的节点和边,从而增加内存需求。

此外,图中的虚假连接可能会阻碍导航性能,因为它们可能代表物理世界中不可行的转换,从而导致全局规划阶段的故障模式。

为了解决这些限制,我们提出了 One-4-All (O4A),一种用于图像目标导航的端到端全参数方法。
O4A 使用 RGB 数据和控件的非专家探索序列进行离线训练。
我们首先依靠自我监督学习来识别相邻的 RGB 观察值。有了这种连通性的概念,我们计算一个图来为我们的规划模块导出流形学习目标[14]、[15],我们将其称为测地线回归器。
测地线回归器将学习预测成对 RGB 图像之间的最短路径长度,从这个意义上说,对环境的几何形状进行编码并充当我们的内存模块 。虽然我们在训练期间计算临时图,但我们将其丢弃以进行导航,并发现它不需要现有半参数方法的手工图修剪启发式方法。直观上,我们用图中潜在大量的节点和边来换取固定数量的可学习参数,从而减轻半参数方法的内存限制。推理也得到了改进:图查询被神经网络中的高效前向传递所取代。

我们的主要贡献是:
• 使用 RGB 数据和控制的非专家探索序列的离线自我监督训练程序,无需任何深度或姿势测量。
• 无图、端到端的导航管道,避免调整图修剪启发法;
• 一个潜在的基于实地的规划器,由于经过多种学习目标训练的测地线吸引子,可以避免局部极小值并达到长期目标;
• 一个可解释的系统,即使在没有任何姿态信息的情况下,也可以恢复其潜在空间中的环境拓扑。

Related work

这部分就是Introduction的详细版,暂时不需要过多关注

Method

Problem Definition

我们考虑一个具有离散动作空间 A = { S T O P , F O R W A R D , R O T A T E _ R I G H T , R O T A T E _ L E F T } A = \{STOP, FORWARD, ROTATE\_RIGHT, ROTATE\_LEFT\} A={STOP,FORWARD,ROTATE_RIGHT,ROTATE_LEFT} 的机器人来执行图像目标导航任务 [31]。利用我们对机器人几何形状的了解和适当的外感受机载传感器(例如,前置激光扫描仪),我们假设可以估计一组无碰撞动作。

当提示目标图像 o g o_g og 时,智能体应仅使用 RGB 观测值 o t o_t ot A f r e e A_{free} Afree 估计在部分可观察的设置中导航到目标位置。

代理还需要通过在目标附近自动调用 STOP 来确定何时达到目标

Data

我们的目标是使用深度神经网络参数化的学习模块来实现图像目标导航。对于任何给定的环境,我们假设一些先前收集的观测轨迹 τ o = { o t } t = 1 T τ_o = \{o_t\}^T_{t=1} τo={ot}t=1T 和相应的动作 τ a = { a t } t = 1 T τ_a = \{a_t\}^T_{t=1} τa={at}t=1T 可用。为了符号简洁性,我们考虑来自单一环境的单一轨迹,但实际上使用来自不同环境的多个数据轨迹(图 2)。我们不需要专家的数据收集策略,数据集可以是远程操作、自我探索或随机游走的产物,只要它充分覆盖环境的自由空间即可。

值得注意的是,我们在无监督的环境中处理导航,并且不假设可以访问每个图像观察的姿势估计,这极大地简化了数据收集。此外,我们不收集任何深度测量结果,仅在运行时依靠前置激光扫描仪进行简单的碰撞检查。

System

Overview

我们在图 2 中说明并展示了我们系统的概述。我们首先依靠自监督学习来学习与连接头配对的 RGB 主干,以推断 τ o τ_o τo 中所有图像的图形。然后,该图将用于导出正向运动学模块和测地线回归器的训练目标。
在这里插入图片描述

Local Backbone

本地主干学习从原始图像到低维嵌入 h : O R G B → X h : O_{RGB} → X h:ORGBX 的映射。为了简单起见,我们将提取的特征表示为 x = h(o)。函数 h 将具有双重目的:
1)提取 X = Rn 中的低维特征,将其用作其他模块的输入;
2)学习定义为
在这里插入图片描述
鉴于训练数据中缺乏姿势信息,h 通过自我监督学习进行训练。我们使用经常用于训练暹罗架构的对比损失函数的变体:
在这里插入图片描述
方程 2 是时间对比学习的一个实例:我们知道连续观察(正对)在姿态方面确实很接近,因此鼓励其与 X 中的距离恰好为 m+ 。负数被推到至少 m− 的距离,反映了这样一个事实:即使现阶段未知它们之间的确切距离,它们也不应该共享相同的邻域。这一最新的观察激发了术语“局部度量”[15],因为实际距离 dh 仅在应用于潜在空间中接近的正对时才提供信息。应该强调的是,dh 通常无法预测负对之间的距离,因为它往往在 m− 附近饱和,如[15]中所述。

Inverse Kinematics Head

组件 f † : X × X → A ∪ { N O T _ C O N N E C T E D } f^† : X × X → A ∪ \{NOT\_CONNECTED\} f:X×XA{NOT_CONNECTED} 预测两个嵌入之间移动所需的操作,或者当认为单个操作中的转换不可行时返回 N O T _ C O N N E C T E D NOT\_CONNECTED NOT_CONNECTED 标记。因此, f † f^† f 既充当闭环模块又充当逆运动学预测器。

它是使用 τ a τ_a τa 中观察到的动作的标准交叉熵损失进行训练的。我们使用等式 2 中的相同负数 N 来训练 NOT_CONNECTED 类。

即使 N 中的大多数负例都是真负例(从某种意义上说,观察结果与一个操作步骤无法连接),h 和 f † f^† f 在训练过程中也可能会遇到偶尔的假负例。例如,如果同一位置被访问两次,则引发的观察结果可能在时间上不连续,然后可能出现在 N 中。这些漏报实际上对应于经过训练的系统应该在数据中发现的闭环。在实践中,事实证明,假阴性并不会阻止 f † f^† f 学习良好的连接性(图 4)。

Graph Construction

配备了 h 和 f † f^† f,我们现在可以构建一个有向图 G,其边使用 dh 进行加权(等式 1)。我们首先将收集的数据视为具有观察到的边 E o = ( o t , o t + 1 ) : o t , o t + 1 ∈ τ o Eo = {(ot, ot+1) : ot, ot+1 ∈ τo} Eo=(ot,ot+1):ot,ot+1τo 的链图,然后运行成对计算以获得新的闭环边 Ep = {(ot, os ) : ot, os ε τo, f †(xt, xs) ε A}。最终的图形是 G = (τo, Eo ∪ Ep)。不需要对图进行额外的后处理,这与现有方法[9]、[10]、[12]、[26]相反,现有方法可能需要调整大量超参数来管理节点和边。

Forward Kinematrics Head

正向运动学头由 f : X × A → X f : X × A → X f:X×AX 表示,并使用来自 G 的边/过渡进行训练。对于训练期间 G 中的任何边 ( o t , o s ) (o_t, o_s) (ot,os),使用均方误差损失来训练模块以逼近函数 ( x t , f † ( x t , x s ) ) → x s (x_t, f^†(x_t, x_s)) → x_s (xt,f(xt,xs))xs,使用反向运动学头 f † f^† f 提供输入动作,即使没有观察到。因此,f 将受益于 E p E_p Ep 中最初未在 E o E_o Eo 中观察到的额外跃迁。上面是一个称为协同训练的半监督学习实例[33],其中函数 h 和 f † f^† f 用于标记训练集中看不见的转换,从而增强用于训练 f 的监督信号。

Geodesic Regressor

最终组件和核心规划模块 p + : X × X → R + p^+ : X × X → \mathbb{R}^+ p+:X×XR+ 学习预测 G 上的最短路径长度。我们将这些距离表示为 d G ( o t , o g ) d_G(o_t, o_g) dG(ot,og) 并使用 Dijkstra 算法计算它们。 d G d_G dG 是在来自 G 的离散顶点集的观察对上定义的。我们的目标是将其扩展到连续潜在空间 X 上,以在运行时预测任何图像对的最短路径长度。测地线回归器的训练损失为
在这里插入图片描述
将观测结果解释为来自嵌入高维 RGB 空间中的流形的样本,主干 h 学习局部欧几里德邻域 (dh) 的嵌入,这些邻域通过图搜索链接在一起以计算整个流形上的测地线(固有)距离。方程 3 实际上对应于流形学习目标 ,我们将在图 4 中以可解释的环境可视化形式显示 O4A 训练结果。

一旦所有组件都经过训练,G 就可以被丢弃,并且在部署系统时不再需要 G。事实上,f 和 p + p^+ p+ 都将提供图像目标导航所需的所有信息,我们将在第 IIID 小节中详细介绍。事实上,测地线回归量 p + p^+ p+ 可以解释为对 G 的几何形状进行编码,从而用潜在的大量节点和边换取固定数量的可学习参数。

Multiple Environment Setting

当考虑 k 个环境时,我们在整个数据上训练 h 和 f † f^† f。为了给模型提供更具挑战性的任务,我们从相同环境或不同环境中采样负样本 N。然后,h 和 f † f^† f 可用于闭环并计算一组图 { G i } i = 1 k \{G_i\}^k_{i=1} {Gi}i=1k,每个环境一个。然后使用所有图表的转换来训练正向运动学 f。最后,每个 G i G_i Gi 用于训练测地线回归器 p i + p^+_i pi+ 。总之,h、 f † f^† f 和 f 是跨环境共享的,而 p i + p^+_i pi+ 是特定于环境的。

Navigation

在本节中,我们讨论如何部署 O4A 进行导航。我们的方法受到人工势场 (APF) 方法 [20] 的强烈启发,
该方法通过定义
A)目标周围的吸引势和
B)障碍物周围的排斥势来规划代理配置空间上的运动
从而使代理能够最小化通过梯度下降的总势函数在避开障碍物的同时达到目标。

与 APF 一样,O4A 将通过最小化位于目标处的吸引子来进行导航。
由于实际的代理和目标状态是未观察到的,因此潜在的计算发生在潜在空间 X 上,即代理和目标 RGB 观察值的嵌入。
作为吸引子,我们使用测地回归器 p+ 来估计到目标的测地距离。
至关重要的是,这种吸引子会影响环境几何形状,例如,可以将智能体驱出死胡同,到达欧几里得距离接近但测地距离较远的目标(参见图 3)。
在这里插入图片描述
在实践中,我们发现仅最小化 p+ 不足以成功导航。由于吸引子景观中的局部最小值,代理通常会在两个姿势之间摇摆,这可能是由于学习错误和离散动作空间而发生的。因此,我们发现定义一个潜在排斥函数很有用,该函数仅在特定半径 m r ∈ R + m_r ∈ \mathbb{R}^+ mrR+ 内有效:
在这里插入图片描述
详细的导航过程如算法 1 所示。在导航过程中,我们的智能体通过在由碰撞检测函数 γ 估计的集合 Af ree 上使用正向运动学寻找最佳候选动作,贪婪地最小化 P。这与 APF 形成鲜明对比,因为我们将引发碰撞的动作列入黑名单,而不是明确地建模障碍物周围的斥力。在实践中,由于代理在原地旋转,我们假设只有FORWARD动作才能引起碰撞,这大大简化了碰撞检测γ:我们只需根据机器人的几何形状在机器人前面定义一个扫描碰撞框。

还应该注意的是,STOP 操作从未​​包含在 Af ree 中。相反,我们发现对本地指标 dh 进行阈值设置是在目标附近调用 STOP 的更可靠方法。
在这里插入图片描述

Experiments

我们在模拟和现实环境中评估我们的方法。该代理是一个差动驱动机器人,配有两个 RGB 摄像头,一个朝前,另一个朝后,每个摄像头的视野均为 90°。每张图像的分辨率为 96×96 像素。与[34]一致,机器人向前移动0.25m,旋转15°
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Conclusion

虽然经过训练的 O4A 是无图的,但我们仍然需要为每个环境学习测地线回归器来对几何进行编码(就像当前的方法需要构建特定于环境的图一样)。
跨环境推广测地线回归是一个有前途的研究领域,因为它可以允许在新设置中完全跳过图形构建阶段。此外,现实世界的实验表明,O4A 很难最大限度地减少旋转动作的数量,并且仍然存在一定数量的垃圾。我们认为,这可能是由 15° 离散旋转动作引起的:如果机器人理想情况下需要转动 7.5°,它可能会在向左和向右之间振荡,因为事实上每个步骤都是贪婪地采取行动,而不是明确地遵循一个长的动作。短期计划。进一步调整负势或具有连续动作空间的实现应该可以解决这个问题。
最后,与许多现有的导航和 SLAM 系统一样,O4A 不考虑动态或半静态对象

相关文章:

One-4-All: Neural Potential Fields for Embodied Navigation 论文阅读

论文信息 题目:One-4-All: Neural Potential Fields for Embodied Navigation 作者:Sacha Morin, Miguel Saavedra-Ruiz 来源:arXiv 时间:2023 Abstract 现实世界的导航可能需要使用高维 RGB 图像进行长视野规划,这…...

【ES】笔记-函数参数默认值

函数参数默认值 ES6 允许给函数参数赋值初始值 1. 形参初始值 具有默认值的参数,一般放到最后 function add(a,b,c10){return abc}let resultadd(1,2);console.log(result);2. 与解构赋值结合 function connect({host"127.0.0.1",username,password,port…...

安装harbor

目录 1. 安装docker-compose Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例…...

kube-prometheus 使用 blackbox-exporter 进行icmp 监控

安装kube-prometheus 后默认在monitoring namespace中有创建 blackbox-exporter deployment。但默认没有icmp的module配置,无法执行ping探测。因为即使有icmp module,默认配置也是无法执行ping探测的(这篇文章要解决的就是这个问题&#xff0…...

【python技巧】文本文件的读写操作

【python技巧】文本文件的读写操作 0. 背景1. file库的文件操作1.1 打开文件---file.open()1.2 读取文件---file.read()1.3 写入文件---file.write()1.4 查找内容---file.seek() 2. re库的文本处理参考资料 0. 背景 最近在写后端接口的时候,需要对.c、.conf等类型的…...

SpringBoot项目(验证码整合)——springboot整合email springboot整合阿里云短信服务

目录 引出springboot整合email配置邮箱导入依赖application.yml配置email业务类测试类 springboot整合阿里云短信服务申请阿里云短信服务测试短信服务获取阿里云的accessKeyspringboot整合阿里云短信导包工具类 总结 引出 1.springboot整合email,qq邮箱,…...

缓存穿透,击穿,雪崩之间的区别与联系

1、缓存数据基本流程 通常来说,我们是从数据库将数据查询出来之后,如果数据不为空,则将数据存储在缓存中,下次查询时就直接从缓存查询了,只有查询不到才会从数据库查询。 2、缓存穿透 核心在穿透两个字,穿透了,就说明在查询数据时没有遇到阻碍,直接就查询到了数据库。…...

Vue项目npm run dev 启动报错TypeError: Cannot read property ‘upgrade‘ of undefined

vue项目启动报错 TypeError: Cannot read property upgrade of undefined 由于我的vue.config.js文件 里面的代理target为空导致的 修改: 结果就可以正常运行了 参考原文: vue项目运行时报Cannot read property ‘upgrade’ of undefined错误_cannot r…...

dji uav建图导航系列(二)导航

文章目录 1、导航节点launch文件1.1、节点参数1.2、模拟器节点1.3、无人机雷达-底盘节点1.4、地图服务器节点1.5、AMCL节点1.6、move_base节点1.7、rviz可视化节点2、导航测试2.1、导航实测2.2、动态参数配置 rqt_reconfigure1、导航节点launch文件 导航节点启动文件 uav_navi…...

24.Netty源码之合理管理堆内存

highlight: arduino-light 合理管理 Netty 堆外内存 内存使用目标 •内存占用少(空间) •应用速度快(时间) 即多快好省 对 Java 而言:减少 Full GC 的 STW(Stop the world)时间 内存使用技巧 • 减少对象本身大小 md 例 1:用基本类型就不要用包装类。 例…...

如何自学(黑客)网络安全

前言: 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“…...

【vue】vue基础知识

1、插值表达式&属性绑定 <!--template展示给用户&#xff0c;相当于MVVM模式中的V--> <template><div class"first_div">//插值表达式<p>{{ message }}</p>//这里的参数是从父组件的template里传过来的<p>{{data_1}}</p…...

第一百一十一回 如何实现屏幕适配

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了动画相关的内容&#xff0c;本章回中将介绍 如何适配屏幕.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们平常使用的手机屏幕大小不同&#xff0c;App运行在这些大小不同的屏幕上时效果却相同&…...

免费实用的日记应用:Day One for Mac中文版

Day One for Mac是一款运行在Mac平台上的日记软件&#xff0c;你可以使用Day One for mac通过快速菜单栏条目、提醒系统和鼓舞人心的信息来编写更多内容&#xff0c;day one mac版还支持Dropbox同步功能&#xff0c;想要day one mac中文免费版的朋友赶紧来试试吧&#xff01; …...

HCIP的BGP基础实验

一、实验需求 除R5的5.5.5.0环回外&#xff0c;其他所有的环回均可互相一访问。 二、实验步骤 1.配置ip 2.建立邻居关系 2.1 R1和R2建立直连的EBGP邻居关系 [r1]bgp 1 [r1-bgp]router-id 1.1.1.1 [r1-bgp]peer 12.1.1.2 as-number 2 要建的话双方都要建下面配置R2 [r2]bgp…...

centos7编译安装升级python3.11

编译安装python3.11 准备步骤解压编译替换升级 准备步骤 yum -y install gcc zlib zlib-devel libffi libffi-devel bzip2-devel yum -y install openssl-devel openssl11 openssl11-devel yum -y install readline-devel解压编译 wget https://www.python.org/ftp/python/3.…...

win10安装mysql和c++读取调用举例

一、下载mysql8.rar解压到C盘(也可以解压到其他位置) 在系统环境变量添加JAVA_HOMEC:\myslq8&#xff0c;并在path中添加%JAVA_HOME%\bin; 二、以管理员身份进入命令窗口 三、修改配置文件指定安装路径和数据库的存放路径 四、键入如下命令初始化并启动mysql服务,然后修改登录…...

计算机竞赛 opencv python 深度学习垃圾图像分类系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; opencv python 深度学习垃圾分类系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 这是一个较为新颖的竞…...

通讯协议037——全网独有的OPC HDA知识一之聚合(六)实际时间最小值

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…...

【Freertos基础入门】freertos任务的优先级

文章目录 前言一、任务优先级1.Tick2.修改任务优先级 总结 前言 本系列基于stm32系列单片机来使用freerots 任务管理是实时操作系统&#xff08;RTOS&#xff09;的核心功能之一&#xff0c;它允许开发者以并发的方式组织和管理多个任务。FreeRTOS 是一个流行的开源RTOS&…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...