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控制倒立摆小车并绘制二维动态效果图相关推荐

  1. matlab常见用法汇总,包括绘制二维、三维曲线、圆、读取、保存图片/数据、数值精度、绘制圆、绘制角度等

    文章目录 写在前面 一 绘制二维曲线 二 绘制三维曲线 plot3. 三 绘制三维离散点 scatter3() 四 保存图片到本地 五 数值精度 六 字符串拼接 七 将数据保存到txt 八 matla ...

  2. MATLAB plot函数绘制二维曲线

    1.plot函数的基本调用 在MATLAB中,在直角坐标系下绘制二维曲线一般使用plot函数. 基本调用格式: plot(x,y) x,y是长度一致的向量,例如: >> x=0:pi/10 ...

  3. MATLAB强化学习实战(七) 在Simulink中训练DDPG控制倒立摆系统

    在Simulink中训练DDPG控制倒立摆系统 倒立摆的Simscape模型 创建环境接口 创建DDPG智能体 训练智能体 DDPG智能体仿真 此示例显示了如何训练深度确定性策略梯度(DDPG)智能体 ...

  4. 倒立摆系统matlab程序,用Matlab完成倒立摆系统的分析与综合.docx

    用Matlab完成倒立摆系统的分析与综合 现代控制理论用Matlab完成倒立摆系统的分析与综合 2013/5/23 星期四学号:3201100418杨 博用Matlab完成倒立摆系统的分析与综合一.实 ...

  5. 基于matlab的倒立摆设计,基于matlab的倒立摆设计.doc

    基于matlab的倒立摆设计.doc 摘要IAbstract.II第一章绪论11.1倒立摆的研究背景.11.2国内外现状.21.3应解决的问题和技术要求.21.4工作内容.3第二章MATLAB仿真软件 ...

  6. 【深度强化学习】神经网络、爬山法优化控制倒立摆问题实战(附源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ 直接优化策略 直接优化策略强化学习算法中,根据采用的是确定性策略还是随机性策略,又分为确定性策略搜索和随机性策略搜索两类.随机性策略搜索算法有策略梯度法和 ...

  7. matlab绘制二维曲线图

    matlab绘制二维曲线图 今天,我们来讲一个用matlab绘制二维曲线图 下面直接上代码,会对代码一些部分进行一些讲解 %% 定义函数 x = 0:0.01:2*pi; y1 = sin(x); y ...

  8. 利用matlab绘制二维均匀流线和向量场

    利用matlab绘制二维均匀流线和向量场(向量场彩色箭头,颜色随变量变化) 0前言 1 均匀流线的绘制 2 绘制彩色的短线图 3 绘制彩色的均匀流线 4 运动的彩色箭头流线图 0前言 之前一篇文章ma ...

  9. matlab模糊控制 论文,基于matlab的倒立摆模糊控制毕业论文报告.doc

    基于matlab的倒立摆模糊控制毕业论文报告 (此文档为word格式,下载后您可任意编辑修改!) 智能控制理论及应用 课程设计报告 题 目: 基于matlab的倒立摆模糊控制 院 系: 西北民族大学电 ...

最新文章

  1. 反向词典_根据描述查找词语
  2. 计算机视觉常用数据集总结:包括MS COCO、ImageNet、VOC、人脸识别、行人检测等...
  3. CIO客观评价SAP和用友的差异
  4. MyBatis之PageHelper分页操作
  5. linux通过c语言编程访问远程mysql
  6. 前端框架这么火,还有必要学好原生 JavaScript 吗?
  7. linux RAC 安装失败完全卸载
  8. RAID 磁盘阵列详解,RAID分类及优缺点
  9. blender python编程入门
  10. 如何理解模块、组件和对象
  11. linux exchange 账号,使用Linux客户端Thunderbird连接Exchange Server
  12. oracle日期函数,转换函数
  13. 域名过期 脚本_域名宝已过期! …还是垃圾?
  14. python分析红楼梦中人物形象_《红楼梦》三大人物形象分析
  15. YTU-2324-约瑟夫环
  16. 开发必装最实用工具软件与网站
  17. NOIP复习篇———动态规划
  18. 【原创】给CSDN博客加上腾讯微博
  19. 【JPCS出版】2022年第三届控制理论与应用国际会议(ICoCTA 2022)
  20. ADSL 错误代码大全

热门文章

  1. 教程 | 零基础学画禅绕画——陨落的花朵
  2. pca算法python实现_PCA算法——Python实现
  3. Linux下查看网关地址和DNS地址
  4. 23.5.16总结(学习通项目)
  5. [论文笔记] 大型车牌检测数据集CRPD 阅读笔记
  6. sublime3 javascript代码自动提示插件及安装
  7. day03、图表辅助元素的定制
  8. 【软件工程B】2021-2022(2)作业【一】
  9. 2022年博客之星排行榜 日榜 2023-01-01 博客之星总榜
  10. 湖南卫视邮件服务器解决方案