1 前言和资料
本文是 Ros2 实时编程实践系列第四章,我们将对一级倒立摆: Ros2 实时编程实践第一章 – 倒立摆引入与 ros2 pendulum 仿真 进行数学原理分析,为自己实现倒立摆样例做理论准备。本文将用到牛顿力学定律和微积分知识,初看起来,会显得比较高深,但如果读者随着文章一起动手推导,相信大家都能理解。
本文参考资料如下:
(1)wiki Inverted_pendulum
(2)Inverted-Pendulum-Control-Theory-and-Dynamics/
(3)一阶倒立摆的PID控制和LQR控制
(4)倒立摆模型分析
(5)线性系统大作业——1.一阶倒立摆建模与控制系统设计
(6)由拉普拉斯变换到传递函数 (本文用不到拉普拉斯变换和传递函数,但这个文章讲的很好,所以也列在了这里)
2 正文
(1)倒立摆示意图
M :小车质量(kg)
m :摆杆质量(kg)
2 * L :摆杆长度(m)
I :摆杆转动惯量(kg * m ^ 2)
x:小车水平位移(m)
F:作用在小车水平方向上的力(N)
φ:摆杆转动角度(rad)
h:摆杆重心在垂直方向上的移动距离(m)
s:摆杆重心在水平方向上的移动距离(m)
针对 h 和 s ,有如下表达式成立:
h
=
L
∗
c
o
s
(
φ
)
s
=
x
+
L
∗
s
i
n
(
φ
)
h = L * cos(φ)\\ s = x + L * sin(φ)
h=L∗cos(φ)s=x+L∗sin(φ)
(2)对摆杆进行受力分析
P:小车转轴对摆杆垂直方向上的分力(N)
N:小车转轴对摆杆水平方向上的分力(N)
mg:摆杆重力
φ:摆杆转动角度(rad)
摆杆垂直方向和水平方向上的受力方程:
P
=
m
g
+
m
∗
h
¨
N
=
m
∗
s
¨
P = mg + m*\ddot{h}\\ N = m*\ddot{s}
P=mg+m∗h¨N=m∗s¨
摆杆转动方程:
I
∗
φ
¨
=
L
∗
(
P
∗
s
i
n
(
φ
)
−
N
∗
c
o
s
(
φ
)
)
I * \ddot{φ} = L * (P * sin(φ) - N * cos(φ))
I∗φ¨=L∗(P∗sin(φ)−N∗cos(φ))
(3)小车受力示意图
对小车进行水平方向上的受力分析(垂直方向没有意义)
M
∗
x
¨
=
F
−
N
M * \ddot{x} = F - N
M∗x¨=F−N
(4)推导 F(小车水平方向上的力) 与 φ(摆杆转动角度) 和 x( 小车水平位移)之间的关系:
特别提示:针对下面的表达式,其中 h,s,x,φ 都随时间 t 变化,因此他们都是时间 t 的函数。
h
=
L
∗
c
o
s
(
φ
)
s
=
x
+
L
∗
s
i
n
(
φ
)
h = L * cos(φ)\\ s = x + L * sin(φ)
h=L∗cos(φ)s=x+L∗sin(φ)
明确的写法如下。但是,为了推导简便,我们仍采用上面的写法。
h
(
t
)
=
L
∗
c
o
s
(
φ
(
t
)
)
s
(
t
)
=
x
(
t
)
+
L
∗
s
i
n
(
φ
(
t
)
)
h(t) = L * cos(φ(t))\\ s(t) = x(t) + L * sin(φ(t))
h(t)=L∗cos(φ(t))s(t)=x(t)+L∗sin(φ(t))
第一步,让 h 对时间求二阶导 ,根据微积分复合函数求导的链式法则和乘积函数求导的乘积法则,有如下结果:
h
=
L
∗
c
o
s
(
φ
)
h
˙
=
L
∗
(
−
s
i
n
(
φ
)
∗
φ
˙
)
h
¨
=
L
∗
(
−
c
o
s
(
φ
)
∗
φ
˙
2
−
s
i
n
(
φ
)
∗
φ
¨
)
=
−
L
∗
c
o
s
(
φ
)
∗
φ
˙
2
−
L
∗
s
i
n
(
φ
)
∗
φ
¨
h = L * cos(φ) \\ \dot{h} = L * (-sin(φ) * \dot{φ}) \\ \ddot{h} = L * (-cos(φ) * \dot{φ}^2 -sin(φ) * \ddot{φ}) = - L * cos(φ) * \dot{φ}^2 - L * sin(φ) * \ddot{φ}
h=L∗cos(φ)h˙=L∗(−sin(φ)∗φ˙)h¨=L∗(−cos(φ)∗φ˙2−sin(φ)∗φ¨)=−L∗cos(φ)∗φ˙2−L∗sin(φ)∗φ¨
第二步,让 s 对时间求二阶导,根据链式法则和乘积法则,有如下结果:
s
=
x
+
L
∗
s
i
n
(
φ
)
s
˙
=
x
˙
+
L
∗
c
o
s
(
φ
)
∗
φ
˙
s
¨
=
x
¨
+
L
∗
(
−
s
i
n
(
φ
)
∗
φ
˙
2
+
c
o
s
(
φ
)
∗
φ
¨
)
=
x
¨
−
L
∗
s
i
n
(
φ
)
∗
φ
˙
2
+
L
∗
c
o
s
(
φ
)
∗
φ
¨
)
s = x + L * sin(φ) \\ \dot{s} = \dot{x} + L * cos(φ) * \dot{φ} \\ \ddot{s} = \ddot{x} + L * (-sin(φ) * \dot{φ}^2 + cos(φ) * \ddot{φ}) = \ddot{x} - L * sin(φ) * \dot{φ}^2 + L * cos(φ) * \ddot{φ})
s=x+L∗sin(φ)s˙=x˙+L∗cos(φ)∗φ˙s¨=x¨+L∗(−sin(φ)∗φ˙2+cos(φ)∗φ¨)=x¨−L∗sin(φ)∗φ˙2+L∗cos(φ)∗φ¨)
第三步,将 h 和 s 的二阶导结果,带入到 P 和 N 的方程中:
P
=
m
g
+
m
∗
h
¨
=
m
g
−
m
L
c
o
s
(
φ
)
∗
φ
˙
2
−
m
L
s
i
n
(
φ
)
∗
φ
¨
N
=
m
∗
s
¨
=
m
∗
x
¨
−
m
L
∗
s
i
n
(
φ
)
∗
φ
˙
2
+
m
L
∗
c
o
s
(
φ
)
∗
φ
¨
P = mg + m*\ddot{h} = mg - mLcos(φ)*\dot{φ}^2 - mLsin(φ)*\ddot{φ}\\ N = m*\ddot{s} = m*\ddot{x} - mL * sin(φ) * \dot{φ}^2 + mL * cos(φ) * \ddot{φ}
P=mg+m∗h¨=mg−mLcos(φ)∗φ˙2−mLsin(φ)∗φ¨N=m∗s¨=m∗x¨−mL∗sin(φ)∗φ˙2+mL∗cos(φ)∗φ¨
第四步,将 P 和 N 的结果,带入摆杆的转动方程中:
I
∗
φ
¨
=
L
∗
(
P
∗
s
i
n
(
φ
)
−
N
∗
c
o
s
(
φ
)
)
=
L
∗
s
i
n
(
φ
)
∗
P
−
L
∗
c
o
s
(
φ
)
∗
N
=
L
∗
s
i
n
(
φ
)
∗
(
m
g
−
m
L
c
o
s
(
φ
)
∗
φ
˙
2
−
m
L
s
i
n
(
φ
)
∗
φ
¨
)
−
L
∗
c
o
s
(
φ
)
∗
(
m
∗
x
¨
−
m
L
∗
s
i
n
(
φ
)
∗
φ
˙
2
+
m
L
∗
c
o
s
(
φ
)
∗
φ
¨
)
=
m
g
∗
L
∗
s
i
n
(
φ
)
−
m
∗
L
2
∗
s
i
n
(
φ
)
∗
c
o
s
(
φ
)
∗
φ
˙
2
−
m
∗
L
2
∗
s
i
n
(
φ
)
2
∗
φ
¨
−
m
∗
L
∗
c
o
s
(
φ
)
∗
x
¨
+
m
∗
L
2
∗
s
i
n
(
φ
)
∗
c
o
s
(
φ
)
∗
φ
˙
2
−
m
∗
L
2
∗
c
o
s
(
φ
)
2
∗
φ
¨
=
m
g
∗
L
∗
s
i
n
(
φ
)
−
m
∗
L
2
∗
φ
¨
−
m
∗
L
∗
c
o
s
(
φ
)
∗
x
¨
I * \ddot{φ} = L * (P * sin(φ) - N * cos(φ)) \\ = L* sin(φ) * P - L * cos(φ) * N \\ = L* sin(φ) * (mg - mLcos(φ)*\dot{φ}^2 - mLsin(φ)*\ddot{φ}) \\ - L * cos(φ) * (m*\ddot{x} - mL * sin(φ) * \dot{φ}^2 + mL * cos(φ) * \ddot{φ}) \\ = mg*L*sin(φ) - m*L^2*sin(φ)*cos(φ)*\dot{φ}^2 - m*L^2*sin(φ)^2*\ddot{φ} \\- m*L*cos(φ)*\ddot{x} + m*L^2*sin(φ)*cos(φ)*\dot{φ}^2 - m*L^2*cos(φ)^2*\ddot{φ} \\= mg*L*sin(φ) - m*L^2*\ddot{φ} - m*L*cos(φ)*\ddot{x}
I∗φ¨=L∗(P∗sin(φ)−N∗cos(φ))=L∗sin(φ)∗P−L∗cos(φ)∗N=L∗sin(φ)∗(mg−mLcos(φ)∗φ˙2−mLsin(φ)∗φ¨)−L∗cos(φ)∗(m∗x¨−mL∗sin(φ)∗φ˙2+mL∗cos(φ)∗φ¨)=mg∗L∗sin(φ)−m∗L2∗sin(φ)∗cos(φ)∗φ˙2−m∗L2∗sin(φ)2∗φ¨−m∗L∗cos(φ)∗x¨+m∗L2∗sin(φ)∗cos(φ)∗φ˙2−m∗L2∗cos(φ)2∗φ¨=mg∗L∗sin(φ)−m∗L2∗φ¨−m∗L∗cos(φ)∗x¨
最后可得:
(
I
+
m
∗
L
2
)
∗
φ
¨
=
m
g
∗
L
∗
s
i
n
(
φ
)
−
m
∗
L
∗
c
o
s
(
φ
)
∗
x
¨
(I + m*L^2) * \ddot{φ} = mg*L*sin(φ) - m*L*cos(φ)*\ddot{x}
(I+m∗L2)∗φ¨=mg∗L∗sin(φ)−m∗L∗cos(φ)∗x¨
第五步,将 N 的结果,带入小车的水平受力方程中:
M
∗
x
¨
=
F
−
N
=
=
>
F
=
M
∗
x
¨
+
N
=
M
∗
x
¨
+
m
∗
x
¨
−
m
L
∗
s
i
n
(
φ
)
∗
φ
˙
2
+
m
L
∗
c
o
s
(
φ
)
∗
φ
¨
=
(
M
+
m
)
∗
x
¨
−
m
L
∗
s
i
n
(
φ
)
∗
φ
˙
2
+
m
L
∗
c
o
s
(
φ
)
∗
φ
¨
M * \ddot{x} = F - N \\ ==> \\ F = M * \ddot{x} + N \\ = M * \ddot{x} + m*\ddot{x} - mL * sin(φ) * \dot{φ}^2 + mL * cos(φ) * \ddot{φ} \\= (M+m)*\ddot{x} - mL * sin(φ) * \dot{φ}^2 + mL * cos(φ) * \ddot{φ}
M∗x¨=F−N==>F=M∗x¨+N=M∗x¨+m∗x¨−mL∗sin(φ)∗φ˙2+mL∗cos(φ)∗φ¨=(M+m)∗x¨−mL∗sin(φ)∗φ˙2+mL∗cos(φ)∗φ¨
第七步,当摆杆偏转比较小的时候,可利用如下近似简化方程
s
i
n
(
φ
)
=
φ
c
o
s
(
φ
)
=
1
φ
˙
=
0
sin(φ) = φ\\ cos(φ) = 1\\ \dot{φ} = 0
sin(φ)=φcos(φ)=1φ˙=0
最终可得:
(
I
+
m
∗
L
2
)
∗
φ
¨
=
m
g
∗
L
∗
φ
−
m
∗
L
∗
x
¨
F
=
(
M
+
m
)
∗
x
¨
+
m
L
∗
φ
¨
(I + m*L^2) * \ddot{φ} = mg*L*φ - m*L*\ddot{x} \\ F = (M+m)*\ddot{x} + mL * \ddot{φ}
(I+m∗L2)∗φ¨=mg∗L∗φ−m∗L∗x¨F=(M+m)∗x¨+mL∗φ¨
3 总结
数学表达式只看不动手是很难懂的。另外,PPT 画图很强大。写这篇博客,考研的记忆碎片不时闪现。算了,不说了。。