系列博客
【控制实践——二轮平衡车】【一】运动分析及动力学建模
【控制实践——二轮平衡车】【二】实物设计和开源结构&代码
【控制实践——二轮平衡车】【三】基于PID的直立控制
【控制实践——二轮平衡车】【四】基于ADRC算法的直立控制
【控制实践——二轮平衡车】【五】转动运动模型及控制方法
前言
之前本科期间也做过二轮平衡车(后简称平衡车
)的实践,但当时是抄了别人的开源代码来实现的,用的是最常见的
P
I
D
PID
PID控制器,参数调试也是玄学调参法,一天一套参数。对于平衡车的理解处于一个非常肤浅的状态(实现出来只能说明具有一定复制粘贴的实践能力而已
),更没有系统地对平衡车的运动过程进行详细分析,更别说是控制器相关的设计(博主不是自动化专业的
)。
因此!
出于对过去马虎瞒混的弥补,以及对于每年依然有很多的新人会入门平衡车类型的控制实践项目, 想好好地系统地不应付地做一个平衡车控制实践的系列,包括理论、仿真、造实物的调试,会以一个低门槛的,尽可能通俗易懂的形式呈现。
有疑问或发现错误的地方,欢迎提出!
平衡车的物理结构
平衡车的物理模型可以简化为质量杆部分和轮子部分,质量杆和轮子的连接可以简化为理想轴承连接的方式。轮子支撑着质量杆,质量杆受到轮子的力并且可以绕着轮子中心转动,
理想轴承连接等于:1.忽略二者之间的转动摩擦 2.二者刚性连接
。
忽略地面对轮子的阻力
这是一个重要的理想简化前提,与后面的受力分析有关,如果以不同的方式来简化模型会有不同的结果
平衡车的受力分析
平衡车有两个主要部分,轮子和质量杆,因此我们定义以下的一些物理量:
m
p
\boldsymbol{m_{p}}
mp:质量杆的质量,
p
\boldsymbol{p}
p是杆英文
p
o
l
e
\boldsymbol{pole}
pole的首字母;
m
w
\boldsymbol{m_{w}}
mw:轮子的质量,
w
\boldsymbol{w}
w是杆英文
w
h
e
e
l
\boldsymbol{wheel}
wheel的首字母;
l
\boldsymbol{l}
l:轮子质心到质量杆质心的距离;
α
\boldsymbol{\alpha}
α:质量杆质心绕轮子转动的角度,以逆时针为正;
ω
\boldsymbol{\omega}
ω:质量杆质心绕轮子转动的角速度,以逆时针为正;
x
p
\boldsymbol{x_{p}}
xp:质量杆质心的
X
\boldsymbol{X}
X轴位移量,以向右为正;
x
w
\boldsymbol{x_{w}}
xw:轮子质心的
X
\boldsymbol{X}
X轴位移量,以向右为正;
y
p
\boldsymbol{y_{p}}
yp:质量杆质心的
Y
\boldsymbol{Y}
Y轴位移量,以向上为正;
F
N
\boldsymbol{F_{N}}
FN:轮子对质量杆竖直向上的支持力;
F
N
′
\boldsymbol{F_{N}'}
FN′:质量杆对轮子竖直向下的反作用力;
F
T
\boldsymbol{F_{T}}
FT:轮子对质量杆产生的水平方向的力;
F
T
′
\boldsymbol{F_{T}'}
FT′:质量杆对轮子产生的水平方向的反作用力;
轮子
对于轮子而言,它受到的力如下:
其中,
N
\boldsymbol{N}
N是地面对轮子的支持力。
质量杆
对于质量杆而言,它受到的力如下:
可以得到,
F
N
′
=
−
F
N
\boldsymbol{F_{N}'}=\boldsymbol{-F_{N}}
FN′=−FN
F
T
′
=
−
F
T
(1)
\boldsymbol{F_{T}'}=\boldsymbol{-F_{T}} \ \tag{1}
FT′=−FT (1)
思考时间:为什么轮子对于质量杆的力要分开成XY轴的力,以及二者的合力是否始终沿着质量杆和轮子的轴线?
- 第一个问题是因为后续进行运动分析的时候,就是基于 X Y XY XY轴分解进行的,将作用力分解方便后续的分析。
- 第二个问题,二者的合理不始终沿着质量杆和轮子的轴线。这就好比以轮子质心为原点建立一个相对坐标系。而轮子又是会运动的,因此对质量杆的力就包括了切向力和法向力。二者的合力就不一定在轴线上。
这里涉及到一些惯性力的相关知识。有兴趣的话后期出一篇博客来补充。
平衡车的动力学方程
对于平衡车的轮子部分来说,他的运动范围只有 X \boldsymbol{X} X轴;对于质量杆质心,他的运动范围则有 X Y \boldsymbol{XY} XY两个轴。
轮子的动力学方程
m w x ⋅ ⋅ w = F T ′ (2) \boldsymbol{m_{w}}\boldsymbol{\overset{\cdot \cdot}x_{w}}=\boldsymbol{F_{T}'}\ \tag{2} mwx⋅⋅w=FT′ (2)
质量杆的动力学方程
-
X
\boldsymbol{X}
X轴方向
由于质量杆是固连在轮子上的,其位移既受到轮子位移 x w \boldsymbol{x_{w}} xw的影响,也受到 α \boldsymbol{\alpha} α,满足以下关系:
x p = x w − l ⋅ s i n α \boldsymbol{x_{p}} = \boldsymbol{x_{w}}-\boldsymbol{l}\cdot \boldsymbol{sin\alpha} xp=xw−l⋅sinα
这里的负号是因为角度的方向判定决定的,翻上去看看定义。
因此其运动方程为
m p x ⋅ ⋅ p = F T ⇒ m p ( x w − l ⋅ s i n α ) ′ ′ = F T ⇒ m p x ⋅ ⋅ w − m p l ( α ⋅ c o s α ) ′ = F T ⇒ m p x ⋅ ⋅ w − m p l ( α ⋅ ⋅ c o s α − α ⋅ 2 s i n α ) = F T ⇒ m p x ⋅ ⋅ w − m p l α ⋅ ⋅ c o s α + m p l α ⋅ 2 s i n α = F T (3) \boldsymbol{m_{p}}\boldsymbol{\overset{\cdot \cdot}x_{p}}=\boldsymbol{F_{T}}\\ \Rightarrow \boldsymbol{m_{p}} ( \boldsymbol{x_{w}}-\boldsymbol{l}\cdot \boldsymbol{sin\alpha})''=\boldsymbol{F_{T}}\\ \Rightarrow\boldsymbol{m_{p}} \boldsymbol{\overset{\cdot \cdot}x_{w}}-\boldsymbol{m_{p}l}(\boldsymbol{\overset{\cdot }\alpha cos \alpha})'=\boldsymbol{F_{T}}\\ \Rightarrow\boldsymbol{m_{p}} \boldsymbol{\overset{\cdot \cdot}x_{w}}-\boldsymbol{m_{p}l}(\boldsymbol{\overset{\cdot \cdot}\alpha cos \alpha}-\boldsymbol{\overset{\cdot }\alpha^{2}sin\alpha} )=\boldsymbol{F_{T}}\\ \Rightarrow \boldsymbol{m_{p}} \boldsymbol{\overset{\cdot \cdot}x_{w}}-\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot \cdot}\alpha cos \alpha}+\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot }\alpha^{2}sin\alpha} =\boldsymbol{F_{T}}\ \tag{3} mpx⋅⋅p=FT⇒mp(xw−l⋅sinα)′′=FT⇒mpx⋅⋅w−mpl(α⋅cosα)′=FT⇒mpx⋅⋅w−mpl(α⋅⋅cosα−α⋅2sinα)=FT⇒mpx⋅⋅w−mplα⋅⋅cosα+mplα⋅2sinα=FT (3) -
Y
\boldsymbol{Y}
Y轴方向
质量杆的 Y \boldsymbol{Y} Y轴位移就与轮子无关了,满足以下关系
y p = l ⋅ c o s α \boldsymbol{y_{p}} =\boldsymbol{l}\cdot \boldsymbol{cos\alpha} yp=l⋅cosα
则动力学方程为
m p y ⋅ ⋅ p = F N − m p g → m p y ⋅ ⋅ p = F N − m p g → m p l ( − α ⋅ ⋅ s i n α − α ⋅ 2 c o s α ) = F N − m p g → m p g − m p l α ⋅ ⋅ s i n α − m p l α ⋅ 2 c o s α = F N (4) \boldsymbol{m_{p}}\boldsymbol{\overset{\cdot \cdot}y_{p}}=\boldsymbol{F_{N}}-\boldsymbol{m_{p}g}\\ \rightarrow \boldsymbol{m_{p}}\boldsymbol{\overset{\cdot \cdot}y_{p}}=\boldsymbol{F_{N}}-\boldsymbol{m_{p}g}\\ \rightarrow \boldsymbol{m_{p}l}(-\boldsymbol{\overset{\cdot \cdot}\alpha sin\alpha}-\boldsymbol{\overset{\cdot }\alpha^{2}cos\alpha} )=\boldsymbol{F_{N}}-\boldsymbol{m_{p}g}\\ \rightarrow \boldsymbol{m_{p}g}-\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot \cdot}\alpha sin\alpha}-\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot }\alpha^{2}cos\alpha} =\boldsymbol{F_{N}}\ \tag{4} mpy⋅⋅p=FN−mpg→mpy⋅⋅p=FN−mpg→mpl(−α⋅⋅sinα−α⋅2cosα)=FN−mpg→mpg−mplα⋅⋅sinα−mplα⋅2cosα=FN (4)
平衡车整体位移运动过程
联立上述中公式
1
,
2
,
3
\boldsymbol{1,2,3}
1,2,3,可以得到
m
p
x
⋅
⋅
w
−
m
p
l
α
⋅
⋅
c
o
s
α
+
m
p
l
α
⋅
2
s
i
n
α
=
−
m
w
x
⋅
⋅
w
\boldsymbol{m_{p}} \boldsymbol{\overset{\cdot \cdot}x_{w}}-\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot \cdot}\alpha cos \alpha}+\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot }\alpha^{2}sin\alpha} =-\boldsymbol{m_{w}}\boldsymbol{\overset{\cdot \cdot}x_{w}}
mpx⋅⋅w−mplα⋅⋅cosα+mplα⋅2sinα=−mwx⋅⋅w
整理后得到
(
m
p
+
m
w
)
x
⋅
⋅
w
=
m
p
l
α
⋅
⋅
c
o
s
α
−
m
p
l
α
⋅
2
s
i
n
α
(5)
\boldsymbol{(m_{p}+m_{w})} \boldsymbol{\overset{\cdot \cdot}x_{w}}=\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot \cdot}\alpha cos \alpha}-\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot }\alpha^{2}sin\alpha}\ \tag{5}
(mp+mw)x⋅⋅w=mplα⋅⋅cosα−mplα⋅2sinα (5)
平衡车整体转动运动过程
- 在进行转动描述时,要引入的是相对坐标系和绝对坐标系的概念。以轮子中心为原点,竖直向上为 Y Y Y轴正方向,水平向右为 X X X轴正方向,建立平衡车的相对坐标系。绝对坐标系则是以地球平面建立。
- 在相对坐标系中,质量杆的质心点只围绕轮子中心做转动运动;而在绝对坐标系中,质量杆的质心则是随着轮子的位移做转动和平动的复合运动。通常在描述质量杆质心转动时,是基于相对坐标系进行的,但相对坐标系并非与绝对坐标系相对静止,所以在相对坐标系中描述转动运动时,需要引入惯性力来补充。
其中
F i n e r t i a = m p x ⋅ ⋅ w \boldsymbol{F_{inertia}} =\boldsymbol{m_{p} \overset{\cdot \cdot}x_{w}} Finertia=mpx⋅⋅w
满足以下关系
J α ⋅ ⋅ = m p g l s i n α + F i n e r t i a l c o s α → J α ⋅ ⋅ = m p g l s i n α + m p x ⋅ ⋅ w l c o s α (6) \boldsymbol{J \overset{\cdot\cdot}{\alpha}} = \boldsymbol{m_{p}gl sin\alpha}+\boldsymbol{F_{inertia}lcos\alpha}\\ \rightarrow \boldsymbol{J \overset{\cdot\cdot}{\alpha}} = \boldsymbol{m_{p}gl sin\alpha}+\boldsymbol{m_{p} \overset{\cdot \cdot}x_{w}lcos\alpha} \tag{6} Jα⋅⋅=mpglsinα+Finertialcosα→Jα⋅⋅=mpglsinα+mpx⋅⋅wlcosα(6)
其中, J \boldsymbol{J} J是质量杆绕轮子中心转动的转动惯量。
平衡车运动模型
根据我们的理想简化模型,最终我们得到了两个公式
(
m
p
+
m
w
)
x
⋅
⋅
w
=
m
p
l
α
⋅
⋅
c
o
s
α
−
m
p
l
α
⋅
2
s
i
n
α
(7)
\boldsymbol{(m_{p}+m_{w})} \boldsymbol{\overset{\cdot \cdot}x_{w}}=\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot \cdot}\alpha cos \alpha}-\boldsymbol{m_{p}l}\boldsymbol{\overset{\cdot }\alpha^{2}sin\alpha}\ \tag{7}
(mp+mw)x⋅⋅w=mplα⋅⋅cosα−mplα⋅2sinα (7)
J
α
⋅
⋅
=
m
p
g
l
s
i
n
α
+
m
p
x
⋅
⋅
w
l
c
o
s
α
(8)
\boldsymbol{J \overset{\cdot\cdot}{\alpha}} = \boldsymbol{m_{p}gl sin\alpha}+\boldsymbol{m_{p} \overset{\cdot \cdot}x_{w}lcos\alpha} \tag{8}
Jα⋅⋅=mpglsinα+mpx⋅⋅wlcosα(8)
对于这两个公式而言,是基于不同坐标系下分析得到的。
- 公式(7)描述了
惯性系
下(以地面为参考系),不同的初始角度 α 0 \boldsymbol{\alpha_{0}} α0, α ˙ 0 \boldsymbol{\dot{\alpha}_{0}} α˙0会如何使轮子运动 x ¨ w \boldsymbol{\ddot{x}_{w}} x¨w - 公式(8)描述了
非惯性系
下(以轮子中心为坐标原点,竖直向上为 Y Y Y轴,水平向右为 X X X轴),轮子的运动 x ¨ w \boldsymbol{\ddot{x}_{w}} x¨w以及重力的作用 m p g l s i n α \boldsymbol{m_{p}gl sin\alpha} mpglsinα如何影响角度变化(即平衡车的转动)。
可以看出,在不考虑阻力和无外力作用(轮子不会主动运动)的情况下,角度的运动 α ˙ \boldsymbol{\dot{\alpha}} α˙, α ¨ \boldsymbol{\ddot{\alpha}} α¨(转动运动)会带动轮子的运动 x ¨ w \boldsymbol{\ddot{x}_{w}} x¨w,而轮子的运动 x ¨ w \boldsymbol{\ddot{x}_{w}} x¨w进而会重新影响角度的运动 α ¨ \boldsymbol{\ddot{\alpha}} α¨(转动运动),形成正反馈的循环,使平衡车加速倒下。
将公式(7)和公式(8)合并后整理得到:
(
J
−
m
p
2
l
2
c
o
s
2
α
m
p
+
m
w
)
α
⋅
⋅
=
m
p
g
l
s
i
n
α
−
m
p
2
l
2
s
i
n
α
c
o
s
α
m
p
+
m
w
α
⋅
2
(9)
\boldsymbol{(J-\frac{m_{p}^{2}l^{2}cos^{2}\alpha}{m_{p}+m_{w}}) \overset{\cdot\cdot}{\alpha}} =\ \boldsymbol{m_{p}gl sin\alpha}-\ \boldsymbol{\frac{m_{p}^{2}l^{2}sin\alpha cos\alpha}{m_{p}+m_{w}} \overset{\cdot}\alpha^{2}} \tag{9}
(J−mp+mwmp2l2cos2α)α⋅⋅= mpglsinα− mp+mwmp2l2sinαcosαα⋅2(9)
平衡车运动仿真
对平衡车系统进行运动仿真,仿真参数如下:
m
p
=
0.4
k
g
\boldsymbol{m_{p}}=0.4kg
mp=0.4kg
m
w
=
0.1
k
g
\boldsymbol{m_{w}}=0.1kg
mw=0.1kg
l
=
0.12
m
\boldsymbol{l}=0.12m
l=0.12m
J
=
m
p
l
2
k
g
⋅
m
2
\boldsymbol{J}=m_{p}l^{2}kg\cdot m^{2}
J=mpl2kg⋅m2
g
=
9.8
m
2
/
s
\boldsymbol{g}=9.8m^{2}/s
g=9.8m2/s
初始状态分别为:
α
0
=
10
°
\boldsymbol{\alpha_{0}} = 10°
α0=10°
α
⋅
0
=
0
°
/
s
\boldsymbol{\overset{\cdot}\alpha_{0}} = 0°/s
α⋅0=0°/s
通过调节不同的系统初始状态
α
0
,
α
⋅
0
\boldsymbol{\alpha_{0}},\boldsymbol{\overset{\cdot}\alpha_{0}}
α0,α⋅0观察平衡车系统的运动状态。
clear all;
mp = 0.4;
mw = 0.1;
%质量
l = 0.12;
%长度
g = 9.8;
%重力加速度
J = mp*l*l;
%转动惯量
a0 = 10 / 180 * pi;
da0 = 0 / 180 * pi;
x0 = 0;
dx0 = 0;
%初始状态
T = 0.01;
%仿真周期
n = 1000;
%仿真步数
a = zeros(n,1);
da = zeros(n,1);
dda = zeros(n,1);
x = zeros(n,1);
dx = zeros(n,1);
time = zeros(n,1);
coef = zeros(n,1);
a(1) = a0;
da(1) = da0;
k = 0;
for i = 1:1:n-1
coef(i) = (J - (mp*mp * l*l * cos(a(i))*cos(a(i))) / (mp+mw) );
dda(i+1) = (mp*g*l*sin(a(i)) - ((mp*mp * l*l *sin(a(i))*cos(a(i)))/(mp+mw)) * da(i)*da(i)) / coef(i);
%角加速度
da(i+1) = da(i) + dda(i)*T;
%角速度
a(i+1) = a(i) + da(i)*T;
time(i+1) = i * T;
if a(i+1) >= pi / 2
k = i;
break
end
end
figure(1);
plot(time(1:k),a(1:k)/pi*180,'r');
legend('a');
xlabel('time/s');
ylabel('°/s')
- 实验结果
可以看出,平衡车在无阻力和外力作用下,将会倒的越来越快,符合公式里正反馈的特性。