无人驾驶决策规划技术理论(一)

news2025/4/22 20:27:31

本博客记录学习李柏老师所著的决策规划技术理论与实践中的关键知识,想以此作为自己学习的框架,方便自己日后回顾。

1 非结构化场景决策规划方法

场景:港口、停车场的泊车附近区域、偏僻道路、野外
特色:障碍物位置杂乱无章


决策规划 = 行为决策 + 轨迹规划

2 泊车轨迹规划任务建模
2.1 泊车轨迹规划任务

任务:要求生成一条时空轨线,使得车辆能够从给定起始姿态运动至既定的终止位姿。这条时空轨线应符合车辆运动规律,且避让环境中的障碍物。
在这里插入图片描述

2.2 基于最优控制问题模型的轨迹规划任务描述

首先需要明确的是,车辆不是质点,车辆存在的空间也不属于一维空间,车辆的运动规律更加复杂,环境限制约束的表现形式也更加丰富。但是,最优控制问题仍旧是描述轨迹规划任务最直接、最准确、最通用的方式。无人驾驶的最优控制问题由四部分组成:(1)车辆运动学约束(2)边值约束(3)碰撞躲避约束(4)代价函数多项式


如下所示OCP,求解下面命题可获得时间片段 [ 0 , t f ] [0,t_f] [0,tf]上的控制信号 a ( t ) a(t) a(t),使车辆在最短的时间内从状态 x = 0 x=0 x=0迁移到 x = 6 x=6 x=6
m i n i m i z e J = t f s . t .   d x ( t ) d t = v ( t ) d v ( t ) d t = a ( t ) ∣ v ( t ) ∣ ≤ v m a x ∣ a ( t ) ∣ ≤ a m a x 0 ≤ x ( t ) ≤ 6 ∀ t ∈ [ 0 , t f ] minimize J=t_f \\ s.t. \ \frac{dx(t)}{dt}=v(t) \\ \frac{dv(t)}{dt}=a(t) \\ |v(t)|≤v_{max} \\ |a(t)|≤a_{max} \\ 0≤x(t)≤6 \\ \forall t∈[0,t_f] minimizeJ=tfs.t. dtdx(t)=v(t)dtdv(t)=a(t)v(t)vmaxa(t)amax0x(t)6t[0,tf]

2.3 车辆运动学约束

车辆运动学约束:描述车辆在二维平面上的运动能力。
在车速不高的情况下,二自由度模型能够符合实际需求,该模型遵循的假设:
(1)车辆行驶于平坦路面,忽略车辆在垂直于路面方向上的运动
(2)忽略车辆在行驶中受到的空气阻力以及地面侧向摩擦力
(3)车轮与地面始终保持良好的滚动接触
(4)车辆为刚体,忽略车身悬架结构的影响

以后轮为参考点的单车模型:
在这里插入图片描述
车辆在惯性坐标系X-Y中的运动过程受到以下微分方程组的制约:
d d t [ x ( t ) y ( t ) v ( t ) ϕ ( t ) θ ( t ) ] = [ v ( t ) ⋅ cos ⁡ θ ( t ) v ( t ) ⋅ sin ⁡ θ ( t ) a ( t ) ω ( t ) v ( t ) ⋅ tan ⁡ ϕ ( t ) / L w ] t ∈ [ 0 , t f ] . \begin{array}{c} \frac{\mathrm{d}}{\mathrm{d} t}\left[\begin{array}{c} x(t) \\ y(t) \\ v(t) \\ \phi(t) \\ \theta(t) \end{array}\right]=\left[\begin{array}{c} v(t) \cdot \cos \theta(t) \\ v(t) \cdot \sin \theta(t) \\ a(t) \\ \omega(t) \\ v(t) \cdot \tan \phi(t) / L_{\mathrm{w}} \end{array}\right] \\ t \in\left[0, t_{f}\right] . \end{array} dtd x(t)y(t)v(t)ϕ(t)θ(t) = v(t)cosθ(t)v(t)sinθ(t)a(t)ω(t)v(t)tanϕ(t)/Lw t[0,tf].

车辆内在的机械特性对应着状态/控制变量的容许作用区间,一般包括:
− Φ max ⁡ ⩽ ϕ ( t ) ⩽ Φ max ⁡ v min ⁡ ⩽ v ( t ) ⩽ v max ⁡ a min ⁡ ⩽ a ( t ) ⩽ a max ⁡ − Ω max ⁡ ⩽ ω ( t ) ⩽ Ω max ⁡ , t ∈ [ 0 , t f ] . \begin{array}{c} -\Phi_{\max } \leqslant \phi(t) \leqslant \Phi_{\max } \\ v_{\min } \leqslant v(t) \leqslant v_{\max } \\ a_{\min } \leqslant a(t) \leqslant a_{\max } \\ -\Omega_{\max } \leqslant \omega(t) \leqslant \Omega_{\max }, t \in\left[0, t_{f}\right] . \end{array} Φmaxϕ(t)Φmaxvminv(t)vmaxamina(t)amaxΩmaxω(t)Ωmax,t[0,tf].

对于行驶平稳性要求较高的轨迹规划任务,如需 a ( t ) a(t) a(t)变化平缓,应额外补入关于 a ( t ) a(t) a(t)的微分变量 j e r k ( t ) jerk(t) jerk(t),并对 j e r k ( t ) jerk(t) jerk(t)限幅。

轨迹规划任务的本质是寻找一个非线性系统的某一组控制变量 u ( t ) = [ a ( t ) , w ( t ) ] u(t)=[a(t),w(t)] u(t)=[a(t),w(t)],使得系统在受限条件下实现状态的最优迁移——最优控制问题正是精准、直接描述此类任务的方式

2.4 边值约束

在车辆起始时刻t = 0,应指定车辆所处的运动状态,即 [ v ( 0 ) , ϕ ( 0 ) , a ( 0 ) , ω ( 0 ) , x ( 0 ) , y ( 0 ) , θ ( 0 ) ] = [ p 1 , p 2 , p 3 , p 4 , p 5 , p 6 , p 7 ] [v(0), \phi(0), a(0), \omega(0), x(0), y(0), \theta(0)]=\left[p_{1}, p_{2}, p_{3}, p_{4}, p_{5}, p_{6}, p_{7}\right] [v(0),ϕ(0),a(0),ω(0),x(0),y(0),θ(0)]=[p1,p2,p3,p4,p5,p6,p7],其中 [ p 1 , p 2 , p 3 , p 4 , p 5 , p 6 , p 7 ] [p_{1}, p_{2}, p_{3}, p_{4}, p_{5}, p_{6}, p_{7}] [p1,p2,p3,p4,p5,p6,p7]对应车载传感器记录/推算的当前时刻t=0的运动状态客观实际情况。
在车辆运动的终止时刻 t f t_f tf,也要对车辆运动状态进行限制。在泊车任务中,一般要求车辆最终稳定地停泊下来。
v ( t f ) = a ( t f ) = w ( t f ) = 0 v(t_f)=a(t_f)=w(t_f)=0 v(tf)=a(tf)=w(tf)=0,如果明确要求车辆的前轮在终止时刻回正,应施加约束 Φ ( t f ) = 0 \Phi(t_f)=0 Φ(tf)=0。在工程实践中最常见的终止时刻状态约束是要求车辆停泊在某一矩形区域内,相当于间接对 [ x ( t f ) , y ( t f ) , θ ( t f ) ] [x(t_f),y(t_f),\theta(t_f)] [x(tf),y(tf),θ(tf)]提出了限制要求。

在这里插入图片描述
① 首先根据后轴中心点(x,y)与各个顶点的相对位置得到各顶点坐标。
A = ( A x , A y ) = [ x + ( L w + L f ) ⋅ cos ⁡ θ − 0.5 L b ⋅ sin ⁡ θ , y + ( L w + L f ) ⋅ sin ⁡ θ + 0.5 L b ⋅ cos ⁡ θ ] ] B = ( B x , B y ) = [ x + ( L w + L f ) ⋅ cos ⁡ θ + 0.5 L b ⋅ sin ⁡ θ , y + ( L w + L f ) ⋅ sin ⁡ θ − 0.5 L b ⋅ cos ⁡ θ ] C = ( C x , C y ) = ( x − L r ⋅ cos ⁡ θ + 0.5 L b ⋅ sin ⁡ θ , y − L r ⋅ sin ⁡ θ − 0.5 L b ⋅ cos ⁡ θ ) D = ( D x , D y ) = ( x − L r ⋅ cos ⁡ θ − 0.5 L b ⋅ sin ⁡ θ , y − L r ⋅ sin ⁡ θ + 0.5 L b ⋅ cos ⁡ θ ) \begin{array}{l} \left.A=\left(A_{x}, A_{y}\right)=\left[x+\left(L_{\mathrm{w}}+L_{\mathrm{f}}\right) \cdot \cos \theta-0.5 L_{\mathrm{b}} \cdot \sin \theta, y+\left(L_{\mathrm{w}}+L_{\mathrm{f}}\right) \cdot \sin \theta+0.5 L_{\mathrm{b}} \cdot \cos \theta\right]\right]\\ \begin{array}{c} B=\left(B_{x}, B_{y}\right)=\left[x+\left(L_{\mathrm{w}}+L_{\mathrm{f}}\right) \cdot \cos \theta+0.5 L_{\mathrm{b}} \cdot \sin \theta, y+\left(L_{\mathrm{w}}+L_{\mathrm{f}}\right) \cdot \sin \theta-0.5 L_{\mathrm{b}} \cdot \cos \theta\right] \\ C=\left(C_{x}, C_{y}\right)=\left(x-L_{\mathrm{r}} \cdot \cos \theta+0.5 L_{\mathrm{b}} \cdot \sin \theta, y-L_{\mathrm{r}} \cdot \sin \theta-0.5 L_{\mathrm{b}} \cdot \cos \theta\right) \\ D=\left(D_{x}, D_{y}\right)=\left(x-L_{\mathrm{r}} \cdot \cos \theta-0.5 L_{\mathrm{b}} \cdot \sin \theta, y-L_{\mathrm{r}} \cdot \sin \theta+0.5 L_{\mathrm{b}} \cdot \cos \theta\right) \end{array} \end{array} A=(Ax,Ay)=[x+(Lw+Lf)cosθ0.5Lbsinθ,y+(Lw+Lf)sinθ+0.5Lbcosθ]]B=(Bx,By)=[x+(Lw+Lf)cosθ+0.5Lbsinθ,y+(Lw+Lf)sinθ0.5Lbcosθ]C=(Cx,Cy)=(xLrcosθ+0.5Lbsinθ,yLrsinθ0.5Lbcosθ)D=(Dx,Dy)=(xLrcosθ0.5Lbsinθ,yLrsinθ+0.5Lbcosθ)
② 建立描述点在矩形内部的一般条件。某点P=(x,y)处于某一矩形内部的约束条件可以一般性地写成如下形式:
{ a ⋅ x + b ⋅ y + c 1 < 0 − a ⋅ x − b ⋅ y − c 2 < 0 m ⋅ x + n ⋅ y + q 1 < 0 − m ⋅ x − n ⋅ y − q 2 < 0 \left\{\begin{array}{c} a \cdot x+b \cdot y+c_{1}<0 \\ -a \cdot x-b \cdot y-c_{2}<0 \\ m \cdot x+n \cdot y+q_{1}<0 \\ -m \cdot x-n \cdot y-q_{2}<0 \end{array}\right. ax+by+c1<0axbyc2<0mx+ny+q1<0mxnyq2<0

在给定矩形区域 P 1 P 2 P 3 P 4 P_1P_2P_3P_4 P1P2P3P4顶点坐标的前提下,将终止时刻的区域限制约束建立为:
 PointInRect  ( χ , P 1 P 2 P 3 P 4 ) , ∀ χ ∈ { A ( t f ) , B ( t f ) , C ( t f ) , D ( t f ) } .  \text { PointInRect }\left(\chi, P_{1} P_{2} P_{3} P_{4}\right), \forall \chi \in\left\{A\left(t_{f}\right), B\left(t_{f}\right), C\left(t_{f}\right), D\left(t_{f}\right)\right\} \text {. }  PointInRect (χ,P1P2P3P4),χ{A(tf),B(tf),C(tf),D(tf)}

该式是针对状态变量 x ( t f ) , y ( t f ) , θ ( t f ) x(t_f),y(t_f),\theta(t_f) x(tf),y(tf),θ(tf)的非凸非线性约束。注意不要简单地将边值约束 θ ( t f ) = θ f \theta(t_f)=\theta_f θ(tf)=θf,在稍微复杂的泊车场景中,不能提前预判车辆绕行多少圈才能抵达终止位姿,因此针对 θ ( t f ) = 0 \theta(t_f)=0 θ(tf)=0的限制实际上是 θ ( t f ) = 2 k π , k ∈ Z \theta(t_f)=2k\pi,k∈Z θ(tf)=2,kZ,为了避免在约束条件中混入整数变量k,将姿态角度的终止时刻点约束写成:
sin ⁡ [ θ ( t f ) ] = sin ⁡ θ f cos ⁡ [ θ ( t f ) ] = cos ⁡ θ f \begin{array}{l} \sin \left[\theta\left(t_{f}\right)\right]=\sin \theta_{\mathrm{f}} \\ \cos \left[\theta\left(t_{f}\right)\right]=\cos \theta_{\mathrm{f}} \end{array} sin[θ(tf)]=sinθfcos[θ(tf)]=cosθf

2.5 碰撞躲避约束

碰撞躲避约束要求车辆在整个运动时域避免与环境中任何静止、移动障碍物发生碰撞。
(1)障碍物的表达形式:凸多边形,即激光雷达反射点云的最小凸包。
(2)某点处于某一凸多边形外部的约束建模,考虑描述点 P = ( x , y ) P=(x,y) P=(x,y)位于具有n个顶点的凸多边形 Q 1 , Q 2 , . . . , Q n Q_1,Q_2,...,Q_n Q1,Q2,...,Qn外部。

在这里插入图片描述
if-else 不适合构建通用的约束条件。一旦在最优控制问题中显式地掺入if-else语句,实质上相当于引入了函数导数不连续的隐患,为最优控制问题求解带来巨大困难。
三角面积法:将点P与凸多边形每两个相邻顶点分别组成三角形,并将这些三角形面积叠加,如果面积之和大于凸多边形,则P处于凸多边形外部,否则在轮廓或内部。点P处于凸多边形 Q 1 , Q 2 , . . . , Q n Q_1,Q_2,...,Q_n Q1,Q2,...,Qn外部的约束条件如下:
S △ P Q n Q 1 + ∑ k = 1 n − 1 S △ P Q k Q k + 1 > S □ Q 1 Q 2 … Q n , S_{\triangle P Q_{\mathrm{n}} Q_{1}}+\sum_{k=1}^{n-1} S_{\triangle P Q_{k} Q_{k+1}}>S_{\square Q_{1} Q_{2} \ldots Q_{n}}, SPQnQ1+k=1n1SPQkQk+1>SQ1Q2Qn,
S △ P Q k Q k + 1 = 1 2 ⋅ ∣ x ⋅ y Q k + x Q k ⋅ y Q ( k + 1 ) + x Q ( k + 1 ) ⋅ y − x ⋅ y Q ( k + 1 ) − x Q k ⋅ y − x Q ( k + 1 ) ⋅ y Q k ∣ . S_{\triangle P Q_{k} Q_{k+1}}=\frac{1}{2} \cdot\left|x \cdot y_{Q k}+x_{Q k} \cdot y_{Q(k+1)}+x_{Q(k+1)} \cdot y-x \cdot y_{Q(k+1)}-x_{Q k} \cdot y-x_{Q(k+1)} \cdot y_{Q k}\right|. SPQkQk+1=21 xyQk+xQkyQ(k+1)+xQ(k+1)yxyQ(k+1)xQkyxQ(k+1)yQk .

在这里插入图片描述
碰撞躲避约束规模庞大、复杂程度高,包含大量对三角函数求取绝对值并将绝对值项加和的复杂操作,具有强非凸非线性,绝对值运算也属于if-else条件建模语句,不利于最优控制问题的求解。事实上,多边形之间的碰撞躲避约束无可避免地会引入if-else语句,因为多边形轮廓在顶点处均有突变。

2.6 代价函数

从符合硬性约束的众多轨迹中选出最令人满意的那一条作为轨迹规划的最终结果。这种筛选轨迹的指标式就是代价函数。
① 期待泊车尽早完成: J 1 = t f J_1=t_f J1=tf
② 期待泊车车速尽量按照三角函数波动: J 2 = ∫ 0 t f [ v ( t ) − sin ⁡ ( t ) ] 2 ⋅ d t . J_{2}=\int_{0}^{t_{f}}[v(t)-\sin (t)]^{2} \cdot \mathrm{d} t . J2=0tf[v(t)sin(t)]2dt.
③ 期待泊车车速变化尽量小: J 3 = ∫ 0 t f [ a ( t ) − 0 ] 2 ⋅ d t . J_{3}=\int_{0}^{t_{f}}[a(t)-0]^{2} \cdot \mathrm{d} t . J3=0tf[a(t)0]2dt.
④ 期待车辆前轮在整个泊车运动过程中转动速度缓慢: J 4 = ∫ 0 t f [ ω ( t ) − 0 ] 2 ⋅ d t . J_{4}=\int_{0}^{t_{f}}[\omega(t)-0]^{2} \cdot \mathrm{d} t . J4=0tf[ω(t)0]2dt.
实际求解的轨迹会在满足硬性约束的前提下尽量将其最小化
⑤ 期待车辆按照某一既定路径行驶: J 5 = ∫ 0 t f { [ x ( t ) − t ) 2 + ( y ( t ) − sin ⁡ t ] 2 } ⋅ d t . J_{5}=\int_{0}^{t_{f}}\left\{[x(t)-t)^{2}+(y(t)-\sin t]^{2}\right\} \cdot \mathrm{d} t . J5=0tf{[x(t)t)2+(y(t)sint]2}dt.
⑥ 期待车辆在严格避障基础上进一步做到适当远离障碍物,避免因闭环控制偏差、外界扰动等因素导致碰撞。
在这里插入图片描述
将代价函数多项式加权汇总,得到完整的代价函数:
J = w 1 ∗ J 1 + w 2 ∗ J 2 + . . . + w 6 ∗ J 6 J=w_1*J_1+w_2*J_2+...+w_6*J_6 J=w1J1+w2J2+...+w6J6
较大的权重意味着在整个代价函数中对该部分的最小化效用更加重视。

完整的最优控制问题:
min J:
s . t . 车辆运动学约束: d d t [ x ( t ) y ( t ) v ( t ) ϕ ( t ) θ ( t ) ] = [ v ( t ) ⋅ cos ⁡ θ ( t ) v ( t ) ⋅ sin ⁡ θ ( t ) a ( t ) ω ( t ) v ( t ) ⋅ tan ⁡ ϕ ( t ) / L w ] t ∈ [ 0 , t f ] . − Φ max ⁡ ⩽ ϕ ( t ) ⩽ Φ max ⁡ v min ⁡ ⩽ v ( t ) ⩽ v max ⁡ a min ⁡ ⩽ a ( t ) ⩽ a max ⁡ − Ω max ⁡ ⩽ ω ( t ) ⩽ Ω max ⁡ , t ∈ [ 0 , t f ] . 边值约束: [ v ( 0 ) , ϕ ( 0 ) , a ( 0 ) , ω ( 0 ) , x ( 0 ) , y ( 0 ) , θ ( 0 ) ] = [ p 1 , p 2 , p 3 , p 4 , p 5 , p 6 , p 7 ] v ( t f ) = a ( t f ) = w ( t f ) = 0 Φ ( t f ) = 0  PointInRect  ( χ , P 1 P 2 P 3 P 4 ) , ∀ χ ∈ { A ( t f ) , B ( t f ) , C ( t f ) , D ( t f ) } .  碰撞躲避约束: S △ P Q n Q 1 + ∑ k = 1 n − 1 S △ P Q k Q k + 1 > S □ Q 1 Q 2 … Q n s.t. 车辆运动学约束:\begin{array}{c} \frac{\mathrm{d}}{\mathrm{d} t}\left[\begin{array}{c} x(t) \\ y(t) \\ v(t) \\ \phi(t) \\ \theta(t) \end{array}\right]=\left[\begin{array}{c} v(t) \cdot \cos \theta(t) \\ v(t) \cdot \sin \theta(t) \\ a(t) \\ \omega(t) \\ v(t) \cdot \tan \phi(t) / L_{\mathrm{w}} \end{array}\right] \\ t \in\left[0, t_{f}\right] . \end{array} \\\begin{array}{c} -\Phi_{\max } \leqslant \phi(t) \leqslant \Phi_{\max } \\ v_{\min } \leqslant v(t) \leqslant v_{\max } \\ a_{\min } \leqslant a(t) \leqslant a_{\max } \\ -\Omega_{\max } \leqslant \omega(t) \leqslant \Omega_{\max }, t \in\left[0, t_{f}\right] . \end{array} \\ 边值约束:[v(0), \phi(0), a(0), \omega(0), x(0), y(0), \theta(0)]=\left[p_{1}, p_{2}, p_{3}, p_{4}, p_{5}, p_{6}, p_{7}\right] \\ v(t_f)=a(t_f)=w(t_f)=0 \\ \Phi(t_f)=0 \\ \text { PointInRect }\left(\chi, P_{1} P_{2} P_{3} P_{4}\right), \forall \chi \in\left\{A\left(t_{f}\right), B\left(t_{f}\right), C\left(t_{f}\right), D\left(t_{f}\right)\right\} \text {. } \\碰撞躲避约束:S_{\triangle P Q_{\mathrm{n}} Q_{1}}+\sum_{k=1}^{n-1} S_{\triangle P Q_{k} Q_{k+1}}>S_{\square Q_{1} Q_{2} \ldots Q_{n}} s.t.车辆运动学约束:dtd x(t)y(t)v(t)ϕ(t)θ(t) = v(t)cosθ(t)v(t)sinθ(t)a(t)ω(t)v(t)tanϕ(t)/Lw t[0,tf].Φmaxϕ(t)Φmaxvminv(t)vmaxamina(t)amaxΩmaxω(t)Ωmax,t[0,tf].边值约束:[v(0),ϕ(0),a(0),ω(0),x(0),y(0),θ(0)]=[p1,p2,p3,p4,p5,p6,p7]v(tf)=a(tf)=w(tf)=0Φ(tf)=0 PointInRect (χ,P1P2P3P4),χ{A(tf),B(tf),C(tf),D(tf)}碰撞躲避约束:SPQnQ1+k=1n1SPQkQk+1>SQ1Q2Qn

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

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

相关文章

unity使用Registry类将指定内容写入注册表

遇到一个新需求&#xff0c;在exe执行初期把指定内容写入注册表&#xff0c;Playerprefs固然可以写入&#xff0c;但是小白不知道怎么利用Playerprefs写入DWORD类型的数据&#xff0c;因此使用了Registry类 一. 对注册表中键的访问 注册表中共可分为五类 一般在操作时&#…

个人如何合法自建服务器?

随着互联网技术的不断发展&#xff0c;越来越多的人开始考虑自建服务器&#xff0c;以满足自己的需求。但是&#xff0c;在自建服务器之前&#xff0c;必须了解相关的法律法规和规定&#xff0c;以确保自己的行为合法合规。本文将介绍个人如何合法自建服务器&#xff0c;以供参…

【Oracle】玩转Oracle数据库(七):RMAN恢复管理器

前言 嘿&#xff0c;数据库大魔法师们&#xff01;准备好迎接新的技术大招了吗&#xff1f;今天我们要探索的是Oracle数据库中的神奇利器——RMAN恢复管理器&#xff01;&#x1f6e1;️&#x1f4be; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;七&#xff09;&#xf…

单片机SWJ 调试端口(SW-DP和JTAG)、SWD下载电路

单片机下载接口是指用于将编写好的程序代码下载到单片机芯片中的接口。常见的单片机下载接口包括以下几种&#xff1a; 1. **串口下载接口**&#xff1a;通过串口&#xff08;如UART或RS-232接口&#xff09;与计算机或下载器相连&#xff0c;将程序代码通过串口传输到单片机内…

云里物里轻薄系列电子价签,如何革新零售?

云里物里的DS轻薄系列电子价签&#xff0c;凭借轻巧外观和强劲性能&#xff0c;为零售行业提供了更便捷的商品改价方案。这不仅是对纸质价标的替代&#xff0c;更以其安全性和可持续发展性&#xff0c;实现对零售行业的效率升级&#xff0c;让商家们轻松迎接数字化时代的挑战&a…

Java毕业设计-基于springboot开发的家乡特色推荐系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的家乡特色推荐系…

Vue+SpringBoot打造音乐偏好度推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1.2 我的喜好模块2.1.3 每日推荐模块2.1.4 通知公告模块 2.2 用例图设计2.3 实体类设计2.4 数据库设计 三、系统展示3.1 登录注册3.2 音乐档案模块3.3 音乐每日推荐模块3.4 通知公告模…

客服办公神器·带你实现快捷回复自由

节后很多做客服的小伙伴都来找我说回复挺力不从心的&#xff0c;让我支点招。因为每个小伙伴遇到的顾客问题和回复情况都各不相同&#xff0c;我还是建议大家下载一个利于提高自己办公效率的软件&#xff0c;像我一直在用的这个“客服宝快捷回复软件”真是客服打工人之光&#…

使用maven项目引入jQuery

最近在自学 springBoot &#xff0c;期间准备搞一个前后端不分离的东西&#xff0c;于是需要在 maven 中引入jQuery 依赖&#xff0c;网上百度了很多&#xff0c;这里来做一个总结。 1、pom.xml 导入依赖 打开我们项目的 pom.xml 文件&#xff0c;输入以下坐标。这里我使用的是…

uniapp开发笔记----发布成微信小程序体验版本

HBuilderX-vue2 一 创建vue2项目并打包成微信小程序&#xff0c;发布到体验版本1. 创建项目2. 开发页面3. 打包成微信小程序4. 发布成微信小程序体验版本-上传代码成功后登陆微信公众平台[https://mp.weixin.qq.com/](https://mp.weixin.qq.com/)-找到版本可管理->开发版本-…

spring boot 整合 minio存储 【使用篇】

zi导入依赖 <!--minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.0.3</version></dependency> yml配置&#xff08;默认配置&#xff09; spring:# 配置文件上传大小限制s…

vue -- watermark水印添加方法

前言 项目生成公司水印是很普遍的需求&#xff0c;下面是vue项目生产水印的方法。话不多说&#xff0c;复制粘贴就可以马上解决你的需求。 步骤1 创建watermark.js文件。目录结构 /** 水印添加方法 */let setWatermark (str1, str2) > {let id 1.23452384164.1234124…

配电房轨道式巡检机器人方案

一、应用背景 在变电站、配电房、开关站等各种室内变配电场所内&#xff0c;由于变配电设备的数量众多、可能存在各类安全隐患&#xff0c;为了保证用电的安全可靠&#xff0c;都要进行日常巡检。 但目前配电房人工巡检方式有以下主要问题&#xff1a; 巡检工作量大、成本高 …

无法导入ohos.bundle.installer错误解决方法

今天在运行一个开源项目时&#xff0c;发现编译项目时报了一个错误&#xff1a;ohos.bundle.installer。 对应的SDK版本信息如下&#xff1a; 解决方法&#xff1a; 造成错误的原因是&#xff0c;我们使用的是public-sdk&#xff0c;所以我们需要到OpenHarmony平台下载full-s…

配电房智能辅助监控系统设计

业务背景 工业企业、学校、医院、居民小区等单位有这海量的配电房&#xff0c;这些配电房内的配电设备种类多、运行环境复杂&#xff0c;存在各种各样的安全隐患。目前这些配电房主要依靠人员在场值守或巡检方式进行管理&#xff0c;但单纯的人工运维方式既成本高&#xff0c;…

第3届图像处理与媒体计算国际会议(ICIPMC 2024)即将召开!

2024年第3届图像处理与媒体计算国际会议&#xff08;ICIPMC2024&#xff09;将于2024年5月17-19日在中国合肥举行。本次大会由安徽大学、西北工业大学&#xff0c;西北大学和IEEE联合主办。ICIPMC 2024旨在汇集该领域领先的学术科学家、研究人员和学者&#xff0c;并进行交流和…

精品springboot校园失物招领系统

《[含文档PPT源码等]精品基于springboot校园失物招领系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&#xff1a;HTML5,…

Linux磁盘如何分区?

首先需要先给虚拟机添加磁盘 sblk #查看磁盘设备 得到以下内容&#xff1a; NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 pa…

杰理701N可视化SDK之EQ在线调试

杰理701N可视化SDK EQ在线调试 准备工具声学调音步骤软件导入stream.bin在线调试功能蓝牙连接失败问题 杰理JL701N可视化SDK工具中支持在线调试EQ, 对EQ进行实时调整, 可以更方便地控制和塑造声音改善或定制声音效果. EQ即均衡器(Equalizer, 简称EQ), 是一种音效处理工具, 它允…

ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析

目录 一、引言二、Java 8之前的ConcurrentHashMap1、内部结构与初始化2、Segment类3、并发控制4、扩容与重哈希5、总结 三、Java 8中的ConcurrentHashMap1、数据结构2、并发控制2.1. CAS操作2.2. synchronized同步块 3、哈希计算与定位4、扩容与重哈希5、总结 四、Java 17中的C…