单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

这篇具有很好参考价值的文章主要介绍了单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

建模

牛顿法

有空再写

拉格朗日方程法

首先我们先确定广义坐标,并同时计算出来摆杆的转动惯量

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

接着列拉格朗日方程

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

计算动能(转动动能)

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

 计算势能(取铰链处为零势能高度):

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

 计算L

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

计算拉格朗日方程中的中间量 

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

 将上述的中间量带入拉格朗日方程,得到动力学模型:

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

变换一下形式:

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

 当角度较小时

我们可以假设角度比较小,因为控制一般都是在平衡点附近。

这时,单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)然后得出下面的状态空间方程。单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

当角度较大时

经常情况下角度没有那么小,这个时候我们就不能假设单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法),所以就得到非线性的控制系统。

所以这个时候我们这样操作,将这个二阶微分方程转化成一阶微分方程组,这样就可以用matlab的ode45微分方程求解器求取数值解,求得的数值解即为系统状态 y。然后得到系统状态之后,控制器基于当前状态计算输入,再施加给执行器进行控制。

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

 matlab仿真

 我们先把微分方程求解器做出来:

直接把g=9.8,l=1和u=0带入式子;

[t,y] = ode45(@odeBai,[0 10],[1;0]);
plot(t,y(:,1),'-o',t,y(:,2),'-o');

function dy = odeBai(t,y)
    dy = zeros(2,1);
    dy(1) = y(2);
    dy(2) = -3 * 9.8 / ( 2 * 1 )*sin(y(1))+0;
end

从图片也可能看出规律:

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

这下,我们就求出来了位置(角度)时间曲线和速度(角速度)时间曲线。

然后,我们做一个控制器,把输入加上去。

控制器代码:

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

总程序代码:

clear all;
clc;

[t,y] = ode45(@odeBai,[0 10],[1;0]);
plot(t,y(:,1),'-o',t,y(:,2),'-o');

function dy = odeBai(t,y)
    dy = zeros(2,1);
    tau = PIDController(t,y);
    dy(1) = y(2);
    dy(2) = -3 * 9.8 / ( 2 * 1 )*sin(y(1)) + 3 * tau /(1*1*1);
end

function tau=PIDController(t,y)
% 目标状态
y1_desire = pi/4;
y2_desire = 0;
% 控制增益
Kp = 1000;
Kd = 500;
% 控制力矩
tau = Kp*(y1_desire-y(1))+Kd*(y2_desire-y(2));
end 

仿真图像如下:可以弹道蓝线逐渐逼近pi/4即45度的位置,而橙线从较大的值趋于0,即速度最终为0. 

单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)

代码:

clear all;
clc;

global m l g
m = 1;
l = 1;
g = 9.8;

[t,y] = ode45(@odeBai,[0 10],[-1;0]);
figure(1);
plot(t,y(:,1),'-o',t,y(:,2),'-o');

figure(2);
x0=0;
y0=0;

v = VideoWriter('Pen.avi');
open(v);

for k=1:200:size(t)
    x1=l*cos(y(k,1));
    y1=l*sin(y(k,1));
    
    link1_x=[0,x1];
    link1_y=[0,y1];
    line(link1_x,link1_y,'linewidth',2,'color','b')
    axis equal
    axis([-1.55 1.55 -1.55 0.55])
    
    grid on;
    hold on;
    plot(x0,y0,'o','linewidth',2,'color','r');

    frame = getframe(gcf);
    writeVideo(v,frame);
    clf;
end
close(v);

function dy = odeBai(t,y)
    dy = zeros(2,1);
    tau = PIDController(t,y);
    dy(1) = y(2);
    dy(2) = -3 * 9.8 / ( 2 * 1 )*sin(y(1)) + 3 * tau /(1*1*1);
end

function tau=PIDController(t,y)
% 目标状态
y1_desire = -pi/4;
y2_desire = 0;
% 控制增益
Kp = 1000;
Kd = 500;
% 控制力矩
tau = Kp*(y1_desire-y(1))+Kd*(y2_desire-y(2));
end 

参考链接

1.matlab动力学建模与simscape验证(代码) - 哔哩哔哩文章来源地址https://www.toymoban.com/news/detail-400241.html

到了这里,关于单摆的动力学建模以及matlab仿真(牛顿法和拉格朗日方程法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 铰接式车辆的横向动力学仿真提供车辆模型研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥   🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 铰接

    2024年02月11日
    浏览(41)
  • (8.1)基于牛顿-欧拉公式的动力学方程

    目录 1、坐标系的建立: 2、为什么要递推: 3、前向递推与反向递推: 1、速度和加速度的前向递推: 1.1、旋转关节的速度传递:  1.2、平移关节的速度传递:  1.3、速度变换到质心: 1.4、加速度传递:  1.5、转化为递归形式:  2、力与力矩的方向递推: 4、总结: 连杆坐

    2024年02月03日
    浏览(43)
  • 基于Matlab的Robotics Toolbox工具箱的机器人仿真函数介绍(空间位姿表示与动力学)

    随着我们了解到机器人如何建立运动学模型和动力学模型之后,我们可以使用Matlab中的仿真工具箱内来对模型的准确性进行验证,并且可以通过内置的函数进行简单的轨迹规划和可视化观察,本节涉及到的工具箱是MATLAB自带的Robotics Toolbox工具箱。 平移与旋转函数: SE2(x,y,t

    2024年02月07日
    浏览(50)
  • 旋翼无人机建模动力学公式整理

    C_T为升力系数,C_M为扭力系数,w为螺旋桨的转速 如果是‘十’字型的飞机 x,y,z轴的力矩为: d是机体中心到每个螺旋桨的距离,b是一个系数; f=Ct*W^2,Ct——升力系数,W——螺旋桨的转速 惯量矩阵为: 四个电机产生的力f1,f2,f3,f4,如果我们假设z轴向上为正,可以得到:

    2024年04月29日
    浏览(58)
  • 【机械臂算法】机械臂动力学参数辨识仿真

    本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。 此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的

    2024年02月15日
    浏览(101)
  • 【机器人算法】机械臂动力学参数辨识仿真

    本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。 此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的

    2024年02月05日
    浏览(96)
  • 二维离散动力学系统的混沌研究【基于matlab的动力学模型学习笔记_9】

    摘 要: 混沌(Chaos)是指发生在确定系统中的貌似随机的不规则运动,本文将基于经典的二维系统,然后根据动力学方程研究其混沌产生过程以及相对应的MATLAB仿真,再讨论Lyapunov指数以及正平衡点。 上一篇中介绍了一维系统,这次我们将维数提升到二。 /*仅当作学习笔记,

    2024年02月05日
    浏览(59)
  • LabVIEW开发航天器动力学与控制仿真系统

    LabVIEW开发航天器动力学与控制仿真系统 计算机仿真是工程设计和验证的非常有用的工具。它节省了大量的时间、金钱和精力。航天器动力学与控制仿真系统由LabVIEW程序开发,它是模拟航天器等动态系统的有用工具。还可轻松与硬件连接并输出真实信号。 项目采用系统工程过

    2024年02月15日
    浏览(47)
  • 【工具篇】拉格朗日动力学建模及系统设置初值求变量

    机器人的动力学方程通常可以通过 牛顿-欧拉公式 或 拉格朗日动力学公式 得到。 关于机器人动力学是什么,可以参考Robitics公众号的这一系列文章干货 | 机械臂的动力学(二):拉格朗日法;或者在CSDN上找,资料很多,如机器人动力学——拉格朗日法 ——简单来说, 牛顿

    2024年02月07日
    浏览(41)
  • MATLAB - 四旋翼飞行器动力学方程

      本例演示了如何使用 Symbolic Math Toolbox™(符号数学工具箱)推导四旋翼飞行器的连续时间非线性模型。具体来说,本例讨论了 getQuadrotorDynamicsAndJacobian 脚本,该脚本可生成四旋翼状态函数及其雅各布函数。这些函数将在使用非线性模型预测控制(模型预测控制工具箱)控制

    2024年01月22日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包