本章目标
通过单摆了解非线性系统,了解相平面、稳定性、不动点等概念,中学时接触的单摆是将单摆在稳定点附近进行泰勒展开,而后简化成了一个线性系统,本章依靠非线性动力学的工具,解开非线性单摆的面纱
2.1 简介
单摆结构如下图所示:
可以得到该结构的拉格朗日方程**(由于结构简单,有牛顿法也可以)**为:
m
l
2
θ
¨
(
t
)
+
m
g
l
sin
θ
(
t
)
=
Q
m l^{2} \ddot{\theta}(t)+m g l \sin \theta(t)=Q
ml2θ¨(t)+mglsinθ(t)=Q
其中Q为:
Q
=
−
b
θ
˙
(
t
)
+
u
(
t
)
Q=-b \dot{\theta}(t)+u(t)
Q=−bθ˙(t)+u(t)
等号左边为机构的运动方程,右边为受力方程,u为关节处施加的外力矩,逆时针为正。
2.2非线性动力学
为了简化问题,假设输入力矩为一个常数,整理可得以下公式:
m
l
2
θ
¨
+
b
θ
˙
+
m
g
l
sin
θ
=
u
0
(1)
m l^{2} \ddot{\theta}+b \dot{\theta}+m g l \sin \theta=u_{0} \tag{1}
ml2θ¨+bθ˙+mglsinθ=u0(1)
1式是一个相对简单的非线性方程,如果可以通过理论求解,得到θ与时间t的关系,也就得到了单摆在不同时间的旋转角度,但是这样求解过于麻烦,而且存在大量的非线性方程没有解析解。此时只能利用非线性动力学的工具进行求解了。当然,非线性动力学的工具也有它的问题,它更能求解系统的长期表现,或者说稳态表现,对系统瞬态的姿态式无能为力的。
2.2.1过阻尼单摆
先从简单的开始,假设单摆运动的阻尼相当大(比如单摆在蜂蜜里摆),此时系统的惯性力可以忽略,因此可以将1式简化成:
m
l
2
θ
¨
+
b
θ
˙
≈
b
θ
˙
=
u
0
−
m
g
l
sin
θ
m l^{2} \ddot{\theta}+b \dot{\theta} \approx b \dot{\theta}=u_{0}-m g l \sin \theta
ml2θ¨+bθ˙≈bθ˙=u0−mglsinθ
暂时抛弃这个方程的单摆身份(把θ变成x),忽略θ的周期性,将方程改写为:
b
x
˙
=
u
0
−
m
g
l
sin
x
(2)
b \dot{x}=u_{0}-m g l \sin x\tag{2}
bx˙=u0−mglsinx(2)
此时可以画出x_dot和x之间的关系(u=0):
分析系统的不动点,可以看出,当x=0,2kΠ时,系统是稳定的,对应单摆的重物垂直在下,而x=kΠ(k是奇数)时,系统稍有扰动,系统就会离开这个点,回到旁边的稳定点,根据不动点的稳定性,可以将不动点分为以下几类:
- 李雅普诺夫稳定
- 吸引
- 渐近稳定
- 指数稳定
- 不稳定
一个点是吸引点未必是稳定点!李雅普诺夫稳定未必点最后会到达不动点,渐近稳定会到达,指数稳定是指以一个速度收敛到不动点。
最后需要注意,上图是u=0,即无外力情况下的相平面图,如果u不为0,则整个曲线会向上或向下偏移,最终可能会没有稳定点,这个现象叫做分岔,回归到单摆物理系统,即当扭矩过大时,系统永远不会停在一个位置。
2.2.2无阻尼零输入单摆
接下来考虑系统没有阻尼力(b=0),输入的力矩为0的情况。
此时系统为二阶系统,方程如下所示:
m
l
2
θ
¨
=
u
0
−
m
g
l
sin
θ
−
b
θ
˙
m l^{2} \ddot{\theta}=u_{0}-m g l \sin \theta-b \dot{\theta}
ml2θ¨=u0−mglsinθ−bθ˙
此时可以将系统是为两个一阶微分方程组,如下所示:
x
˙
1
=
x
2
x
˙
2
=
f
(
x
1
,
x
2
,
u
)
\begin{aligned} \dot{x}_{1} &=x_{2} \\ \dot{x}_{2} &=f\left(x_{1}, x_{2}, u\right) \end{aligned}
x˙1x˙2=x2=f(x1,x2,u)
式中,x1=θ,x2=θ_dot,此时可以画出两个变量的相平面,如下图所示(这里有个在线相平面绘制网站):
事实上,途中的闭合曲线就是单摆的能量曲线,因为在外力输入为0,阻尼为0,则系统的能量不变,画出图就是途中的曲线。
2.2.3无阻尼有输入单摆
系统是一个发散的系统,从能量的角度来看,系统一直在输入能量,就会摆动速度越来越快。
2.2.4 阻尼倒立摆
此时不太在意是否有输入,假设输入为0,得到相平面图如下所示:
如图是有了输入力矩的相平面曲线,影响主要是不动点的平移。
加上了阻尼,单摆系统就变成了渐近稳定,如果想知道是否是指数稳定,只需要在稳定点进行线性化看看斜率就知道了。
之前我们一直假设输入力是一个常数,显然控制系统的输入量不可能总是一个常数,如果我们打算控制单摆在竖直平衡,那么输入力要怎么给呢?
2.3 输入力矩受限的单摆
单摆很显然是一个全驱动系统,如果输入力矩没有限制的话,想要把质量块稳定在数值位置时十分简单的,只要输入力矩作用的效应与重力反向,在比重力大那么一点点,就全部解决了,但是如果力矩受限(欠驱动系统),没有办法完成这个效果,又要怎么控制呢?
2.3.1改变能量
单摆的能量如下所示:
E
=
1
2
m
l
2
θ
˙
2
−
m
g
l
cos
θ
E=\frac{1}{2} m l^{2} \dot{\theta}^{2}-m g l \cos \theta
E=21ml2θ˙2−mglcosθ
为了了解怎么改变能量,我们求解单摆的功率为:
E
˙
=
m
l
2
θ
˙
θ
¨
+
θ
˙
m
g
l
sin
θ
=
θ
˙
[
u
−
m
g
l
sin
θ
]
+
θ
˙
m
g
l
sin
θ
=
u
θ
˙
\begin{aligned} \dot{E} &=m l^{2} \dot{\theta} \ddot{\theta}+\dot{\theta} m g l \sin \theta \\ &=\dot{\theta}[u-m g l \sin \theta]+\dot{\theta} m g l \sin \theta \\ &=u \dot{\theta} \end{aligned}
E˙=ml2θ˙θ¨+θ˙mglsinθ=θ˙[u−mglsinθ]+θ˙mglsinθ=uθ˙
简单来说,给系统增加的能量就是输入力矩u与速度的乘积。同时为了将单摆摆到最上边,我们有一个需求能量为:
E
d
=
m
g
l
E^{d}=m g l
Ed=mgl
则能量的差为:
E
~
=
E
−
E
d
E
~
˙
=
E
˙
=
u
θ
˙
\tilde{E}=E-E^{d}\\ \dot{\tilde{E}}=\dot{E}=u \dot{\theta}
E~=E−EdE~˙=E˙=uθ˙
那么,如果将输入信号u取值为:
u
=
−
k
θ
˙
E
~
,
k
>
0
u=-k \dot{\theta} \tilde{E}, \quad k>0
u=−kθ˙E~,k>0
通过调节k使得u满足最大扭矩要求,并带入到上式,可以得到能量差的倒数和能量之间的关系,即为:
E
~
˙
=
−
k
θ
˙
2
E
~
\dot{\tilde{E}}=-k \dot{\theta}^{2} \tilde{E}
E~˙=−kθ˙2E~
此时,能量差的稳定点为0,完成了对单摆的能量控制。
但此时也会有另一个问题,能量达到了指定的要求,但是系统并不会稳定在竖直位置,这也解释了上边的问题,竖直点是一个吸引点(任何位置的点都会被吸引到这个点),但是不稳定(在这个点只要一点点干扰,平衡就破坏了),因此如果真的想让单摆停留在竖直点,我们还需要别的工具,这个我们下回分解。
事实上,这种控制方法是一种非常棒的方法,不仅仅因为它足够简单,计算负担小,还因为算法的鲁棒性非常好。分析如下,这个算法只做了一件事,即调整系统的能量差,写出能量差的实际公式为:
E
~
=
1
2
m
l
2
θ
˙
2
−
m
g
l
(
1
+
cos
θ
)
\tilde{E}=\frac{1}{2} m l^{2} \dot{\theta}^{2}-m g l(1+\cos \theta)
E~=21ml2θ˙2−mgl(1+cosθ)
而唯一的要求是令能量差为0,此时发现系统的质量被消除了,即如果系统质量不太确定,这个算法也能很好的完成任务。
而如果系统是有阻力的,我们也能很轻松的把阻力补偿掉,此时输入力矩表达式如下:
u
=
−
k
θ
˙
E
~
+
b
θ
˙
u=-k \dot{\theta} \tilde{E}+b \dot{\theta}
u=−kθ˙E~+bθ˙
同样的,由于当能量差为0时,阻尼力并没有被包含进去,所以如果我们为阻尼率b估计有误差也问题不大。
参考文献
@ b o o k u n d e r a c t u a t e d , t i t l e = " U n d e r a c t u a t e d R o b o t i c s " , s u b t i t l e = " A l g o r i t h m s f o r W a l k i n g , R u n n i n g , S w i m m i n g , F l y i n g , a n d M a n i p u l a t i o n " , h o w p u b l i s h e d = " C o u r s e N o t e s f o r M I T 6.832 " , a u t h o r = " T e d r a k e , R u s s " , y e a r = 2022 , u r l = " h t t p : / / u n d e r a c t u a t e d . m i t . e d u " , @book{underactuated, title = "Underactuated Robotics", subtitle = "Algorithms for Walking, Running, Swimming, Flying, and Manipulation", howpublished = "Course Notes for MIT 6.832", author = "Tedrake, Russ", year = 2022, url = "http://underactuated.mit.edu", } @bookunderactuated,title="UnderactuatedRobotics",subtitle="AlgorithmsforWalking,Running,Swimming,Flying,andManipulation",howpublished="CourseNotesforMIT6.832",author="Tedrake,Russ",year=2022,url="http://underactuated.mit.edu",