资讯动态

基于Simulink的双摆运动系统建模与仿真:模型构建、MATLAB调用及运动轨迹展示(Mat...

发布时间:2026/8/3 21:12:59 来源:尧图企业网站定制
基于simulink的双摆运动系统建模与仿真.使用simulink建立一个双摆的运动模型然后通过matlab调用该模型并显示运动效果和运动轨迹。 使用版本matlab2022a打开Simulink新建空白模型先别急着拉模块——双摆这玩意儿动力学方程写起来能要人命。咱先把问题简化假设两个摆杆质量均匀关节无摩擦直接上牛顿力学推导具体方程网上能搜到这里直接给结论。模型核心是四个微分方程对应两个摆杆的角度和角速度。从Library Browser拖出四个Integrator模块分别代表θ₁、ω₁、θ₂、ω₂。这时候别傻乎乎手动连线直接上Function模块暴力破解动力学方程。双击Function模块输入function [dtheta1, domega1, dtheta2, domega2] double_pendulum(theta1, omega1, theta2, omega2) m1 1; m2 1; L1 1; L2 1; g 9.8; % 魔鬼就在分母里 denominator (m1 m2)*L1 - m2*L1*cos(theta1 - theta2)^2; dtheta1 omega1; domega1 (m2*L2*omega2^2*sin(theta1 - theta2)... - (m1 m2)*g*sin(theta1))... / (L1*denominator); dtheta2 omega2; domega2 ((m1 m2)*(L1*omega1^2*sin(theta1 - theta2)... - g*sin(theta2))... m2*L2*omega2^2*sin(theta1 - theta2)*cos(theta1 - theta2))... / (L2*denominator); end这坨代码看着头疼其实就四个微分方程在互相伤害。注意分母里那个cos平方项仿真发散多半是它归零导致的——后面调参时给初始角度别设太大。基于simulink的双摆运动系统建模与仿真.使用simulink建立一个双摆的运动模型然后通过matlab调用该模型并显示运动效果和运动轨迹。 使用版本matlab2022a接上Scope模块看波形前建议先插个XY Graph模块。设置两个摆杆末端坐标x1 L1*sin(theta1); y1 -L1*cos(theta1); x2 x1 L2*sin(theta2); y2 y1 - L2*cos(theta2);这时候点运行大概率会报错——别慌把求解器换成ode45最大步长改到0.01。初始角度设个温和值比如θ₁π/3θ₂π/4速度都设零。跑起来看到波形开始鬼畜把最大步长再砍半试试。模型存为double_pendulum.slx切到MATLAB命令行simOut sim(double_pendulum, StopTime, 10); x2 simOut.logsout.getElement(x2).Values.Data; y2 simOut.logsout.getElement(y2).Values.Data; % 画个骚气的轨迹动画 figure; hold on; plot(x2, y2, Color, [0.5 0.5 0.5 0.3]); h plot(nan, nan, ro-); axis equal; for k 1:10:length(x2) set(h, XData, [0, x1(k), x2(k)], YData, [0, y1(k), y2(k)]); drawnow pause(0.01); end跑完这段能看到摆锤划出的混沌轨迹——像不像量子物理学家喝醉后的涂鸦试着把m2调成3公斤轨迹立马变得像被猫挠过的毛线团。这种非线性系统对初始条件敏感得要命把θ₁初始值从π/3改成π/30.001运行十秒后轨迹完全亲妈不认。遇到仿真卡住别急着砸键盘检查下有没有出现除以零的情况。实在不行在分母里加个eps保命denominator (m1 m2)*L1 - m2*L1*cos(theta1 - theta2)^2 eps;最后留个坑把下方摆杆换成弹簧连接Simulink模型会复杂到让你想转行卖煎饼——不过那又是另一个故事了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价