EGO Swarm翻译
目录
摘要
Ⅰ 介绍
Ⅱ 相关工作
A . 单四旋翼局部规划
B . 拓扑规划
C. 分布式无人机集群
Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成
A.无需ESDF梯度的局部路径规划
B.隐式拓扑轨迹生成
Ⅳ 无人机集群导航
A 机间避碰
B. 定位漂移补偿
C. 从深度图像中去除agent
Ⅴ 系统结构
A . 单个agent的导航系统
B .通信框架
Ⅵ 基准
A. 拓扑规划
B. 集群规划
1. 空旷环境中。
2. 在障碍物丰富的环境中。
3. 可扩展性分析
摘要
本文提出了一种分布式异步系统解决方案,用于多机器人在未知障碍物丰富的场景中仅利用机载资源进行自主导航。
在基于梯度的局部规划框架下建立规划系统,通过将碰撞风险制定为非线性优化问题的惩罚来实现避碰。
为了提高鲁棒性和避免局部极小值,结合了一个轻量级拓扑轨迹生成方法。然后,智能体使用不可靠的轨迹共享网络能在几毫秒内生成安全、平滑且动态可行的轨迹。
通过使用深度图像中的智能体检测校正智能体之间的相对定位漂移。通过仿真和实际实验验证了该方法的有效性。
注:agent为智能体
Ⅰ 介绍
四旋翼的灵活(敏捷性)使该机器能够在未知环境中执行单智能体自主导航,并在开放或已知领域中执行多智能体精确编队控制。
(针对的问题)然而,很少有工作将两者结合起来,以呈现任何能够导航共享相同未知空间的四旋翼机群的真实系统,尤其是仅使用机载处理的系统。在未知环境中部署多个四旋翼机的困难包括但不限于障碍物参数化的重要性、有限的传感范围、不可靠且带宽有限的通信以及定位不一致导致的定位漂移。
一些相关的工作,例如[1,2],将现实世界中的四旋翼群推得更远。然而,在以往的大多数工作中,上述困难在运动捕捉系统或纯仿真中总是被忽视,限制了其算法在实际中的应用。
本文提出了一种系统的解决方案,在上述困难存在的情况下,使四旋翼无人机群能够在杂乱的环境中进行高性能探索。此外,它不需要外部定位和计算,也不需要预先构建地图。该系统名为EGO Swarm,是我们之前工作的扩展,基于无ESDF梯度的局部规划器(EGO planner)[3],它为未知环境中单个四旋翼的机载局部规划奠定了坚实的基础。
这个扩展由拓扑规划和交互(机间)避碰两部分组成。
如图3所示,非凸配置空间可能导致不期望的行为,例如动力学不可行性或拥挤导航。
因此,一种避免局部极小的策略,如拓扑规划,是有益的。
基于EGO Planner中的碰撞代价公式,前端拓扑路径搜索是隐式进行的,因此几乎不需要计算。通过在目标函数中加入群碰撞的加权惩罚,实现了分布式机间避碰。通过比较未来某一时刻的agent分布和正在优化的轨迹来评估此惩罚。为了尽量减少数据传输并允许不可靠的通信,使用广播网络共享轨迹。
为了纠正相对定位漂移,可以将其增加精度到半米,我们比较了目标agent的观测结果和轨迹评估的预测结果。
真实世界的实验验证了我们提出的swarm系统。据我们所知,这是在未知的杂乱环境中完全自主分散四旋翼集群的第一个系统化解决方案,这意味着感知、规划和控制被集成到机载系统中。与几种SOTA方法的比较表明了计算效率和鲁棒性。本文的贡献总结如下:
- 我们扩展了先前的工作EGO Planner提出一种几乎不增加额外计算量的新型鲁棒拓扑规划方法。
- 我们提出了一个分布式和异步四旋翼集群框架,它对不可靠的通信和定位漂移不敏感。
- 所提出的方法被集成到一个完全自主的四旋翼系统中,并发布了硬件和软件供社区参考1。
Ⅱ 相关工作
A . 单四旋翼局部规划
基于梯度的运动规划是四旋翼局部规划的主流。在将局部规划问题描述为无约束非线性优化的开创性工作[4,5]的基础上,提出了一系列工作[6]–[10]。他们使用各种参数化方法,包括多项式和B样条,考虑轨迹的平滑性、可行性和安全性。最近,我们提出了一个名为EGO_Planner[3]的单四旋翼导航系统,它使用更紧凑的环境表示法进一步减少了计算时间。这就是本文所基于的工作。
B . 拓扑规划
拓扑规划用于避开局部最小值。基于源自复分析 [11] 的二维表面中的homology等价关系,Rosmann 等人 [12] 提出了一种使用 Voronoi 图和基于采样的前端以及 TEB 本地规划器 [13] 作为后端的独特拓扑轨迹规划方法。然而,3-D 中的homology等价关系要简单得多。为了捕捉独特的有用路径,Jaillet 等人 [14] 构建可见性变形路图,其编码比homotogy类的代表性路径更丰富、更相关的信息。基于 [14],Zhou 等人 [15]通过提出有效的拓扑等效检查来实现实时拓扑规划。我们扩展了 EGO-Planner 以进一步加速拓扑规划的前端。
C. 分布式无人机集群
例如,[16]-[20]中提出了去中心化方法。利用速度障碍来保证质点机器人 [16]、完整agent [17]和非完整agent [18]的无碰撞轨迹。刘等人[21]提出了一种分散和异步的无人机规划策略,以避免静态/动态障碍物和机间碰撞。虽然这些算法是通过仿真验证的,但没有集成传感、测绘、规划能力。实验结果已在[19, 20]中显示。[19]可以在没有外部障碍的情况下实现多机点对点过渡,并且[20]依赖于临时规划优先级。然而,它们都没有在外场环境中实现完全自主。
Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成
在本节中,我们首先介绍我们以前在EGOPlanner [3]上的工作,这是我们提出的swarm系统的基础。然后对提出的拓扑规划策略进行了说明。
A.无需ESDF梯度的局部路径规划
作为基于梯度的局部规划器,EGO-Planner将轨迹生成公式化为非线性优化问题,该问题在平滑度Js、碰撞Jc、动态可行性Jd和终端进度Jt之间进行权衡。使用均匀B样条φ的控制点Q作为决策变量来参数化轨迹的优化问题由下式给出:
其中r = {s,c,d,t},下标λ表示相应的权重。J项可以分为两类:最小误差和软单边约束。最小误差项Js和Jt使决策变量L(Q)的线性变换和期望值D之间的总误差最小化,公式如下:
软单边约束项Jc和Jd, 惩罚超过特定阈值的决策变量τ,表示为如下:
其中参数S、n和ε,影响单边约束近似精度,如[13]所述。根据惩罚类型选择变换L(.)和参数。由于论文篇幅有限,这里省略了L(.)的确切形式,可以在[3]中找到。
在EGO-Planner中,我们提出了一种新的障碍物距离估计方法,该方法利用了每个Q独立拥有的环境信息。由几个{p,v}对参数化的信息是从周围障碍物中高度抽象的,其中p表示障碍物表面的锚点,v表示从该障碍物内部指向外部的安全方向,如图4a所示:
然后,第i个控制点Qi到第j个障碍物的障碍物距离dij定义为:
{p,v}对生成和轨迹优化程序如图4a和4b所示。首先给出一个简单的初始轨迹φ,不考虑碰撞。然后搜索连接φ的碰撞段两端的安全路径Γ。之后从φ到Γ生成向量v,p为锚点定义在障碍物表面。利用生成的{p,v}对,规划器最大化dij并返回优化的轨迹。由于文章篇幅有限,这里我们只对EGO-Planner的基本思想做一个简单的描述。详细的解释可以在[3]中找到。
B.隐式拓扑轨迹生成
[14, 15] 中的分析表明,广泛使用的homotopy概念不足以捕获3D空间中的候选轨迹,如图 5 所示。
因此,Jaillet等人[14]在 3D空间中提出了一种更有用的关系,称为可见性变形 (visibility deformation),以及Zhou等人[15]进一步提取了称为统一可见性变形(UVD)的VD子集,它可以实现实时操作。然而,我们在本文中仍然使用术语拓扑规划,因为之前的工作没有歧义。 满足 UVD 的轨迹被认为是同胚的homeomorphic。[15]中定义的UVD是:
定义1:由s ∈ [0,1]参数化且满足τ1(0) = τ2(0),τ1(1) = τ2(1)的两个轨迹τ1(s),τ2(s),属于同一个UVD类,若对所有s,直线τ1(s)τ2(s)无碰撞。
传统的拓扑规划方法[12]-[15]由拓扑上不同的路径搜索和后端优化组成,主要关注于在不同的homotopy中找到多个初始路径。与这些方法不同,所提出的方法通过将v反转为vnew:= v,来构建不同方向的距离场。然后,搜索过程在障碍物表面单独确定新的锚点pnew,如图4c所示。它们构成新的一对{pnew,vnew},这导致不同的局部最小值。注意,没有采用显式路径搜索,但是分别通过p和pnew的任何一对路径自然在这两点上违反Def.1。随后,在不同的线程中并行优化不同的轨迹,如图4d所示。执行具有最低成本的轨迹。
Ⅳ 无人机集群导航
A 机间避碰
gent-k考虑其他agents的存在,如图6所示。
不同于文献[22],在这里我们忽略了障碍物和动力学限制(这部分已经在第三节A部分讨论过)。类似于避障和动力学可行性的惩罚函数,我们将第k个agent的集群机间避碰的惩罚函数J_{w,k}定义为软单边约束,如下式:
其中,(t那些)轨迹时间跨度内的全局开始和结束时间。c是用户定义的agent许可。E := diag(1,1,1/c),c > 1将欧氏距离转换为z轴上主轴较短的椭球距离,以缓解向下运动的风险。将加权的Jw,k加到等式上。(1)产生每个agent的总优化问题:
何轨迹参数化方法包含一个从决策变量映射到轨迹上点的过程(5).。本文使用pb阶均匀B样条将轨迹参数化,这为位置评估提供了矩阵表示[9]
这里Mpb+1是一个常数矩阵,当t属于节点跨度(tm,tm+1]时,由pb,s(t)=(t-tm)/Δt确定。
B. 定位漂移补偿
由于在未知环境中的个体定位(没有可靠和高频的闭环),漂移在飞行期间累积。Xu等人[23]提出了一种具有额外UWB距离测量的无人机集群的状态估计方法,并实现了精确的协作定位。然而,我们更关注穿越障碍丰富的环境,必须为其他应用程序预留计算和通信资源。因此,受[23]的启发,通过比较从接收到的其他agent轨迹评估的预测位置和从观测者的深度图像测量的位置,提出了一种简单且轻量的相对漂移估计方法。当轨迹跟踪误差可以忽略不计,并且任何两个可能发生碰撞的agent中至少有一个能看到另一个时,这种策略是有效的。因此,我们使用[24]中的控制器进行精确跟踪,并使用广角摄像机来降低丢失agent的可能性。
漂移消除程序如下。在评估agent-i的当前位置φi(tnow)之后,确定以φi(tnow)为中心、半径为r的球形信任区域S ⊂ R3,其中r是指示根据实验估计的典型漂移的上限的经验参数。
然后在S’⊂ R2满足的区域,s被映射到当前捕捉的深度图像。
其中s’∈ S’,s ∈ S,K和Tcw是相机的内参和外参矩阵,z是S沿主光轴与光学中心的偏差。S’是需要复杂计算才能获得的椭圆圆锥曲线。因此,我们采用近似的轴对齐椭圆S’,而不是精确的S’。没有必要精确地定义信任区域,因为它只是一个经验域。然后我们将S’内的每个点投影到世界框架中,收集属于S的点,得到一个点簇P ⊂ S .然后将agent观测p的位置作为P的中心(第一个原始矩),即:
如果P仅包含相应agent的观察而没有任何不相关的对象,则等式(9)成立,这是不保证的。然而,由于每个agent规划的轨迹都有到附近物体的安全距离,因此等式(9)大多数时间是成立的。添加了其他标准以提高agent检测的鲁棒性,例如像素数、P的第二中心矩、当前测量值与先前测量值的偏差等。更严格的标准增加了假阴性率,但由于定位漂移变化缓慢,假阴性率是无害的。最后,φi(tnow)与P之间的误差被馈入一个滤波器,然后从该滤波器获得估计的漂移。
C. 从深度图像中去除agent
我们使用占用栅格地图存储静态障碍物,使用深度图像进行地图融合。移动agent在第四节-A 得到处理,因此,在地图构建中记录移动agent并将其视为障碍是不必要的,甚至是有害的。为了消除运动物体的影响,我们从深度图像中屏蔽并去除在第四节-B中检测到的agent的像素,如图 7 所示。
除了覆盖大部分视图的移动物体对VIO是干扰之外。因此,对于相应的深度图像,也使用相同的遮罩来去除灰度图像上的agent。此处使用的病原体检测标准不太严格,因为假阳性比假阴性更有害。
为了消除移动物体的影响,我们从深度图像中屏蔽并去除在第四节-B中检测到的agent的像素,如图 7 所示。除此之外,覆盖大部分视野的移动物体会对 VIO 造成干扰。因此,灰度图像上的agent也被移除,对相应的深度图像使用相同的掩码。这里使用的agent检测标准不那么严格,因为错误的正值比错误的负值更有害。
Ⅴ 系统结构
系统架构如图8所示,其中包含单个agent和多个agen通信系统的详细架构。
A . 单个agent的导航系统
单个agent系统,包括硬件和软件设置,是基于我们以前的工作EGO-Planner [3],带有一个额外的模块来补偿VIO漂移和去除图像上的被看到的agent。对于未知环境中的轨迹生成,使用局部规划器。当当前轨迹与新发现的障碍物发生碰撞,或者agent接近当前轨迹的末端时,规划被激活。
B .通信框架
两个网络连接系统,即共享轨迹的广播网络和同步时间戳并管理顺序启动的链式网络。1)广播网络:一旦agent生成新的无碰撞轨迹,就立即广播给所有agent。然后,其他agent接收并存储该轨迹,用于在必要时为自己生成安全轨迹。这种闭环策略在连接稳定且延迟可以忽略的理想情况下工作正常。然而,这在实践中并不能得到保证。因此,我们提出两种方法来减少碰撞的可能性。
首先,在网络负载下以给定频率广播一个轨迹。这不会导致计算负担,因为包含三维航迹点和其他参数的典型轨迹的大小小于0.5KB。Bluetooth等现代无线网络可以达到1 Mbps以上的速度。第二,一旦从广播网络接收到轨迹,每个agent就检查碰撞,如果检测到潜在的碰撞,则生成新的无碰撞轨迹。这种策略可以处理当多个agent在接近的时间生成轨迹,而由于延迟或分组丢失而没有接收到其他agent的轨迹的情况。
此外,还考虑了计算复杂度随着agent数量的增加而增长的情况。在规划之前,每个agent将其当前位置与接收到的周围agent的轨迹进行比较,其中任何超出规划范围的轨迹都将被忽略。
2)链式网络:基于连接的稳定链式网络,用于时间戳同步和系统启动管理。在系统启动时,agent以预定义的顺序生成轨迹。每个agent在通过链网络接收到来自具有更高优先级的agent的轨迹后,生成其初始轨迹。这种策略避免了在系统启动时由同时轨迹生成引起的混乱,因为此时agent没有其它agent的轨迹信息。
Ⅵ 基准
基准比较是在使用i7-9700KF CPU的模拟中进行的。参数设置,规划视野设为7.5m,λs = 1.0,λc = λw = λt = 0.5,λd = 0.1。地图分辨率为0.1米。每秒触发一次重新规划,否则会发生碰撞。该设置在模拟实验和真实实验中都可以实现。
A. 拓扑规划
我们比较了提出的EGO-Swarm与Fast-Planner [15]在候选轨迹数和前端拓扑路径搜索的计算时间方面的拓扑规划性能。如图9所示。
EGOSwarm找到的候选轨迹更少,这意味着找到全局最优的概率更低,但比[15]快两个数量级。因为Fast-Planner通过PRM [25]图搜索、路径缩短和路径修剪来找到拓扑上不同的路径,与所提出的隐式拓扑路径搜索方法相比,这是耗时的,但是具有更高的自由度。
B. 集群规划
1. 空旷环境中。
我们在飞行距离(dfly)、飞行时间(tfly)、每个agent的碰撞次数和计算时间(tcal)方面将所提出的方法与DMPC [19]、奥卡[16]和RBP [20]进行比较。除了最大速度和加速度之外,每个比较方法都使用默认参数。如图10所示
八个agent在一个圆上执行交换转换。表I中的结果是所有agent的平均值。
tcal用“*”标记,因为我们记录的计算时间是规划所有agent的整个轨迹的总时间(对DMPC和RBP而言),而对于ORCA和EGO -Swarm,它是每个agent的局部重新规划时间。
标签I和图10表明,RBP趋向于生成安全但保守的轨迹,因为构建凸相对安全飞行走廊[20]显著压缩了解空间。DMPC是为分布式部署设计的。然而,它需要精确和高频的姿态通信,这在现实应用中是无法保证的。高效的规则使得ORCA更新快速。但是,使用速度作为控制命令会使其与三阶系统不兼容,例如四旋翼飞行器。碰撞的风险也限制了它的应用。相比之下,提出的方法生成最短的无碰撞、非保守的轨迹,计算速度快。因此,它能够实现四旋翼飞行器的实时应用。
2. 在障碍物丰富的环境中。
我们模拟十架无人机从地图的一边飞到另一边,限速2m/s,四旋翼半径0.2米。图2是0.42障碍物/平方米的模拟快照。
每个agent独立感知环境,构建的局部地图以不同的颜色显示。结果总结在表II中,
其中dfly是平均飞行距离,dsafe是飞行试验中离障碍物最近的距离。反向点对点转换被设计成使得在地图中心周围的相互碰撞避免不可避免。在这种情况下,每个属于群体的agent规划光滑和安全的轨迹。
3. 可扩展性分析
我们在一个场景中评估计算性能,在该场景中,排列成直线的agent飞往50米外的随机目标点。如图11所示,由于SecV -B.1中的按需冲突检查策略,时间复杂度随着agent数量的增加逐渐平缓。
相关文章:
EGO Swarm翻译
目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …...
Webpack简单介绍及安装
一、介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。它将应用程序中的所有依赖项(JavaScript、图片、CSS 等)打包成一个或多个 bundle。这样做的主要目的是减少加载时间和提高应用程序的加载性能…...
如何在Anaconda的虚拟环境中下载Python包
一、首先查看conda下的虚拟环境 使用conda info -e查看当前conda下的虚拟环境: conda info -e 二、激活要添加Python包的虚拟环境 其中base是基础环境,这里我们选择conda_env这个虚拟环境 conda activate conda_env 三、使用conda命令安装需要的Pyth…...
React 事件机制和原生 DOM 事件流有什么区别
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 React 的事件机制与原生 DOM 事件流在设计和实现上有一些显著的区别。了解这些区别有助于我们更好地理解 React 是如何管理事件的…...
React 底部加载组件(基于antd)
底部加载组件的意义在于提供一种流畅的用户体验,以便在用户滚动到页面底部时自动加载更多内容。这样可以让用户无需离开当前页面,就能够无缝地浏览更多的内容.通过底部加载组件,可以分批加载页面内容,减少一次性加载大量数据对页面…...
Redis应用—7.大Value处理方案
1.⽅案设计 步骤一:首先需要配置一个crontab定时调度shell脚本,然后该脚本每天凌晨会通过rdbtools⼯具解析Redis的RDB⽂件,接着对解析出的内容进行过滤,把RDB⽂件中的⼤key导出到CSV⽂件。 步骤二:使⽤SQL导⼊CSV⽂件到…...
洛谷P2742 圈奶牛 (凸包 Andrew算法)
[USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包 题目背景 upd: 新增一组 hack 数据。 题目描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算…...
Spring(一)---IOC(控制权反转)
目录 引入 1.什么叫IOC(Inversion of Control)控制权反转? 2.什么叫AOP(Aspect-Oriented Programming)面向切面编程(涉及Java代理)? 3.简单谈一下Java怎么实现ICO? Spring框架的介绍 1. Spring框架的概述 2. Spring框架的优点 Spring IOC容器介绍…...
MySQL数据库——门诊管理系统数据库数据表
门诊系统数据库his 使用图形化工具或SQL语句在简明门诊管理系统数据库his中创建数据表,数据表结构见表2-3-9~表2-3-15所示。 表2-3-9 department(科室信息表) 字段名称 数据类型 长度 是否为空 说明 dep_ID int 否 科室…...
linux环境使用yum方式安装nginx
linux环境使用yum方式安装nginx 一、nginx官网 二、nginx安装 点击首页的 Docs 或者 install 都可以,最终都是进入到Installing nginx页面 因为安装的服务器环境是linux centos 所以选择 Installation on Linux下面 packages 跳转链接 点击packages后 最终会跳转…...
2024高级前端面试题大全
🎨 1、v-bind指令绑定所有属性 <comp :title"title" :color"color" /><comp v-bind"props" />🎨 父组件监听字组件渲染周期:hook:updated文章地址🎨 Vue3 defineAsyncComponent动态导…...
[机器学习]XGBoost(3)——确定树的结构
XGBoost的目标函数详见[机器学习]XGBoost(2)——目标函数(公式详解) 确定树的结构 之前在关于目标函数的计算中,均假设树的结构是确定的,但实际上,当划分条件不同时,叶子节点包含的…...
Hutool工具包的常用工具类的使用介绍
前言 Hutool 是一个轻量级的 Java 工具类库,提供了非常丰富的工具方法,可以大大减少开发时的重复性工作。它的目标是让 Java 开发更简单、更高效。Hutool 提供了多种常用功能,以下是一些常用工具类的使用介绍: 1. StrUtil - 字符…...
ETCD备份还原
环境准备: master 192.168.8.128 node1 192.168.8.129 k8s版本: 一:安装etcdctl工具 1.1下载安装包: wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz 1.2解压&…...
服务器防火墙设置某个端口号只允许固定 ip地址访问
服务器防火墙设置某个端口号只允许固定 ip地址访问是运维常见的功能,今天我们分享一下: 一、Linux环境 1、firewall 方式 1)允许特定 IP 地址访问 23 端口 sudo firewall-cmd --zonepublic --add-rich-rulerule family"ipv4" s…...
FPGA 基础了解
前言 前期一直在做关于FPGA方面的开发,从开始认真玩FPGA到参考原子、野火、黑金、米联客的教学资料再到参与做项目中,中途也参加了两个比赛整也都获得不错的成绩,整个阶段持续了大概快一年半的时间,学习了乱七八糟的知识…...
Golang学习历程【第二篇 fmt包变量、常量的定义】
Golang学习历程【第二篇 fmt包&变量、常量的定义】 1. fmt 包1.1 打印(print)1.1.1 Print 打印1.1.2 Println 打印后换行1.1.3 Printf 打印格式化参数 1.2 输入(Scan)1.2.1 Scan 输入1.2.2 Scanf 格式化输入 2. 变量2.1 变量的声明2.2 变量初始化&am…...
深入QML语法
文章目录 深入了解 QML 文档的结构和语法什么是 QML 文档?导入语句导入语句的格式示例 对象声明基本语法示例更复杂的对象声明 QML 对象类型详解1. Rectangle(矩形)2. Gradient(渐变)3. Text(文本ÿ…...
Viggle Api上线V3-beta模型,圣诞节跳舞视频来临
历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中,支持120并发任务 万物皆能舞,AI让你秒变“舞”林高手 – Viggle AI“舞”所不能 Viggle AI:打造爆款 AI 视频,让照片 “踢” 起足球 又一款AI对口型神器,让…...
前端excel的实现方案Luckysheet
一、介绍 Luckysheet是一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源的插件。目前已暂停维护,但是其已有功能大概能满足常见需求的使用。 二、引入 ①cdn引入(目前应该已经不支持,可自行尝试) <l…...
数据字典类型/条目表的设计目的
1.以前的设计思路 对于下拉框选项储存的思路 我们以前是直接针对每一个下拉框都关联一个表格于数据库中 这种行为很不妥当 如果对于不同业务情景下的相同下拉框来说 多个相同下拉框就会在数据库中产生多个表格 当某个下拉框的选项需要更新或者新增时 那么对应的需要同步更新相…...
abc 383 C (bfs 最短路 )D(唯一分解定理,欧拉筛)
C 题: 首先暴力的想,对于每一个加湿器的位置去 上下左右扩展是 nm 的复杂度 。最多会有 nm 个加湿器。所以复杂度到达了n^3 。肯定超时了。 我们可以发现 对于一个点 会标记很多次,这回导致超时。 可以采用类似 bfs 求最短路的形式ÿ…...
常用消息中间件介绍
在消息中间件这个领域,确实有不少专业且强大的选择,它们各自都有着独特的优势和适用场景。 1. Apache Kafka: • Kafka以其高吞吐量、低延迟和分布式架构著称,非常适合处理大数据量、实时性要求高的场景。 • 它支持发布/订阅模式…...
vue基础
1.v-text,v-html <!-- v-text,v-html都可以显示内容 ,v-html可以解析html标签--> <p>{{msg}}</p> <p v-text"msg"></p> <p v-html"msg"></p> <script> let appnew Vue({ el:"#max", data:{ ms…...
从Windows远程访问Linux上的数据库
从Windows远程访问Linux上的数据库 目录 简介在Linux上安装MySQL/MariaDB配置MySQL/MariaDB以允许远程连接 修改MySQL/MariaDB配置文件重启MySQL/MariaDB服务确保防火墙允许MySQL/MariaDB端口 创建远程访问用户授予用户权限测试远程连接 检查网络连通性使用图形化工具连接 创…...
Android HandlerThread、Looper、MessageQueue 源码分析
Android HandlerThread、Looper、MessageQueue 源码分析 简介 在 Android 开发中,大家应该对 HandlerThread 有一定了解。顾名思义,HandlerThread 是 Thread 的一个子类。与普通的 Thread 不同,Thread 通常一次只能执行一个后台任务&#x…...
ASP.NET |日常开发中定时任务详解
ASP.NET |日常开发中定时任务详解 前言一、定时任务的概念与用途1.1 定义1.2 应用场景 二、在ASP.NET中实现定时任务的方式2.1 使用System.Timers.Timer2.2 使用Quartz.NET 三、定时任务的部署与管理3.1 部署考虑因素3.2 管理与监控 结束语优质源码分享 ASP.NET &am…...
Unity动态读取外部图片转Texture2D,内存过大问题解决方案
问题描述 加载原始图片2.63M的图片,分辨率为3023*4032,占用内存108.5M 加载原始图片12.6 M的图片,分辨率为6000*8000,占用内存427.2M 太恐怖了吧 解决方案 1.加载完图片,等比缩放,宽高改为1024或者512以下 1024占用5.2M,512占用1.3M,相比小了很多 2.原始Texture2…...
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
文章目录 前言一、普通表达式查询 Where二、根据SQL查询 where三、动态查询四、动态拼表达式查询 ,拼拉姆达五、条件拼接查询六、链式条件查询七、根据Class查询,根据实查询八、根据Class中主键查询九、根据字典查询十、查询函数十一、Where中有子查询十…...
人工智能练习题--大题题库速通指南
随着人工智能(AI)技术的快速发展,越来越多的企业和个人开始重视AI的应用和发展。在这个背景下,人工智能训练师这一职业应运而生,他们专注于数据标注、模型训练、算法优化等方面的工作,以确保AI系统能够准确…...
写给Pythoner的前端进阶指南(四):异步编程 - 原生支持的 async/await
在开发中,异步编程是处理并发任务的重要方式。无论是请求数据、读取文件还是执行网络操作,异步编程能够有效提升程序的性能和响应速度。Python 和 JavaScript 都支持异步编程,但它们的实现方式有所不同。在这篇文章中,我们将深入探…...
项目搭建+姓名唯一性校验
一 : 添加时对姓名进行唯一性校验 ① : 给姓名绑定一个改变事件 ② : 取值 ③ : 组装对象 ④ : ajax (Controller定义对姓名唯一性校验的方法) 在成功回调函数里 判断姓名是否添加过(0>已添加 1>未添加) 未添加过,添加成功后,(清空) /*** 对姓名进行唯一性校验*/$("…...
MacOS下PostIn安装配置指南
PostIn是一款开源免费的接口管理工具, 下面介绍私有部署版本的MacOS下安装与配置。私有部署版本更适合有严格数据安全要求的企业,实现对数据和系统的完全控制。   1、MacOS服务端安装 Mac安装包下载地址:下载Mac安…...
时光回响,中原之声 ——漓岛⾳乐节x SONICE
音乐像呼吸一样在大地起伏,中原的回响透过时空,从遥远的内陆弥漫扩散至温暖的南方,年轻的呼唤似一阵快雨淋落在辽阔的海面,波澜游弋,终掀浪涛。来自中原的独立音乐厂牌SONICE将与澄迈漓岛音乐节联合呈现乘风舞台&#…...
获取apk信息(包名,版本等) aapt dump badging (apk文件路径)
1.找到sdk路径下aapt文件: Android\Sdk\build-tools\29.0.0 (29.0.0是构建版本,可以是其他版本如27.0.3) 2.window dos窗口cd 到这个路径下:Android\Sdk\build-tools\29.0.0 ,也可以配置到 环境变量 3.执行 aapt dump badging (apk文件路径…...
C++ 23版的最新特性
C 23 是 C 编程语言的最新标准版本,于 2023 年正式发布,带来了诸多新特性与改进,以下是一些主要内容: 1.语言特性 1.显式对象参数(Deducing this):显式对象参数(Deducing this&…...
【微信小程序开发 - 3】:项目组成介绍
文章目录 项目组成介绍项目的基本组成结构小程序页面的组成部分JSON配置文件的作用app.json文件project.config.json文件sitemap.json文件页面的 .json 配置文件新建小程序页面修改项目首页 XWML模板XWML 和 HTML 的区别 WXSS样式WXSS 和 CSS 的区别 .js文件 项目组成介绍 项目…...
分布式超低耦合,事件驱动架构(EDA)深度解析
目录 引言什么是事件驱动架构(EDA)事件驱动架构的基本原理事件驱动架构的特点与优势事件驱动架构与分布式系统事件驱动架构的关键组件事件驱动架构的实施步骤常见的事件驱动架构模式事件驱动架构在分布式系统中的应用场景挑战与解决方案总结 引言 在当…...
深入理解 Linux wc 命令
文章目录 深入理解 Linux wc 命令1. 基本功能2. 常用选项3. 示例3.1 统计文件的行、单词和字符数3.2 仅统计行数3.3 统计多个文件的总和3.4 使用管道统计命令输出的行数 4. 实用案例4.1 日志分析4.2 快速统计代码行数4.3 统计单词频率 5. 注意事项6. 总结 深入理解 Linux wc 命…...
轻松拿捏Spring
目录 Spring基础 什么是Spring框架 Spring 包含的模块有哪些? Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架 Spring 是一款开源的轻量级 Java 开发框…...
使用 `du` 命令可以查看根目录下每个子目录占用的磁盘空间大小
使用 du 命令可以查看根目录下每个子目录占用的磁盘空间大小。 查看根目录下子目录大小的命令 sudo du -sh /*解释: du:显示文件和目录的磁盘使用情况。-s:只显示每个目录的总大小(不递归显示子目录)。-h࿱…...
Python练习之列表的使用
(搭配主页知识点) 【练习要求】 针对知识点列表定义、追加、列表元素读取、查找安排的本实例。要求实现:有一个列表,内容是:[21,25,21,23,22,20],记录的是一批学生的年龄请通过列表的功能(方法),对其进行…...
深入理解 HTTP HEAD 请求:节省带宽、提高效率的秘密武器
序言: 在HTTP协议中,HEAD请求是一种非常实用且被忽略的请求方法。与GET请求相似,HEAD请求同样从服务器获取资源,但与GET请求的最大不同之处在与,HEAD请求 仅返回响应的头部信息,不包含内容提。这使得HEAD请…...
电商数据流通的未来:API接口的智能化与自动化趋势
在数字化时代,电子商务行业正在以前所未有的速度发展,而API(应用程序编程接口)接口作为电商领域的重要组成部分,其应用和发展趋势也日益受到关注。API接口作为电商系统与外部服务或平台交互的桥梁,对电商数…...
[python]使用flask-caching缓存数据
简介 Flask-Caching 是 Flask 的一个扩展,为任何 Flask 应用程序添加了对各种后端的缓存支持。它基于 cachelib 运行,并通过统一的 API 支持 werkzeug 的所有原始缓存后端。开发者还可以通过继承 flask_caching.backends.base.BaseCache 类来开发自己的…...
13.罗意文面试
1、工程化与架构设计(考察项目管理和架构能力) 1.1 你负责的可视化编排项目中,如何设计组件的数据结构来支持"拖拉拽"功能?如何处理组件间的联动关系? // 组件数据结构示例 {components: [{id: comp1,type…...
有监督学习 vs 无监督学习:机器学习的两大支柱
有监督学习 vs 无监督学习:机器学习的两大支柱 有监督学习 vs 无监督学习:机器学习的两大支柱一、有无“老师”来指导二、解决的问题类型不同三、模型的输出不同 有监督学习 vs 无监督学习:机器学习的两大支柱 在机器学习的奇妙世界里&#…...
创建第一个QML项目
文章目录 使用 Qt Creator 创建 Qt Quick 项目详解为什么选择 Qt Creator?1. 打开 Qt Creator2. 选择项目模板3. 设置项目名称与路径4. 定义项目细节5. 配置构建套件6. 检查项目配置7. 编译并运行项目后续操作修改界面添加功能 总结 使用 Qt Creator 创建 Qt Quick …...
【k8s集群应用】K8S二进制安装大致步骤(简略版)
文章目录 K8S二进制安装部署etcd测试etcd集群(可选)恢复etcd数据库 部署master组件部署node组件K8S kubeadm安装关键命令更新kubeadm安装的K8S证书有效期方法一方法二查看证书有效期 K8S二进制安装 部署etcd 使用cfssl工具签发证书和私钥下载解压etcd软…...
cudnn版本gpu架构
nvcc --help 可以看 --gpu-architecture 写到的支持的架构 NVIDIA 的 GPU 架构是按代次发布的,以下是这些架构的对应说明: NVIDIA Hopper: 这是 NVIDIA 于 2022 年推出的架构之一,面向高性能计算(HPC)和人工智能&…...