赞
踩
【汇总】
【Matlab 六自由度机器人】系列文章汇总 \fcolorbox{green}{aqua}{【Matlab 六自由度机器人】系列文章汇总 } 【Matlab 六自由度机器人】系列文章汇总
【主线】
运动学 \color{red}运动学 运动学
动力学
\color{red}动力学
动力学
(待补充)
【补充说明】
本篇对机器人动力学进行一个概述。
之前谈到的运动学方程仅描述了机器人的运动过程,没有考虑到产生运动的力和扭矩,而动力学方程能描述力和运动之间的关系,因此我们在此引入动力学的概念。
本人在读研期间仅在机器人运动学的基础上完成论文的撰写,有些遗憾未能将机器人动力学应用到文章之中,在此写下机器人动力学的概述以及学习过程中遇到的问题和解决思路。
分析机器人操作的动态数学模型,主要采用下列两种理论
第一个方法:牛顿—欧拉方程即力的动态平衡法。当用此法时,需从运动学出发求得加速度,并消去各内作用力。对于较复杂的系统,此种分析方法十分复杂与麻烦。
第二个方法:拉格朗日方程即拉格朗日功能平衡法,也称为欧拉—拉格朗日方程,它只需要速度而不必求内作用力。因此,这是一种直截了当和简便的方法。
在本篇文章中主要采用拉格朗日方程来分析和求解机械手的动力学问题。
我们以图中所示的单自由度系统为例,来说明如何从牛顿第二定律推导出拉格朗日方程。图中的圆点为带有质量的一个粒子,下面称为质点。该质点受到重力
g
g
g的效果和拉力
f
f
f的效果。
质量为 m m m的粒子受到限制,只能在垂直方向移动,这就构成了一个单自由度系统。 重力 m g mg mg向下作用, 外力 f f f则向上作用。
根据牛顿第二定律,这个系统中的质点的运动方程为:
m
a
=
f
−
m
g
⟹
m
y
¨
=
f
−
m
g
ma=f-mg\implies m\ddot{y}_{}^{}=f-mg
ma=f−mg⟹my¨=f−mg
左侧的
m
y
¨
m\ddot{y}_{}^{}
my¨也可以用以下方程推出
m
y
¨
=
d
d
t
(
m
y
˙
)
=
d
d
t
∂
∂
y
˙
(
1
2
m
y
˙
2
)
=
d
d
t
(
∂
K
∂
y
˙
)
m\ddot{y}_{}^{}= \frac{\mathrm{d}}{\mathrm{d} t} \left(m\dot{y}\right) = \frac{\mathrm{d}}{\mathrm{d} t} \frac{\partial {}}{\partial \dot{y}} \left(\frac{1}{2}m\dot{y}^2\right)= \frac{\mathrm{d}}{\mathrm{d} t} \left(\frac{\partial \mathcal{K}}{\partial \dot{y}}\right)
my¨=dtd(my˙)=dtd∂y˙∂(21my˙2)=dtd(∂y˙∂K)
注:
m
y
˙
可以写作
∂
∂
y
˙
(
1
2
m
y
˙
2
)
m\dot{y}可以写作\frac{\partial {}}{\partial \dot{y}} \left(\frac{1}{2}m\dot{y}^2\right)
my˙可以写作∂y˙∂(21my˙2),即
1
2
m
y
˙
2
\frac{1}{2}m\dot{y}^2
21my˙2对
y
y
y进行求偏导。
其中,动能 K = 1 2 m y ˙ 2 \mathcal{K}= \frac{1}{2} m\dot{y}^2 K=21my˙2
类似上面的方程,我们可以将重力表达为:
m
g
=
∂
∂
y
(
m
g
y
)
=
∂
P
∂
y
mg=\frac{\partial }{\partial {y}}\left(mgy\right)= \frac{\partial \mathcal{P}}{\partial {y}}
mg=∂y∂(mgy)=∂y∂P
其中,重力势能
P
=
m
g
y
\mathcal{P}= mgy
P=mgy
定义函数
L
\mathcal{L}
L,它是系统的动能和势能之差,也称为系统的拉格朗日算子
L
=
K
−
P
=
1
2
m
y
˙
2
−
m
g
y
\mathcal{L}= \mathcal{K}- \mathcal{P}=\frac{1}{2}m\dot{y}^2-mgy
L=K−P=21my˙2−mgy
①
L
对
y
˙
求偏导,可得到
∂
L
∂
y
˙
=
∂
K
∂
y
˙
① \mathcal{L}对\dot{y}求偏导,可得到\frac{\partial { \mathcal{L}}}{\partial \dot{y}}=\frac{\partial { \mathcal{K}}}{\partial \dot{y}}
①L对y˙求偏导,可得到∂y˙∂L=∂y˙∂K
② L 对 y ˙ 求偏导,可得到 ∂ L ∂ y = − ∂ P ∂ y ⟹ ∂ P ∂ y = − ∂ L ∂ y ② \mathcal{L}对\dot{y}求偏导,可得到\frac{\partial { \mathcal{L}}}{\partial {y}}=-\frac{\partial { \mathcal{P}}}{\partial {y}} \implies \frac{\partial { \mathcal{P}}}{\partial {y}}=-\frac{\partial { \mathcal{L}}}{\partial {y}} ②L对y˙求偏导,可得到∂y∂L=−∂y∂P⟹∂y∂P=−∂y∂L
那么对上式的
m
y
¨
=
f
−
m
g
m\ddot{y}_{}^{}=f-mg
my¨=f−mg可以写作如下公式
d
d
t
∂
L
∂
y
˙
=
f
−
(
−
∂
L
∂
y
)
⟹
f
=
d
d
t
∂
L
∂
y
˙
−
∂
L
∂
y
\frac{\mathrm{d}}{\mathrm{d} t} \frac{\partial { \mathcal{L}}}{\partial \dot{y}}=f- \left(-\frac{\partial \mathcal{L}}{\partial {y}}\right) \implies f=\frac{\mathrm{d}}{\mathrm{d} t} \frac{\partial { \mathcal{L}}}{\partial \dot{y}}-\frac{\partial \mathcal{L}}{\partial {y}}
dtd∂y˙∂L=f−(−∂y∂L)⟹f=dtd∂y˙∂L−∂y∂L
至此,单自由度系统的拉格朗日方程就推导出来了,方程如下:
f
=
d
d
t
∂
L
∂
y
˙
−
∂
L
∂
y
f=\frac{\mathrm{d}}{\mathrm{d} t} \frac{\partial { \mathcal{L}}}{\partial \dot{y}}-\frac{\partial \mathcal{L}}{\partial {y}}
f=dtd∂y˙∂L−∂y∂L
下面是建立拉格朗日函数的一般步骤
首先写出系统的动能和势能,并以广义坐标
(
q
1
,
⋯
,
q
n
)
\left(q_{1}, \cdots, q_{n}\right)
(q1,⋯,qn) 的形式来表示,其中
n
n
n 是系统的自由度数目;然后,根据下述公式来计算
n
−
n^{-}
n−自由度系统的运动方程
d
d
t
∂
L
∂
q
˙
k
−
∂
L
∂
q
k
=
τ
k
,
k
=
1
,
⋯
,
n
\frac{\mathrm{d}}{\mathrm{d} t} \frac{\partial \mathcal{L}}{\partial \dot{q}_{k}}-\frac{\partial \mathcal{L}}{\partial q_{k}}=\tau_{k}, \quad k=1, \cdots, n
dtd∂q˙k∂L−∂qk∂L=τk,k=1,⋯,n
其中,
τ
k
\tau_{k}
τk 是与广义坐标
q
k
q_{k}
qk 相关的广义力。
在上述单自由度系统的例子中,变量
y
y
y 作为广义坐标。欧拉-拉格朗日方程不仅可以导出一组耦合的二阶常微分方程,它还提供了一种 等同于通过牛顿第二定律得到动力学方程的构造方法。然而,正如我们将要看到的那样,对于诸如多连杆机器人等复杂系统,使用拉格朗日方法更为有利。
下面介绍
单连杆机械臂系统和
双连杆机械臂系统的拉格朗日方程
如下图中所示的单连杆机器人,它包括一个刚性连杆,该连杆通过齿轮系连接到直流电机。令
θ
l
\theta_l
θl和
θ
m
\theta_m
θm分别表示连杆和电机轴的转动角度。那么
θ
m
=
r
θ
l
\theta_m=r\theta_l
θm=rθl,其中
r
:
1
r: 1
r:1为齿轮变速比。如果连杆一端直接接在电机的旋转轴上,那么
r
=
1
r=1
r=1。连杆转角和电机轴转角之间的代数关系表明该系统只有一个自由度,因此我们可以将
θ
l
\theta_l
θl或
θ
m
\theta_m
θm作为广义坐标。
单连杆机器人:电机输出轴通过齿轮系耦连到连杆的转动轴,齿轮系放大了电机扭矩并降低了电机转速。
在此选用
θ
ℓ
\theta_\ell
θℓ作为广义坐标
系统的动能可以表示为
θ
ℓ
\theta_\ell
θℓ的函数,其表示如下所示
K
=
1
2
J
m
θ
˙
m
2
+
1
2
J
ℓ
θ
˙
ℓ
2
=
1
2
J
m
r
2
θ
˙
ℓ
2
+
1
2
J
ℓ
θ
˙
ℓ
2
=
1
2
(
r
2
J
m
+
J
ℓ
)
θ
˙
ℓ
2
\mathcal{K} =\frac{1}{2}J_{m} \dot{\theta}_{m}^{2}+\frac{1}{2} J_{\ell} \dot{\theta}_{\ell}^{2} =\frac{1}{2}J_{m}r^2 \dot{\theta}_{\ell}^{2}+\frac{1}{2} J_{\ell} \dot{\theta}_{\ell}^{2} =\frac{1}{2}\left(r^{2} J_{m}+J_{\ell}\right) \dot{\theta}_{\ell}^{2}
K=21Jmθ˙m2+21Jℓθ˙ℓ2=21Jmr2θ˙ℓ2+21Jℓθ˙ℓ2=21(r2Jm+Jℓ)θ˙ℓ2
其中,
J
m
,
J
ℓ
J_m,J_\ell
Jm,Jℓ分别为电机和连杆的转动惯量。系统的势能如下所示
P
=
M
g
ℓ
(
1
−
cos
θ
ℓ
)
\mathcal{P}=Mg\ell\left(1-\cos \theta_{\ell}\right)
P=Mgℓ(1−cosθℓ)
其中,
M
M
M 是连杆的总体质量,
ℓ
\ell
ℓ 是关节轴线与连杆质心之间的距离。定义
J
=
r
2
J
m
+
J
ℓ
J=r^{2} J_{m}+J_{\ell}
J=r2Jm+Jℓ,拉格朗日算子
L
\mathcal{L}
L如下
L
=
1
2
J
θ
˙
ℓ
2
−
M
g
ℓ
(
1
−
cos
θ
ℓ
)
\mathcal{L}=\frac{1}{2} J \dot{\theta}_{\ell}^{2}-M g \ell\left(1-\cos \theta_{\ell}\right)
L=21Jθ˙ℓ2−Mgℓ(1−cosθℓ)
将上述表达式代人到公式
d
d
t
∂
L
∂
q
˙
k
−
∂
L
∂
q
k
=
τ
k
,
\frac{\mathrm{d}}{\mathrm{d} t} \frac{\partial \mathcal{L}}{\partial \dot{q}_{k}}-\frac{\partial \mathcal{L}}{\partial q_{k}}=\tau_{k},
dtd∂q˙k∂L−∂qk∂L=τk,中,其中
n
=
1
n=1
n=1,广义坐标为
θ
ℓ
\theta_{\ell}
θℓ,得到下列运动方程
J
θ
¨
ℓ
+
M
g
ℓ
sin
θ
ℓ
=
τ
ℓ
J \ddot{\theta}{ }_{\ell}+M g \ell \sin \theta_{\ell}=\tau_{\ell}
Jθ¨ℓ+Mgℓsinθℓ=τℓ
广义力
τ
ℓ
\tau_{\ell}
τℓ 表示那些无法从势函数推导出的外力和外力矩。对于这个例子,
τ
ℓ
\tau_{\ell}
τℓ 包括反映 到连杆上的电机输入力矩
u
=
r
τ
m
u=r \tau_{m}
u=rτm,以及 (非保守) 阻尼力矩
B
m
θ
˙
m
B_{m} \dot{\theta}_{m}
Bmθ˙m 和
B
ℓ
θ
˙
1
B_{\ell} \dot{\theta}_{1}
Bℓθ˙1 。将电机阻尼反映到连杆上,得出
τ
ℓ
=
u
−
B
θ
˙
ℓ
⟹
u
=
τ
ℓ
+
B
θ
˙
ℓ
\tau_{\ell}=u-B \dot{\theta}_{\ell} \implies u=\tau_{\ell}+B \dot{\theta}_{\ell}
τℓ=u−Bθ˙ℓ⟹u=τℓ+Bθ˙ℓ
其中,
B
=
r
B
m
+
B
ℓ
B=r B_{m}+B_{\ell}
B=rBm+Bℓ 。因此,该系统完整的动力学表达式为
u
=
J
θ
¨
ℓ
+
B
θ
˙
ℓ
+
M
g
ℓ
sin
θ
ℓ
u=J \ddot{\theta}_{\ell}+B \dot{\theta}_{\ell}+M g \ell \sin \theta_{\ell}
u=Jθ¨ℓ+Bθ˙ℓ+Mgℓsinθℓ
下面推导双连杆机械臂系统的动能和位能,如下图。这种运动机构具有开式运动链,与复摆运动有许多相似之处。
图中
T 1 T_{1} T1 和 T 2 T_{2} T2 为转矩;m 1 m_{1} m1 和 m 2 m_{2} m2为连杆1和连杆2的质量,该连杆的质量以连杆末端的质点来进行表示;
d 1 d_{1} d1 和 d 2 d_{2} d2分别为两连杆的长度;
θ 1 \theta_{1} θ1 和 θ 2 \theta_{2} θ2为广义坐标;
g g g为重力加速度。
先计算连杆1的动能 K 1 {K_1} K1和动能 P 1 {P_1} P1
K
1
=
1
2
m
1
v
1
2
v
1
=
d
1
θ
˙
1
P
1
=
m
1
g
h
h
1
=
−
d
1
cos
θ
1
K1=12m1v21v1=d1˙θ1P1=m1ghh1=−d1cosθ1
推导得
K
1
=
1
2
m
1
d
1
2
θ
˙
1
2
P
1
=
−
m
1
g
d
1
cos
θ
1
K1=12m1d21˙θ21P1=−m1gd1cosθ1
再求连杆 2 的动能
K
2
K_{2}
K2 和位能
P
2
P_{2}
P2 。
K
2
=
1
2
m
2
v
2
2
P
2
=
m
g
y
2
K2=12m2v22P2=mgy2
v
2
2
=
x
˙
2
2
+
y
˙
2
2
x
2
=
d
1
sin
θ
1
+
d
2
sin
(
θ
1
+
θ
2
)
y
2
=
−
d
1
cos
θ
1
−
d
2
cos
(
θ
1
+
θ
2
)
x
˙
2
=
d
1
cos
θ
1
θ
˙
1
+
d
2
cos
(
θ
1
+
θ
2
)
(
θ
˙
1
+
θ
˙
2
)
y
˙
2
=
d
1
sin
θ
1
θ
˙
1
+
d
2
sin
(
θ
1
+
θ
2
)
(
θ
˙
1
+
θ
˙
2
)
v22=˙x22+˙y22x2=d1sinθ1+d2sin(θ1+θ2)y2=−d1cosθ1−d2cos(θ1+θ2)˙x2=d1cosθ1˙θ1+d2cos(θ1+θ2)(˙θ1+˙θ2)˙y2=d1sinθ1˙θ1+d2sin(θ1+θ2)(˙θ1+˙θ2)
于是可求得
v
2
2
=
d
1
2
θ
˙
1
2
+
d
2
2
(
θ
˙
1
2
+
2
θ
˙
1
θ
˙
2
+
θ
˙
2
2
)
+
2
d
1
d
2
cos
θ
2
(
θ
˙
1
2
+
θ
˙
1
θ
˙
2
)
\boldsymbol{v}_{2}^{2}=d_{1}^{2} \dot{\theta}_{1}^{2}+d_{2}^{2}\left(\dot{\theta}_{1}^{2}+2 \dot{\theta}_{1} \dot{\theta}_{2}+\dot{\theta}_{2}^{2}\right)+2 d_{1} d_{2} \cos \theta_{2}\left(\dot{\theta}_{1}^{2}+\dot{\theta}_{1} \dot{\theta}_{2}\right)
v22=d12θ˙12+d22(θ˙12+2θ˙1θ˙2+θ˙22)+2d1d2cosθ2(θ˙12+θ˙1θ˙2)
以及
K
2
=
1
2
m
2
d
1
2
θ
˙
1
2
+
1
2
m
2
d
2
2
(
θ
˙
1
+
θ
˙
2
)
2
+
m
2
d
1
d
2
cos
θ
2
(
θ
˙
1
2
+
θ
˙
1
θ
˙
2
)
P
2
=
−
m
2
g
d
1
cos
θ
1
−
m
2
g
d
2
cos
(
θ
1
+
θ
2
)
K2=12m2d21˙θ21+12m2d22(˙θ1+˙θ2)2+m2d1d2cosθ2(˙θ21+˙θ1˙θ2)P2=−m2gd1cosθ1−m2gd2cos(θ1+θ2)
这样, 二连杆机械手系统的总动能和总位能分别为
K
=
K
1
+
K
2
=
1
2
(
m
1
+
m
2
)
d
1
2
θ
˙
1
2
+
1
2
m
2
d
2
2
(
θ
˙
1
+
θ
˙
2
)
2
+
m
2
d
1
d
2
cos
θ
2
(
θ
˙
1
2
+
θ
˙
1
θ
˙
2
)
P
=
P
1
+
P
2
=
−
(
m
1
+
m
2
)
g
d
1
cos
θ
1
−
m
2
g
d
2
cos
(
θ
1
+
θ
2
)
K=K1+K2=12(m1+m2)d21˙θ21+12m2d22(˙θ1+˙θ2)2+m2d1d2cosθ2(˙θ21+˙θ1˙θ2)P=P1+P2=−(m1+m2)gd1cosθ1−m2gd2cos(θ1+θ2)
单杆机械臂系统代码如下:
%% 单杆机械臂系统 clc clear close all warning off %% MOD-DH参数 d1 = 0; d2 = 100; a1 = 0; a2 = 0; alpha1 = pi/2; alpha2 = 0; % theta d a alpha offset(关节变量偏移量) L(1)=Link([0 d1 a1 alpha1 0 ],'modified'); L(2)=Link([0 d2 a2 alpha2 0 ],'modified'); Single_Robot = SerialLink(L,'name','SingleRobot'); Single_Robot.teach() %限制机器人的关节空间 theta1min = -180; theta1max = 180; theta2min = -180; theta2max = 180; L(1).qlim = [theta1min theta1max]*pi/180; L(2).qlim = [theta2min theta2max]*pi/180;
双连杆机械臂系统代码如下:
%% 双连杆机械臂系统 clc clear close all warning off %% MOD-DH参数 d1 = 0; d2 = 0; d3 = 0; a1 = 0; a2 = 100; a3 = 100; alpha1 = pi/2; alpha2 = 0; alpha3 = 0; % theta d a alpha offset(关节变量偏移量) L(1)=Link([0 d1 a1 alpha1 0 ],'modified'); L(1).offset = -pi/2; L(2)=Link([0 d2 a2 alpha2 0 ],'modified'); L(3)=Link([0 d3 a3 alpha3 0 ],'modified'); Double_Robot = SerialLink(L,'name','SingleRobot'); Double_Robot.display() Double_Robot.teach() %限制机器人的关节空间 theta1min = -180; theta1max = 180; theta2min = -180; theta2max = 180; theta3min = -180; theta3max = 180; L(1).qlim = [theta1min theta1max]*pi/180; L(2).qlim = [theta2min theta2max]*pi/180; L(3).qlim = [theta3min theta3max]*pi/180;
接下来对其进行运动学上的轨迹规划:
n = 1:100;
q0 = [0 0];
q1 = [30 30];
% 由q0移动到q1
[q,qd,qdd] = jtraj(q0,q1,n);
figure(2)
subplot(3,1,1)
plot(n,q)
subplot(3,1,2)
plot(n,qd)
subplot(3,1,3)
plot(n,qdd)
其效果如下图:
n = 1:100;
q0 = [0 0 0];
q1 = [30 60 90];
[q,qd,qdd] = jtraj(q0,q1,n);
figure(2)
subplot(3,1,1)
plot(n,q)
subplot(3,1,2)
plot(n,qd)
subplot(3,1,3)
plot(n,qdd)
其效果如下图:
往后会对关节空间轨迹规划 j t r a j ( ) 函数 jtraj()函数 jtraj()函数 和 笛卡尔空间轨迹规划 c t r a j ( ) 函数 ctraj()函数 ctraj()函数 进行单独篇章的撰写和探讨。
至此,运动学的前期准备已经完毕,下面进行机器人动力学 拉格朗日方程的推导。
使用robot.dyn()函数查看建立的机器人的动力学参数
代码如下:
% 查看robot机器人所有的连杆的动力学参数
robot.dyn;
% 查看robot机器人第n根连杆的动力学参数
robot.dyn(n);
% 对Single_Robot进行动力学参数的设置
本篇对机器人动力学进行一个概述。
之前谈到的运动学方程仅描述了机器人的运动过程,没有考虑到产生运动的力和扭矩,而动力学方程能描述力和运动之间的关系,因此我们在此引入动力学的概念。
第一章是机器人动力学之推导拉格朗日方程的内容,本文详细介绍了如何理解拉格朗日方程以及如何进行推导,介绍了如何求出机构的动能及位能。
第二章是拉格朗日方程代码的实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。