终于结束了自己的毕设设计,这半年的时间一直在和刚体动力学仿真硬磕,关于这方面的网络资源不太多,因此在这里将自己不断摸索学到的方法做一个概括阐述,希望能够为同样饱受困扰的读者提供一些帮助。
文章目录
程序开源地址:刚体动力学仿真示例程序
〇、问题阐述
一般情况下,刚体系统具备这样形式的动力学方程:
D ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) = U D(q)\ddot{q}+C(q,\dot{q})\dot{q}+G(q)= U D(q)q¨+C(q,q˙)q˙+G(q)=U
其中, q q q 为系统广义坐标, D ( q ) D(q) D(q) 为惯性矩阵, C ( q , q ˙ ) C(q,\dot{q}) C(q,q˙) 为离心力及科里奥利力项, G ( q ) G(q) G(q) 为重力项, U U U 为广义力项。
为方便阐述,这里以 一阶旋转倒立摆 这一简单多刚体系统为研究对象,探讨该系统的动力学仿真问题。参考文献1,在不考虑系统摩擦等不确定因素干扰情况下,给出各项具体形式为:
D ( q ) = [ J 0 + m 1 ( L 0 2 + l 1 2 sin 2 θ 1 ) m 1 l 1 L 0 cos θ 1 m 1 l 1 L 0 cos θ 1 J 1 + m 1 l 1 2 ] C ( q , q ˙ ) = [ 1 2 m 1 l 1 2 sin ( 2 θ 1 ) θ ˙ 1 − m 1 l 1 L 0 sin θ 1 θ ˙ 1 + 1 2 m 1 l 1 2 sin ( 2 θ 1 ) θ ˙ 0 − 1 2 m 1 l 1 2 sin ( 2 θ 1 ) θ ˙ 0 0 ] G ( q ) = [ 0 − m 1 g l 1 sin θ 1 ] U ( q ) = [ τ 0 ] \begin{array}{l} D(q)=\left[\begin{array}{ccc} J_{0}+m_{1}\left(L_{0}^{2}+l_{1}^{2} \sin ^{2} \theta_{1}\right) & m_{1} l_{1} L_{0} \cos \theta_{1} \\ m_{1} l_{1} L_{0} \cos \theta_{1} & J_{1}+m_{1} l_{1}^{2} \end{array}\right] \\ C(q, \dot{q})=\left[\begin{array}{c} \frac{1}{2}m_1l_{1}^{2}\sin({2\theta_1})\dot{\theta}_{1} & -m_1l_1L_{0}\sin{\theta_{1}}\dot{\theta}_{1}+\frac{1}{2}m_1l_1^2\sin({2\theta_1})\dot{\theta}_{0} \\ -\frac{1}{2}m_1l_1^2\sin({2\theta_1})\dot{\theta}_{0} & 0 \end{array}\right] \\ G(q)=\left[\begin{array}{cc} 0 \\ -m_{1} g l_{1} \sin \theta_{1} \end{array}\right] \quad \quad U(q)=\left[\begin{array}{c} \tau \\ 0 \end{array}\right] \end{array} D(q)=[