人形机器人建模与控制(二) - 高级运动学和动态建模

2024-05-27 09:12

本文主要是介绍人形机器人建模与控制(二) - 高级运动学和动态建模,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

L2: Advanced Kinematic and Dynamic Modeling

这里写目录标题

  • L2: Advanced Kinematic and Dynamic Modeling
    • 1. Introduction
    • 2. Kinematic Modeling
      • 运动学方程
      • 速度的雅可比矩阵
      • 雅可比矩阵的两种形式
        • 分析雅可比矩阵(Analytical Jacobian)
        • 几何雅可比矩阵(Geometric Jacobian)
      • 差分逆运动学
    • 3. Dynamic Modeling
      • 动力学基本方程
      • 拉格朗日力学
      • 动力学方程的特性
      • 功率关系
      • 动力学方程包含外力
    • 4. Floating Base (Underactuated) Robots
      • 动力学扩展
      • 扩展的力矩和外部力表示
      • 动力学方程
    • 5. Center of Mass Dynamics
    • 6. Constraints

1. Introduction

在第一篇博客中,我们介绍了人形机器人建模的基础概念,包括空间运动的平移和旋转。本篇博客将深入探讨机器人学的运动学和动力学建模方法,特别是针对人形机器人的具体应用。

2. Kinematic Modeling

运动学方程

对于一个 n n n自由度的机器人系统,其从基座到末端执行器的齐次变换矩阵可以表示为:

H n 0 = H 1 0 ⋅ H 2 1 ⋅ … ⋅ H n n − 1 = [ R n 0 t n 0 0 1 ] ∈ S E ( 3 ) H_{n}^{0} = H_{1}^{0} \cdot H_{2}^{1} \cdot \ldots \cdot H_{n}^{n-1} = \left[\begin{array}{cc} R_{n}^{0} & t_{n}^{0} \\ 0 & 1 \end{array}\right] \in \mathbf{SE}(3) Hn0=H10H21Hnn1=[Rn00tn01]SE(3)

其中, R n 0 R_{n}^{0} Rn0是旋转矩阵, t n 0 t_{n}^{0} tn0是平移向量,描述了末端执行器相对于基座的位姿。

速度的雅可比矩阵

机器人的末端执行器速度 x ˙ \dot{\mathbf{x}} x˙与关节速度 q ˙ \dot{\mathbf{q}} q˙之间的关系由雅可比矩阵 J ( q ) \mathbf{J}(\mathbf{q}) J(q)表示:

x ˙ = [ w v ] = J ( q ) q ˙ J ( q ) ∈ R 6 × n \dot{\mathbf{x}} = \left[\begin{array}{c} \mathbf{w} \\ \mathbf{v} \end{array}\right] = \mathbf{J}(\mathbf{q}) \dot{\mathbf{q}} \quad \mathbf{J}(\mathbf{q}) \in \mathbb{R}^{6 \times n} x˙=[wv]=J(q)q˙J(q)R6×n

其中, w \mathbf{w} w是角速度, v \mathbf{v} v是线速度, q \mathbf{q} q是关节角度。

雅可比矩阵的两种形式

分析雅可比矩阵(Analytical Jacobian)

计算与表示依赖的雅可比矩阵,通过偏微分获得:

X ˙ = [ v θ ˙ ] = J A q ˙ \dot{\mathcal{X}} = \left[\begin{array}{c} \mathbf{v} \\ \dot{\boldsymbol{\theta}} \end{array}\right] = \mathbf{J}_{A} \dot{\mathbf{q}} X˙=[vθ˙]=JAq˙

几何雅可比矩阵(Geometric Jacobian)

将关节速度映射到线速度和角速度:

X ˙ = [ v ω ] = J G q ˙ \dot{\boldsymbol{X}} = \left[\begin{array}{c} \mathbf{v} \\ \boldsymbol{\omega} \end{array}\right] = \mathbf{J}_{G} \dot{\mathbf{q}} X˙=[vω]=JGq˙

这两者之间存在映射关系: ω = E ( θ ) θ ˙ \boldsymbol{\omega} = E(\boldsymbol{\theta}) \dot{\boldsymbol{\theta}} ω=E(θ)θ˙

差分逆运动学

差分逆运动学通过求解雅可比矩阵的逆矩阵来计算关节角速度,使得末端执行器的速度尽可能接近期望速度:

q ˙ = J ( q ) − 1 x ˙ \dot{\mathbf{q}} = \mathbf{J}(\mathbf{q})^{-1} \dot{\mathbf{x}} q˙=J(q)1x˙

当雅可比矩阵不可逆时,可以使用伪逆(pseudo-inverse)来求解:

q ˙ = J + ( q ) x ˙ \dot{\mathbf{q}} = \mathbf{J}^{+}(\mathbf{q}) \dot{\mathbf{x}} q˙=J+(q)x˙

其中, J + ( q ) \mathbf{J}^{+}(\mathbf{q}) J+(q) 是雅可比矩阵的Moore-Penrose伪逆。

3. Dynamic Modeling

动力学基本方程

a) 线性运动

  • 动能: K = 1 2 m v 2 K = \frac{1}{2} m v^{2} K=21mv2
  • 势能: P = m g h P = m g h P=mgh
  • 运动方程: F = m x ¨ F = m \ddot{x} F=mx¨

b) 角运动

  • 动能: K = 1 2 I ω 2 = 1 2 m l 2 θ ˙ 2 K = \frac{1}{2} I \omega^{2} = \frac{1}{2} m l^{2} \dot{\theta}^{2} K=21Iω2=21ml2θ˙2
  • 运动方程: m l 2 θ ¨ = τ m l^{2} \ddot{\theta} = \tau ml2θ¨=τ

c) 弹簧系统

  • 势能: P = 1 2 k x 2 P = \frac{1}{2} k x^{2} P=21kx2
  • 运动方程: K x = F K x = F Kx=F

d) 阻尼系统

  • 能量损失: D = 1 2 β x ˙ 2 D = \frac{1}{2} \beta \dot{x}^{2} D=21βx˙2
  • 运动方程: β x ˙ = F \beta \dot{x} = F βx˙=F

拉格朗日力学

对于具有质心位置 p com \mathbf{p}_{\text{com}} pcom、质量 m m m、线速度 v \mathbf{v} v和角速度 ω \omega ω的物体,其动能、势能和拉格朗日量分别为:

  • 动能: K = 1 2 m v ⊤ v + 1 2 ω ⊤ Ψ ω K = \frac{1}{2} m \mathbf{v}^{\top} \mathbf{v} + \frac{1}{2} \omega^{\top} \boldsymbol{\Psi} \omega K=21mvv+21ωΨω
  • 势能: P = m g ⊤ p com P = m \mathbf{g}^{\top} \mathbf{p}_{\text{com}} P=mgpcom
  • 拉格朗日量: L = K − P L = K - P L=KP

系统的总动能和势能:

K T = ∑ i = 1 n K i = ∑ i = 1 n { 1 2 m i v com i 2 + 1 2 I i ω com i 2 } P T = ∑ i = 1 n P i = ∑ i = 1 n m i g T t 0 com i \begin{aligned} K_{T} &= \sum_{i=1}^{n} K_{i} = \sum_{i=1}^{n}\left\{\frac{1}{2} m_{i} v_{\text{com}_{i}}^{2} + \frac{1}{2} I_{i} \omega_{\text{com}_{i}}^{2}\right\} \\ P_{T} &= \sum_{i=1}^{n} P_{i} = \sum_{i=1}^{n} m_{i} g^{T} t_{0}^{\text{com}_{i}} \end{aligned} KTPT=i=1nKi=i=1n{21mivcomi2+21Iiωcomi2}=i=1nPi=i=1nmigTt0comi

拉格朗日方程:

L = K T − P T L = K_{T} - P_{T} L=KTPT

d d t ( ∂ L ∂ q ˙ i ) − ∂ L ∂ q i = τ i \frac{d}{\mathrm{dt}}\left(\frac{\partial L}{\partial \dot{q}_{i}}\right) - \frac{\partial L}{\partial q_{i}} = \tau_{i} dtd(q˙iL)qiL=τi

系统方程:

d d t ( ∂ L ∂ q ˙ 1 ) − ∂ L ∂ q 1 = τ 1 d d t ( ∂ L ∂ q ˙ 2 ) − ∂ L ∂ q 2 = τ 2 ⋮ d d t ( ∂ L ∂ q ˙ n ) − ∂ L ∂ q n = τ n \begin{aligned} \frac{d}{\mathrm{dt}}\left(\frac{\partial L}{\partial \dot{q}_{1}}\right) - \frac{\partial L}{\partial q_{1}} &= \tau_{1} \\ \frac{d}{\mathrm{dt}}\left(\frac{\partial L}{\partial \dot{q}_{2}}\right) - \frac{\partial L}{\partial q_{2}} &= \tau_{2} \\ &\vdots \\ \frac{d}{\mathrm{dt}}\left(\frac{\partial L}{\partial \dot{q}_{n}}\right) - \frac{\partial L}{\partial q_{n}} = \tau_{n} \end{aligned} dtd(q˙1L)q1Ldtd(q˙2L)q2Ldtd(q˙nL)qnL=τn=τ1=τ2

矩阵形式:

M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) = τ M(q) \ddot{q} + C(q, \dot{q}) \dot{q} + G(q) = \tau M(q)q¨+C(q,q˙)q˙+G(q)=τ

动力学方程的特性

a) 惯性矩阵 M ( q ) \mathbf{M}(q) M(q) 是有界对称正定矩阵:

M ( q ) + = M ( q ) + ⊤ 0 < ϵ 1 ≤ ∥ M ( q ) ∥ ≤ ϵ 2 < ∞ , ∀ q ∈ R n \mathbf{M}(q)_{+} = \mathbf{M}(q)_{+}^{\top} \quad 0 < \epsilon_{1} \leq \|\mathbf{M}(q)\| \leq \epsilon_{2} < \infty, \quad \forall q \in \mathbb{R}^{n} M(q)+=M(q)+0<ϵ1M(q)ϵ2<,qRn

b) 反对称性质:

N = M ˙ − 2 C Skew-symmetric N = − N T x T N x = 0 \begin{aligned} N &= \dot{M} - 2C \\ \text{Skew-symmetric} & \quad N = -N^{T} \\ & \quad x^{T} N x = 0 \end{aligned} NSkew-symmetric=M˙2CN=NTxTNx=0

c) 参数的线性关系:

M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) = τ = : Y ( q , q ˙ , q ¨ ) Θ M(q) \ddot{q} + C(q, \dot{q}) \dot{q} + G(q) = \tau =: Y(q, \dot{q}, \ddot{q}) \Theta M(q)q¨+C(q,q˙)q˙+G(q)=τ=:Y(q,q˙,q¨)Θ

功率关系

功率与广义速度之间的关系:

τ ⊤ q ˙ = f ⊤ x ˙ τ = J ( q ) ⊤ f \begin{aligned} \tau^{\top} \dot{\mathbf{q}} &= \mathbf{f}^{\top} \dot{\mathbf{x}} \\ \tau &= \mathbf{J}(\mathbf{q})^{\top} \mathbf{f} \end{aligned} τq˙τ=fx˙=J(q)f

动力学方程包含外力

机器人动力学方程考虑外部力影响:

M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) = τ + J ( q ) ⊤ f ext \mathbf{M}(\mathbf{q}) \ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}}) \dot{\mathbf{q}} + \mathbf{G}(\mathbf{q}) = \tau + \mathbf{J}(\mathbf{q})^{\top} \mathbf{f}_{\text{ext}} M(q)q¨+C(q,q˙)q˙+G(q)=τ+J(q)fext

这个方程描述了机器人在外

部力作用下的动力学行为,其中 f ext \mathbf{f}_{\text{ext}} fext是作用在末端执行器上的外部力,通过雅可比矩阵 J ( q ) \mathbf{J}(\mathbf{q}) J(q)传递到关节力矩上。

4. Floating Base (Underactuated) Robots

在浮动基准(欠驱动)机器人中,我们引入了一些新的符号和表示:

x = [ x b q ] ∈ R n + 6 ν = [ v b q ˙ ] ∈ R n + 6 ν ˙ = [ v ˙ b q ¨ ] ∈ R n + 6 \begin{array}{l} \mathbf{x}=\left[\begin{array}{c} \mathbf{x}_{b} \\ \mathbf{q} \end{array}\right] \in \mathbb{R}^{n+6} \\ \nu=\left[\begin{array}{c} \mathbf{v}_{b} \\ \dot{\mathbf{q}} \end{array}\right] \in \mathbb{R}^{n+6} \\ \dot{\nu}=\left[\begin{array}{c} \dot{\mathbf{v}}_{b} \\ \ddot{\mathbf{q}} \end{array}\right] \in \mathbb{R}^{n+6} \end{array} x=[xbq]Rn+6ν=[vbq˙]Rn+6ν˙=[v˙bq¨]Rn+6

需要注意的是:
x b ≠ v b \mathbf{x}_{b} \not ={ \mathbf{v}_{b}} xb=vb

在浮动基准机器人中:

  • x \mathbf{x} x 表示机器人的状态向量,包括浮动基准(floating base)的位姿 x b \mathbf{x}_{b} xb 和广义坐标 q \mathbf{q} q
  • ν \nu ν 表示机器人的速度向量,包括浮动基准的速度 v b \mathbf{v}_{b} vb 和广义速度 q ˙ \dot{\mathbf{q}} q˙
  • ν ˙ \dot{\nu} ν˙ 表示机器人的加速度向量,包括浮动基准的加速度 v ˙ b \dot{\mathbf{v}}_{b} v˙b 和广义加速度 q ¨ \ddot{\mathbf{q}} q¨

通过引入浮动基准,这些表示允许我们处理那些具有移动底座和不完全受控(欠驱动)的机器人系统。在浮动基准机器人中,浮动基准的位姿和速度是重要的,因为它们涉及机器人的整体运动和控制。广义坐标和广义速度则描述了机器人的内部自由度和关节运动。

动力学扩展

在浮动基准机器人的动力学建模中,惯性矩阵、科里奥利斯和离心力项以及重力项需要扩展:

G ( q ) → G ( x ) ∈ R n + 6 C ( q , q ˙ ) → C ( x , ν ) ∈ R ( n + 6 ) × ( n + 6 ) \begin{aligned} \mathbf{G}(\mathbf{q}) & \rightarrow \mathbf{G}(\mathbf{x}) \in \mathbb{R}^{n+6} \\ \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}}) & \rightarrow \mathbf{C}(\mathbf{x}, \nu) \in \mathbb{R}^{(n+6) \times(n+6)} \end{aligned} G(q)C(q,q˙)G(x)Rn+6C(x,ν)R(n+6)×(n+6)

M ( q ) → M ( x ) = [ M x ( x ) M x q ( x ) M q x ( x ) M q ( x ) ] ∈ R ( n + 6 ) × ( n + 6 ) \mathbf{M}(\mathbf{q}) \rightarrow \mathbf{M}(\mathbf{x})=\left[\begin{array}{cc} \mathbf{M}_{x}(\mathbf{x}) & \mathbf{M}_{x q}(\mathbf{x}) \\ \mathbf{M}_{q x}(\mathbf{x}) & \mathbf{M}_{q}(\mathbf{x}) \end{array}\right] \in \mathbb{R}^{(n+6) \times(n+6)} M(q)M(x)=[Mx(x)Mqx(x)Mxq(x)Mq(x)]R(n+6)×(n+6)

在上述方程中:

  • G ( q ) \mathbf{G}(\mathbf{q}) G(q) 描述了机器人系统中的重力效应。对于浮动基准机器人,扩展为 G ( x ) \mathbf{G}(\mathbf{x}) G(x)
  • C ( q , q ˙ ) \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}}) C(q,q˙) 表示科里奥利斯和离心力项,扩展为 C ( x , ν ) \mathbf{C}(\mathbf{x}, \nu) C(x,ν)
  • M ( q ) \mathbf{M}(\mathbf{q}) M(q) 表示惯性矩阵,扩展为 M ( x ) \mathbf{M}(\mathbf{x}) M(x)

扩展的力矩和外部力表示

τ ∈ R n → R n + 6 Q = [ 0 6 × n I n × n ] Q τ ∈ R n + 6 \begin{array}{c} \tau \in \mathbb{R}^{n} \rightarrow \mathbb{R}^{n+6} \\ \mathbf{Q}=\left[\begin{array}{c} \mathbf{0}_{6 \times n} \\ \mathbf{I}_{n \times n} \end{array}\right] \quad \mathbf{Q} \tau \in \mathbb{R}^{n+6} \end{array} τRnRn+6Q=[06×nIn×n]QτRn+6

  • τ \tau τ 是维度为 R n \mathbb{R}^n Rn 的力矩向量。通过选择矩阵 Q \mathbf{Q} Q 扩展到 R n + 6 \mathbb{R}^{n+6} Rn+6

J ( q ) ⊤ f e x t ∈ R n J ^ = [ J b ( q ) ⊤ J ( q ) ⊤ ] J ^ ( x ) = [ J b ( x b ) J ( q ) ] J ^ ( x ) ⊤ f e x t ∈ R n + 6 \begin{array}{l} \mathbf{J}(\mathbf{q})^{\top} \mathbf{f}_{e x t} \in \mathbb{R}^{n} \\ \widehat{\mathbf{J}}=\left[\begin{array}{c} \mathbf{J}_{b}(\mathbf{q})^{\top} \\ \mathbf{J}(\mathbf{q})^{\top} \end{array}\right] \\ \widehat{\mathbf{J}}(\mathbf{x})=\left[\mathbf{J}_{b}\left(\mathbf{x}_{b}\right) \ \mathbf{J}(\mathbf{q})\right] \\ \widehat{\mathbf{J}}(\mathbf{x})^{\top} \mathbf{f}_{e x t} \in \mathbb{R}^{n+6} \end{array} J(q)fextRnJ =[Jb(q)J(q)]J (x)=[Jb(xb) J(q)]J (x)fextRn+6

  • J ( q ) ⊤ f ext \mathbf{J}(\mathbf{q})^{\top} \mathbf{f}_{\text{ext}} J(q)fext 表示外部力通过雅可比矩阵传递到广义坐标上的力。扩展为 J ^ ( x ) \widehat{\mathbf{J}}(\mathbf{x}) J (x)

动力学方程

M ( x ) ν ˙ + C ( x , ν ) ν + G ( x ) = Q τ + J ^ ( x ) ⊤ f ext \mathbf{M}(\mathbf{x}) \dot{\nu} + \mathbf{C}(\mathbf{x}, \nu) \nu + \mathbf{G}(\mathbf{x}) = \mathbf{Q} \tau + \widehat{\mathbf{J}}(\mathbf{x})^{\top} \mathbf{f}_{\text{ext}} M(x)ν˙+C(x,ν)ν+G(x)=Qτ+J (x)fext

这个方程是浮动基准机器人的动力学方程,考虑了惯性、科里奥利斯力、重力、外部力和力矩的影响。

对于具有平板脚的机器人,动力学方程可以表示为:

M ν ˙ + C ν + G = Q τ + J ^ l ⊤ f l + J ^ r ⊤ f r \mathbf{M} \dot{\nu} + \mathbf{C} \nu + \mathbf{G} = \mathbf{Q} \tau + \widehat{\mathbf{J}}_{l}^{\top} \mathbf{f}_{l} + \widehat{\mathbf{J}}_{r}^{\top} \mathbf{f}_{r} Mν˙+Cν+G=Qτ+J lfl+J rfr

其中, f l , f r ∈ R 6 \mathbf{f}_{l}, \mathbf{f}_{r} \in \mathbb{R}^{6} fl,frR6 表示左脚和右脚的外部力。

5. Center of Mass Dynamics

在中心质量动力学中,我们引入了一些新的符号和表示:

O b ∥ O c O_{b} \| O_{c} ObOc

O c O_{c} Oc 是质心所在的坐标系,定义了质心动量矩阵:

A ( x ) = m J c o m ( x ) \mathbf{A}(\mathbf{x})=m \mathbf{J}_{c o m}(\mathbf{x}) A(x)=mJcom(x)

其中:

  • O b O_b Ob 表示浮动基准的原点。
  • O c O_c Oc 表示质心的位置。
  • J c o m ( x ) \mathbf{J}_{com}(\mathbf{x}) Jcom(x) 是质心雅可比矩阵, m m m 是机器人的总质量。

质心雅可比矩阵定义如下:

w x ˙ c = J c ν J c = ∑ k = 0 n − 1 m k J c k ∑ k = 0 n − 1 m k \begin{array}{c} { }^{w} \dot{x}_{c} = \mathbf{J}_{c} \nu \\ \mathbf{J}_{c} = \frac{\sum_{k=0}^{n-1} m_{k} \mathbf{J}_{c_{k}}}{\sum_{k=0}^{n-1} m_{k}} \end{array} wx˙c=JcνJc=k=0n1mkk=0n1mkJck

6. Constraints

在给定地面固定的情况下,考虑极限情况,其中外部力 f e x t \mathbf{f}_{ext} fext 和接触约束力 f l , f r \mathbf{f}_{l}, \mathbf{f}_{r} fl,fr 趋向于无穷大。

在这种情况下,动力学方程简化为:

M ν ˙ + C ν + G = 0 \mathbf{M} \dot{\nu} + \mathbf{C} \nu + \mathbf{G} = 0 Mν˙+Cν+G=0

这表示机器人在极限条件下的平衡关系。

约束力的表达:

A ( x ) ν = 0 \mathbf{A}(\mathbf{x}) \nu = 0 A(x)ν=0

约束矩阵 A ( x ) \mathbf{A}(\mathbf{x}) A(x) 的维度为 R n + 6 − k \mathbb{R}^{n+6-k} Rn+6k,其中 k k k 是约束的自由度数目。

约束力的能量守恒性质:

P = Γ ⊤ ν = 0 Γ = A ( x ) ⊤ λ d d t ∂ L ( q , q ˙ ) ∂ q ˙ − ∂ L ( q , q ˙ ) ∂ q + A ( q ) ⊤ λ = τ M ν ˙ + C ν + G + A ⊤ λ = Q τ \begin{array}{l} \mathbf{P} = \Gamma^{\top} \nu = 0 \\ \Gamma = \mathbf{A}(\mathbf{x})^{\top} \lambda \\ \frac{d}{dt} \frac{\partial L(q, \dot{q})}{\partial \dot{q}} - \frac{\partial L(q, \dot{q})}{\partial q} + \mathbf{A}(q)^{\top} \lambda = \tau \\ \mathbf{M} \dot{\nu} + \mathbf{C} \nu + \mathbf{G} + \mathbf{A}^{\top} \lambda = \mathbf{Q} \tau \end{array} P=Γν=0Γ=A(x)λdtdq˙L(q,q˙)qL(q,q˙)+A(q)λ=τMν˙+Cν+G+Aλ=Qτ

最终,约束力显式依赖于作用力矩:

M ν ˙ + C ν + G + A ⊤ λ = Q τ A ν = 0 A ν ˙ + A ˙ ν = 0 λ = ( A M − 1 A ⊤ ) − 1 ( A M − 1 ( Q τ − C ν − G ) + A ˙ ν ) \begin{array}{l} \mathbf{M} \dot{\nu} + \mathbf{C} \nu + \mathbf{G} + \mathbf{A}^{\top} \lambda = \mathbf{Q} \tau \\ \mathbf{A} \nu = 0 \\ \mathbf{A} \dot{\nu} + \dot{\mathbf{A}} \nu = 0 \\ \lambda = \left(\mathbf{A M}^{-1} \mathbf{A}^{\top}\right)^{-1}\left(\mathbf{A} \mathbf{M}^{-1}(\mathbf{Q} \tau - \mathbf{C} \nu - \mathbf{G}) + \dot{\mathbf{A}} \nu\right) \end{array} Mν˙+Cν+G+Aλ=QτAν=0Aν˙+A˙ν=0λ=(AM1A)1(AM1(QτCνG)+A˙ν)

这些方程描述了浮动基准机器人在约束条件下的动力学行为,明确了约束力对作用力矩的依赖性。这对于理解和控制受约束机器人的运动和稳定性非常重要。

这篇关于人形机器人建模与控制(二) - 高级运动学和动态建模的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007056

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine