前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab控制倒立摆小车并绘制二维动态效果图[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-09-23 19:28:52
7080
发布2022-09-23 19:28:52
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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.cn/171031.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档