[足式机器人]Part2 Dr. CAN学习笔记- Ch07 最优控制Optimal Control

本文仅供学习使用
本文参考:
B站:DR_CAN


最优控制的基本概念
在经典控制理论中,通过设计控制器可以改变闭环传递函数的极点(调整动态系统状态矩阵的特征值)。这种控制器设计更加关注系统的稳定性、稳态误差以及基本的瞬态响应指标(如上升时间、超调量等)。然而,对于对精度要求更高的系统或多输人多输出系统,仅仅改变状态矩阵的特征值是远远不够的。最优控制的目标是在可行条件下寻求最佳控制策略,以使控制系统能够最优地达到目标。本章将介绍最优控制的基本概念、最优控制问题的构建、性能指标的选择等。

本章的学习目标包括:

  • 通过一个例子直观地理解最优控制。
  • 掌握性能指标的概念与建立方法
  • 理解性能指标选择的思路与方向,

1. 最优控制问题与性能指标

1.1 引子:独轮车模型

独轮车模型(unicycle model),这是对车辆模型的简化表示。这一模型被广泛地使用在自动驾驶以及自动导引机器人相关研发中,通过控制车轮的转速和方向,我们可以实现车辆运动控制和对特定轨迹的追踪。在该模型中,车辆在二维平面内运动,可以向前或向后移动,也可以绕着中心进行旋转。这种简化的模型假设车辆在水平面上运动,忽略了车辆的横向运动和细节,以便于进行控制算法的设计和分析。
在这里插入图片描述
这是一个多输入、多状态变量的非线性系统。选取合适的采样周期,将其离散化后可得:
x [ k + 1 ] = f d ( x [ k ] , u [ k ] ) x\left[ k+1 \right] =f_{\mathrm{d}}\left( x\left[ k \right] ,u\left[ k \right] \right) x[k+1]=fd(x[k],u[k])
其中, f d ( ) f_{\mathrm{d}}\left( \right) fd()是离散化后的 f ( ) f() f()。将系统离散化可以更加方便地使用数字控制器。

1.2 最优控制场景分析

在这里插入图片描述
在这样的设定下,从直观理解,控制的目标就是令 k = N k=N k=N 时刻的状态变量 x [ N ] x\left[ N \right] x[N](系统的末端状态变量)尽可能地接近 x d x_d xd,使用数学模型来描述这一控制目标,引人系统的性能指标(performance measure),令其为:
J = h ( x [ N ] , x d ) J=h\left( x\left[ N \right] ,x_{\mathrm{d}} \right) J=h(x[N],xd)
它是末端状态变量与目标值的函数。一种典型的性能指标可也写成:
J = ( x 1 [ N ] − x 1 d ) 2 + ( x 2 [ N ] − x 2 d ) 2 + ( x 3 [ N ] − x 3 d ) 2 + ( x 4 [ N ] − x 4 d ) 2 J=\left( x_{1\left[ N \right]}-x_{1\mathrm{d}} \right) ^2+\left( x_{2\left[ N \right]}-x_{2\mathrm{d}} \right) ^2+\left( x_{3\left[ N \right]}-x_{3\mathrm{d}} \right) ^2+\left( x_{4\left[ N \right]}-x_{4\mathrm{d}} \right) ^2 J=(x1[N]x1d)2+(x2[N]x2d)2+(x3[N]x3d)2+(x4[N]x4d)2
它由四项组成,每一项都是末端状态变量与目标值之间的差的平方,这里取平方是为了避免它们之间的差有正有负,可以保证性能指标是非负的。当然,也可以选择使用差的绝对值构建性能指标函数,但一般情况下平方更容易做数学上的处理以及编程。
式中的每一个状态变量与目标值之间的差的平方都作为性能指标的“代价”(cost),差距越大,代价就越高。通过求这些差的平方的和,我们得到了整体的代价,因此.也被称为代价函数(cost function),用于评估系统末端状态与目标状态之间的接近程度。最优控制系统的代价一定是最低的。

在这里插入图片描述
可以发现,性能指标 J J J与初始状态 x [ 0 ] x_{[0]} x[0]、目标值 x d x_d xd和控制量 u [ k ] ( k ∈ [ 0 , N − 1 ] ) u_{\left[ k \right]}\left( k\in \left[ 0,N-1 \right] \right) u[k](k[0,N1])相关。其中,设计的目标就是找到合适的控制策略(control policy) U ∗ = [ u [ 0 ] , u [ 1 ] , ⋯   , u [ N − 1 ] ] U^*=\left[ u_{\left[ 0 \right]},u_{\left[ 1 \right]},\cdots ,u_{\left[ N-1 \right]} \right] U=[u[0],u[1],,u[N1]],使得性能指标 J J J最小。
U ∗ = a r g min ⁡ J U^*=\mathrm{arg}\min J U=argminJ
在这里插入图片描述
需要注意的是,在实际控制问题中,系统中每个状态变量的重要性是不同的,例如在停车场景中,对于末端速度的要求会比其他状态变量更加严格,因为小车必须要“停”下来,而位置上的小偏差是可以被容忍的。可以在 J J J的基础上加入一个实数对称半正定矩阵S,它可以用来平衡不同状态变量对性能指标的贡献,从而使问题更加灵活且适应实际要求。
在这里插入图片描述
调整权重矩阵中参数 s 1 s_1 s1~ s 4 s_4 s4决定了不同状态变量在性能指标中的重要程度,在实际应用中要根据具体控制要求设定,例如对于本例,速度的权重 s 3 s_3 s3需要大一些以保证小车能够停下来。需要注意的是,在调整权重系数时,我们还需要考虑每个元素的单位和数量级。这是因为在实际问题中,不同状态变量的单位和数量级可能不同,如果不予考虑,可能会导致权重系数的选择不合理或不准确。为了解决这个问题,我们可以对权重系数进行规范化(normalization)处理。在实际应用中,规范化的方法可以根据具体情况选择,例如将权重系数缩放到相同的数量级,或者将它们归一化为单位范数。这样可以确保在设定权重系数时,每个状态变量的重要性能够得到合理的考虑。
除了令性能指标最小之外,系统还需要满足一些约束(constraints)条件,以确保系统行为符合实际要求。在停车问题中,小车的速度可能受到上下限的约束。这意味着在控制过程中,我们需要确保小车的速度始终在允许的范围内。
v min ⁡ [ k ] ⩽ v [ k ] ⩽ v max ⁡ [ k ] v_{\min \left[ k \right]}\leqslant v_{\left[ k \right]}\leqslant v_{\max \left[ k \right]} vmin[k]v[k]vmax[k]
这可能是物理上的限制,即小车能够达到的最快速度和最慢速度,这是由小车的动力学性质和机械限制所决定的。另一方面,速度的约束也可以是设计上的限制。这意味着在设计车辆结构时,我们可能会考虑一些安全性和可靠性方面的要求,以确保小车能够在设计的最高速度下正常运行。在这种情况下,约束条件可以用来限制控制策略生成的速度不超过设计限制,以确保系统的稳定性和可靠性

同时,控制量也存在物理约束,本例中控制量是小车的加速度 a ( t ) a_{\left( t \right)} a(t)(和角速度 w ( t ) w_{\left( t \right)} w(t),它们分别来自发动机与舵机的动力,可以表达为:
u min ⁡ [ k ] ⩽ u [ k ] ⩽ u max ⁡ [ k ] u_{\min \left[ k \right]}\leqslant u_{\left[ k \right]}\leqslant u_{\max \left[ k \right]} umin[k]u[k]umax[k]
上述式子组合在一起就构成了带有约束的最优控制问题。限制条件是在系统控制中必须严格满足的约束条件,也被称为硬约束(hard constraints)。在实际应用中,硬约束的考虑非常重要,因为它们直接关系到系统的安全性
和可行性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
系统输人“软约束”(soft constraints)的概念。这一项引入了对控制输人的约束,但不是严格的约束。软约束的引人可以使控制策略更加灵活并增强适应性,允许在满足主要约束的前提下,对输人的变动和调整有一定的容忍度。

对比硬约束与软约束,也可以理解为 “硬件”约束(物理限制或设计限制)“软件”约束算法限制) 。当然,通过调整权重系数可以令一些软约束转化为硬约束,例如在上述场景中,若令 S = 0 S=0 S=0,那么节能就成了这一性能指标的唯一代价,如果没有其他的条件,小车就会停在原地不动

在这里插入图片描述
这类问题多应用于仓储运输车中,每一辆小车都按照预先规划好的轨道运动,以最大限度地减少拥堵,提高效率。轨迹规划问题不在本书的讨论范围内
在这里插入图片描述

在这里插入图片描述
在二维空间中,障碍物的位置是由一系列的坐标点来表示的,即 ( p z o b s t a c l e , p y o b s t a c l e ) (p_{z_{obstacle}},p_{y_{obstacle}}) (pzobstacle,pyobstacle)在建立性能指标时,可以考虑两种方法。
在这里插入图片描述

这个代价函数综合考虑了末端状态,输人,状态变量的运行代价以及小车轨迹与障碍物之间的距离。通过最小化这个代价函数,控制算法可以在追求性能指标的同时,尽量保持小车与障碍物之间的安全距离。可以预见的是,当 P [ k ] P_{[k]} P[k]足够大时,控制算法为了使性能指标最小,必将选择合适的控制策略使得 D ( ) D() D()很小,也就是令小车与障碍物之间的距离很大。
在这里插入图片描述

1.3 最优控制问题的组成与性能指标

1.3.1 最优控制问题的组成

从上节的例子可以得出,一个最优控制问题包含以下几个方面

  • 系统的数学模型
    在最优控制中,系统的数学模型多使用状态空间方程表示,系统的运行过程是其状态变量转移的过程,状态变量的转移在状态空间中形成了一条轨迹(trajectory),控制算法所做的就是规范这条轨迹。状态空间方程可以是连续或者离散形式的,其中离散系统的应用更广泛,这是因为很多最优化系统涉及多个状态变量且包含复杂的约束条件,使用连续系统的表达往往不容易得到解析解。因此使用离散系统可以利用计算机求得数值解,从而找到最优的控制策略。
  • 目标值(参考值)
    根据不同的应用场景,目标值可能是固定的数值,也可能是一个集合,或者是一个动态变化的轨迹。在上述场景1、场景2中,目标值是固定的数值向量;而在场景3、场景4中则为轨迹。如果控制的目标是将小车停在某一个区域内,那么目标值就是一个集合。
  • 性能指标(代价函数)
    性能指标(也称为代价函数)是最优控制的关键,它用于衡量系统表现的优劣。性能指标通常是一个标量函数,它量化了系统的性能、效率或质量等方面的表现。不同的最优控制问题可能需要不同的性能指标。对于同样的控制系统,也可以设计不同的性能指标以满足不同的操作要求。同时,权重是性能指标中的重要参数,通过调整权重系数,最优控制算法会平衡不同状态变量和控制量之间的重要性。
  • 约束条件
    在最优控制中,约束可以施加在状态变量上,例如式(3.1.10a)中对于小车速度的限制又如场景4中对于位置的限制。在约束条件下, x [ k ] ∈ X x_{\left[ k \right]}\in X x[k]X,其中 X X X被称为状态变量的容许轨迹(admissible trajectory)。约束也可以施加在控制量上,即 u [ k ] ∈ Ω u_{\left[ k \right]}\in \varOmega u[k]Ω,其中。 被称为容许控制域(set of admissible control)。需要注意的是,在考虑约束条件时,需要保证最优控制算法能够在约束范围内找到可行的解,避免过于严格的约束导致问题无解。

综上所述,给出最优控制的一个更为严谨的定义,对于一个离散型控制系统:
x [ k + 1 ] = f d ( x [ k ] , u [ k ] , k ) x_{\left[ k+1 \right]}=f_{\mathrm{d}}\left( x_{\left[ k \right]},u_{\left[ k \right]},k \right) x[k+1]=fd(x[k],u[k],k)
最优控制的目标是找到满足容许控制域的控制策略 u ∗ [ k ] ∈ Ω {u^*}_{\left[ k \right]}\in \varOmega u[k]Ω,使系统的状态变量在容许轨迹内( x [ k ] ∈ X x_{\left[ k \right]}\in X x[k]X)从初始状态转移到末端状态,并令性能指标:
J = h ( x [ N ] , x d [ N ] , N ) + ∑ k = 0 N − 1 g ( x [ k ] , x d [ k ] , u [ k ] , k ) J=h\left( x_{\left[ N \right]},x_{\mathrm{d}\left[ N \right]},N \right) +\sum_{k=0}^{N-1}{g\left( x_{\left[ k \right]},x_{\mathrm{d}\left[ k \right]},u_{\left[ k \right]},k \right)} J=h(x[N],xd[N],N)+k=0N1g(x[k],xd[k],u[k],k)
连续型系统的表达式为:
d x ( t ) d t = f ( x ( t ) , u ( t ) , t ) J = h ( x ( t f ) , x d ( t f ) , u ( t f ) , t f ) + ∫ t 0 t f g ( x ( τ ) , u ( τ ) , x d ( τ ) , t ) d τ \begin{array}{l} \frac{\mathrm{d}x_{\left( t \right)}}{\mathrm{d}t}=f\left( x_{\left( t \right)},u_{\left( t \right)},t \right)\\ J=h\left( x_{\left( t_{\mathrm{f}} \right)},{x_{\mathrm{d}}}_{\left( t_{\mathrm{f}} \right)},u_{\left( t_{\mathrm{f}} \right)},t_{\mathrm{f}} \right) +\int_{t_0}^{t_{\mathrm{f}}}{g\left( x_{\left( \tau \right)},u_{\left( \tau \right)},{x_{\mathrm{d}}}_{\left( \tau \right)},t \right) \mathrm{d}\tau}\\ \end{array} dtdx(t)=f(x(t),u(t),t)J=h(x(tf),xd(tf),u(tf),tf)+t0tfg(x(τ),u(τ),xd(τ),t)dτ
其中, t f t_{\mathrm{f}} tf为末端时间

1.3.2 常见的最优控制问题

下面介绍几个常见的最优控制问题,

  • 最短时间问题——在规定的起点状态和终点状态之间,找到一条最短时间的轨迹。
    h ( x ( t f ) , x d ( t f ) , u ( t f ) , t f ) = 0 , g ( x ( τ ) , u ( τ ) , x d ( τ ) , t ) = 1 ⇒ J = ∫ t 0 t f d τ = t f − t 0 h\left( x_{\left( t_{\mathrm{f}} \right)},{x_{\mathrm{d}}}_{\left( t_{\mathrm{f}} \right)},u_{\left( t_{\mathrm{f}} \right)},t_{\mathrm{f}} \right) =0,g\left( x_{\left( \tau \right)},u_{\left( \tau \right)},{x_{\mathrm{d}}}_{\left( \tau \right)},t \right) =1\Rightarrow J=\int_{t_0}^{t_{\mathrm{f}}}{\mathrm{d}\tau}=t_{\mathrm{f}}-t_0 h(x(tf),xd(tf),u(tf),tf)=0,g(x(τ),u(τ),xd(τ),t)=1J=t0tfdτ=tft0
    其中: t 0 t_0 t0是系统开始的时间; t f t_f tf是第一次状态变量达到目标值的时间。取它的最小值,就是令系统的状态变量在最短时间内转移到目标值。其离散化表达式为:
    J = ∑ N 1 = N J=\sum_{}^N{1}=N J=N1=N
    需要注意的是,针对上式描述的最短时间问题,在实际操作中往往需要找到性能指标与系统输入(控制量)的关系式并代入求解,因为控制系统中最终需要调整的参数仅为控制量。其原理与如下表述的末端控制问题类似,需要将控制量体现在性能指标函数中。
  • 末端控制问题
    如场景1所示,控制的目标是令系统的状态变量在控制区间末端靠近参考位置。其离散形式性能指标为:
    J = ∥ x [ N ] − x d [ N ] ∥ S 2 J=\left\| x_{\left[ N \right]}-x_{\mathrm{d}\left[ N \right]} \right\| _{\mathrm{S}}^{2} J= x[N]xd[N] S2
    连续形式性能指标
    J = ∥ x ( t f ) − x d ( t f ) ∥ S 2 J=\left\| x_{\left( t_{\mathrm{f}} \right)}-{x_{\mathrm{d}}}_{\left( t_{\mathrm{f}} \right)} \right\| _{\mathrm{S}}^{2} J= x(tf)xd(tf) S2
    其中, S S S为半正定矩阵。
  • 最小控制量问题
    控制的目标是令系统从初始状态转移到末端状态的控制量(系统输入)最小,其离散形式与连续形式的性能指标可分别设为:
    J = ∑ k = 0 N ∥ u [ k ] ∥ R [ k ] 2 J = ∫ t 0 t f ∥ u ( t ) ∥ R ( t ) 2 d t J=\sum_{k=0}^N{\left\| u_{\left[ k \right]} \right\| _{\mathrm{R}_{\left[ k \right]}}^{2}} \\ J=\int_{t_0}^{t_{\mathrm{f}}}{\left\| u_{\left( t \right)} \right\| _{\mathrm{R}_{\left( t \right)}}^{2}\mathrm{d}t} J=k=0N u[k] R[k]2J=t0tf u(t) R(t)2dt
    其中, R [ k ] R_{[k]} R[k] R ( k ) R_{(k)} R(k)为正定矩阵

需要特别注意的是,在大多数情况下,最小控制量问题等价于最低能耗问题。例如小车的加速度与角速度,它们都直接和能耗相关, u ( t ) u_{\left( t \right)} u(t)最小即意味着能耗最小。但是在某些情况下,控制量并不直接反映能耗,最低的控制量不代表最低的能耗。同时绝对的最小能耗问题往往没有现实意义,例如控制小车移动到目标位置,绝对的最小能耗意味着小车完全不动。

  • 轨迹追踪问题
    在这里插入图片描述
  • 综合问题
    在这里插入图片描述
  • 调节问题
    在这里插入图片描述

对于一般的轨迹追踪问题,在条件允许的情况下,可以引入误差 e [ k ] − x [ k ] − x d [ k ] e_{[k]}-x_{[k]}-x_{d[k]} e[k]x[k]xd[k]并建立关于误差 e [ k ] e_{[k]} e[k]的状态空间方程,此时误差的目标值自然是 e d [ k ] = 0 e_{d[k]}=0 ed[k]=0。这样就可以将非调节控制问题转化为调节控制问题。非零参考值问题将在本书的第4章、第5章中详细讨论。

在分析求解最优化问题的过程中,需要注意以下几点。

  1. 最优控制策略的存在性:并非所有的最优化问题都能找到最优解。在某些情况下,系统可能无法在满足约束条件的前提下找到最优解。以场景4中小车轨迹追踪为例,如果障碍物设计在轨迹当中,或者要求小车以极高的速度运行,都将无法找到最优解
  2. 最优策略的多样性:在某些情况下,最优控制问题可能存在多个最优解。这是因为性能指标和约束条件的不同选择可能导致不同的最优解。以场景1为例,由于性能指标只关注最终位置而不关心轨迹和运动过程,因此可能存在多组控制策略达到相同的目标。
  3. 在最优化问题的建模过程中,尽量将性能指标与约束条件设计为凸函数(convexfunction)。凸函数具有良好的性质,可以利用现有的凸优化技术找到其全局最优解。凸函数的使用可以提高问题的求解效率和可行性。在实际应用中,需要根据具体问题的特性和要求进行最优化问题的建模和求解。同时也需要考虑问题的复杂性和可行性,以便选择适当的算法和方法来解决最优化问题。

1.3.3 控制问题构建以及性能指标的选择

性能指标的选择是最优控制问题中的关键部分,它表明了我们希望控制系统如何被优化。本节将通过两个具体案例详细讲解性能指标的选择以及最优化问题的建立。

  • 平衡车控制
    平衡车可以通过人体的姿态自动调整前后平衡,使驾驶者可以在不失去平衡的情况下行驶。当只考虑它在二维平面移动时,可以将其简化为一个倒立摆的数学模型。简化后的模型包括一个质量为 m m m的小球,一个长度为 d d d、质量忽略不计的连杆,以及一个可以水平移动的小车,其质量同样忽略不计。系统的受力分析已在图中标出。其中, φ ( t ) φ(t) φ(t)是连杆小球与竖直方向的夹角, ξ ( t ) ξ(t) ξ(t)是小车的位移。下面对连杆小球进行受力分析。
    在这里插入图片描述

在这里插入图片描述
选取了运行代价与系统输人的组合。其中运行代价选择的是状态变量 x ( t ) x(t) x(t)与目标0的差值,这样的设定可以使系统在运行过程中状态变量 x ( t ) x(t) x(t)始终向0靠拢。权重矩阵Q是一个常数矩阵,在本例中输人只有一个变量,因此R是一个一维的权重矩阵。当系统偏离平衡位置后,输人会作用在系统上直到它回到平衡位置,之后则保持为零。因此输入 u ( t ) u(t) u(t)的代价直接体现了能耗的大小。末端时间 t f t_f tf的选择也非常重要,在判断性能指标时, t f t_f tf需要足够长以保证系统已经回到平衡点位置。

1.4 Summary

在这里插入图片描述

2. 动态规划 Dynamic Programming

2.1 基本概念

Richoard Bell man 最优化理论:
An optimal policy has the property that whatever the initial state and initial decision are, the remaining decisions must constitude an optimal policy with regard to the state resulting from the first decision.
——动态Dynamic 面向未来

  • 无人机高度控制
    在这里插入图片描述
    在这里插入图片描述

需要注意的是,对于这一案例所表达的性能指标存在一定的矛盾。假如无人机的控制目标是悬停在某一高度,此时的动力应该与重力相同,即 u [ k ] = g u[k]=g u[k]=g。而以 ∣ ∣ u [ k ] ∣ ∣ ||u[k]|| ∣∣u[k]∣∣作为代价则会将输入 u [ k ] u[k] u[k]推向0。因此在选取控制量代价时要具体问题具体分析。

2.2 代码详解

2.3 简单一维案例

在这里插入图片描述
在这里插入图片描述

3. 线性二次型调节器(LQR)

3.1 数学推导

在这里插入图片描述
在这里插入图片描述

3.2 案例反洗与代码详解

在这里插入图片描述

4. 轨迹追踪

4.1 目标误差控制-误差的调节

在这里插入图片描述
在这里插入图片描述

4.2 稳态非零值控制

在这里插入图片描述

在这里插入图片描述

4.3 输入增量控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiongLoure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值