matlab控制倒立摆小车并绘制二维动态效果图[通俗易懂]

matlab控制倒立摆小车并绘制二维动态效果图[通俗易懂]clc;closeall;clearA=[0100;00-1.1760;0001;0018.2930];%设置倒立摆小车控制系统参数B=[0;1;0;-1.667];C=[1000;0010];G=[42.851.04;471.8322.39;0.9443.15;19.17464.64];K=[-9.1841-10.7148-63.8735-15.4258];sim(‘CAR.mdl’);%运行倒立摆小车控制系…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

clc;close all;clear
A = [0 1 0 0;0 0 -1.176 0;0 0 0 1;0 0 18.293 0];%设置倒立摆小车控制系统参数
B = [0; 1 ;0;-1.667];
C =[1 0 0 0;0 0 1 0];
G = [42.85 1.04;471.83 22.39;0.94 43.15;19.17 464.64];
K = [-9.1841 -10.7148 -63.8735 -15.4258];
sim(‘CAR.mdl’);      %运行倒立摆小车控制系统simulink模型’CAR.mdl’

H_CAR = 0.4;         %小车车体高度,单位:m
H_WHEEL = 0.08;      %小车轮子直径,单位:m
L = 1.2;             %倒立摆杆长度,单位:m
N = length(yout.signals.values);%仿真得到的采样数据点个数
LINEWIDTH = 6.0;     %画倒立摆杆的线粗
CARWIDTH = 3.0;      %画车体的线粗
ARROWWIDTH = 2.5;    %画车体行车方向箭头的线粗
%% 
for i=1:N        %FOR循环画出倒立摆小车控制过程的动画   

    y_line = y+L*sin(theta);
    z_line = L*cos(theta)+H_CAR;

%   plot([(y-0.3),(y-0.3),(y+0.3),(y+0.3),(y-0.3)],[H_WHEEL,H_CAR,H_CAR,H_WHEEL,H_WHEEL],’b’,’LineWidth’,CARWIDTH);%画车体
    plot([(y+0.04),(y+0.3),(y+0.3),(y-0.3),(y-0.3),(y-0.04)],[H_CAR,H_CAR,H_WHEEL,H_WHEEL,H_CAR,H_CAR],’b’,’LineWidth’,CARWIDTH);%画车体
    hold on
    plot([y,y],[H_CAR,H_CAR+L+0.2],’–k’,’LineWidth’,0.5);%画垂直虚线
    hold on
    
    %画车体中间的半圆
    r = 0.04; 
    hseta = 0:0.001:pi; 
    yh = y+r*cos(hseta); 
    zh = H_CAR+r*sin(hseta); 
    plot(yh,zh,’b’,’LineWidth’,CARWIDTH); 
    hold on;
    
    %画两个车轮
    yl_circle = y-0.2;
    yr_circle = y+0.2;
    z_circle = H_WHEEL/2;
    r = H_WHEEL/2;
    seta = 0:0.001:2*pi; 
    yyl = yl_circle+r*cos(seta); 
    yyr = yr_circle+r*cos(seta); 
    zz = z_circle+r*sin(seta); 
    plot(yyl,zz,yyr,zz,’b’,’LineWidth’,CARWIDTH); 
    hold on;
    
    plot([y,y_line],[H_CAR,z_line],’r’,’LineWidth’,LINEWIDTH);%画单摆杆
    hold on
    alpha=0:pi/20:2*pi;    %角度[0,2*pi] 
    R=0.05;                   %半径 
    x1=y_line+R*cos(alpha); 
    y1=z_line+R*sin(alpha); 
    plot(x1,y1,’-‘) 
    hold on
    fill(x1,y1,’r’);         %用红色填充
    %plot([y_line],[z_line],’r’,’LineWidth’,LINEWIDTH);%画单摆杆
    hold on
    if i>1 && i<N   %画出表示行车方向的箭头
        if yout.signals.values(i,1) > yout.signals.values(i-1,1)
          plot([(y-0.08),(y+0.08)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2],’m’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y+0.08),(y+0.08)-0.05*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2+0.05*sin(pi/6)],’m’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y+0.08),(y+0.08)-0.05*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2-0.05*sin(pi/6)],’m’,’LineWidth’,ARROWWIDTH);%画
          hold on 
        elseif yout.signals.values(i,1) < yout.signals.values(i-1,1)
          plot([(y-0.08),(y+0.08)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2],’m’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y-0.08),(y-0.08)+0.05*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2+0.05*sin(pi/6)],’m’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y-0.08),(y-0.08)+0.05*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2-0.05*sin(pi/6)],’m’,’LineWidth’,ARROWWIDTH);%画
          hold on   
        end
    end
    plot([(y-1.65),(y+1.65)],[0,0],’b’,’LineWidth’,6)
    hold on   
    plot([(y-1.75),(y-1.65)],[0.1,0],’b’,’LineWidth’,6)
    hold on
    plot([(y+1.75),(y+1.65)],[0.1,0],’b’,’LineWidth’,6)
    hold on   
    plot([(y-1.75),(y-0.3)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2],’g’,’LineWidth’,14)
    hold on
    plot([(y+1.75),(y+0.3)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2],’g’,’LineWidth’,14)
    hold on
    
    if i>1 && i<N   %画出表示行车方向的箭头
        if yout.signals.values(i,1) > yout.signals.values(i-1,1)
            
          plot([(y+1),(y+1.1)-0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2+0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y+1),(y+1.1)-0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2-0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on 

          plot([(y-1.1),(y-1)-0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2+0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y-1.1),(y-1)-0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2-0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on   
          
        elseif yout.signals.values(i,1) < yout.signals.values(i-1,1)
            
          plot([(y+1),(y+1.1)+0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2+0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y+1),(y+1.1)+0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2-0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on   
          
          plot([(y-1),(y-1)+0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2+0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on 
          plot([(y-1),(y-1)+0.2*cos(pi/6)],[(H_CAR+H_WHEEL)/2,(H_CAR+H_WHEEL)/2-0.2*sin(pi/6)],’g’,’LineWidth’,ARROWWIDTH);%画
          hold on   
        end
    end
    
    
    xlabel(‘y(t) / m’), ylabel(‘z(t) / m’),title(‘倒立摆小车二维动态效果图’);
    % ylim([0 2])
    axis equal;  %保持坐标比例协调
    pause(0.5);
   

end
 

matlab控制倒立摆小车并绘制二维动态效果图[通俗易懂]

 matlab控制倒立摆小车并绘制二维动态效果图[通俗易懂]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171031.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用bat命令得到文件名列表「建议收藏」

    使用bat命令得到文件名列表「建议收藏」一个文件夹下面有多个excle文件,快速得到文件名列表步骤如下:step1:在文件夹目录下新建一个txt类型的文件step2:在txt文件中写入如下代码,并保存。DIR*.*/B>LIST.TXTstep3:将txt文件改成.bat后缀,双击运行即可得到list.txt。

    2025年12月3日
    4
  • GridView编辑删除操作

    GridView编辑删除操作

    2021年12月15日
    38
  • POSTMAN自动生成接口文档_swagger自动生成接口文档

    POSTMAN自动生成接口文档_swagger自动生成接口文档介绍drf-spectacular是为DjangoRESTFramework生成合理灵活的OpenAPI3.0模式。它可以自动帮我们提取接口中的信息,从而形成接口文档,而且内容十分详细,再也不

    2022年7月29日
    16
  • md文件编辑_第三方编辑器

    md文件编辑_第三方编辑器学长让我写博客学习c语言,写了几篇,但是总觉得文章界面不好看,然后找到一些资料,那就开始新的界面吧!开始你的MD编辑器吧!!(妈的编辑器)复制,直接应用>块引用@[TOC]#二.使用步骤##1.引入库##2.读入数据点一下蓝色的字,到相应的文章段<fontcolor=red>关注</font>这是设置字体颜色,和范围,“`cimportnumpyasnpimportp…

    2022年9月23日
    5
  • 字符串常量池详解「建议收藏」

    字符串常量池详解「建议收藏」字符串常量池详解文章所涉及的资料来自互联网整理和个人总结,仅作为个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!概述在JVM中,为了减少字符串对象的重复创建,维护了一块特殊的内存空间,这块内存空间就被称为字符串常量池。在JDK1.6及之前,字符串常量池存放在方法区中。到JDK1.7之后,就从方法区中移除了,而存放在堆中。一下是《深入理解虚Java虚拟机》第二版原文:对于HotSpot虚拟机,根据官方发布的路线图信息,现在也有放弃永久代并逐步改为采用NativeMemory来实

    2022年7月28日
    6
  • futureTask使用[通俗易懂]

    futureTask使用[通俗易懂]List<FutureTask>taskList=newArrayList<>();if(leaderList!=null&&!leaderList.isEmpty()){leaderList.forEach(userId->{…

    2022年6月15日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号