【paper】分布式无人水下航行器围捕智能目标

news2024/11/18 14:53:21
  • An Effective Strategy for Distributed Unmanned Underwater Vehicles to Encircle and Capture Intelligent Targets
  • 2022.8
  • IEEE TRANSACTIONS ON INDUSTRIAL ELECTRONICS【Q1 7.5】
  • Mingzhi Chen 上海理工大学

Q1 Background:本文试图解决一个什么样的问题?

  • 在岛屿环境下, n u n_u nu个防御型UUV围捕 m s m_s ms个外来UUV

如下图,t1、t2为外来UUV,1~8为防御UUV。
(以2的视角为例) 防御UUV 2通过连接到UUV 6进行任务分配。在接近其团队后,与团队成员进行更多沟通,以配合完成包围。防御UUV形成一个大包围圈,以防止外来UUV逃脱。之后,他们缩小包围圈以完成捕获。
(以t2包围过程为例)开始时,1、5、8号防御型UUV驱动t2上行,帮助2号防御型UUV完成包围。由于包围圈刚开始时较大,5号防御型UUV最先到达包围点,因此5号防御型UUV的航行轨迹与目标t2有些相似,以保持对包围点的占领。在仿真结束阶段,由于岛屿阻挡,2号防御型UUV从左侧过来,因此8号防御型UUV改为向上包围点航行,帮助快速完成包围

在这里插入图片描述

Q2 What’s Known:之前解决这个问题有哪些方法?

  • 追逃博弈:汉密尔顿-雅可比-艾萨克 (HJI) 方程从终端状态追溯最优状态轨迹、基于图论、HJI 和最小-最大策略
  • 编队控制:一致性圆圈、阿波罗尼乌斯圆圈
  • 路径规划:[26]仿生神经网络(BNN);[17]改进BNN,获得快速的动态特性。虽然动态特性得到了改善,但其路径取决于地图的分辨率,影响包围效率。[24]研究了追击-躲避游戏,并使用快速行进法FMM来估计追击时间。
  • 追逃博弈 + 编队控制:基于行为的方法[12]:为机器人群体建立了基于排斥、朝向和吸引三种行为的自组织捕食者任务;受生物启发的方法[13]、[14]:基于狼群算法和粒子群优化算法,目标仅依赖于敏捷性优势;基于状态的方法[15]:仅需通过局部交互来捕获目标;
  • 水下研究:[16]一种改进的脊髓神经系统,提出了一种双向协商的任务分配方法。[17]完成了基于自组织映射(SOM)的目标围剿,重点研究了异质水下航行器。[19]提出了一种主从式围剿编队控制器,将围剿任务分配给距离近似相同的UUV,使UUV同时到达。😈缺点:集中式结构的任务分配算法,可以有效地分配任务,但需要很大的通信负担。此外,SOM神经网络的贪婪竞争导致分配不平衡。

之后看下 [10] Pursuit formation of double-integrator dynamics using consensus control approach

Q3 What’s New:本文是用什么样的方法如何解决这个问题的?

  1. 速度估计:通过防御UUV的相对位置矢量估计外来UUV的速度
  2. 分布式任务分配:拍卖算法
  3. 规划和优化:QPSO算法改善包围圈合作
  4. 包围控制:FMM(fast marching method)和双闭环控制器对UUV进行跟踪包围:FMM是一种快速的类A*路径规划算法,它使用时间矩阵来规划路线。受此启发,在模型预测控制中将FMM设计为优化目标,并形成了一种新颖的速度规划器,使路线更高效、更平滑

预备知识

追逃博弈中的阿波罗尼斯圆

  • 在追逃博弈中,阿波罗尼斯圆是通过两点间的几何关系构造的圆,通常用来描述追捕者和逃逸者之间的相对距离和速度,帮助确定逃逸者的位置是否可以逃脱追捕者的控制区域,或者是否存在可以捕捉逃逸者的路径;也用来计算最优的追捕路径,特别是在追捕者和逃逸者的速度差异较大时,如何通过几何构造制定最优策略。
  • 其定义如下:给定两个点 𝐴和 𝐵,阿波罗尼斯圆是所有点 𝑃,使得点 𝑃到 𝐴的距离和点 𝑃到 𝐵的距离的比值为常数的圆。
    在这里插入图片描述

分布式拍卖算法

  • 是一种通过拍卖机制来分配资源、任务或服务的算法,在分布式系统中应用广泛,尤其是在任务调度、资源管理、负载均衡、云计算、自动化决策等领域。其核心思想是将任务分配过程视为一个拍卖过程,参与者(通常是计算节点或代理)通过竞价来获得任务,从而实现资源的高效利用。

  • 在分布式系统中,通常有多个任务需要分配给多个计算节点或代理,目标是通过合理分配任务来优化系统性能(例如,最小化总执行时间或最大化资源利用率)。分布式拍卖任务分配算法通过模拟拍卖过程来决定每个任务的执行节点。每个节点或代理都可以对任务进行竞价,竞价的依据可以是节点的剩余计算能力、任务执行成本、预计完成时间等因素。

  • 步骤:

    1. 任务发布:任务发布方(通常是任务调度器或系统的中央控制单元)将任务发布到系统中,任务的描述包括计算需求、优先级、时限等。

    2. 节点竞价:每个可用的节点或代理根据自己当前的状态(如计算能力、负载情况、可用资源等)为任务进行竞价。竞价通常是基于节点的执行成本或完成任务的时间。例如,节点 i 可能为任务 t 提出如下竞价:
      在这里插入图片描述
      节点根据这些估算的执行成本或时间来提出竞价,较低的竞价意味着节点更愿意接受该任务。

    3. 拍卖和任务分配:根据节点的竞价,任务调度器(或拍卖系统)将任务分配给竞价最优的节点。常见的分配策略包括:

      • 最优拍卖(Optimal Auction):选择最低的竞价作为任务的执行节点。
      • 第二价格拍卖(Vickrey Auction):选择第二低的竞价作为任务的执行节点,尽管竞标者支付的是其自己出价,但系统根据第二低价格决定任务分配。
    4. 反馈和调整:任务分配后,节点开始执行任务。在任务执行过程中,节点可以反馈执行状态(如进度、失败信息等),系统根据反馈结果可能会重新调整任务的分配。

  • 算法特点去中心化:分布式拍卖任务分配算法的一个关键特点是去中心化。任务的分配不依赖于中央控制节点,而是通过局部竞价和拍卖来完成。这有助于提高系统的可扩展性和容错性。动态性:任务的分配可以根据系统的实时状态动态调整,例如,节点的负载变化或任务的优先级变化可能导致任务重新分配。参与者策略:每个参与者(节点或代理)在拍卖中的策略会影响最终任务分配的效率。例如,节点可能通过策略来隐瞒自己的真实能力或信息,以提高获取任务的几率。

量子粒子群优化算法(QPSO)

  • 基于粒子群优化(PSO)算法的变种,引入了量子力学的概念(量子比特的性质来更新粒子的状态)来增强搜索的效率,从而避免了传统PSO可能遇到的局部最优问题,结合了量子力学和粒子群优化的优势。
    • 粒子群优化(PSO)模拟鸟群觅食行为,通过在搜索空间中找到最优解来解决优化问题。PSO通过调整粒子的速度和位置来更新解空间,
    • QPSO则通过量子力学的波函数和量子位的叠加态来代替传统的速度更新规则,这使得QPSO可以通过量子门来对粒子的位置进行更高效的探索。
特点PSOQPSO
搜索机制基于速度和位置更新基于量子叠加和量子坍缩更新
避免局部最优通过惯性权重和加速因子控制更强的全局搜索能力,通过量子叠加避免局部最优
计算复杂度相对简单较高,需要量子控制参数调节
收敛速度较快可能更快,但受参数控制影响

建模

在这里插入图片描述

  • 运动学模型
    x、y:位置; θ:方向
    u:线速度; w:角速度
    在这里插入图片描述

  • 动力学模型
    fp:推进器推力;Tr:舵力矩;
    fz:水阻力;Tz:转矩;
    Cf:阻力系数,取0.75;CT:考虑力臂后的阻力矩系数,取0.3。ρ:海水密度,Sf=0.05、ST=0.2为横截面积
    在这里插入图片描述

  • 目标
    d u i d_{ui} dui是防御UUV的追击距离 u i u_i ui d s i d_{si} dsi是外来UUV的逃脱距离 s i s_i si
    👉防御UUV:选择行动fui来避免外来UUV逃脱并最小化追逐距离,
    👉外来UUV:选择行动fsi来增加这些距离,最好是无穷大。
    在这里插入图片描述

  • 任务成功标准:最终防御UUV编队成功的包围圈。
    在这里插入图片描述
    👉e1和e2是防御UUV与外来UUV的相对位置;n:形成有效包围圈的防御UUV数量;rsucc:成功绕圈的半径。
    在这里插入图片描述

外来者的逃避策略

在这里插入图片描述
👉未形成包围圈:以u的逃逸速度逃离最近的防御UUV。 u u i u_{ui} uui u u j u_{uj} uuj是防御UUV的跟踪速度矢量。 e u i e_{ui} eui e u j e_{uj} euj是防御和外方UUV之间的相对位置矢量。 V s m a x Vsmax Vsmax是外方UUV的最大标量速度。
在这里插入图片描述
👉已形成包围圈:需要找到一个最有可能冲出包围圈的方向:外方UUV可以快速跑出而不被拦截的方向。 t u i u j t_{uiuj} tuiuj为第i、j号防御型UUV相遇的最短时间, ∣ ∣ e u i u j ∣ ∣ ||e_{uiuj}|| ∣∣euiuj∣∣为二者距离。 t e t_e te为外来UUV到达边缘的最短逃逸时间, d e d_e de为外来UUV与边缘的最小距离
在这里插入图片描述

虽然这可能不是最优的逃离策略,但所提策略比随机的逃离策略更合理的,因为如果外来UUV采取随机的逃离方向,则会在被包围之前被拦截,该策略可以延迟拦截,使包围任务更加艰巨。

防御者的围捕策略

防御型 UUV 配备测距声纳来探测外来 UUV(以它们所在位置为中心的一个圆圈,可以很好地测量两辆车之间的相对位置)。其具体策略包括速度估计、任务分配和规划优化,以及包围控制。
在这里插入图片描述

速度估计:相对位置

  • 用一个虚拟agent(单积分模型)去跟踪外来UUV, u s u_s us是对外来UUV的速度估计, e v s e_{vs} evs 是虚拟agent与外来 UUV 之间的相对位置向量。当 k1 = 2 且 k2 = 3 时, u s u_s us 可以收敛到外来 UUV 的实际速度(文献[21]数学证明)
    在这里插入图片描述

任务分配:拍卖算法

key:第一步:确定有效包围小组的防御UUV数量【通过公式(10)】,该数量应满足在包围成功后外来UUV试图逃脱时的拦截要求(用阿波罗尼斯圆检验包围是否成功。)。第二步:计算防御 UUV 到达每个外来 UUV(假设其处于静止状态)的时间【通过公式(11)】,存储为一个时间矩阵【公式(12)】。第三步:将时间矩阵中的行/列分配给每个UUV作为其竞价。第四步:开始拍卖,对于每个agent i:获取邻居的竞价,并更新自己的更高价格,重新分配行索引。最后,如果所有行都分配给不同的 UUV 或所有 UUV 都分配了不同的行索引,任务分配结束,获得任务列表 p s = p 11 , p 12 , . . . , p 1 , n − 1 , . . . , p m s 1 , p m s 2 , . . . , p m s , n − 1 p_s = {p_{11}, p_{12}, ..., p_{1,n−1}, ..., p_{m_s1}, p_{m_s2}, ..., p_{m_s,n−1}} ps=p11,p12,...,p1,n1,...,pms1,pms2,...,pms,n1

防御性UUV的速度为外来UUV速度的√2/2,防御性UUV与对方UUV的距离为50 m。(a)中看似成功,实则不然。Ramana和Kothari[14]证明了仍然存在空隙,如图(b)所示。外来UUV朝两个阿波罗尼斯圆的切点方向逃脱,组成这两个阿波罗尼斯圆的两个防御性UUV必须要沿着正方形的边缘移动才能拦截。对于另外两艘防御型UUV来说,它们的最佳策略是沿着正方形的其他边移动。然而,当外来UUV逃离40 m后,有两个空隙(gap),外来UUV可以通过这两个空隙逃脱。
在这里插入图片描述
如何解决以上问题?👉 当UUV数量满足下述式中的 n n n时,包围才会成功。 V r a t i o V_{ratio} Vratio 为防御UUV与外来 UUV 的速度比。
在这里插入图片描述

所以派出 8 艘防御方 UUV 。当外来 UUV 想要逃跑时,可以派遣一艘防御方 UUV 拦截,其阿波罗尼乌斯圆与逃跑方向相交。其他防御方 UUV 可以保持静止以维持包围。
在这里插入图片描述
因此需要选择防御性 UUV 来组成一个有效的团队来跟踪外来 UUV,这是一个任务分配问题

  1. 为了确保外来 UUV 始终可见,最靠近外来 UUV 的防御 UUV 被直接分配到小队并设置为“不可用”,以持续跟踪外来 UUV。需要 其余防御 UUV 中选择 n − 1 n − 1 n1 艘防御性 UUV。
  2. 假设有 ms 艘未被捕获的外来 UUV,可以创建一个任务列表,即 p s = p 11 , p 12 , . . . , p 1 , n − 1 , . . . , p m s 1 , p m s 2 , . . . , p m s , n − 1 p_s = {p_{11}, p_{12}, ..., p_{1,n−1}, ..., p_{m_s1}, p_{m_s2}, ..., p_{m_s,n−1}} ps=p11,p12,...,p1,n1,...,pms1,pms2,...,pms,n1。比如 p 1 , n − 1 p_{1,n−1} p1,n1表示分配第n-1号防御UUV围捕第1号外来UUV
  3. 采用分布式拍卖算法根据外来 UUV 的距离和估计速度将防御 UUV 映射到任务列表中。防御 UUV 到达外来 UUV(假设其处于静止状态)的时间粗略地通过(11)计算得出,其中考虑了外来 UUV 和防御性 UUV 的相对速度,权重因子为 imf = 0.25。
    在这里插入图片描述
  4. Tc 是估计的行程时间矩阵ms ∗ (n − 1) * nu − ms ,其中一行包含第 1 号到 nu − ms 个可用防御性 UUV 到达任务列表中每个位置的时间的负值;ξ 是一个在 [0, 1] 中具有随机值的矩阵。
    在这里插入图片描述

拍卖算法:
在这里插入图片描述

规划优化:基于QPSO的围剿合作和动态缩小包围圈

当防御型UUV接近目标时,它们可以通过更多的通信来加强合作。如果能尽快形成初步包围,捕获速度可能会更快。初始包围圈形成后,防御型UUV应逐渐缩小包围圈,直至捕获成功。
在这里插入图片描述最大占领时间与包围半径r、包围角度θ以及防御型UUV的包围点分配有关。占领时间是指UUV到达指定包围点的时间。该问题需要是rθ包围点的非线性组合优化,很难得到精确的解,并且受到如下约束:① r s u c c r_succ rsucc为成功绕圈的半径, m i n ( d u s ) min(d_us) min(dus)为外来UUV与防御UUV之间的最小距离。② θ在x轴与两个最近的外来UUV和防御UUV的相对位置之间的夹角±π/2范围内,x=[1,0]T
在这里插入图片描述

  • 算法步骤
    1. 初始化:随机采样10组半径r和角度θ,并随机分配包围点,通过随机采样的半径和角度生成相应的包围点
    2. 循环:计算最大占领时间,更新全局和局部最优解👉利用全局和局部最优解生成10组新的采样半径r和角度θ,并分配包围点👉迭代20次后跳出循环
    3. 输出:返回优化后的包围点及其分配
      在这里插入图片描述

包围控制:FMM+MPC+PI

  • 防御UUV的目标:无碰撞控制其fpTr到达包围点,尽可能节省时间【不如试试Minco时空轨迹优化】
    在这里插入图片描述
  • 步骤:
    1. 构建局部地图,FMM通过求解Eikonal方程计算到达时间矩阵
      在这里插入图片描述源位置的到达时间 T 0 T_0 T0 = 0。F可设置为UUV在自由空间中的速度,在障碍空间中F = 0。∇T是增量到达时间。 [25]提出了一种迎风策略来求解该方程,∇T由下式给出
      在这里插入图片描述

    2. 通过MPC规划u和v:将运动学模型离散化,Ts为采样周期
      在这里插入图片描述
      目标函数:最小化到达时间和角速度
      在这里插入图片描述
      稳定性证明:Lyapunov J k + 1 − J k < 0 J_{k+1} - J_k < 0 Jk+1Jk<0
      在这里插入图片描述

    3. 跟踪期望u和v:PI控制器

Q4 What’s the Contribution

  • 基于预估行程时间、阿波罗尼斯圆和分布式拍卖,提出了一种新的任务分配机制,将外来UUV分配到防御UUV中,并通过本地通信形成高效的包围圈。通过QPSO实现包围圈协作,与没有包围圈协作的算法相比,可以更快地形成初始包围圈
  • 设计了双闭环控制器用于包围控制,包括用于速度规划的运动学规划器和用于速度跟踪的动态跟随器。运动学规划器使用 FMM 计算的时间矩阵作为模型预测优化控制中的优化指标,从而提供时间成本更低的路径。
  • 对比BNN、SOM分配和无包围协作算法,本文算法的距离(形成编队包围圈的距离和围剿的距离)和耗时最短,任务分配的小组是平衡的
  • 水下真机实验:(通过D-DWM-PG3.6定位;包围点控制器、速度、力矩控制器均在计算机完成后,再发送力矩信号给水下机器人的stm32F407控制器;只有包围任务,无任务分配,三台防御UUV目标均为同一台外来UUV)
    在这里插入图片描述

Q5 What’s the Inspiration:个人的启发,Creation和畅想。

  • 优点:这篇文章整个的流程做的很完备,把问题拆解为先分配防御者到组👉再分配组内位置👉再进行运动规划。先让防御者对外来者的进行速度估计,根据估计值使用拍卖算法进行任务分配(最小化到达时间),分配后通过QPOS生成包围点,即目标。用FMM(类A*)找到时间最短的最优路径后,采样交给MPC规划出速度,再由PI进行跟踪。
  • 缺点:QPOS迭代20次就break,也可能无法获得最优解,但毕竟是非线性组合优化问题难以求解,看还有没有什么近似的手段?FMM规划出的路线进行离线采样后再用MPC做u v的规划还是有可能会发生碰撞的,且FMM计算量大可能也是一个潜在隐患。MPC其实可以直接代替FMM的工作,还无需考虑栅格地图,但要加入避障软约束和时间成本项,这一操作还需考量。
  • 值得借鉴🌟:
    • 多目标任务分配,这篇文章的拍卖任务分配方法还挺有意思
    • 避障:FMM是一种快速的类A*路径规划算法,它使用时间矩阵来规划路线。可以在分布式模型预测控制中将FMM设计为优化目标,形成了一种新颖的速度规划器,使路线更高效、更平滑。而且无需再MPC目标函数加入避障项,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【更新中】《硬件架构的艺术》笔记(三):处理多个时钟

介绍 单时钟设计更易于实现&#xff0c;也更少出现亚稳态、建立和保持时间违例方面的问题。但在实践中&#xff0c;很少有设计只在一个时钟下运行。 多时钟域 多个始终可以有以下一种或多种时钟关系&#xff1a; 1、时钟频率不同。 2、时钟频率相同&#xff0c;但相位不同…

Python_爬虫1_Requests库入门

目录 Requests库 7个主要方法 Requests库的get()方法 Response对象的属性 爬取网页的通用代码框架 理解requests库的异常 HTTP协议及Requests库方法 HTTP协议 HTTP协议采用URL作为定位网络资源的标识。 HTTP协议对资源的操作 理解PATCH和PUT的区别 HTTP协议与Requse…

从客户需求视角去认识ZLG | 边缘计算网关多种应用

在工业领域&#xff0c;串行总线与EtherNET总线广泛应用&#xff0c;物联网的兴起带来众多智能应用。尽管应用多样&#xff0c;但底层技术逻辑却殊途同归&#xff0c;本文将介绍ZLG致远电子串行总线和EtherNET总线之间的联动应用。 本文将从系统集成需求出发&#xff0c;以ZLG致…

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter&#xff0c;一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同&#xff0c;返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…

Linux下使用miniconda构建python运行环境

文章目录 miniconda安装构建python运行环境 miniconda安装 miniconda在linux环境下载安装&#xff1a; # Linux环境下使用wget命令下载选定的miniconda # 这里使用的是清华镜像&#xff0c;这个命令每次下载的是最新版本的miniconda wget -c https://mirrors.tuna.tsinghua.e…

解决failed to execute PosixPath(‘dot‘) 或者GraphViz‘s executables not found

在网上找了很多方法都没解决&#xff0c;所以写一篇文章帮助和我遇到同样问题的人 解决方法&#xff1a; 因为python解释器会解释转移字符&#xff0c;因此在环境变量中把\bin换成\\bin即可 解决过程&#xff1a; 系统&#xff1a;win10 已安装pip install graphviz&#xff0…

Deep-Live-Cam -面部交换、视频深度伪造

文章目录 一、关于 Deep-Live-Cam免责声明 二、安装&#xff08;Windows/Nvidia&#xff09;安装&#xff08;手动&#xff09;基本安装&#xff08;CPU&#xff09; GPU加速&#xff08;可选&#xff09;CUDA执行提供商&#xff08;Nvidia&#xff09;CoreML执行提供商&#x…

计算机毕业设计Python美食推荐系统 美团爬虫 美食可视化 机器学习 深度学习 混合神经网络推荐算法 Hadoop Spark 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Scala-数据类型-概述(Scala 3.x 类型层次结构)

Scala Scala-数据类型 Scala1. Any — 顶级类型2. Matchable — 匹配类型3. AnyVal — 值类型的父类4. AnyRef — 引用类型的父类5. Null - 引用类型的子类型Tips: 为什么 null 不推荐使用&#xff1f; 6. Nothing - 底层类型 (Bottom Type)整理不易&#xff0c;对您有帮助的话…

嵌入式linux中红外接收基本方法分析

大家好,今天主要给大家分享一下,如何使用Linux系统中的红外接收驱动控制方法。 第一:Linux红外基本简介 红外遥控是我们常见的一种无线收发设备,具有抗干扰能力强,功耗低,成本低,易实现等优点。被很多电子设备特别是家用电器广泛采用,如电视遥控、空调遥控等。红外遥控…

AWTK-WIDGET-WEB-VIEW 实现笔记 (2) - Windows

在 Windows 平台上的实现&#xff0c;相对比较顺利&#xff0c;将一个窗口嵌入到另外一个窗口是比较容易的事情。 1. 创建窗口 这里有点需要注意&#xff1a; 父窗口的大小变化时&#xff0c;子窗口也要跟着变化&#xff0c;否则 webview 显示不出来。创建时窗口的大小先设置…

pgAdmin简单介绍

pgAdmin介绍 官网&#xff1a;https://www.pgadmin.org/ pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world. pgAdmin may be used on Linux, Unix…

Linux笔记---调试工具GDB(gdb)

1. gdb的概念 GDB&#xff0c;全称GNU Debugger&#xff0c;是一个功能强大的开源调试工具&#xff0c;广泛用于Unix和类Unix系统&#xff0c;以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况&#xff0c;帮助定位和修复程序中的错误。 gd…

如何在 Ubuntu 上安装 Mattermost 团队协作工具

简介 Mattermost 是一个开源、自托管的通信平台&#xff0c;专为团队协作设计。它类似于 Slack&#xff0c;提供聊天、消息传递和集成功能。Mattermost 在重视数据隐私的组织中特别受欢迎&#xff0c;因为它允许团队在自己的服务器上管理通信。以下是 Mattermost 的一些关键特…

2. Django中的URL调度器 (自定义路径转换器)

在 Django 中&#xff0c;URL 路由通常使用路径转换器&#xff08;path converters&#xff09;来匹配和捕获 URL 中的特定模式&#xff0c;例如整数、字符串或 slug 等。默认情况下&#xff0c;Django 提供了一些内置的路径转换器&#xff0c;如 <int>、<str>、&l…

【STM32】USB 简要驱动软件架构图

STM32 USB 软件架构比较复杂&#xff0c;建议去看 UM 1734 或者 st wiki STM32 USB call graph STM32 USB Device Library files organization Reference [1]: https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Introduction_to_USB_with_STM32 [2]: UM1734

MATLAB 使用教程 —— 命令窗口输入命令,工作区显示变量

命令在命令窗口输入变量在工作区显示 MATLAB 桌面包含的面板如下&#xff1a; 当前文件夹 - 此面板允许访问项目文件夹和文件。命令窗口 - 这是主要区域&#xff0c;用户在命令行中输入命令&#xff0c;命令提示符(>>).工作区 - 工作区显示所有变量&#xff0c;无论是创…

华为USG5500防火墙配置NAT

实验要求&#xff1a; 1.按照拓扑图部署网络环境&#xff0c;使用USG5500防火墙&#xff0c;将防火墙接口加入相应的区域&#xff0c;添加区域访问规则使内网trust区域可以访问DMZ区域的web服务器和untrust区域的web服务器。 2.在防火墙上配置easy-ip&#xff0c;使trust区域…

时钟之CSS+JS版

写在前面 此版本绘制的时钟基于CSSJS模式。 优点操作简单&#xff0c;缺点当然是不够灵活。下一篇会基于HTML5的canvas标签&#xff0c;使用JS绘制。会更灵活&#xff0c;元素更加丰富。 HTML代码 <div class"box"><article class"clock"><…

blender 骨骼的动画基础 笔记总结

一、世界纹理 1.首先打开Node Wrangler&#xff08;世界纹理&#xff09;插件 在编辑的偏好设置这里&#xff0c; 演示一下这个插件&#xff1a; 然后通过shift a添加环境纹理 对其连接颜色后&#xff0c;选中世界纹理&#xff0c;通过按键ctrl t 二、动画 点击动画 1.…