使用PMSM控制的puma560机械臂简单轨迹跟踪
前言
最近在忙读研和课内项目的东西,因此有一个月没有更新博客了。之前学习的pyqt和ros的学习都落下了(还没开始)。这一个月大部分时间是在完成课内的自动控制创新实践项目,这个项目是我自己入坑的,希望把自己学的不怎么样的电机和以后可能从事的机器人学都巩固一下。
1. PMSM部分
三相永磁同步电机(PMSM)是我课上没学过的,我参考一些资料,貌似很多工业机器人都用它做伺服控制1,因此我就打算学习一下PMSM的控制仿真。
1.1 数学模型
PMSM模型借用一下matlab官方文档对PMSM描述的图2:
电压方程:
[ u a u b u c ] = [ R s 0 0 0 R s 0 0 0 R s ] [ i a i b i c ] + [ d ψ a d t d ψ b d t d ψ c d t ] \left[ \begin{matrix} u_a\\ u_b \\ u_c \end{matrix} \right] = \left[ \begin{matrix} R_s & 0 & 0 \\ 0 & R_s & 0 \\ 0 & 0 & R_s \end{matrix} \right] \left[ \begin{matrix} i_a\\ i_b \\ i_c \end{matrix} \right] + \left[ \begin{matrix} \frac{d\psi_a}{dt}\\ \frac{d\psi_b}{dt} \\ \frac{d\psi_c}{dt} \end{matrix} \right] ⎣⎡uaubuc⎦⎤=⎣⎡Rs000Rs000Rs⎦⎤⎣⎡iaibic⎦⎤+⎣⎡dtdψadtdψbdtdψc⎦⎤
R s R_s Rs 为定子每相电阻, ψ a \psi_a ψa 为a相磁链
磁链方程:
[ ψ a ψ b ψ c ] = [ L − M − M − M L − M − M − M L ] [ i a i b i c ] + [ ψ f a ψ f b ψ f c ] \left[ \begin{matrix} \psi_a\\ \psi_b \\ \psi_c \end{matrix} \right] = \left[ \begin{matrix} L & -M & -M \\ -M & L & -M \\ -M & -M & L \end{matrix} \right] \left[ \begin{matrix} i_a\\ i_b \\ i_c \end{matrix} \right] + \left[ \begin{matrix} \psi_{fa} \\ \psi_{fb} \\ \psi_{fc} \end{matrix} \right] ⎣⎡ψaψbψc⎦⎤=⎣⎡L−M−M−ML−M−M−ML⎦⎤⎣⎡iaibic⎦⎤+⎣⎡ψfaψfbψfc⎦⎤
- ψ f a \psi_{fa} ψfa 为a相绕组和永磁体交链的磁链,与转子空间位置有关
- PMSM气隙均匀分布,因此各相自感和互感为常数
[ ψ f a ψ f b ψ f c ] = ψ m [ c o s ( θ e ) c o s ( θ e − 2 π / 3 ) c o s ( θ + 2 π / 3 ) ] \left[ \begin{matrix} \psi_{fa} \\ \psi_{fb} \\ \psi_{fc} \end{matrix} \right] = \psi_m \left[ \begin{matrix} cos(\theta_e)\\ cos(\theta_e -2\pi/3) \\ cos(\theta +2\pi/3) \end{matrix} \right] ⎣⎡ψfaψfbψfc⎦⎤=ψm⎣⎡cos(θe)cos(θe−2π/3)cos(θ+2π/3)⎦⎤
一般定子绕组为Y型接法,中性点无接线引出,则有三相电流之和为零,磁链方程化简为:
[ ψ a ψ b ψ c ] = ( L + M ) [ i a i b i c ] + ψ m [ c o s ( θ e ) c o s ( θ e − 2 π / 3 ) c o s ( θ + 2 π / 3 ) ] \left[ \begin{matrix} \psi_a\\ \psi_b \\ \psi_c \end{matrix} \right] =(L+M) \left[ \begin{matrix} i_a\\ i_b \\ i_c \end{matrix} \right] + \psi_m\left[ \begin{matrix} cos(\theta_e)\\ cos(\theta_e -2\pi/3) \\ cos(\theta +2\pi/3) \end{matrix} \right] ⎣⎡ψaψbψc⎦⎤=(L+M)⎣⎡iaibic⎦⎤+ψm⎣⎡cos(θe)cos(θe−2π/3)cos(θ+2π/3)⎦⎤
将PMSM的abc相模型转化为按转子定向的dq模型,变换矩阵P为:
[ d q ∗ ] = P [ a b c ] = 2 / 3 ∗ [ c o s ( θ e ) c o s ( θ e − 2 π / 3 ) c o s ( θ + 2 π / 3 ) − s i n ( θ e ) − s i n ( θ e − 2 π / 3 ) − s i n ( θ e + 2 π / 3 ) 1 / 2 1 / 2 1 / 2 ] \left[ \begin{matrix} d\\ q \\ * \end{matrix} \right] =P \left[ \begin{matrix} a\\ b \\ c \end{matrix} \right] = 2/3 * \left[ \begin{matrix} cos(\theta_e) & cos(\theta_e -2\pi/3) & cos(\theta +2\pi/3) \\ -sin(\theta_e) & -sin(\theta_e -2\pi/3) & -sin(\theta_e +2\pi/3) \\ 1/2 & 1/2 & 1/2 \end{matrix} \right] ⎣⎡dq∗⎦⎤=P⎣⎡abc⎦⎤=2/3∗⎣⎡cos(θe)−sin(θe)1/2cos(θe−2π/3)−sin(θe−2π/3)1/2cos(θ+2π/3)−sin(θe+2π/3)1/2⎦⎤
其中,abc可代表电压、电流和磁链,dq同理
逆变换为:
P − 1 = [ c o s ( θ e ) − s i n ( θ e ) 1 c o s ( θ e − 2 π / 3 ) − s i n ( θ e − 2 π / 3 ) 1 c o s ( θ e + 2 π / 3 ) − s i n ( θ e + 2 π / 3 ) 1 ] P^{-1} = \left[\begin{matrix} cos(\theta_e) & -sin(\theta_e ) & 1 \\ cos(\theta_e-2\pi/3) & -sin(\theta_e -2\pi/3) & 1 \\ cos(\theta_e +2\pi/3)& -sin(\theta_e + 2\pi/3) & 1 \end{matrix} \right] P−1=⎣⎡cos(θe)cos(θe−2π/3)cos(θe+2π/3)−sin(θe)−sin(θe−2π/3)−sin(θe+2π/3)111⎦⎤
代入电压方程:
P − 1 [ u d u q ∗ ] = R s P − 1 [ i d i q ∗ ] + p ( P − 1 [ ψ d ψ q ∗ ] ) P^{-1}\left[ \begin{matrix} u_d\\ u_q \\ * \end{matrix} \right] = R_s P^{-1}\left[ \begin{matrix} i_d\\ i_q \\ * \end{matrix} \right] + p(P^{-1}\left[ \begin{matrix} \psi_d\\ \psi_q \\ * \end{matrix} \right]) P−1⎣⎡uduq∗⎦⎤=RsP−1⎣⎡idiq∗⎦⎤+p(P−1⎣⎡ψdψq∗⎦⎤)
p ( ⋅ ) p(\cdot) p(⋅)为微分算子
整理得:
[
u
d
u
q
∗
]
=
R
s
[
i
d
i
q
∗
]
+
P
p
(
P
−
1
)
[
ψ
d
ψ
q
∗
]
+
[
d
ψ
d
d
t
d
ψ
q
d
t
∗
]
=
R
s
[
i
d
i
q
∗
]
+
ω
e
[
−
ψ
q
ψ
d
∗
]
+
[
d
ψ
d
d
t
d
ψ
q
d
t
∗
]
\begin{aligned} \left[ \begin{matrix} u_d\\ u_q \\ * \end{matrix} \right] &= R_s\left[ \begin{matrix} i_d\\ i_q \\ * \end{matrix} \right] + Pp(P^{-1})\left[ \begin{matrix} \psi_d\\ \psi_q \\ * \end{matrix} \right] + \left[ \begin{matrix} \frac{d\psi_d}{dt}\\ \frac{d\psi_q}{dt} \\ * \end{matrix} \right] \\ &= R_s\left[ \begin{matrix} i_d\\ i_q \\ * \end{matrix} \right] + \omega_e \left[ \begin{matrix} -\psi_q\\ \psi_d \\ * \end{matrix} \right] + \left[ \begin{matrix} \frac{d\psi_d}{dt}\\ \frac{d\psi_q}{dt} \\ * \end{matrix} \right] \end{aligned}
⎣⎡uduq∗⎦⎤=Rs⎣⎡idiq∗⎦⎤+Pp(P−1)⎣⎡ψdψq∗⎦⎤+⎣⎡dtdψddtdψq∗⎦⎤=Rs⎣⎡idiq∗⎦⎤+ωe⎣⎡−ψqψd∗⎦⎤+⎣⎡dtdψddtdψq∗⎦⎤
带入磁链方程:
P − 1 [ ψ d ψ q ∗ ] = ( L + M ) P − 1 [ i d i q ∗ ] + ψ m [ c o s ( θ e ) c o s ( θ e − 2 π / 3 ) c o s ( θ + 2 π / 3 ) ] \begin{aligned} P^{-1} \left[ \begin{matrix} \psi_d\\ \psi_q \\ * \end{matrix} \right] =(L+M) P^{-1} \left[ \begin{matrix} i_d\\ i_q \\ *\end{matrix} \right] + \psi_m\left[ \begin{matrix} cos(\theta_e)\\ cos(\theta_e -2\pi/3) \\ cos(\theta +2\pi/3) \end{matrix} \right] \end{aligned} P−1⎣⎡ψdψq∗⎦⎤=(L+M)P−1⎣⎡idiq∗⎦⎤+ψm⎣⎡cos(θe)cos(θe−2π/3)cos(θ+2π/3)⎦⎤
整理得:
[ ψ d ψ q ∗ ] = ( L + M ) [ i d i q ∗ ] + [ ψ m 0 0 ] \begin{aligned} \left[ \begin{matrix} \psi_d\\ \psi_q \\ * \end{matrix} \right]& =(L+M) \left[ \begin{matrix} i_d\\ i_q \\ *\end{matrix} \right] + \left[ \begin{matrix} \psi_m\\ 0 \\ 0 \end{matrix} \right] \end{aligned} ⎣⎡ψdψq∗⎦⎤=(L+M)⎣⎡idiq∗⎦⎤+⎣⎡ψm00⎦⎤
求导得:
[
d
ψ
d
d
t
d
ψ
q
d
t
∗
]
=
(
L
+
M
)
[
d
i
d
d
t
d
i
q
d
t
∗
]
\begin{aligned} \left[ \begin{matrix} \frac{d\psi_d}{dt}\\ \frac{d\psi_q}{dt} \\ * \end{matrix} \right]& =(L+M) \left[ \begin{matrix} \frac{di_d}{dt}\\ \frac{di_q}{dt} \\ * \end{matrix} \right] \end{aligned}
⎣⎡dtdψddtdψq∗⎦⎤=(L+M)⎣⎡dtdiddtdiq∗⎦⎤
带入电压方程得到最终数学模型:
[ u d u q ] = R s [ i d i q ] + [ − ω e L q i q ω e ( L d i d + ψ m ) ] + [ L d d i d d t L q d i q d t ] \begin{aligned} \left[ \begin{matrix} u_d\\ u_q \end{matrix} \right] &= R_s\left[ \begin{matrix} i_d\\ i_q \end{matrix} \right] + \left[ \begin{matrix} -\omega_eL_qi_q\\ \omega_e(L_di_d + \psi_m) \end{matrix} \right] + \left[ \begin{matrix} L_d\frac{di_d}{dt}\\ L_q\frac{di_q}{dt} \end{matrix} \right] \end{aligned} [uduq]=Rs[idiq]+[−ωeLqiqωe(Ldid+ψm)]+[LddtdidLqdtdiq]
此时, L d = L q = L + M L_d=L_q=L+M Ld=Lq=L+M
1.2 控制方法
在这里选用id=0的矢量控制方法,并对电流环使用前馈解耦3。控制框图如下:
1.3 PI参数整定
下面按工程设计方法整定PI参数4。
1.3.1 电流环
回看数学模型:
[ u d u q ] = R s [ i d i q ] + [ − ω e L q i q ω e ( L d i d + ψ m ) ] + [ L d d i d d t L q d i q d t ] \begin{aligned} \left[ \begin{matrix} u_d\\ u_q \end{matrix} \right] &= R_s\left[ \begin{matrix} i_d\\ i_q \end{matrix} \right] + \left[ \begin{matrix} -\omega_eL_qi_q\\ \omega_e(L_di_d + \psi_m) \end{matrix} \right] + \left[ \begin{matrix} L_d\frac{di_d}{dt}\\ L_q\frac{di_q}{dt} \end{matrix} \right] \end{aligned} [uduq]=Rs[idiq]+[−ωeLqiqωe(Ldid+ψm)]+[LddtdidLqdtdiq]
可以发现,dq轴控制电压具有耦合项,控制q轴电流会影响d轴电压,控制d轴电流影响q轴电压。因此在控制框图一节中,增加了前馈补偿部分:
这样使得dq轴电流的控制实现解耦,此时考虑如下电压方程:
[ u d u q ] = R s [ i d i q ] + [ L d d i d d t L q d i q d t ] \begin{aligned} \left[ \begin{matrix} u_d\\ u_q \end{matrix} \right] &= R_s\left[ \begin{matrix} i_d\\ i_q \end{matrix} \right] + \left[ \begin{matrix} L_d\frac{di_d}{dt}\\ L_q\frac{di_q}{dt} \end{matrix} \right] \end{aligned} [uduq]=Rs[idiq]+[LddtdidLqdtdiq]
拉氏变换得传递函数:
U d ( s ) I d ( s ) = 1 L d s + R s \frac{U_d(s)}{I_d(s)} = \frac{1}{L_ds+R_s} Id(s)Ud(s)=Lds+Rs1
可得电流环动态框图5:
据博主所说,Kpwm取1即可, T d = T s T_d = T_s Td=Ts。
按典1型系统设计,对象为:
G
(
s
)
=
1
0.5
T
s
s
+
1
∗
1
T
d
s
+
1
∗
1
T
i
s
+
1
∗
1
/
R
s
L
d
R
s
s
+
1
≈
1
/
R
s
(
T
Σ
i
s
+
1
)
(
L
d
R
s
s
+
1
)
\begin{aligned} G(s) &= \frac{1}{0.5T_ss+1}* \frac{1}{T_ds+1}* \frac{1}{T_is+1}* \frac{1/R_s}{\frac{L_d}{R_s}s+1} \\ &\approx \frac{1/R_s}{(T_{\Sigma i}s+1)(\frac{L_d}{R_s}s+1)} \end{aligned}
G(s)=0.5Tss+11∗Tds+11∗Tis+11∗RsLds+11/Rs≈(TΣis+1)(RsLds+1)1/Rs
小时间常数群直接等价于一个惯性环节
拟设计的典1型系统开环传递函数为:
G
o
p
i
(
s
)
=
K
c
s
(
T
c
s
+
1
)
G_{opi}(s) = \frac{K_c}{s(T_cs+1)}
Gopi(s)=s(Tcs+1)Kc
由此可得:
τ
i
=
L
d
/
R
s
T
c
=
T
Σ
i
=
1.5
T
s
+
T
i
\tau_i = L_d/R_s \\ T_c = T_{\Sigma i} = 1.5T_s + T_i
τi=Ld/RsTc=TΣi=1.5Ts+Ti
取工程最佳参数:
ξ
=
0.707
K
c
T
c
=
0.5
\xi = 0.707 \qquad K_cT_c = 0.5
ξ=0.707KcTc=0.5
得到:
k i = 0.5 R s τ i T c k_i = \frac{0.5R_s\tau_i}{T_c} ki=Tc0.5Rsτi
1.3.2转速环
电流环部分等效传递函数为:
G
i
(
s
)
=
G
o
p
i
(
s
)
1
+
G
o
p
i
(
s
)
=
1
T
c
K
c
s
2
+
1
K
c
s
+
1
≈
1
1
K
c
s
+
1
\begin{aligned} G_i(s) &= \frac{G_{opi}(s)}{1+G_{opi}(s)} \\ &= \frac{1}{\frac{T_c}{K_c}s^2 + \frac{1}{K_c}s + 1}\\ &\approx \frac{1}{\frac{1}{K_c}s + 1} \end{aligned}
Gi(s)=1+Gopi(s)Gopi(s)=KcTcs2+Kc1s+11≈Kc1s+11
忽略高阶部分
按照典2型系统设计转速环,框图为:
按典2型系统设计,对象为:
G
(
s
)
=
1
T
w
s
+
1
∗
3
2
N
ψ
m
1
K
c
s
+
1
∗
30
/
π
J
s
≈
1.5
∗
30
N
ψ
m
/
π
J
s
(
T
Σ
n
s
+
1
)
\begin{aligned} G(s) &= \frac{1}{T_ws+1}* \frac{\frac{3}{2}N\psi_m}{\frac{1}{K_c}s+1}*\frac{30/\pi}{Js} \\ &\approx \frac{1.5*30N\psi_m /\pi}{Js(T_{\Sigma n}s+1)} \end{aligned}
G(s)=Tws+11∗Kc1s+123Nψm∗Js30/π≈Js(TΣns+1)1.5∗30Nψm/π
拟设计的典2型系统开环传递函数为:
G
o
p
i
(
s
)
=
K
n
(
τ
n
s
+
1
)
s
2
(
T
n
s
+
1
)
G_{opi}(s) = \frac{K_n(\tau_ns+1)}{s^2(T_ns+1)}
Gopi(s)=s2(Tns+1)Kn(τns+1)
由此可得:
T
n
=
T
Σ
n
=
1
/
K
c
+
T
w
T_n = T_{\Sigma n} = 1/K_c + T_w
Tn=TΣn=1/Kc+Tw
取工程最佳参数:
h
=
5
h = 5
h=5
得到:
τ n = h T n K n = h + 1 2 h 2 T n 2 \tau_n = hT_n \\ K_n = \frac{h+1}{2h^2T_n^2} τn=hTnKn=2h2Tn2h+1
可以确定PI参数:
k n = J K n τ n / ( 1.5 N ψ m ∗ 30 / π ) k_n = JK_n\tau_n / (1.5N\psi_m*30/\pi) kn=JKnτn/(1.5Nψm∗30/π)
1.4 仿真
电机参数如下,此参数参考了伺服电机,但有微小改动:
para | value |
---|---|
最大电流(A) | 6.9 |
转子惯量 (kg*m2) | 1e-4 |
dq轴电感 (mH) | 8.35 |
极对数 | 4 |
定子电阻(Ω) | 0.18 |
额定转速(rpm) | 3000 |
磁链(Wb) | 0.10667 |
减速箱减速比 | 10 |
PWM频率(Hz) | 5000 |
电流滤波时间常数(ms) | 1 |
转速滤波时间常数(ms) | 1 |
1.4.1 电流环参数仿真
为了使电流环不受转速的影响,给负载输入端施加很大的反抗性负载,使电机堵转。
simulink仿真图:
给定q轴电流为3A,0.05s阶跃:
电流波形
转矩波形
1.4.2 转速环参数仿真
simulink仿真图:
- 0.02s给1000r/min 阶跃信号(空载)
转速波形:
力矩波形:
三相电压:
三相电流:
- 带动2N*m恒转矩负载,0.02s启动(1000rpm阶跃),0.1s调速至500rpm,0.25s反转(-500rpm),0.35s停转。
转速波形:
力矩波形:
三相控制电压:
2. 机械臂部分
机械臂选取puma560的前三个关节进行分析、控制和仿真。机械臂示意图(含其坐标系和各连杆质心)
![](https://i-blog.csdnimg.cn/blog_migrate/798e3f3254e75540c607dc04e087a7be.jpeg)
机械臂参数6 部分参考了论文和根据机械臂的sw模型7做了轻微修改。
机械臂参数:
Para | value |
---|---|
h h h (m) | 0.6718 |
m 1 m_1 m1 (kg) | 10 |
m 2 m_2 m2 (kg) | 17.4 |
m 3 m_3 m3 (kg) | 4.8 |
I 1 I_1 I1 (kg*m2) | d i a g ( [ 0.05 , 0.05 , 0.35 ] ) diag([0.05,0.05,0.35]) diag([0.05,0.05,0.35]) |
I 2 I_2 I2 (kg*m2) | d i a g ( [ 0.13 , 0.524 , 0.539 ] ) diag([0.13,0.524,0.539]) diag([0.13,0.524,0.539]) |
I 3 I_3 I3 (kg*m2) | d i a g ( [ 66 e − 3 , 12.5 e − 3 , 86 e − 3 ) diag([66e-3,12.5e-3,86e-3) diag([66e−3,12.5e−3,86e−3) |
e x e_x ex (m) | 0.361 |
p ⃗ \vec{p} p (m) | [ 0.4318 , − 0.0203 , − 0.0453 ] [0.4318,-0.0203,-0.0453] [0.4318,−0.0203,−0.0453] |
p 12 p_{12} p12 (m) | -0.192 |
p 2 c p_{2c} p2c (m) | 0.025 |
p 3 c p_{3c} p3c (m) | 0.05 |
2.1 运动学
符号约定:
三个关节偏转角度分别设为 θ 1 , θ 2 , θ 3 \theta_1,\theta_2,\theta_3 θ1,θ2,θ3
h h h 为第一个关节与基座的距离
末端执行器坐标为 d ⃗ = ( x d , y d , z d ) T \vec{d} = (x_d, y_d, z_d)^T d=(xd,yd,zd)T
关节1到关节2距离为: p 12 p_{12} p12
关节3到末端执行器距离为: e x e_x ex
关节2到关节三平移向量为: p ⃗ = ( p x , p y , p z ) T \vec{p} = (p_x, p_y, p_z)^T p=(px,py,pz)T
2.1.1 正运动学
从基座到关节1坐标系:先沿z轴平移h,然后旋转
θ
1
\theta_1
θ1
T
1
0
=
[
c
1
−
s
1
0
0
s
1
c
1
0
0
0
0
1
h
0
0
0
1
]
T^0_1= \left[ \begin{matrix} c_1 & -s_1 & 0& 0\\ s_1 & c_1 & 0& 0\\ 0 & 0 & 1& h\\ 0 & 0 & 0& 1\end{matrix} \right]
T10=⎣⎢⎢⎡c1s100−s1c100001000h1⎦⎥⎥⎤
关节1坐标系绕x轴旋转90°同时沿原来的y轴平移p12,然后才绕z旋转转一个 θ 2 \theta_2 θ2
T 2 1 = [ c 2 − s 2 0 0 0 0 − 1 p 12 s 2 c 2 0 0 0 0 0 1 ] T^1_2= \left[ \begin{matrix} c_2 & -s_2 & 0& 0\\ 0 & 0 & -1& p_{12}\\ s_2 & c_2 & 0& 0\\ 0 & 0 & 0& 1\end{matrix} \right] T21=⎣⎢⎢⎡c20s20−s20c200−1000p1201⎦⎥⎥⎤
关节2坐标系先绕x转90°同时平移一个p向量 再绕z旋转 θ 3 \theta_3 θ3
T 3 2 = [ − s 3 − c 3 0 p x c 3 − s 3 0 p y 0 0 1 p z 0 0 0 1 ] T^2_3 = \left[ \begin{matrix} -s_3 & -c_3 & 0& p_x\\ c_3 & -s_3 & 0& p_y\\ 0 & 0 & 1& p_z\\ 0 & 0 & 0& 1\end{matrix} \right] T32=⎣⎢⎢⎡−s3c300−c3−s3000010pxpypz1⎦⎥⎥⎤
第三个关节到执行手腕沿x轴平移 e x e_x ex
[ x d y d z d 1 ] = T 1 0 ∗ T 2 1 ∗ T 3 2 ∗ [ e x 0 0 1 ] \left[ \begin{matrix}x_d\\y_d\\z_d\\1\end{matrix} \right]=T^0_1*T^1_2*T^2_3*\left[ \begin{matrix}e_x\\0\\0\\1\end{matrix} \right] ⎣⎢⎢⎡xdydzd1⎦⎥⎥⎤=T10∗T21∗T32∗⎣⎢⎢⎡ex001⎦⎥⎥⎤
得到正运动学方程:
x
d
=
p
x
c
1
c
2
−
p
y
c
1
s
2
+
p
z
s
1
−
p
12
s
1
−
e
x
c
1
s
23
⋅
⋅
⋅
⋅
⋅
⋅
(
1
)
x_d=p_xc_1c_2 -p_yc_1s_2 + p_zs_1 -p_{12}s_1 -e_xc_1s_{23} ······(1)
xd=pxc1c2−pyc1s2+pzs1−p12s1−exc1s23⋅⋅⋅⋅⋅⋅(1)
y
d
=
p
x
s
1
c
2
−
p
y
s
1
s
2
−
p
z
c
1
+
p
12
c
1
−
e
x
s
1
s
23
⋅
⋅
⋅
⋅
⋅
⋅
(
2
)
y_d=p_xs_1c_2 -p_ys_1s_2 - p_zc_1 +p_{12}c_1-e_xs_1s_{23}······(2)
yd=pxs1c2−pys1s2−pzc1+p12c1−exs1s23⋅⋅⋅⋅⋅⋅(2)
z d ′ = z d − h = p x s 2 + p y c 2 + e x c 23 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ( 3 ) z_d' = z_d-h = p_xs_2 + p_yc_2 + e_xc_{23}······(3) zd′=zd−h=pxs2+pyc2+exc23⋅⋅⋅⋅⋅⋅(3)
2.1.2 逆运动学
三式平方相加
(
1
)
2
+
(
2
)
2
+
(
3
)
2
(1)^2 + (2)^2 + (3)^2
(1)2+(2)2+(3)2:
x
d
2
+
y
d
2
+
z
d
′
2
=
p
⃗
T
p
⃗
+
p
12
2
+
e
x
2
−
2
p
12
p
z
−
2
e
x
(
p
x
s
3
−
p
y
c
3
)
x_d^2 + y_d^2 + z_d'^2 = \vec{p}^T \vec{p} + p_{12}^2+e_x^2 - 2p_{12}p_z -2e_x(p_xs_3 - p_yc_3)
xd2+yd2+zd′2=pTp+p122+ex2−2p12pz−2ex(pxs3−pyc3)
可解出第三个关节角
θ
3
\theta_3
θ3 :
s
i
n
(
θ
3
−
α
3
)
=
p
⃗
p
⃗
T
+
p
12
2
+
e
x
2
−
2
p
12
p
z
−
(
x
d
2
+
y
d
2
+
z
d
′
2
)
2
e
x
p
x
2
+
p
y
2
=
k
3
sin(\theta_3-\alpha_3) = \frac{\vec{p}\vec{p}^T + p_{12}^2+e_x^2 - 2p_{12}p_z - (x_d^2 + y_d^2 + z_d'^2)}{2e_x \sqrt{p_x^2 + p_y^2}} = k_3
sin(θ3−α3)=2expx2+py2ppT+p122+ex2−2p12pz−(xd2+yd2+zd′2)=k3
t a n α 3 = p y p x θ 3 = α 3 + a s i n ( k 3 ) θ 3 = α 3 + π − a s i n ( k 3 ) tan \alpha_3 = \frac{p_y}{p_x}\\ \theta_3 = \alpha_3 + asin(k_3)\\ \theta_3 = \alpha_3 + \pi - asin(k_3) tanα3=pxpyθ3=α3+asin(k3)θ3=α3+π−asin(k3)
进而通过式(3)解出
θ
2
\theta_2
θ2:
s
i
n
(
θ
2
+
α
2
)
=
z
d
′
x
d
2
+
y
d
2
+
z
d
′
2
−
(
p
12
−
p
z
)
2
=
k
2
sin(\theta_2 + \alpha_2) = \frac{z_d'}{\sqrt{x_d^2 + y_d^2 + z_d'^2 - (p_{12}-p_z)^2}} = k_2
sin(θ2+α2)=xd2+yd2+zd′2−(p12−pz)2zd′=k2
t a n α 2 = p y + e x c 3 p x − e x s 3 θ 2 = a s i n ( k 2 ) − α 2 θ 2 = π − a s i n ( k 2 ) − α 2 tan \alpha_2 = \frac{p_y + e_xc_3}{p_x - e_xs_3}\\ \theta_2 = asin(k_2) - \alpha_2\\ \theta_2 = \pi - asin(k_2) - \alpha_2 tanα2=px−exs3py+exc3θ2=asin(k2)−α2θ2=π−asin(k2)−α2
最后通过式(1),(2)解出
θ
1
\theta_1
θ1:
x
d
=
(
p
x
c
2
−
p
y
s
2
−
e
x
s
23
)
c
1
+
(
p
z
−
p
12
)
s
1
=
k
x
1
c
1
+
k
x
2
s
1
y
d
=
(
p
12
−
p
z
)
c
1
+
(
p
x
c
2
−
p
y
s
2
−
e
x
s
23
)
s
1
=
k
y
1
c
1
+
k
y
2
s
1
x_d = (p_xc_2 - p_ys_2-e_xs_{23})c_1 + (p_z-p_{12})s_1 = kx_1c_1 + kx_2s_1\\ y_d = (p_{12}-p_z)c_1 + (p_xc_2-p_ys_2-e_xs_{23})s_1= ky_1c_1 + ky_2s_1
xd=(pxc2−pys2−exs23)c1+(pz−p12)s1=kx1c1+kx2s1yd=(p12−pz)c1+(pxc2−pys2−exs23)s1=ky1c1+ky2s1
θ 1 = a t a n ( y d k x 1 − x d k y 1 x d k y 2 − y d k x 2 ) \theta_1 = atan(\frac{y_dkx_1 - x_dky_1}{x_dky_2 - y_dkx_2}) θ1=atan(xdky2−ydkx2ydkx1−xdky1)
解的存在性:必须满足以下条件,才有解!!
A
=
p
⃗
p
⃗
T
+
p
12
2
+
e
x
2
−
2
p
12
p
z
A = \vec{p}\vec{p}^T + p_{12}^2+e_x^2 - 2p_{12}p_z
A=ppT+p122+ex2−2p12pz
B
=
2
e
x
p
x
2
+
p
y
2
B = 2e_x\sqrt{p_x^2+p_y^2}
B=2expx2+py2
C
=
x
d
2
+
y
d
2
+
z
d
′
2
C = x_d^2+y_d^2+z_d'^2
C=xd2+yd2+zd′2
- B − A ≤ C ≤ B + A B-A \le C \le B+A B−A≤C≤B+A
- x d 2 + y d 2 ≥ ( p 12 − p z ) 2 x_d^2+y_d^2 \ge (p_{12} - p_z)^2 xd2+yd2≥(p12−pz)2
解的个数
θ 3 \theta_3 θ3两个解, θ 2 \theta_2 θ2两个解, θ 1 \theta_1 θ1一个解,一共2x2x1=4个解
2.2 动力学
符号约定:
各关节转动惯量: I i = d i a g ( [ I x i , I y i , I z i ] ) i = 1 , 2 , 3 I_i = diag([I_{xi},I_{yi},I_{zi}]) \quad i=1,2,3 Ii=diag([Ixi,Iyi,Izi])i=1,2,3
各关节质量: m 1 , m 2 , m 3 m_1, m_2, m_3 m1,m2,m3
关节到质心的距离: p i c i = 2 , 3 p_{ic} \quad i=2,3 pici=2,3
使用牛顿——欧拉迭代法求解其动力学方程8:
初始条件:
v
0
=
[
0
,
0
,
0
]
T
ω
0
=
[
0
,
0
,
0
]
T
v
0
˙
=
[
0
,
0
,
g
]
T
ω
0
˙
=
[
0
,
0
,
0
]
T
v_0 = [0 ,0, 0]^T \\ \omega_0 = [0 ,0, 0]^T \\ \dot{v_0} = [0,0,g]^T\\ \dot{\omega_0} = [0,0,0]^T
v0=[0,0,0]Tω0=[0,0,0]Tv0˙=[0,0,g]Tω0˙=[0,0,0]T
前向迭代:
ω
i
+
1
,
i
+
1
=
R
i
+
1
,
i
ω
i
,
i
+
θ
˙
i
+
1
Z
^
i
+
1
ω
˙
i
+
1
,
i
+
1
=
R
i
+
1
,
i
ω
˙
i
,
i
+
R
i
+
1
,
i
ω
i
,
i
×
θ
˙
i
+
1
Z
^
i
+
1
+
θ
¨
i
+
1
Z
^
i
+
1
v
i
+
1
,
i
+
1
=
R
i
+
1
,
i
(
v
i
,
i
+
ω
i
,
i
×
p
i
,
i
+
1
)
v
˙
i
+
1
,
i
+
1
=
R
i
+
1
,
i
(
v
˙
i
,
i
+
ω
˙
i
,
i
×
p
i
,
i
+
1
+
ω
i
,
i
×
(
ω
i
,
i
×
p
i
,
i
+
1
)
)
i
=
0
,
1
,
2
\omega_{i+1,i+1} = R_{i+1,i} \omega_{i,i} + \dot{\theta}_{i+1}\hat{Z}_{i+1}\\ \dot{\omega}_{i+1,i+1} = R_{i+1,i} \dot{\omega}_{i,i} + R_{i+1,i} \omega_{i,i} \times \dot{\theta}_{i+1}\hat{Z}_{i+1} + \ddot{\theta}_{i+1}\hat{Z}_{i+1}\\ v_{i+1,i+1} = R_{i+1,i}(v_{i,i} + \omega_{i,i} \times p_{i,i+1})\\ \dot{v}_{i+1,i+1} = R_{i+1,i}(\dot{v}_{i,i} + \dot{\omega}_{i,i} \times p_{i,i+1}+ \omega_{i,i} \times (\omega_{i,i} \times p_{i,i+1})) \\ i = 0,1,2
ωi+1,i+1=Ri+1,iωi,i+θ˙i+1Z^i+1ω˙i+1,i+1=Ri+1,iω˙i,i+Ri+1,iωi,i×θ˙i+1Z^i+1+θ¨i+1Z^i+1vi+1,i+1=Ri+1,i(vi,i+ωi,i×pi,i+1)v˙i+1,i+1=Ri+1,i(v˙i,i+ω˙i,i×pi,i+1+ωi,i×(ωi,i×pi,i+1))i=0,1,2
ω i + 1 , i + 1 \omega_{i+1,i+1} ωi+1,i+1 表示i+1坐标系的相对于世界坐标系的角速度在i+1坐标系下的表示
R i + 1 , i R_{i+1,i} Ri+1,i 表示从i+1坐标系旋转到i坐标系的旋转矩阵
p i , i + 1 p_{i,i+1} pi,i+1 表示从i关节到i+1关节的距离向量
计算各连杆质心速度、加速度、角速度和角加速度:
ω c , i = ω i , i ω ˙ c , i = ω ˙ i , i v c , i = v i , i + ω i , i × p i , c v ˙ c , i = v ˙ i , i + ω ˙ i , i × p i , c + ω i , i × ( ω i , i × p i , c ) i = 1 , 2 , 3 \omega_{c,i} = \omega_{i,i} \\ \dot{\omega}_{c,i} = \dot{\omega}_{i,i}\\ v_{c,i} = v_{i,i} + \omega_{i,i} \times p_{i,c}\\ \dot{v}_{c,i} = \dot{v}_{i,i} + \dot{\omega}_{i,i} \times p_{i,c}+ \omega_{i,i} \times (\omega_{i,i} \times p_{i,c}) \\ i = 1,2,3 ωc,i=ωi,iω˙c,i=ω˙i,ivc,i=vi,i+ωi,i×pi,cv˙c,i=v˙i,i+ω˙i,i×pi,c+ωi,i×(ωi,i×pi,c)i=1,2,3
由此可计算出各关节受合力和合力矩:
F
i
=
m
i
v
˙
c
,
i
N
i
=
I
i
w
˙
c
,
i
+
w
c
,
i
×
I
i
w
c
,
i
F_i = m_i\dot{v}_{c,i}\\ N_i = I_i\dot{w}_{c,i} + w_{c,i} \times I_iw_{c,i}
Fi=miv˙c,iNi=Iiw˙c,i+wc,i×Iiwc,i
反向迭代初始条件:
f 4 = [ 0 , 0 , 0 ] T n 4 = [ 0 , 0 , 0 ] T f_4 = [0, 0, 0]^T\\ n_4 = [0,0,0]^T f4=[0,0,0]Tn4=[0,0,0]T
反向迭代:
f
i
,
i
=
R
i
,
i
+
1
f
i
+
1
,
i
+
1
+
F
i
n
i
,
i
=
R
i
,
i
+
1
n
i
+
1
,
i
+
1
+
p
i
,
c
×
F
i
+
p
i
,
i
+
1
×
R
i
,
i
+
1
f
i
+
1
,
i
+
1
+
N
i
i
=
1
,
2
,
3
f_{i,i} = R_{i,i+1}f_{i+1,i+1} + F_i\\ n_{i,i} = R_{i,i+1}n_{i+1,i+1} + p_{i,c}\times F_i + p_{i,i+1}\times R_{i,i+1}f_{i+1,i+1} + N_i \\ i = 1,2,3
fi,i=Ri,i+1fi+1,i+1+Fini,i=Ri,i+1ni+1,i+1+pi,c×Fi+pi,i+1×Ri,i+1fi+1,i+1+Nii=1,2,3
最终各关节力矩为:
τ
i
=
n
i
,
i
Z
^
i
i
=
1
,
2
,
3
\tau_i = n_{i,i} \hat{Z}_i \qquad i = 1,2,3
τi=ni,iZ^ii=1,2,3
2.3 轨迹规划
轨迹规划部分我们使用三次样条曲线(三次样条曲线规划原理参考博客9),首先在笛卡尔空间规划圆弧轨迹,然后使用逆运动学反推关节空间轨迹,然后对关节空间应用三次样条曲线规划得到各时刻的角度、角速度和角加速度。
选取初始机械臂三关节角度为:
[
0
,
0
,
−
π
/
5
]
[0,0,-\pi/5]
[0,0,−π/5]
拟规划轨迹函数表达式:
x
=
0.644
y
=
0.3
c
o
s
(
t
)
−
0.1527
z
=
0.3
s
i
n
(
t
)
+
0.6436
t
∈
[
0
,
2
π
]
\begin{aligned} x &= 0.644 \\ y &= 0.3cos(t)-0.1527 \\ z &= 0.3sin(t) +0.6436\\ t &\in [0, 2\pi] \end{aligned}
xyzt=0.644=0.3cos(t)−0.1527=0.3sin(t)+0.6436∈[0,2π]
拟跟踪圆弧轨迹:
在关节空间规划使用了博主9 提到的指定初始速度v0和最终速度vn时的参数计算方法,先计算出中间点速度,然后再使用已知始末两点位置速度,推算该小段的三次方程系数。
我们把圆弧轨迹分为30个点,则有30段路程,假设启动和停止这两段花费0.4s,其余的花费0.2s,则这个任务需要在6.4s内完成。
三个关节的期望角度、角速度和角加速度为:
2.4 控制方法
对puma560的前三个关节(三自由度)进行圆弧轨迹跟踪。由于puma560前三个关节是实现位置调整,后三个关节是实现姿态调整,对于圆弧轨迹跟踪来说,只需要研究前三个关节的运动,这有利于对问题的简化又不失一般性。机构和期望轨迹如下图:
其中,红色球形标记为机械臂末端执行器位置,绿色圆弧为机械臂期望跟踪的轨迹。
2.4.1 基于模型的重力补偿PD控制8
对于我们讨论的三自由度机械臂模型,关节角向量为:
Θ
=
(
θ
1
,
θ
2
,
θ
3
)
\Theta = (\theta_1,\theta_2,\theta_3)
Θ=(θ1,θ2,θ3),则动力学模型的一般式如下:
τ
=
M
(
Θ
)
Θ
¨
+
V
(
Θ
,
Θ
˙
)
+
G
(
Θ
)
\tau = M(\Theta) \ddot{\Theta}+V(\Theta,\dot{\Theta} )+G(\Theta)
τ=M(Θ)Θ¨+V(Θ,Θ˙)+G(Θ)
其中,
τ
τ
τ为力矩向量,
M
(
Θ
)
M(Θ)
M(Θ)为质量矩阵,
V
(
Θ
,
Θ
˙
)
V(Θ,\dot{\Theta} )
V(Θ,Θ˙)为复杂的非线性耦合项,
G
(
Θ
)
G(Θ)
G(Θ)为关节受到重力矩阵。
对于复杂的非线性时变项由关节角度和其一阶导数的相乘或平方项构成,考虑这一项需要耗费大量的计算资源,而且已有证明指出,仅考虑重力补偿的PD控制器已经可以达到系统的全局渐进稳定8。
忽略非线性项后动力学模型为:
τ
≈
M
(
Θ
)
Θ
¨
+
G
(
Θ
)
τ\approx M(Θ) \ddot{\Theta}+G(Θ)
τ≈M(Θ)Θ¨+G(Θ)
进而设计重力补偿的控制率:
τ
=
M
(
Θ
)
f
+
G
(
Θ
)
f
=
Θ
¨
d
+
K
d
(
Θ
˙
d
−
Θ
˙
)
+
K
p
(
Θ
d
−
Θ
)
τ= M(Θ)f+G(Θ)\\ f= \ddot{\Theta}_d+K_d (\dot{\Theta}_d-\dot{\Theta} )+K_p (Θ_d-Θ)
τ=M(Θ)f+G(Θ)f=Θ¨d+Kd(Θ˙d−Θ˙)+Kp(Θd−Θ)
联立上面三式得到系统模型为:
e
¨
+
K
d
e
˙
+
K
p
e
=
0
\ddot{e}+K_d \dot{e}+ K_p e=0
e¨+Kde˙+Kpe=0
其中,
e
=
Θ
d
−
Θ
e= Θ_d-Θ
e=Θd−Θ。这时希望系统具有临界阻尼的特性,因此希望参数具有关系:
K
d
=
2
K
p
K_d= 2 \sqrt{K_p }
Kd=2Kp
由此得到控制框图如下:
- 仿真结果
任意指定一组PD参数:P = 5,D = 0.1进行10s仿真,对关节角度跟随效果如下:
由图可见,关节角度跟踪快速而且较为准确,其中前两个关节跟踪误差小,而第三个关节跟踪误差较大,这是因为在轨迹规划的时候,第三个关节要活动的范围更大,因此会出现明显偏差。但对于较为随意指定的PD参数,机械臂跟踪效果良好,体现了这种控制方法的鲁棒性。
现在,我们尝试按照使系统具有临界阻尼特性的规则进行参数设置,若使系统具有较大带宽,不妨取
ω
n
=
5
r
a
d
/
s
ω_n=5rad/s
ωn=5rad/s。此时P = 25, D = 10。仿真得到关节角度跟随效果如下:
可见效果明显提升,三个关节期望角度和实际角度基本吻合。我们进一步量化这两组参数的差距,我们定义当前时刻的误差等于末端执行器在笛卡尔坐标系下位置与期望位置的欧氏距离,我们对这两组PD参数进行量化评估:
由图可见,使用后一组PD参数下,末端执行器的跟踪误差比第一组显著减小,误差小于大部分时刻在1mm以内。
2.4.2 非线性前馈控制8
非线性前馈控制将充分利用机械臂的动力学模型,将期望轨迹对应的期望关节角度、角速度和角加速度通过正运动学计算出期望的力矩,将此力矩作为前馈量和PID控制器输出的控制量相加作为总控制量对机械臂进行控制,控制框图如下:
- 仿真结果
对这种控制方式沿用上一节的PD参数进行仿真,得到关节角度跟踪效果如下:
由上图可见,采用非线性前馈PD控制三组关节跟踪与期望角度基本吻合。这得益于非线性前馈完全使用了机械臂的动力学模型,而且前馈控制的好处是可以离线计算前馈的力矩,这有利于快速伺服。
再次评估在同组PD参数下第一种控制方案和改组方案的误差对比:
两种方案在轨迹跟踪误差上都小于2mm,但第一种方法在精度上比第二种方法略胜一筹。
3. 集成仿真
在设计过程中,小组成员分成PMSM和机械臂两部分进行设计。机械臂部分,由以上控制方法得知,输入控制量是力矩给定值,也就是说,对应的电机的输出需要跟踪给定力矩。考虑到此情况,我们仅需使用PMSM的电流环部分即可,因为力矩和电流有明确的关系,因此只需要给出期望力矩的对应电流给定,即可使电机输出期望力矩。
另外,仅存在电流环的PMSM会受到电压限制而造成失步,因此对于输入到电机的负载也需要准确计算。实际应用中,电机通过减速箱驱动真实负载运作,但仿真环境下难以得到两种机构拖动的模拟,只能在仿真时准确计算机械臂相应位姿的负载,用这个数值输入到PMSM模型。而电机的转动除以减速比后,必须等于关节转动角度。
若当前时刻对应的关节角度、角速度和角加速度分别为
Θ
t
,
Θ
˙
t
,
Θ
¨
t
Θ_t,\dot{\Theta}_t,\ddot{\Theta}_t
Θt,Θ˙t,Θ¨t,这时候对应动力学模型为:
τ
t
=
M
(
Θ
t
)
Θ
¨
+
V
(
Θ
t
,
Θ
˙
t
)
+
G
(
Θ
t
)
τ_t=M(Θ_t ) \ddot{\Theta}+V(Θ_t,\dot{Θ}_t )+G(Θ_t)
τt=M(Θt)Θ¨+V(Θt,Θ˙t)+G(Θt)
对比电机运动方程:
T
e
−
T
L
=
J
d
ω
/
d
t
T_e-T_L=J dω/dt
Te−TL=Jdω/dt
可以发现当前时刻下机械臂关节负载为:
T
L
=
V
(
Θ
t
,
Θ
˙
t
)
+
G
(
Θ
t
)
T_L= V(Θ_t,\dot{Θ}_t )+G(Θ_t)
TL=V(Θt,Θ˙t)+G(Θt)
- 仿真结果:
总体集成仿真图如下:
由于所有部件仿真所需时间很长,限于硬件限制,在这里仅对第三个关节使用PMSM驱动,而前两个关节依然使用直接给理想力矩源的方式,通过对第三个关节的控制即可验证模型的可用性。控制方案选择非线性前馈的方式,PD参数选择同第二部分。
关节跟踪图:
PMSM提供的力矩跟随期望力矩图:
使用PMSM和未使用时的误差对比图:
最后:
相关代码:github
引用
黄志坚.机器人驱动与控制及应用实例[M].化学工业出版社:北京,2016. ↩︎
https://www.mathworks.com/help/physmod/sps/ref/pmsm.html?s_tid=srchtitle ↩︎
袁雷,胡冰新,魏克银,等.现代永磁同步电机控制原理及MATLAB仿真[M].北京航空航天大学出版社:北京,2016. ↩︎
阮毅,杨影,陈伯时.电力拖动自动控制系统——运动控制系统[M].机械工业出版社:北京,2016. ↩︎
sy243772901.永磁同步电机矢量控制(三)——电流环转速环 PI 参数整定[EB/OL].https://blog.csdn.net/sy243772901/article/details/82221672,2019-05-17. ↩︎
Armstrong B, Khatib O, Burdick J. The explicit dynamic model and inertial parameters of the PUMA
560 arm[C]//Robotics and Automation. Proceedings. 1986 IEEE International Conference on. IEEE, 1986,
3: 510-518. ↩︎https://github.com/nimasarli/puma560_description ↩︎
John J.Craig.机器人学导论[M].机械工业出版社:中国北京,2006:60-65, 235-237, 243-244. ↩︎ ↩︎ ↩︎ ↩︎
xuuyann.机器人轨迹规划:三次样条曲线[EB/OL].https://blog.csdn.net/qq_26565435/article/details/105940288,2020-05-05. ↩︎ ↩︎
ZHENG Fan. ENGG 5402 Course Project: Simulation of PUMA 560 Manipulator[D] ,2015-04-05. ↩︎
付博.永磁同步电动机动态解耦控制技术研究[D].黑龙江:哈尔滨工业大学,2010-06. ↩︎
潘月斗.现代交流电机控制技术[M].机械工业出版社:北京,2018 ↩︎