【备战算法岗】—— 控制模块复习(持续更新!!!)

1 控制理论基础

1.1 控制模块概述

在这里插入图片描述

输入:轨迹线Reference、地图信息、定位信息、车辆反馈信息
输出:刹车、油门、转向

CANBUS:车辆底盘交互协议
底盘、速度、四轮转速、健康状况、底盘报错、自动驾驶状态

运动学模型:刚体运动(低速)
动力学模型:力学分析(中高速)
详细推导见:车辆运动学和动力学模型

无人车控制任务:让无人车在既定的轨迹上平稳运行,保证车辆行驶的可行性、舒适性、控制实时性

控制模块:

(1) 预处理

  • 数据清洗:不正常信号、planning异常值【对于异常数据,去除或者报错】
  • 合理性检查:定位信息、车辆底盘信号
  • 紧急处理:前方突然出现障碍物(emergency stop)【例如无人车前侧安装的超声传感器,直接连接到control模块,应付紧急障碍物】
  • 信号smooth:去除信号噪声【传感器的信号都是带有噪声】,lag Compensation【滞后信号补偿,这是由于信号传递过程中,信号传递过程中有些滞后,需要做一些补偿,消除一些传递误差】

(2) 后处理

  • Saturatian/Limitation处理:执行器的固有缺陷补偿【由于执行器本身有能力限制,所以需要对输出信号做一定的限制,否则输出的信号有可能直接导致底盘报错或者执行器破坏】
  • 信号Smoothing:简单的平滑处理和异常值检查

(3) Controller控制器设计

  • 建模:建立一个车辆模型,目的提供一个控制对象
  • 系统参数辨识:控制可修复一些细微细小的错误,而这些错误对应的值是无法精确得到,这时候就需要系统辨识,利用一些方法,猜算出这些值也就是对应的系统参数
  • 控制观测器设计:观测器,指的是有些控制方法在反馈的基础上,要添加更多观测信息,才能确定其反馈值是否符合控制输入;控制观测器可理解为整个控制器的一套方法;其设计非常重要,决定控制器性能
  • 参数Fine Tuning:参数调节,与深度学习的超参的调差方式(一般是试验试错方式)不一样,而其一般是依据一些数学原理对参数调整进行指导,但也有试错试验方式来调整的

在这里插入图片描述

1.2 控制基础

(1)控制系统:消除物理模型和数学模型差异性的过程
对于无人车
稳定性:对于任何环境都需要稳定(安全)
稳态误差:尽可能小,保证执行上层命令【控制实际运行的偏差范围】
动态误差:在动态工程中也需要保证很多性能
在这里插入图片描述
y(t)表示控制系统的输出;虚线表示控制系统理想状态下达到的位置(我们期望的);t表示时间
图(b)是我们追求的控制效果,(a)比较慢,©波动但是不收敛,(d)波动呈发散属于最不好的控制

(2)控制基础

  1. 时间域

超调量:目标值与可达到的最高位置的范围
超调时间:到达最高超调量所花时间
稳态调整时间(整定时间):最初到达稳定在一定范围内所花的时间
上升时间:初次到达目标位置所花的时间,参与衡量上升速度大小
一般来说,希望超调量尽量小;超调时间尽量快;稳态调整时间越快越好;上升时间越快越好

  1. 频率域

通过频率(pass band):通过(增益大于一定程度)对应的频率
停止频率(stop band):增益下降到一定值所对应的频率
带宽:增益上升和增益下降对应的频率范围大小
截止频率:表示增益达到给定的截止值时所对应的频率
时间域可通过傅里叶和拉普拉斯变换变成频率域

  1. 离散域(z变换)

在这里插入图片描述

频域、时域、离散域是可以相互转换的;时间函数相对比较常用,Google或百度搜索拉氏变换应该就用了

2 仿真软件的使用

CARLA

3 常见规划控制算法

纵向控制算法:PID
横向控制算法:PID、Pure pursuit、Stanley、LQR、MPC

3.1 横向控制算法对比

(1)是否转弯内切(2)鲁棒性(3)对路径的要求(4)适用场景

横向控制算法
(1)PID:鲁棒性较差,对路径无要求,转弯不会内切,速度增加会有一定超调,速度增加稳态误差变大,适用场景:路径曲率较小及低速的跟踪场景
(2)Pure pursuit:鲁棒性较好,对路径无要求,转弯内切速度增加变得严重,速度增加会有一定超调,速度增加稳态误差变大,适用场景:路径连续或不连续或者低速的跟踪场景
(3)Stanley:鲁棒性好,对路径要求曲率连续,转弯不会内切,速度增加会有一定超调,速度增加稳态误差变大,适用场景:路径平滑的中低速跟踪场景
(4)LQR:鲁棒性较差,对路径要求曲率连续,不会转弯内切,曲率快速变化时超调严重,稳态误差小,除非速度特别大,适用场景:路径平滑的中高速城市驾驶跟踪场景

LQR vs MPC

MPCLQR
研究对象线性和非线性系统线性系统
状态方程:离散化对非线性的状态方程进行线性化,对线性方程离散化对线性方程离散化
目标函数MPC目标函数一个是累计和LQR目标函数一个是积分
求解方法转化为二次规划问题,利用求解器进行求解,生成控制序列采用变分法,通过求解黎卡提方程进行逼近,最终获取控制序列
工作时域是求解预测时间段Np内的控制序列 ,并在下个周期后进行滚动优化求解预测时间段内的控制序列 ,只求解一次,每个周期下取对应的控制量
LQR和MPC的优缺点计算量大,实时性差,对于算力要求高,硬件成本较高① LQR不滚动优化,预测时间段内的控制序列只求解一次,没有考虑实际与规划的误差② LQR求解整个预测时域内的控制序列,而MPC可在更小的时间窗口中求解优化问题,获得次优解,可大大提升求解速度③ 无约束,假设对控制量无约束
3.2 控制算法概述

(1)PID
PID:调试比例增益、积分增益、微分增益来达到想要的控制效果
在这里插入图片描述
调试PID经验参考文章:
阿克曼小车位置式PID调试经验
pid的参数调试方法以及个人理解
在这里插入图片描述

(2)Pure pursuit
预瞄距离:后轴中心到目标路点的距离
α \alpha α:后轴中心到目标路点与车辆纵轴之间的夹角

纯追踪算法:基于自行车模型,以车辆后轴中心为切点,车辆纵向车身为切线。通过控制前轮转角,使车辆可以沿着一条经过目标路点的圆弧行驶
δ ( t ) = a r c t a n ( 2 L s i n α ( t ) L d ) { {\delta (t)=arctan(\frac{2Lsin\alpha (t)}{Ld} )} } δ(t)=arctan(Ld2Lsinα(t))

(3)Stanley
核心思想:基于前轮中心的路径跟踪偏差量对方向盘转向控制量进行计算

前轮转角控制量: δ = θ φ + θ y \delta =\theta _{\varphi }+\theta _{y } δ=θφ+θy
θ φ \theta _{\varphi } θφ:当前车身方向与参考轨迹最近的点的切线方向的夹角
θ y \theta _{y } θy:前轮中心到参考轨迹最近点的横向距离 e y e_{y} ey

控制器设计:
δ ( k ) = θ e ( k ) + a r c t a n k e ( k ) v ( k ) \delta(k)=\theta _{e}(k)+arctan\frac{ke(k)}{v(k)} δ(k)=θe(k)+arctanv(k)ke(k)
其中, θ e ( k ) \theta _{e}(k) θe(k)为k时刻的航向角偏差,e(k)为横向跟踪误差,k为需要调节的参数,v为无人车当前速度。

输入:当前车辆位置、航向角 ψ ψ ψ、速度 v v v、当前目标路点和离车辆前轴中心最近目标路径点的航向角 ψ t ψ_t ψt
计算横向误差 e y e_y ey
计算 δ = ψ t ​ − ψ + a r c t a n k e y v ​​ δ=ψ_t​−ψ+arctan\frac{ke_y}{v}​​ δ=ψtψ+arctanvkey​​
输出:前轮转角控制量 δ \delta δ

(4)LQR
离散系统:
x ( K + 1 ) = A x ( k ) + B u ( k ) x(K+1)=Ax(k)+Bu(k) x(K+1)=Ax(k)+Bu(k)
代价函数:
在这里插入图片描述
设计步骤:
① 确定迭代范围N
② 设置迭代初始值 P N = Q P_N=Q PN=Q
t = N , . . . , 1 t=N,...,1 t=N,...,1,从后向前循环迭代求解离散时间的代数Riccati方程
P t − 1 = Q + A T P t A − A T P t B ( R + B T P t + 1 B ) − 1 B T P t A P_{t-1}=Q+A^TP_tA-A^TP_tB(R+B^TP_{t+1}B)^{-1}B^TP_tA Pt1=Q+ATPtAATPtB(R+BTPt+1B)1BTPtA
t = 0 , . . . , N t=0,...,N t=0,...,N循环计算反馈系数 K t = ( R + B T P t + 1 B ) − 1 B T P t + 1 A K_t=(R+B^TP_{t+1}B)^{-1}B^TP_{t+1}A Kt=(R+BTPt+1B)1BTPt+1A 得到控制量 u t = − K t x t u_t=-K_tx_t ut=Ktxt

主要步骤:
(1)确定迭代范围N,预设精度EPS
(2)设置迭代初始值P = Qf,Qf = Q
(3)循环迭代, t = 1 , . . . , N t=1,...,N t=1,...,N
P n e w = Q + A T P A − A T P B ( R + B T P B ) − 1 B T P A P _{new} =Q+A ^TPA−A ^TPB(R+B ^T PB) ^{−1}B ^TPA Pnew=Q+ATPAATPB(R+BTPB)1BTPA
∣ ∣ P n e w − P ∣ ∣ < E P S ||P_{new}-P||<EPS ∣∣PnewP∣∣<EPS:跳出循环;否则: P = P n e w P=P_{new} P=Pnew
(4)计算反馈系数 K = ( R + B T P n e w B ) − 1 B T P n e w A K=(R + B^TP_{new}B)^{-1}B^TP_{new}A K=(R+BTPnewB)1BTPnewA
(5)最终的优化控制量 u ∗ = − K x u^*=-Kx u=Kx

(5)MPC
核心思想:利用三维的空间模型加上时间构成四维时空模型,然后在这个时空模型上求解最优控制器。

因为理论构建的模型与系统真实模型有误差;从而,更远未来的控制输出对系统控制的价值很低,MPC仅执行输出序列的第一个控制输出

模型预测控制在k时刻共有三步:
① 获取系统当前状态
② 基于u(k),u(k+1),u(k+2),…,u(k+m)进行最优化处理
③ 只取u(k)作为控制输入施加在系统上
在下一时刻重复上面三步,在下一步进行预测时使用的就是下一步的状态值,我们将这样的方案称为滚动优化控制

4 控制算法面试问题整理

(1)现在企业里的控制都是用什么做呢?

控制的话可能更多还是二自由度动力学模型+求解线性化后的QP问题

(2)为什么规划需要给控制输出一条尽可能平滑的曲线,控制不也是根据离散点来做的,比如纯跟踪这种做法,不也是选取预瞄点去跟踪?

车辆运动是连续性的动作,假如规划的曲线不平滑,这里的不平滑更多的值这曲线不符合车辆运动学,那控制跟踪计算的转角可能不连续。 比如纯跟踪,上一帧选取的参考点计算出一个对应转角,下一帧的曲线上有个跳点(不平滑),计算出的转角较上一帧有较大变化,造成不舒适。
规划轨迹当然越平滑越好 但实车运行需要考虑耗时 平滑会耗费几十到上百毫秒,另一方面要参考控制是单点还是多点预瞄 多点预瞄对规划轨迹的平滑程度要求相对来说不高 其连续性约束相当于做了一次平滑 能有效解决期望输出跳变的问题。
希望规划平滑的另一个原因是:控制模块做的是个轨迹跟踪的功能,一般不会去施加额外的安全性约束,因此规划给出的轨迹是否足够好的标准之一就是控制是否能跟得上,如果轨迹不平滑导致控制根本跟踪不上,那整个安全性假设就不成立了。预瞄点一般要跟车速关联,车速高的时候要相对预瞄地远一点,保证整体控制的稳定性,但相应地控制误差可能会大一点。

(3)实车控制问题若采用mpc 做,中间产生无解或是违反约束的情况怎么解决

可能要看下是违反了什么约束,如果是碰撞或者动力学上限这类的硬约束导致了无解,那可能需要额外的备份规划器来输出应急行为了,如果是速度限制这种约束导致无解可以考虑把他变成高权重的软约束,可以缓解无解的情况。备份规划器一般来说就是AES和AEB的领域了,方法都是类似的,不过设计目标是可以牺牲一定舒适性来消除短时域内的碰撞风险(1~2s)。你所应用的赛车控制问题应该不需要这个,还是检查检查有没有约束设计的不合理吧

(4)mpc做控制或者局部路径规划,这两者的区别

mpc优化问题的形式本身就可以理解为是一个规划问题,优化求解出来的最优状态序列可以理解为一条轨迹,而作为控制器使用的时候就只执行第一个周期内的控制指令,这是主要区别。

(5)MPC在低速场景(0.1m/s),进行路径跟踪,是否无法进行?

适用的,只是车辆动力学在低速场景下表现不好,如果是运动学模型+MPC没问题

(6)基于mpc方法能做泊车场景吗?跟图搜索和随机采样的方法有什么不同?为什么很多泊车场景很少用mpc去做?

搜索和采样只是分辨率下最优和概率最优,而优化可以做到连续空间下的最优,但问题就在于非凸问题的优化没那么好做,很容易陷入不好的局部最优解。理论上说肯定是mpc这种优化方法效果更好且理论更完备。

(7)经典控制理论:PID、ACC
现代控制理论:LQR、轨迹跟踪

(8)纵向的油门刹车标定表如何建立

理想的测试地点是平坦的长直路,且两边没有高大的建筑物遮挡。保证定位精度,这样标定的准确度才够。
标定目的:找到油门,速度,加速度之间的一个对应关系

参考:(八)实践出真知——apollo刹车油门标定

(9)误差状态方程的右边还有一项关于参考路径的航向角速率,但是 LQR 控制器中并没有考虑他对状态量的影响,那应该如何解决呢

增加前馈

(10)线控转向系统的控制延迟如何处理

引入预瞄,在偏差计算不计算当前时刻的偏差,而是计算当前时刻0.1-0.2s之后的偏差

(11)讲一讲自动驾驶中的一些坐标系以及转换关系
笛卡尔
Frenet
转换关系见:Apollo基础 - Frenet坐标系
(12)LQR怎么处理非线性目标和约束

将非线性系统线性化,约束的处理需要使用扩展的LQR方法:NMPC、NLQR

(13)自行车模型中具体是如何实现的?
在这里插入图片描述
(14)在实际问题中,应该根据什么去选择不同的控制算法进行控制器的设计?

首先要考虑的是系统的类型、性能要求、稳定性要求、精度要求、成本要求等。具体可以考虑以下几个方面:
系统的类型:线性系统还是非线性系统,连续系统还是离散系统,是否有时间延迟等。
稳定性要求:对于一些对稳定性要求较高的系统,可能需要使用更为复杂但具有更好稳定性的控制算法,如LQR、PID等。
性能要求:考虑系统动态性能的要求,如指标响应时间、超调量大小等。如果要求响应速度快,需要考虑如状态反馈,模型预测控制等方式;对超调量有严格限制的,可能会比较适合使用比例-积分-微分方式的PID控制器。
精度要求:对于需要高精度控制的系统,可能需要使用更为精细的控制方法。
成本要求:对于需要考虑成本的应用,可能需要选择能满足需求但成本较低的算法。高级控制策略(如模型预测控制)可能会提供更好的控制性能,但可能需要更高的计算资源。
实施的难易程度:有的控制算法可能理论上很优秀,但实施起来特别困难,这种情况下需要权衡其操作难度和收益。
最终,选择哪种控制算法需要根据具体系统的特性和对系统性能的要求来进行综合考虑和权衡。

(15)什么是自动控制?为什么要进行频域和时域的分析?各自的分析方法有哪些?

自动控制通常涉及到一些作用元件(即控制器)能按照一定的策略自动地调整控制输入,以使得系统的输出达到预期的目标。
频域和时域的分析是观察系统行为的不同角度
时域分析:主要研究系统对单位阶跃、单位冲激等时间函数的响应,求解系统的时间响应并分析系统的稳定性、快速性、超调等性能指标。一般方法包括微分方程求解、根轨迹法、极点零点法等。
频域分析:主要研究系统在各个频率下的响应特性,如振幅特性和相位特性等,并用来分析和设计控制系统的稳定性、鲁棒性。常用的方法有频率响应法、Nyquist稳定判据、Bode图法等。

为什么要进行这两种分析,主要是因为它们各自关注了系统的不同特性:时域分析关注系统响应随时间如何变化、系统能否在有限时间内达到稳定状态频域分析关注系统对不同频率信号的响应特性,使我们能深入理解系统对输入信号的灵敏度以及在不同频率下的系统性能。通过时域和频域分析,可以全面了解系统的动态行为,为系统的设计和调整提供依据。

(16)QP一定是凸问题吗?

QP问题不一定是凸问题。判断QP是不是凸的关键在于Hessian矩阵,如果Hessian矩阵半正定,那么QP是凸问题,否则是非凸问题。

(17)车辆是如何进行执行横向或者纵向控制的,如何匹配使得车辆跟踪上目标点?

(18)简述MPC开发过程

模型预测控制在k时刻共有三步:
① 获取系统当前状态
② 基于u(k),u(k+1),u(k+2),…,u(k+m)进行最优化处理
③ 只取u(k)作为控制输入施加在系统上
在下一时刻重复上面三步,在下一步进行预测时使用的就是下一步的状态值

(19)简述MPC算法原理

在每一个采用时刻,根据获得的当前测量信息,在线求解一个有限时间开环优化问题,并将得到的控制序列的第一个元素作用于被控对象。在下一个采样时刻,重复上述过程:用新的测量值作为此时预测系统未来动态的初始条件,刷新优化问题并重新求解 。

(20)讲一讲LQR和MPC的不同点,以及相应的应用场景

主要不同在于MPC有很多约束,求解的方法更加复杂。在应用上MPC多用于纵向控制,LQR多用于横向控制。

(21)自动驾驶中车辆有哪些模型,是如何建模的?

自动驾驶中通常考虑车辆的运动学模型和动力学模型,运动学模型中有自行车模型,分为前轮,后轮和质心模型。

(22)控制模块的输入输出是什么?和规划是什么关系

输入:轨迹线、地图信息、定位信息、车辆反馈信息
输出:刹车、油门、转向
规划和控制是上下游的关系

(23)你的算法在实际测试中发现的三个头部问题是什么,然后你是怎么解决的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux的线程概念

目录 1.原理 2.线程的周边概念 3.创建线程的接口 1.pthread_create 2.pthread_join 3.pthread_detach 4.终止线程 5.C11封装的多线程库 4.线程库的大概结构 5.__thread&#xff08;只能修饰内置类型&#xff09; 6.线程的互斥 1.了解原理 2.加锁 1.接口 2.代码示…

遍历取后端数据推送到地图上,实现图标点标记地图效果

遍历取后端数据推送到地图上&#xff0c;实现图标点标记地图效果 示例链接&#xff1a; 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 踩坑注意点&#xff1a; 1. id: 1 是地图底图的id 后台也返回之后 id直接会有冲突 此时图标标记之后无法单击 相关代码&#xff1a…

异步 IO 机制 io_uring

一、io_uring 原理 如何解决频繁 copy 的问题 → mmap 内存映射解决。 submit queue 中的节点和 complete queue 中的节点共用一块内存&#xff0c;而不是把 submit queue 中的节点 copy 到 complete queue 中。 如何做到线程安全 → 无锁环形队列解决。 二、io_uring 使用 内…

了解 Python 底层的解释器 CPython 和 Python 的对象模型

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、CPython CPython 是 Python 编程语言的官方和最广泛使用的实现。它是用 C 语言编写的&#xff0c;因此得名 “CPython”。作为 Python 生态系统的核心&#xff0c;了解 CPython 的工作原理、主要特…

【新版】系统架构设计师 - 知识点 - 结构化开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 结构化开发方法结构化开发方法结构化分析结构化设计 数据流图和数据字典模块内聚类型与耦合类型 架构 - 知识点 - 结构化开发方法 结构化开发方法 分析阶段 工具&#xff1a;数据流图、…

如何实现文件上传到阿里云OSS!!!(结合上传pdf使用)

一、开通阿里云OSS对象存储服务 对象存储 OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储 OSS 是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供 99.995 % 的服务可用性和多种存储类型&#xff0c;适用于数据湖存储&#xff0c;数据迁移&#xff0c;企…

股票战法课程之主力的痕迹

文章目录 1. 主力的操作痕迹2. 主力的建仓2.1 建仓的三种方式2.2 建仓的五个特点2.3 建仓的迹象2.4 建仓的成交量特征 1. 主力的操作痕迹 序号痕迹原因1不跟随大盘节奏筹码都在主力手中2突发利空消息&#xff0c;股价不跌反涨主力被套&#xff0c;不希望散户抛盘3很小的成交量…

智己汽车数据驱动中心PMO高级经理张晶女士受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 智己汽车科技有限公司数据驱动中心PMO高级经理张晶女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“规模化敏捷落地实践”。大会将于5月25-26日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 2…

CSS基础:table的4个标签的样式详解(6000字长文!附案例)

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

【Java】Comparable和Comparator的区别

文章目录 区别Comparable示例Comparator示例参考资料 都可以用于排序。都是接口。 区别 Comparable示例 让被排序的类实现 Comparable 接口&#xff0c;重写 compareTo() 方法。 import java.util.*;public class Main {public static void main(String[] args){TreeSet<…

端点安全时刻影响着网络安全,我们应该如何保护

端点&#xff08;Endpoint&#xff09;是网络通信中的一个重要概念&#xff0c;指的是网络通信中的发送或接收信息的设备或节点。在一个网络中&#xff0c;端点可以是硬件设备&#xff08;如计算机、服务器、手机、路由器等&#xff09;&#xff0c;也可以是软件应用或服务。端…

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

文章目录 效果一览文章概述订阅专栏只能获取一份代码部分源码参考资料效果一览 文章概述 PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出) 订阅专栏只能获取一份代码 部分源码 %------

ceph osd分组

一、前言 使用分组可以更好的管理osd&#xff0c;将不同类型的磁盘&#xff0c;分到不同的组中&#xff0c;例如hhd类型的osd分配到hhd组&#xff0c;ssd类型的osd分配到ssd组&#xff0c;将io要求不高的分配到hhd组做存储&#xff0c;io要求高的分配到ssd组做存储 二、配置 查…

Linux驱动开发笔记(一)字符驱动

文章目录 前言一、字符设备驱动程序框架二、基本原理1. 设备号的申请与归还2. 保存file_operations接口3. 设备节点的创建和销毁4. 创建文件设备4.1 mknod4.2 init_special_incode( )函数 5. 查找file_operation接口函数速查表 三、程序编写1. 模块初始化及关闭2. 文件操作方式…

墨子web3时事周报

蚂蚁集团Web3研发进展与布局 国内Web3赛道的领军企业——蚂蚁集团&#xff0c;凭借其在前沿科技领域的深耕不辍&#xff0c;已在Web3技术研发疆域缔造了卓越战绩。特别是在引领行业革新的关键时刻&#xff0c;集团于今年四月末震撼推出了颠覆性的Web3全套解决方案&#xff0c…

【Godot4自学手册】第三十八节给游戏添加音效

今天&#xff0c;我的主要任务就是给游戏添加音效。在添加音效前&#xff0c;我们需要了解一个东西&#xff1a;音频总线。这个东西或许有些枯燥&#xff0c;如果你只为添加一个音效没必要了解太多&#xff0c;但如果你以后将要经常与音频播放打交道&#xff0c;还是要了解一下…

ARM学习(26)链接库的依赖查看

笔者今天来聊一下查看链接库的依赖。 通常情况下&#xff0c;运行一个可执行文件的时候&#xff0c;可能会出现找不到依赖库的情况&#xff0c;比如图下这种情况&#xff0c;可以看到是缺少了license.dll或者libtest.so&#xff0c;所以无法运行。怎么知道它到底缺少什么dll呢&…

论婚恋相亲交友软件的市场前景和开发方案H5小程序APP源码

随着移动互联网的快速发展和社交需求的日益增长&#xff0c;婚恋相亲交友软件小程序成为了越来越多单身人士的选择。本文将从市场前景、使用人群、盈利模式以及竞品分析等多个角度&#xff0c;综合论述这一领域的现状与发展趋势。 一、市场前景 在快节奏的现代生活中&#xf…

矩阵混乱度(熵值)代码计算

1、先回顾下熵值的数据公式&#xff1a; 2、jax.numpy代码 注意的点&#xff1a;熵值计算的输入的必须是归一化的正值 import jax.numpy as jnp import jax def _entroy(probs):log_probs jnp.log2(jnp.maximum(1.0e-30, probs))mean_sum_plogp jnp.mean(- jnp.sum(log_pro…

面试题:Redis如何防止缓存穿透 + 布隆过滤器原理

题目来源 招银网络-技术-1面 题目描述 缓存穿透是什么&#xff1f;如何防止缓存穿透布隆过滤器的原理是什么&#xff1f; 我的回答 缓存穿透是什么&#xff1f; 攻击者大量请求缓存和数据库中都不存在的key。如何防止缓存穿透 可以使用布隆过滤器布隆过滤器的原理是什么&a…
最新文章