突破性算法:让无人机集群在狭窄空间内穿针引线
导读在建筑救援、森林搜索等任务中,无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突,或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化,而局部避障容易陷入僵局。为解决上述问题,本文提出了一种受全局时空路径启发的分层在线协同规划框架。
为了在化解整体冲突的同时降低求解复杂度,系统首先进行全局粗略搜索以获得初始时空指导路径。为了在不影响系统内部和谐的情况下克服动态障碍物,系统执行基于初始路径启发的在线冲突趋势聚类协同优化,以实现避障同时提高可扩展性。
本文在包含狭窄管道和动态障碍物的仿真环境中进行了实验测试,并与目前主流的集中式和分布式方法进行了对比。结果表明,本文提出的方法能在约束丰富的动态环境中生成更平滑、更安全的轨迹,并具有更高的成功率。©️【深蓝AI】编译
1. 研究背景和相关工作
无人机集群具有高效覆盖大面积区域和协同执行多样化任务的能力。它们已被应用于搜索与救援、地图绘制、森林火灾监测、农业以及其他多种任务中。然而在实际应用中,无人机集群经常会遇到空间受限和动态环境的挑战,特别是在塌陷建筑物或工厂内进行搜救任务时。这给集群安全高效规划轨迹带来了重大挑战。
▲图1:无人机飞行场景©️【深蓝AI】编译
首先,可通行空间的受限增加了无人机之间发生冲突的可能性。例如,当穿过狭窄孔洞时,无人机必须依次通过以避免碰撞。此外,当在类似管道或走廊等环境结构中导航时,横向机动能力受到限制,这增加了相互碰撞的风险。
其次,无人机的飞行轨迹需要满足多种标准,包括平滑性、动力学可行性以及无人机动力学特性等。因此,轨迹规划相关的优化约束变得更加复杂,这使得问题更难求解。
最后,环境的动态性以及无人机定位的固有漂移,突出了无人机实时重规划的必要性。这种能力对于实现动态避障和提高无人机的容错能力至关重要。
现有的多智能体路径规划(MAPF)算法,主要针对障碍物较少的场景,可以分为集中式和分布式两种方法。
在集中式方法中,Sharon等人提出了基于冲突的搜索(CBS)算法,而Barer等人则在CBS基础上提出了诸如GCBS、BCBS和ECBS等次优方法,以提高搜索速度。这些算法依赖网格地图来在离散时间间隔内计算多个智能体的安全无碰撞路径。然而,基于网格的方法得到的路径未能考虑系统的动力学、运动学和平滑性约束,因此不适合在实际应用中直接执行。为解决这个问题,作者之前的工作通过在CBS算法的低层搜索中集成3D混合A*算法进行了改进。这种方法利用无人机运动学和动力学约束,促进了直接可执行的多重轨迹的生成。然而,这种方法在搜索时表现出效率低下,特别是在受约束的环境中。此外,在可扩展性和动态避障性能方面还需要改进。
对于分布式方法,相关文献提出了基于速度障碍的轻量级方法,这些方法在速度空间中寻找满足轨迹约束的可行解。然而,这种方法中的智能体使用统一的避障策略,每个智能体独立做出规划决策而没有中央协调。这一特征使得该方法容易在受限空间内的大规模群体规划任务中陷入死锁。Zhou等人提出了一种完全自主的分布式EGO-Swarm算法,采用优先级方法来解决无人机之间的冲突,并通过求解具有高可扩展性的非线性优化问题来设计轨迹。然而,由于在优化过程中使用软约束,这种方法不能保证智能体的安全。此外,在狭窄管道等环境中,仅依靠个体本地化信息进行规划可能导致无人机飞行策略频繁改变,如紧急避障和寻找可通行的交叉口。这可能产生曲率过大的飞行轨迹,从而对从事视觉相关任务的无人机产生不利影响。
此外,为实现动态避障,已有文献通过将动态障碍物的预测轨迹投影到静态障碍物地图上构建时空概率图。随后基于这些时空概率图进行轨迹规划。然而,动态障碍物的运动本质上具有不确定性。为解决这个问题,相关研究将随机避碰建模为机会约束优化问题,提出了基于有界体积扩张的避碰方法。然而,这些方法要么过于保守,要么由于概率建模中的不确定性而增加算法的复杂性。
2. 系统概述
本文做出如下假设:地图是先验信息,其中表示静态障碍物占据的空间,
表示自由空间。考虑有
个无人机和
个动态障碍物,每个无人机都能获得其他无人机和动态障碍物的实时位置信息。本文的目标是在自由空间中为无人机集群找到满足轨迹约束的无碰撞飞行轨迹。
本文结合了集中式和分布式路径规划框架的优势。如图2所示,整个系统框架主要包含两个模块:全局规划和局部规划。
▲图2:系统框架©️【深蓝AI】编译
全局规划使用基于网格的地图作为先验知识,系统在简化建模且不考虑动态障碍物的情况下,通过ECBS算法为每个无人机搜索从起点到终点的无碰撞路径。这条路径作为初步的全局参考路径,用于指导后续的局部规划。这使得无人机能够避免陷入死锁或被困在死胡同中。
局部规划系统进行精确的实时重规划,以准确避开静态和动态障碍物,确保无人机轨迹无碰撞。局部规划过程包括以下几个步骤:
(1) 基于全局参考轨迹和当前无人机位置,为未来一段时间生成局部初始路径。这个初始路径由多个离散的三维位置点组成。
(2) 基于障碍物分布和初始路径,为每个无人机生成安全走廊。
(3) 基于无人机之间安全走廊的冲突趋势,将集群迭代分类为多个组。
(4) 当从预测模块获得未来动态障碍物轨迹预测结果后,通过构建包含约束的凸优化问题,对同一组内的无人机进行协同实时重规划。
通过这种分层框架,系统能够在保证安全性的同时,实现高效的路径规划。全局规划提供整体导航指导,而局部规划则确保实时的避障能力和轨迹可行性。这种结构充分利用了集中式方法的全局优化能力和分布式方法的实时性与灵活性。
3. 解决方案
3.1 全局冲突解决
受到集中式规划方法在无死锁方面优势的启发,该框架首先执行一个粗略的全局冲突解决过程来获得全局参考路径。在作者之前的工作中,尝试将无人机的运动学模型集成到ECBS算法的底层搜索中。实验表明,这种方法能生成更平滑的轨迹,但代价是增加了搜索时间。在本文中,由于全局参考路径仅作为方向性参考,因此将使用不包含运动学模型的ECBS搜索算法,并进一步简化其物理和碰撞模型以缩短搜索时间。
参考路径在网格地图上的搜索包括两个层次:高层搜索和低层搜索。在高层搜索中,检查无人机之间路径的冲突,并对发生冲突的无人机施加特定的冲突约束。在低层搜索中,在遵守冲突约束的情况下为每个无人机生成新的路径。
算法在高层搜索和低层搜索之间迭代循环,直到生成的多条路径无冲突为止。作者的简化策略包括:(1)在高层搜索中减少无人机间的碰撞检测半径;(2)低层搜索中将邻居节点从7个扩展到15个,允许无人机对角线运动。
通过上述算法,获得多条离散路径后,使用最小二乘法对这些路径进行多项式拟合,得到每个无人机的连续全局参考路径。本文使用ceres库来解决最小二乘问题,将第i个无人机的参考路径表示为。
3.2 基于冲突趋势的局部聚类
局部重规划在全局粗略参考路径的启发下进行,以确保生成安全和平滑的可执行轨迹。重规划包括局部初始路径生成、安全走廊创建和冲突趋势聚类等模块。
1. 局部初始路径生成
当在时间进行重规划时,第
个无人机的初始路径定义为
,包含多个离散点:
其中是离散点的数量。对于
中的第一个点
,它代表这次重规划过程的起点,对应无人机在时间
的位置。生成算法如下:
2.局部安全走廊生
成为防止与静态障碍物发生碰撞,无人机轨迹将被限制在安全走廊内。局部安全走廊被构建为轴对齐包围盒(AABB),这便于在后续无人机聚类模块中进行简化的冲突检测。每个安全走廊包含六个元素,即全局地图坐标系中矩形安全走廊一对顶点的三维坐标。
▲图3:2D和3D下的安全走廊©️【深蓝AI】编译
3. 安全走廊聚类
在无人机的安全走廊相交的情况下,可能发生碰撞。我们的方法通过聚类无人机来解决这个问题,将那些有碰撞风险的无人机归类进行协同优化,从而确保安全。
聚类算法的流程如下:
▲图4:安全走廊聚类©️【深蓝AI】编译
初始时,我们确定安全走廊之间是否存在任何碰撞。碰撞检测使用AABB方法进行。如图3所示,只有当两个安全走廊在x、y和z坐标轴上的投影线都相交时,才认为它们发生相交。具有相交安全走廊的无人机被整合到一个组中。
然而,在特定情况下,高密度的无人机可能加剧安全走廊之间的冲突,导致一个组中包含大量无人机。这种现象会增加协同优化任务的复杂性。因此,下一步是对包含超过上限数量无人机的组进行重新聚类。重新聚类采用K-means++算法。
3.3 局部协同轨迹规划
在基于冲突趋势进行聚类后,将得到多个组。随后,在这些组内进行实时协同轨迹规划,以获得安全、平滑且动力学可行的集群轨迹。
1. 轨迹描述
贝塞尔曲线将被限制在由一组控制点形成的凸包内,这便于通过将控制点限制在安全走廊内来实现避障。在每次重规划中,第i个无人机的局部轨迹将使用分段贝塞尔曲线描述。此外,贝塞尔曲线的k阶导数仍然满足贝塞尔曲线的性质,当k=1或k=2时,分别可以得到轨迹的速度或加速度曲线。
2. 静态障碍物避障约束
考虑到无人机在垂直方向的下洗气流效应,将无人机的碰撞模型定义为椭球区域,这也是无人机和障碍物之间的安全区域。在这个过程中,作者利用曲线的凸包性质,将约束进一步进行转换。
3. 交互避障约束
将根据之前建立无人机之间避碰的相对安全走廊,为确保无人机之间不发生碰撞,两个无人机直接最短距离应大于安全间距。
4. 动态障碍物避障约束
为实现动态障碍物的避障,将采用匀速模型来预测动态障碍物的未来路径。随后,使用最小二乘法将这些路径拟合为贝塞尔曲线。然后基于无人机与动态障碍物之间的相对安全走廊构建避碰约束,其中动态障碍物建模为半径为的球体。
5. 动力学限制
考虑到无人机的动力学限制,将无人机在各轴的速度和加速度必须限制在最大速度和加速度的边界内。
6. 目标函数
在局部优化中,目标函数被表述为两个部分的加权和:轨迹平滑度和局部起终点状态约束。此外,决策变量是贝塞尔曲线的控制点。通过优化上述目标函数,可以保证轨迹的连续性。
7. 轨迹优化
上述建立的优化约束和目标函数具有凸特性,允许将其表述为二次规划问题。利用既有的凸优化求解器(如CPLEX)可以高效地获得优化解,得到满足约束同时最小化成本的轨迹。
这种优化方法不仅确保了轨迹的安全性和可行性,还保证了轨迹的平滑性和动力学特性,使其适合实际的无人机飞行任务。
4. 实验
实验验证在配备Intel 8336C@ 2.3GHz CPU的环境下进行仿真对比。系统采用Octomap库来表示3D占用地图,使用CPLEX QP求解器进行轨迹优化。贝塞尔曲线的阶数设定为n = 5。
4.1 空旷环境试验
三种算法在空旷环境中使用8架无人机进行圆形路径位置交换测试。下表展示了离线规划时间toff(s)、在线规划时间ton(s)、总飞行距离fdis(m)、平均速度Vel(m/s)和平均加速度Acc(m/s²)的统计数据。
▲表1:空旷环境试验结果©️【深蓝AI】编译
实验结果表明:本文方法在集中式搜索过程中采用简化的碰撞模型,相比集中式方法有效减少了搜索时间。同时,集中式方法飞行距离较长,这是因为在集中式全局优化过程中,为满足全局轨迹的平滑性和连续性要求,无人机需要执行大量转弯或绕行。此外,在全局参考轨迹启发下的局部规划使我们能够实现更高的平均速度,但这也导致与其他两种方法相比略高的平均加速度。
4.2 复杂约束环境试验
为评估算法在狭窄、多约束环境中的性能,在包含狭窄管道的不同尺寸地图上部署了40架无人机。无人机需要完成两种任务:
● 简单任务:与地图对称另一侧的无人机进行位置交换,无人机间冲突概率较低
● 复杂任务:需要对角线飞行到地图的对面,这将产生更多无人机间的冲突
在这种场景下,安全走廊的最大范围定义为6r×6r×6r,其中r表示无人机半径,系数6是一个经验值。这个阈值下形成的安全走廊空间可以容纳4~6架无人机,确保它们有足够的交互空间。此外,最大离线规划时间设置为1500秒。实验结果如图5和表2所示。
▲图5:复杂约束环境试验结果©️【深蓝AI】编译
▲表2:复杂约束环境试验结果©️【深蓝AI】编译
实验结果表明,在搜索时间方面,通过简化碰撞模型和约束,作者的方法在离线阶段相比[9]中集中式方法有更快的搜索时间。在在线优化中,Ego-Swarm显示出更快的优化时间,这是因为它使用非线性优化并将平滑、连续性和避障构造为软约束,从而提供更快的优化速度。相比之下,作者的方法采用带硬约束的凸优化,虽然较慢但确保所有约束都得到满足。与非线性优化相比,避免了局部最小值问题且不需要初始解。
在成功率方面,[9]中的集中式方法在约束丰富的多约束环境中,全局轨迹的集中式优化成功率为0%,相比之下,本文方法在局部优化时只优化未来的局部轨迹。这种方法使用较小的变量和较低的自由度,便于优化。此外,分布式方法Ego-Swarm的成功率在65%到80%之间。这是因为UAV完全依赖局部环境信息,在某些情况下无法有效定位长狭窄管道中的入口和出口,此外,Ego-Swarm在优化中将避障约束构造为软约束,这不能保证UAV的绝对安全。
在飞行时间和速度方面,与EGO-Swarm相比,本文方法通过跟随全局路径实现了更快的飞行速度和更短的飞行时间。EGO-Swarm由于是分布式的,在飞行过程中经常会出现不必要的绕行,原因是需要避开其他UAV或飞出走廊内部,这会增加飞行距离并降低速度。
4.3 动态场景测试
与集中式方法相比,本文方法能够适应动态环境。在这一节中,仅对提出的框架在动态环境中进行实验验证,原因是目前最新的多智能体动态避障算法没有开源,而开源算法MADER[10]需要提供准确的动态障碍物轨迹,这在现实中是不可行的。
动态障碍物避障测试在30m×30m×3m的狭窄走廊动态场景中进行。作者在环境中心位置了8个半径为0.3m的球形动态障碍物,这些障碍物的速度分别设置为0.5m/s、1m/s和2m/s。UAV的运动模式设置为围绕固定线段或圆形进行往返运动,分别使用8架和16架UAV进行测试,目标是从地图一端对角线穿越到另一端。
▲图6:动态场景©️【深蓝AI】编译
试验表明,算法的离线规划时间在有无动态障碍物的场景中差异很小,这是因为离线规划阶段并不考虑动态障碍物的影响。随着动态障碍物速度接近UAV的速度上限,成功率会降低。相比无动态障碍物的场景,避开动态障碍物的必要性导致UAV的行程距离和平均加速度略有增加。
4.4 消融试验
安全走廊的扩展长度和聚类模块是影响在线规划时间的两个主要因素。在这一小节中,对聚类模块进行了消融实验,使用三种不同的安全走廊扩展长度阈值:短、中、长,来评估它们对规划时间的影响。
▲图7:聚类模块消融试验©️【深蓝AI】编译
实验结果表明,在没有聚类模块的情况下,24架UAV在固定起终点的情况下发生10次碰撞,在随机起终点的情况下发生11次碰撞,这是由于规划时间过长导致重规划频率不足,当检测到动态障碍物时,系统无法及时重新规划,最终导致碰撞。有聚类模块的情况下,得益于及时的重规划,没有发生任何碰撞,这证明了聚类模块在动态环境中的有效性。
5. 总结
作者提出了一种分层UAV集群路径规划框架,旨在解决约束丰富动态环境中的冲突解决和动态避障挑战。通过全局启发下的在线群组联合优化,探索了集中式和分布式框架优势的协同可能性。同时,在作者构建的包含狭窄管道和动态场景的仿真环境中,验证和对比了该文方法的有效性和优势。
论文原文:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10582491
相关文章:
突破性算法:让无人机集群在狭窄空间内穿针引线
导读 在建筑救援、森林搜索等任务中,无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突,或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化,而局部避…...
人工智能如何改变你的生活?
在我们所处的这个快节奏的世界里,科技融入日常生活已然成为司空见惯的事,并且切实成为了我们生活的一部分。在这场科技变革中,最具变革性的角色之一便是人工智能(AI)。从我们清晨醒来直至夜晚入睡,人工智能…...
C语言main()函数
C语言main()函数 argc(argument count) 在C或C程序中,argc(argument count的缩写)是一个由程序运行时环境自动提供的整数,用于指示传递给main函数的命令行参数的数量。因此,不需要(…...
【LC】162. 寻找峰值
题目描述: 峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须…...
Zero to JupyterHub with Kubernetes上篇 - Kubernetes 离线二进制部署
前言: 纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 k8s二进…...
HTML5+JavaScript实现消消乐游戏
HTML5JavaScript实现消消乐游戏 点击两个相邻的方块来交换它们位置。 如果交换后形成三个或更多相同图案的方块连成一线,这些方块会被消除。 消除后,上方的方块会下落填补空缺,顶部会生成新的方块。 每消除一个方块得10分。例如࿰…...
深度学习:在PyTorch中进行模型验证完整流程
深度学习:在PyTorch中进行模型验证完整流程(以图像为例) 详细说明在PyTorch中进行模型验证的全过程。 模型验证的详细步骤和流程 1. 设置计算设备 选择合适的计算设备是性能优化的第一步。基于系统的资源(GPU的可用性…...
洛谷 P1747 好奇怪的游戏 C语言 bfs
题目: https://www.luogu.com.cn/problem/P1747#submit 题目描述 爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但…...
豆包MarsCode
01 AI代码陪练 来到豆包MarsCode官网:http://sqllb.com/6FRiH76 ,点击左上方的代码练习,就能看到一个AI代码陪练的练习场。 在左边栏,可以看到各种各样的算法题目,在右侧是MarsCode AI,中间是算法题目和…...
Docker网络模式:桥接(Bridge)模式与主机模式(Host)实操对比(一)
文章目录 前言一、桥接模式(Bridge Mode)前言 随着容器化技术的发展,Docker 已成为开发和部署应用的首选工具之一。Docker 不仅简化了应用的打包过程,还提供了多种网络模式来满足不同应用场景下的需求。本文将重点探讨两种常用的 Docker 网络模式——桥接模式(Bridge Mod…...
3. STM32_串口
数据通信的基础概念 什么是串行/并行通信: 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信: 单工通信:数据只能沿一个方向传输 半双工通信:数据可以沿两个方向…...
【Git】Git 命令参考手册
目录 Git 命令参考手册1. 创建仓库1.1 创建一个新的本地仓库1.2 克隆一个仓库1.3 克隆仓库到指定目录 2. 提交更改2.1 显示工作目录中已修改的文件,准备提交2.2 将文件添加到暂存区,准备提交2.3 将所有已修改的文件添加到暂存区,准备提交2.4 …...
EBS 中 Oracle Payables (AP) 模块的相关集成
Oracle E-Business Suite (EBS) 中的 Oracle Payables (AP) 模块是一个全面的应付账款管理系统,它不仅提供了丰富的功能来管理与供应商的财务交易,还通过与其他模块的紧密集成,实现了企业内部各个业务流程的无缝衔接。以下是 Oracle Payables…...
【LC】896. 单调数列
题目描述: 如果数组是单调递增或单调递减的,那么它是 单调 的。如果对于所有 i < j,nums[i] < nums[j],那么数组 nums 是单调递增的。 如果对于所有 i < j,nums[i]> nums[j],那么数组 nums 是…...
大语言模型LLM的微调代码详解
代码的摘要说明 一、整体功能概述 这段 Python 代码主要实现了基于 Hugging Face Transformers 库对预训练语言模型(具体为 TAIDE-LX-7B-Chat 模型)进行微调(Fine-tuning)的功能,使其能更好地应用于生成唐诗相关内容的…...
鸿蒙主流路由详解
鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…...
GelSight和Meta AI合作推出多模态指尖形全向视触觉传感器Digit360
近日,触觉智能技术先锋 GelSight 与 Meta AI相关团队今宣布推出 Digit 360,这是一款呈人工指尖形状的触觉传感器,它能够以高精度将触摸数字化,从而提供较为丰富且详细的触觉数据。Digit 360将会拓展触觉传感研究领域,标…...
XX科技面试笔试题
笔试题 一、选择题 (每题5分,共20分) 1、构成存储器的最小单位是 ( ) A、bit B、Byte C、MB 2、下列不属于WEB服务的是 ( ) A、Apache B、Nginx C、IIS D、LVS 3、web服务器默认端口为 ( ) A、80 B、800 C、22 D、43 4、下列安装系统方法中,适合大量装机需求的是 ( ) A、U盘…...
AVL、B树和B+树
AVL树定义 AVL树(Adelson-Velsky 和 Landis 树)是一种自平衡的二叉搜索树(Binary Search Tree, BST),由苏联数学家Georgy Adelson-Velsky和Evgenii Landis在1962年提出。AVL树通过在每个节点上维护一个平衡因子&#…...
[SWPUCTF 2021 新生赛]include
参考博客: 文件包含 [SWPUCTF 2021 新生赛]include-CSDN博客 NSSCTF | [SWPUCTF 2021 新生赛]include-CSDN博客 考点:php伪协议和文件包含 PHP伪协议详解-CSDN博客 php://filter php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当…...
ES----安装 elasticsearch入门,elasticsearch安装,centos安装es,centos安装elasticsearch
ES 如需要对应资源,请评论留言,或再最后视频中关注获取 1. 安装 1.1 安装es 创建网络(centos系统,docker环境) docker network create es-netdocker安装es —如果下载失败,请看我的docker配置镜像的文章…...
探索文件系统,Python os库是你的瑞士军刀
文章目录 探索文件系统,Python os库是你的瑞士军刀第一部分:背景介绍第二部分:os库是什么?第三部分:如何安装os库?第四部分:简单库函数使用方法1. 获取当前工作目录2. 改变当前工作目录3. 列出目…...
android studio引用so库
在工程中编译好的so库文件将在原始编译工程对应目录下:build/intermediates/cxx/Debug/xxxxxx/obj/ 其目录结构如上所示,包含生成的四个版本,每个文件夹下均包含c/c源码编译成的Android版本的libnavi.so库和提供应用接口的libnavi-lib.so库。…...
Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书
本文目录 准备登陆云服务器安装 Java下载 tomcat 包配置防火墙浏览器访问 Tomcat 默认页面以服务的形式运行 Tomcat创建 Tomcat 用户和组创建 systemd 服务文件启动 tomcat 服务 Tomcat webapps 文件目录部署一个静态网站tomcat 的配置文件 将域名解析到服务器Tomcat 配置 SSL/…...
不间断电源 (UPS) 对现代技术可靠性的影响
在这个技术型世界里,无论是在个人还是商业环境中,电力供应商提供的稳定供电都变得越来越重要。 不间断电源 (UPS) 系统是一种不可或缺的解决方案,可保证终端设备不受干扰地运行,在出现电源问题或故障时让用户继续工作。 这篇文章…...
Android 基础类(01)- Thread类 - readyToRun和threadLoop
一、前言: 在阅读AOSP代码过程中,我们经常会看到Thread子类重写两个方法:readyToRun和threadLoop,不清楚的同学,可能在这儿连调用逻辑都搞不清楚了,因为找不到谁调用了它。我这儿先不去深究Thread内部逻辑…...
【组件封装】uniapp vue3 封装一个自定义下拉刷新组件pullRefresh,带刷新时间和加载动画教程
文章目录 前言一、实现原理二、组件样式和功能设计三、scroll-view 自定义下拉刷新使用回顾相关属性:最终版完整代码: 前言 手把手教你封装一个移动端 自定义下拉刷新组件带更新时间和加载动画(PullRefresh),以uniapp …...
通过 JNI 实现 Java 与 Rust 的 Channel 消息传递
做纯粹的自己。“你要搞清楚自己人生的剧本——不是父母的续集,不是子女的前传,更不是朋友的外篇。对待生命你不妨再大胆一点,因为你好歹要失去它。如果这世上真有奇迹,那只是努力的另一个名字”。 一、crossbeam_channel 参考 cr…...
一起学习Fortran:如何安装Fortran
Fortran(全称Formula Translation,意为“公式翻译”)是一种通用编译命令式编程语言,适用于数值计算和科学计算。Fortran语言最初是由IBM在20世纪50年代为科学和工程应用程序而开发的,第一个Fortran版本——FORTRAN I在…...
社交新零售模式下“2+1 链动模式 S2B2C 商城小程序”的创新实践与发展策略
摘要:随着实体商业与社交网络深度融合,社交新零售蓬勃兴起,“21 链动模式 S2B2C 商城小程序”作为其中创新典范,融合独特激励机制与数字化运营优势,重塑零售生态。本文剖析该模式架构、运作逻辑,探讨其在私…...
【博主推荐】C# Winform 拼图小游戏源码详解(附源码)
文章目录 前言摘要1.设计来源拼图小游戏讲解1.1 拼图主界面设计1.2 一般难度拼图效果1.3 普通难度拼图效果1.4 困难难度拼图效果1.5 地域难度拼图效果1.6 内置五种拼图效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载结束语 前言 在数字浪潮汹涌澎湃的时代,程序开…...
贝叶斯统计的核心思想与基础知识:中英双语
中文版 贝叶斯统计的核心思想与基础知识 贝叶斯统计是以贝叶斯定理为核心,通过将先验知识和观测数据相结合,更新对参数或模型的认知的一种统计方法。它不仅强调概率的频率解释(频率统计学中概率描述事件的长期发生频率)…...
Verilog使用liberty文件中cell单元的demo
Liberty(.lib)文件是用来描述标准单元库中逻辑单元(如门电路、触发器等)的时序和功耗特性的,不是用来直接定义Verilog中的元件。在Verilog设计中,我们通常通过实例化模块(module)来创…...
openssl生成ca证书
常见CA文件夹 1、生成CA钥匙 openssl genrsa -out ./private/cakey.pem 2、生成CA自签名 openssl req -new -x509 -key ./private/cakey.pem -out ./cacert.crt -days 3650 3、生成http服务器私钥 openssl genrsa -out ./data/frontt.project.com.key 2048 4、CA给http服务器…...
OGRE 3D----2. QGRE + QQuickView
将 OGRE(面向对象图形渲染引擎)集成到使用 QQuickView 的 Qt Quick 应用程序中,可以在现代灵活的 UI 框架中提供强大的 3D 渲染功能。本文将指导您如何在 QQuickView 环境中设置 OGRE。 前提条件 在开始之前,请确保您已安装以下内容: Qt(版本 5.15 )OGRE(版本14.2.5)…...
【Java 学习】面向程序的三大特性:封装、继承、多态
引言 1. 封装1.1 什么是封装呢?1.2 访问限定符1.3 使用封装 2. 继承2.1 为什么要有继承?2.2 继承的概念2.3 继承的语法2.4 访问父类成员2.4.1 子类中访问父类成员的变量2.4.2 访问父类的成员方法 2.5 super关键字2.6 子类的构造方法 3. 多态3.1 多态的概…...
Online Judge——【前端项目初始化】Vue-CLI初始化项目、组件库引入
目录 一、创建项目二、前端工程化配置三、引入组件 一、创建项目 输入命令:vue create oj-frontend来到如下界面: 选择Manually select features 选择如下图的组件:注意空格是选择,之后回车即可。 选择3.x版本 继续选择ÿ…...
ASP.NET Web(.Net Framework)POST无法正常接收数据
ASP.NET Web(.Net Framework)POST无法正常接收数据 介绍站点Post和Get如何打断点测试测试代码如下服务器站点Post方法修改原因总结 总结 介绍 这一篇文章主要是讲一下之前搭建的HTTP站点POST无法正常接收数据,如果还不知道怎么搭建HTTP站点的…...
vue安装cypress及其部分用法
安装Cypress 在vue中安装Cypress 1. 安装 Cypress 首先,确保你已经安装了 Cypress。在你的 Vue 项目根目录下运行以下命令: npm install cypress --save-dev2. 打开 Cypress 安装完 Cypress 后,可以通过以下命令打开 Cypress 测试界面&a…...
Web Worker 入门:让前端应用多线程化
引出: 作为前端切图仔,在之前的工作中一直都是写后台,没机会用到web Worker,传统的性能优化web Worker用到的场景也很少,毕竟大量的数据计算一般直接给后端去做就行,轮不到前端来考虑(没遇到类似…...
Vue+Elementui el-tree树只能选择子节点并且支持检索
效果: 只能选择子节点 添加配置添加检索代码 源码: <template><div><el-button size"small" type"primary" clearable :disabled"disabled" click"showSign">危险点评估</el-button>…...
MySQL各种问题的原因及解决方案梳理
背景:由于最近一直在做生产环境和测试环境的切换,遇到了各种各样的MySQL问题,为了后面的开发顺利,梳理一下MySQL的报错及解决方案 问题1、MySQL的链接数超过了本身MySQL内部设置的链接限制 报错信息: // An highlig…...
LeetCode—74. 搜索二维矩阵(中等)
仅供个人学习使用 题目描述: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true…...
【Redis】Redis介绍
目录 1.Redis是什么? 2. Redis特性 2.1 速度快 2.2 基于键值对的数据结构服务器 2.3 丰富的功能 2.4 简单稳定 2.5 客户端语言多 2.6 持久化 2.7 主从复制 2.8 高可用和分布式 3. Redis使用场景 3.1 缓存(Cache) 3.2 排行榜系统 3.3 计数器应用 3.4 社交网络 …...
Python 3 教程第23篇(模块)
Python3 模块 在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式…...
课题组自主发展了哪些CMAQ模式预报相关的改进技术?
空气污染问题日益受到各级政府以及社会公众的高度重视,从实时的数据监测公布到空气质量数值预报及预报产品的发布,我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…...
七牛云AIGC内容安全方案助力企业合规创新
随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…...
Vue.js 中的事件处理
在 Vue.js 中,事件处理是用户与应用交互的重要方式。Vue.js 允许开发者以一种声明式的方式来绑定事件监听器,这使得代码更加简洁和易于维护。本文将介绍 Vue.js 中的事件处理,包括常用的事件类型和如何使用它们。 Vue.js 事件基础 在 Vue.j…...
Windows用pm2部署node.js项目
Windows上pm2启动命令不生效 按照常规启动命令应该如下,但是发现不生效 pm2 start npm --name "project-name" -- start具体如下,可以看到状态都是stopped $ pm2 start npm --name "chatgpt-next-web" -- start [PM2] Starting …...
算法【Java】—— 动态规划之路径问题
前言 本文章终点解析第一道题目【不同路径】和最后一道题目【地下城游戏】的动态规划思路,中间几道题目会很快过完,大家如果不熟悉动态规划的思路可以重点看一下这两道题目的解析。 不同路径 https://leetcode.cn/problems/unique-paths 解析…...