智能机器人与旋量代数(12)

Chapt 4. 旋量代数在机器人学中的应用

4.1 串联机器人正运动学的指数积(PoE, Product of Exponetial)公式

4.1.1 回顾:机器人正运动学的Denavit-Hartenberg (D-H)参数公式

D-H 建模法: D-H 建模方法是由 Denavit 和 Hartenberg (ASME, 1955) 提出的一种建模方法,主要用在机器人运动学上。此方法在机器人的每个连杆上建立一个坐标系,通过齐次坐标变换实现两个连杆上的坐标变换,建立多连杆串联系统中首末坐标系的变换关系。
在这里插入图片描述

D-H 建模方法的几个要点如下:

a. 建立连杆坐标系;

b.确定四个参数 α \alpha α, a a a, d d d, θ \theta θ;

c. 列D-H参数表;

d.由参数表得到变换矩阵;

D-H 建模方法中,每个连杆使用 4 个参数 α \alpha α, a a a, d d d, θ \theta θ 来描述,2 个描述连杆本身,另外 2 个描述与相邻连杆的位姿(连接或几何关系)。

对于转动关节,其中 θ \theta θ 为关节变量,其他三个参数固定不变,为连杆参数;对于移动关节, d d d 为关节变量,其他三个为关节参数。

根据连杆坐标系和关节对应关系的不同,D-H 建模法可以分为传统 D-H (Classic DH) 和改进 D-H (Modified DH),二者的主要区别如下表所示。

区别Classic D-HModified D-H
连杆固定坐标系的位置后一个关节坐标系前一个关节坐标系
X X X 轴的确定方式当前坐标系 Z Z Z 轴和前一个坐标系 Z Z Z 轴的向量积后一个坐标系 Z Z Z 轴与当前坐标系 Z Z Z 轴的向量积
坐标系间的参数变换顺序 θ \theta θ, d d d, a a a, α \alpha α α \alpha α, a a a, θ \theta θ, d d d

Classic D-H:

Classic DH 的关节和坐标系关系中各个参数的含义如下:

θ i \theta_{i} θi​: X i − 1 X_{i-1} Xi−1​ 到 X i X_{i} Xi​ 绕 Z i − 1 Z_{i-1} Zi−1​旋转的角度;

d i d_{i} di​: X i − 1 X_{i-1} Xi−1​ 到 X i X_{i} Xi​ 沿 Z i − 1 Z_{i-1} Zi−1​ 方向的距离;

a i a_{i} ai​: Z i − 1 Z_{i-1} Zi−1​ 到 Z i Z_{i} Zi​ 沿 X i − 1 X_{i-1} Xi−1​ 方向的距离;

α i \alpha_{i} αi​: Z i − 1 Z_{i-1} Zi−1​ 到 Z i Z_{i} Zi​ 绕 X i − 1 X_{i-1} Xi−1​ 旋转的角度

坐标系 O i − 1 O_{i-1} Oi−1​ 与关节 i i i 对齐,其 D-H 参数矩阵为:

i i − 1 T = [ cos ⁡ θ i − sin ⁡ θ i cos ⁡ α i sin ⁡ θ i sin ⁡ α i a i cos ⁡ θ i sin ⁡ θ i cos ⁡ θ i cos ⁡ α i − cos ⁡ θ i sin ⁡ α i a i sin ⁡ θ i 0 sin ⁡ α i cos ⁡ α i d i 0 0 0 1 ] _{i}^{i-1}T = \begin{bmatrix} \cos{\theta_{i}} & -\sin{\theta_{i}} \cos{\alpha_{i}} & \sin{\theta_{i}} \sin{\alpha_{i}} & a_{i} \cos{\theta_{i}} \\ \sin{\theta_{i}} & \cos{\theta_{i}} \cos{\alpha_{i}} & -\cos{\theta_{i}} \sin{\alpha_{i}} & a_{i} \sin{\theta_{i}} \\ 0 & \sin{\alpha_{i}} & \cos{\alpha_{i}} & d_{i} \\ 0 & 0 & 0 & 1 \end{bmatrix} ii−1​T= ​cosθi​sinθi​00​−sinθi​cosαi​cosθi​cosαi​sinαi​0​sinθi​sinαi​−cosθi​sinαi​cosαi​0​ai​cosθi​ai​sinθi​di​1​ ​

Modified DH:

Modified D-H 的关节和坐标系关系中各个参数的含义如下:

α i − 1 \alpha_{i-1} αi−1​: Z i − 1 Z_{i-1} Zi−1​ 到 Z i Z_{i} Zi​ 绕 X i − 1 X_{i-1} Xi−1​ 旋转的角度;

a i − 1 a_{i-1} ai−1​: Z i − 1 Z_{i-1} Zi−1​ 到 Z i Z_{i} Zi​ 沿 X i − 1 X_{i-1} Xi−1​ 方向的距离;

θ i \theta_{i} θi​: X i − 1 X_{i-1} Xi−1​ 到 X i X_{i} Xi​ 绕 Z i Z_{i} Zi​ 旋转的角度;

d i d_{i} di​: X i − 1 X_{i-1} Xi−1​到 X i X_{i} Xi​沿 Z i Z_{i} Zi​ 方向的距离。

坐标系 O i − 1 O_{i-1} Oi−1​ 与关节 i − 1 i-1 i−1 对齐,其 D-H 参数矩阵为:
在这里插入图片描述

i i − 1 T = [ cos ⁡ θ i − sin ⁡ θ i 0 a i − 1 sin ⁡ θ i cos ⁡ α i − 1 cos ⁡ θ i cos ⁡ α i − 1 − sin ⁡ α i − 1 − d i sin ⁡ α i − 1 sin ⁡ θ i sin ⁡ α i − 1 cos ⁡ θ i sin ⁡ α i − 1 cos ⁡ α i − 1 d i cos ⁡ α i − 1 0 0 0 1 ] _{i}^{i-1}T = \begin{bmatrix} \cos{\theta_{i}} & -\sin{\theta_{i}} & 0 & a_{i-1} \\ \sin{\theta_{i}} \cos{\alpha_{i-1}} & \cos{\theta_{i}} \cos{\alpha_{i-1}} & -\sin{\alpha_{i-1}} & -d_{i} \sin{\alpha_{i-1}} \\ \sin{\theta_{i}} \sin{\alpha_{i-1}} &\cos{\theta_{i}} \sin{\alpha_{i-1}} & \cos{\alpha_{i-1}} & d_{i} \cos{\alpha_{i-1}} \\ 0 & 0 & 0 & 1 \end{bmatrix} ii−1​T= ​cosθi​sinθi​cosαi−1​sinθi​sinαi−1​0​−sinθi​cosθi​cosαi−1​cosθi​sinαi−1​0​0−sinαi−1​cosαi−1​0​ai−1​−di​sinαi−1​di​cosαi−1​1​ ​

Modified DH 克服了 Classic DH 在用于树型结构机器人时可能出现的问题,比较常用,故之后主要介绍这种方法,并使用该方法进行建模。

机械臂连杆坐标系的建立

建立机械臂连杆坐标系的步骤:

a. 确定各个关节轴和连杆,坐标系的 Z Z Z 轴沿关节轴线方向;

b. 找出相邻两关节轴线的交点或公垂线,用于确定坐标系 { i } \{i\} {i} 的原点:以关节轴 i i i 和 i + 1 i+1 i+1 的交点或公垂线与关节轴 i i i 的交点为原点;

c. 确定 X X X 轴:两轴线相交时, X i ⃗ = ± Z i + 1 ⃗ × Z i ⃗ \vec{X_{i}} = \pm \vec{Z_{i+1}} \times \vec{Z_{i}} Xi​ ​=±Zi+1​ ​×Zi​ ​;两轴线不相交时, X i X_{i} Xi​ 轴与公垂线重合,方向为 i i i 到 i + 1 i+1 i+1;

d. 右手定则确定 Y i Y_{i} Yi​ 轴;

e. 确定基坐标系 { 0 } \{0\} {0}:为了简化问题, Z 0 Z_0 Z0​ 通常与关节 1 的轴线方向重合,且当关节变量 1 为 0 时,坐标系 { 0 } \{0\} {0} 与 { 1 } \{1\} {1} 重合;

f. 确定末端坐标系 { n } \{n\} {n}:对于转动关节, θ n = 0 \theta_n = 0 θn​=0 时, X n X_n Xn​ 与 X n − 1 X_{n-1} Xn−1​ 方向相同,选取原点使 d n = 0 d_n = 0 dn​=0;对于移动关节,取 X n X_n Xn​ 方向使 θ n = 0 \theta_n = 0 θn​=0,当 d n = 0 d_n = 0 dn​=0 时,取 X n − 1 X_{n-1} Xn−1​ 与 X n X_n Xn​ 的交点为原点。

D-H 参数表:

根据机械臂各个连杆间坐标系的关系,采用 Modified D-H 形式,得到的参数表如下。

i i i α i − 1 \alpha_{i-1} αi−1​ a i − 1 a_{i-1} ai−1​ θ i − 1 \theta_{i-1} θi−1​ d i d_{i} di​ θ \theta θ 的范围
1 0 ∘ 0^{\circ} 0∘ 0 0 0 θ 1 \theta_{1} θ1​ 0 0 0 ( − 2 π 3 , 2 π 3 ) (-\frac{2 \pi}{3}, \frac{2 \pi}{3}) (−32π​,32π​)
2 − 9 0 ∘ -90^{\circ} −90∘ a 1 a_{1} a1​ θ 2 \theta_{2} θ2​ 0 0 0 ( − π 2 , 0 ) (-\frac{\pi}{2}, 0) (−2π​,0)
3 0 ∘ 0^{\circ} 0∘ a 2 a_{2} a2​ θ 3 \theta_{3} θ3​ 0 0 0 ( − 2 π 3 , 2 π 3 ) (-\frac{2 \pi}{3}, \frac{2 \pi}{3}) (−32π​,32π​)
4 0 ∘ 0^{\circ} 0∘ a 3 a_{3} a3​ θ 4 \theta_{4} θ4​ 0 0 0 ( − 7 π 6 , π 6 ) (-\frac{7 \pi}{6}, \frac{\pi}{6}) (−67π​,6π​)
5 − 9 0 ∘ -90^{\circ} −90∘ 0 0 0 θ 5 \theta_{5} θ5​ 0 0 0 ( − 2 π 3 , 2 π 3 ) (-\frac{2 \pi}{3}, \frac{2 \pi}{3}) (−32π​,32π​)

在这里插入图片描述

齐次变换矩阵

将 DH 参数表代入 Modified DH 的 DH 参数矩阵,可以得到各个坐标系间的齐次变换矩阵 1 0 T _{1}^{0}T 10​T, 2 1 T _{2}^{1}T 21​T, 3 2 T _{3}^{2}T 32​T, 4 3 T _{4}^{3}T 43​T 和 5 4 T _{5}^{4}T 54​T 则可得基坐标系到末端坐标系的齐次变换矩阵:

5 0 T = 1 0 T 2 1 T 3 2 T 4 3 T 5 4 T = [ n x o x ; a x p x n y o y a y ; p y n z o z a z p z 0 0 0 1 ] _{5}^{0}T = {_{1}^{0}T} {_{2}^{1}T} {_{3}^{2}T} {_{4}^{3}T} {_{5}^{4}T} = \begin{bmatrix} n_{x} & o_{x} &;a_{x} & p_{x} \\ n_{y} & o_{y} & a_{y} &; p_{y} \\ n_{z} & o_{z} & a_{z} & p_{z} \\ 0 & 0 & 0 & 1 \end{bmatrix} 50​T=10​T21​T32​T43​T54​T= ​nx​ny​nz​0​ox​oy​oz​0​;ax​ay​az​0​px​;py​pz​1​ ​

其中,
[ p x p y p z ] T \begin{bmatrix} p_{x} & p_{y} & p_{z} \end{bmatrix}^T [px​​py​​pz​​]T
为机械臂末端在基坐标系中的位置,
[ n x n y n z ] T \begin{bmatrix} n_{x} & n_{y} & n_{z} \end{bmatrix}^T [nx​​ny​​nz​​]T
为机械臂末端坐标系 X X X 轴在基坐标系中的方向矢量,
[ o x o y o z ] T \begin{bmatrix} o_{x} & o_{y} & o_{z} \end{bmatrix}^T [ox​​oy​​oz​​]T
为机械臂末端坐标系 Y Y Y 轴在基坐标系中的方向矢量,
[ a x a y a z ] T \begin{bmatrix} a_{x} & a_{y} & a_{z} \end{bmatrix}^T [ax​​ay​​az​​]T
为机械臂末端坐标系 Z Z Z 轴在基坐标系中的方向矢量。

代入 D-H 参数,可得
n x = s 1 s 5 + c 1 c 2 c 3 c 4 c 5 − c 1 c 2 c 5 s 3 s 4 − c 1 c 3 c 5 s 2 s 4 − c 1 c 4 c 5 s 2 s 3 n y = c 2 c 3 c 4 c 5 s 1 − c 1 s 5 − c 2 c 5 s 1 s 3 s 4 − c 3 c 5 s 1 s 2 s 4 − c 4 c 5 s 1 s 2 s 3 n z = c 5 s 2 s 3 s 4 − c 2 c 4 c 5 s 3 − c 3 c 4 c 5 s 2 − c 2 c 3 c 5 s 4 o x = c 5 s 1 − c 1 c 2 c 3 c 4 s 5 + c 1 c 2 s 3 s 4 s 5 + c 1 c 3 s 2 s 4 s 5 + c 1 c 4 s 2 s 3 s 5 o y = c 2 s 1 s 3 s 4 s 5 − c 2 c 3 c 4 s 1 s 5 − c 1 c 5 + c 3 s 1 s 2 s 4 s 5 + c 4 s 1 s 2 s 3 s 5 o z = c 2 c 3 s 4 s 5 + c 2 c 4 s 3 s 5 + c 3 c 4 s 2 s 5 − s 2 s 3 s 4 s 5 a x = c 1 s 2 s 3 s 4 − c 1 c 2 c 4 s 3 − c 1 c 3 c 4 s 2 − c 1 c 2 c 3 s 4 a y = s 1 s 2 s 3 s 4 − c 2 c 4 s 1 s 3 − c 3 c 4 s 1 s 2 − c 2 c 3 s 1 s 4 a z = c 2 s 3 s 4 + c 3 s 2 s 4 + c 4 s 2 s 3 − c 2 c 3 c 4 p x = a 1 c 1 + a 2 c 1 c 2 + a 3 c 1 c 2 c 3 − a 3 c 1 s 2 s 3 p y = a 1 s 1 + a 2 c 2 s 1 + a 3 c 2 c 3 s 1 − a 3 s 1 s 2 s 3 p z = − a 2 s 2 − a 3 c 2 s 3 − a 3 c 3 s 2 n_{x} = s_{1} s_{5} + c_{1} c_{2} c_{3} c_{4} c_{5} - c_{1} c_{2} c_{5} s_{3} s_{4} - c_{1} c_{3} c_{5} s_{2} s_{4} - c_{1} c_{4} c_{5} s_{2} s_{3} \\ n_{y} = c_{2} c_{3} c_{4} c_{5} s_{1} - c_{1} s_{5} - c_{2} c_{5} s_{1} s_{3} s_{4} - c_{3} c_{5} s_{1} s_{2} s_{4} - c_{4} c_{5} s_{1} s_{2} s_{3} \\ n_{z} = c_{5} s_{2} s_{3} s_{4} - c_{2} c_{4} c_{5} s_{3} - c_{3} c_{4} c_{5} s_{2} - c_{2} c_{3} c_{5} s_{4} \\ o_{x} = c_{5} s_{1} - c_{1} c_{2} c_{3} c_{4} s_{5} + c_{1} c_{2} s_{3} s_{4} s_{5} + c_{1} c_{3} s_{2} s_{4} s_{5} + c_{1} c_{4} s_{2} s_{3} s_{5} \\ o_{y} = c_{2} s_{1} s_{3} s_{4} s_{5} - c_{2} c_{3} c_{4} s_{1} s_{5} - c_{1} c_{5} + c_{3} s_{1} s_{2} s_{4} s_{5} + c_{4} s_{1} s_{2} s_{3} s_{5} \\ o_{z} = c_{2} c_{3} s_{4} s_{5} + c_{2} c_{4} s_{3} s_{5} + c_{3} c_{4} s_{2} s_{5} - s_{2} s_{3} s_{4} s_{5} \\ a_{x} = c_{1} s_{2} s_{3} s_{4} - c_{1} c_{2} c_{4} s_{3} - c_{1} c_{3} c_{4} s_{2} - c_{1} c_{2} c_{3} s_{4} \\ a_{y} = s_{1} s_{2} s_{3} s_{4} - c_{2} c_{4} s_{1} s_{3} - c_{3} c_{4} s_{1} s_{2} - c_{2} c_{3} s_{1} s_{4} \\ a_{z} = c_{2} s_{3} s_{4} + c_{3} s_{2} s_{4} + c_{4} s_{2} s_{3} - c_{2} c_{3} c_{4} \\ p_{x} = a_{1} c_{1} + a_{2} c_{1} c_{2} + a_{3} c_{1} c_{2} c_{3} - a_{3} c_{1} s_{2} s_{3} \\ p_{y} = a_{1} s_{1} + a_{2} c_{2} s_{1} + a_{3} c_{2} c_{3} s_{1} - a_{3} s_{1} s_{2} s_{3} \\ p_{z} = -a_{2} s_{2} - a_{3} c_{2} s_{3} - a_{3} c_{3} s_{2} nx​=s1​s5​+c1​c2​c3​c4​c5​−c1​c2​c5​s3​s4​−c1​c3​c5​s2​s4​−c1​c4​c5​s2​s3​ny​=c2​c3​c4​c5​s1​−c1​s5​−c2​c5​s1​s3​s4​−c3​c5​s1​s2​s4​−c4​c5​s1​s2​s3​nz​=c5​s2​s3​s4​−c2​c4​c5​s3​−c3​c4​c5​s2​−c2​c3​c5​s4​ox​=c5​s1​−c1​c2​c3​c4​s5​+c1​c2​s3​s4​s5​+c1​c3​s2​s4​s5​+c1​c4​s2​s3​s5​oy​=c2​s1​s3​s4​s5​−c2​c3​c4​s1​s5​−c1​c5​+c3​s1​s2​s4​s5​+c4​s1​s2​s3​s5​oz​=c2​c3​s4​s5​+c2​c4​s3​s5​+c3​c4​s2​s5​−s2​s3​s4​s5​ax​=c1​s2​s3​s4​−c1​c2​c4​s3​−c1​c3​c4​s2​−c1​c2​c3​s4​ay​=s1​s2​s3​s4​−c2​c4​s1​s3​−c3​c4​s1​s2​−c2​c3​s1​s4​az​=c2​s3​s4​+c3​s2​s4​+c4​s2​s3​−c2​c3​c4​px​=a1​c1​+a2​c1​c2​+a3​c1​c2​c3​−a3​c1​s2​s3​py​=a1​s1​+a2​c2​s1​+a3​c2​c3​s1​−a3​s1​s2​s3​pz​=−a2​s2​−a3​c2​s3​−a3​c3​s2​

Simple D-H in matlab

function [T] = dh_transform(a, alpha, d, theta, standard_dh)
% dh_transform computes the Denavit-Hartenberg transformation matrix
% Given:
%   a (also written as 'r') - distance between origin(i) and origin(i-1)
%                             about z(i-1)
%
%   alpha(?) - angle from z(i-1) to z(i) about x(i)
%
%   d - the link offset betwen origin(i) with respect to origin(i-1)
%     along z(i-1)
%
%   theta (?) - joint angle between from x(i-1) to x(i) about z(i-1)
%
%
%
%   standard_dh - uses standard DH convention if 1 or if this
%                       parameter is not provided. Uses modified DH
%                       if this value is 0
% OR given:
%           a = DH parameter matrix
%           i.e. for SCARA manipulator a will look like as follows
%           syms q1 q2 d3 q4 a1 a2
%           a =         [ 0             0            0          q1;
%                        a1             0            0          q2;
%                        a2             0            -d3        0 ;
%                        0              0            0          q4];
%
%if (nargin <= 2)if (nargin == 1)standard_dh = 1;elsestandard_dh = alpha;enddh_parameter_matrix = a;for row = 1:size(dh_parameter_matrix,1)dh_row = dh_parameter_matrix(row,:);a = dh_row(1);alpha = dh_row(2);d = dh_row(3);theta = dh_row(4);T(:,:,row) = dh_transform(a, alpha, d, theta, standard_dh);endif (isa(T,'sym'))T_out = sym(eye(4,4));else  T_out = eye(4,4);endfor i=1:size(T,3)T_out = T_out * T(:,:,i);endT = T_out;else if (nargin >= 4)if (nargin < 5)standard_dh = 1;endif standard_dh  % Standard DH convention computationT = [cos(theta)  -sin(theta)*cos(alpha)  sin(theta)*sin(alpha) a*cos(theta);sin(theta)   cos(theta)*cos(alpha)   -cos(theta)*sin(alpha) a*sin(theta);0          sin(alpha)               cos(alpha)            d;0          0                        0                     1];else  % Modified DH convention computationT = [cos(theta)  -sin(theta)  0  a;sin(theta)*cos(alpha) cos(theta)*cos(alpha) -sin(alpha) -d*sin(alpha);sin(theta)*sin(alpha) cos(theta)*sin(alpha) cos(alpha) d*cos(alpha);0   0   0   1];endendend

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

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

相关文章

如何高效挖掘Web漏洞?

简介 SRC漏洞平台&#xff1a;安全应急响应中心&#xff08;SRC, Security Response Center&#xff09;&#xff0c;是企业用于对外接收来自用户发现并报告的产品安全漏洞的站点。说白了&#xff0c;就是连接白帽子和企业的平台&#xff0c;你去合法提交漏洞给他们&#xff0…

C#中的委托概念以及例子

在C#中&#xff0c;什么是委托&#xff08;Delegate&#xff09;&#xff1f;请简要说明委托的概念&#xff0c;并提供一个简单的示例说明如何使用委托。 答案&#xff1a; 委托的概念&#xff1a; 委托是一种类型&#xff0c;它允许将方法作为参数传递&#xff0c;使得可以…

Leetcode—24. 两两交换链表中的节点【中等】

2023每日刷题&#xff08;八十七&#xff09; Leetcode—24. 两两交换链表中的节点 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x),…

Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

目录 一.redis的发布订阅 1、什么 是发布和订阅 2、Redis的发布和订阅 3、发布订阅的代码实现 二.Redis事务 1.事务简介 1、在事务执行之前 如果监听的key的值有变化就不能执行 2、在事务执行之前 如果监听的key的值没有变化就能执行 3、Exec之前就出现错误 4、Exec之…

《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)

目录 第六章&#xff08;并发编程进阶&#xff09;1.并发编程的三要素分别解释一下&#xff0c;举个简单的例子2.说下你知道的调度算法&#xff0c;比如进程间的调度3.常见的线程间的调度算法是怎么样的&#xff0c;java是哪种4.日常开发中用过java中的哪些锁&#xff1f;分别解…

Centos7 两种方式安装 MySQL5.7 步骤 yum 、本地 tar 文件

一、使用 yum 源方式安装 1、卸载系统自带 mariadb MariaDB Server 是最流行的开源 关系型数据库 之一。它由 MySQL 的原始开发者制作&#xff0c;并保证保持开源。 在 CentOS 7 中默认安装有 MariaDB 可忽略&#xff0c;安装完成之后可以直接覆盖掉 MariaDB。 查看并卸载系统…

如何在 Spring Boot 中配置日志记录?

在Spring Boot中配置日志记录是一项关键任务&#xff0c;因为良好的日志记录是应用程序开发和维护的必要组成部分。Spring Boot采用了一种灵活且强大的方式来管理日志&#xff0c;允许开发人员使用不同的日志框架&#xff0c;并提供了易于配置的选项。下面详细介绍在Spring Boo…

新概念英语第二册(39) 上

【New words and expressions】生词和短语&#xff08;10&#xff09; operation n. 手术 successful adj. 成功的 following adj. 下一个 patient n. 病人 alone …

openssl3.2/test/certs - 004 - cross root and root cross cert

文章目录 openssl3.2/test/certs - 004 - cross root and root cross cert概述笔记END openssl3.2/test/certs - 004 - cross root and root cross cert 概述 索引贴 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_linux_log_doc_004.txt // openssl…

【Java 设计模式】行为型之状态模式

文章目录 1. 定义2. 应用场景3. 代码实现结语 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;用于通过将对象的行为封装到不同的状态类中&#xff0c;使得对象在不同的状态下具有不同的行为。状态模式允许对象在内部状态发生改变时改变其行为…

【极数系列】Flink项目入门搭建(03)

【极数系列】Flink项目入门搭建&#xff08;03&#xff09; 引言 gitee地址&#xff1a;https://gitee.com/shawsongyue/aurora.git 源码直接下载可运行&#xff0c;模块&#xff1a;aurora_flink Flink 版本&#xff1a;1.18.0 Jdk 版本&#xff1a;11 1.创建mavenx项目 2.…

清越 peropure·AI 国内版ChatGP新功能介绍

当OpenAI发布ChatGPT的时候,没有人会意识到,新一代人工智能浪潮将给人类社会带来一场眩晕式变革。其中以ChatGPT为代表的AIGC技术加速成为AI领域的热门发展方向,推动着AI时代的前行发展。面对技术浪潮,清越科技(PeroPure)立足多样化生活场景、精准把握用户实际需求,持续精确Fin…

SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1. 分页获取预约数据代码2.保存预约信息代码3.修改订单状态代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBootVue框架开发的充电桩管理系统。首先&…

【报错解决】anaconda: Read timed out.

报错描述 在anaconda的虚拟环境中用pip或conda下载安装包时&#xff0c;遇到如下报错&#xff0c;具体报错内容如下所示&#xff1a; raise ReadTimeoutError(self._pool, None, "Read timed out.") pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnect…

网络安全的使命:守护数字世界的稳定和信任

在数字化时代&#xff0c;网络安全的角色不仅仅是技术系统的守护者&#xff0c;更是数字社会的信任保卫者。网络安全的使命是保护、维护和巩固数字世界的稳定性、可靠性以及人们对互联网的信任。本文将深入探讨网络安全是如何履行这一使命的。 第一部分&#xff1a;信息资产的…

怎么给wordpress网站底部页脚添加备案号和链接?

以前“WordPress后台 >> 常规”最底部是有一个ICP备案号的&#xff0c;我们只需要填写备案号并保存更改即可让WordPress自带主题底部显示ICP备案号&#xff0c;但是现在新版本的WordPress已经没有了这个ICP备案号选项&#xff0c;而且也无法直接添加公安联网备案号&#…

vscode debug

需要对GitHub上的工程debug。 所以花时间看了下,参考了bili视频和chatgpt的解答。 chatgpt给的步骤 要在 VS Code 中调试 C++ 项目,可以按照以下步骤进行设置和操作: 确保已安装 C++ 扩展:在 VS Code 中选择 “Extensions”(或使用快捷键 Ctrl+Shift+X),搜索并安装官…

Typecho后台无法登录显示503 service unavailable问题及处理

一、Typecho 我的博客地址&#xff1a;https://www.aomanhao.top 使用老薛主机动态Typecho博客框架handsome主题的搭配&#xff0c;文章内容可以异地网页更新&#xff0c;可以听后台背景音乐&#xff0c;很好的满足我的痛点需求&#xff0c;博客部署在云端服务器访问响应较快…

mac intel jdk安装与配置

jdk地址下载 https://www.oracle.com/java/technologies/downloads/ https://repo.huaweicloud.com/java/jdk/8u201-b09/ 安装后 下载完成之后打开终端 注意如果是第一次配置环境变量需要创建.bash_profile文件。&#xff08;注意&#xff1a;touch后面有空格&#xff09; to…

dpkt库多次循环读取PCAP文件中的完整数据方法

dpkt库多次循环读取PCAP文件中的完整数据方法 1. 问题 使用下面方法,结果发现第一次for循环和第二次for循环进去time_stamp不一样,而我需要两次都读取完整数据,所以就需要找方法解决一下这个问题。 fp = open(22.pcapng, rb) pcap = dpkt.pcapng.Reader(fp)for ts, buf i…