通过仿真获得数据后,还需要通过MATLAB将数据绘制成图片插入论文中,本期代码详解将着重介绍路径跟踪控制绘图常用的函数。
以2020年9月28日和2020年10月12日的代码为例进行绘图,代码详见:
2020年9月28日代码: 白国星,公众号:Path Tracking Letters代码详解——MATLAB/Simulink实时性仿真
2020年10月12日代码 白国星,公众号:Path Tracking Letters代码详解——如何计算航向误差?
首先考虑到数据的重复利用问题,先介绍数据的保存与读取。
运行完Simulink仿真和误差计算程序后,Workspace空间会出现如图红色框中所示的数据。
全选这些数据,将其另存为matlab1.mat,即可在当前文件夹保存这些数据。
读取这些数据时,可以用函数:
load('matlab1.mat');
matlab1.mat即当前文件夹中的数据文件名称。
根据仿真中的定义,可知x0、y0为参考路径横、纵坐标,x1、y1为实际轨迹横、纵坐标,我们首先可以利用这些数据绘制轨迹图,代码如下:
plot(x0(1),y0(1),'ko');%绘制起点(也可选择实际轨迹的起点),k为黑色,o为圆圈
hold on;%保持命令,在同一个图上画多条曲线时需要置为on,默认为hold off
plot(x1(15507),y1(15507),'k*');%绘制终点,括号内的值需要与数组对应,k为黑色,*为*号
plot(x0,y0,'g');%绘制参考路径,g为绿色,默认实线
plot(x1,y1,'r-.');%绘制实际轨迹,r为红色,设为点划线
xlabel('\itX\rm/m');%x轴标签,\it为设置后续文字斜体,\rm为设置后续文字正体,坐标轴标签需要设置为两行时,可以写为xlabel({'\itX\rm/m','(a)'});其中(a)在第二行
ylabel('\itY\rm/m');%y轴标签
legend('\fontname{宋体}起点','\fontname{宋体}终点','\fontname{宋体}参考路径','\fontname{宋体}实际轨迹');%图例,宋体字在不是MATLAB默认字体,\fontname{宋体}为设置后续文字字体为宋体,如果后续文字还有英文,需要设置为Times New Roman时,则需要写为'\fontname{宋体}实际轨迹\fontname{Times New Roman}Real trajectory'
axis([-10 150 -10 110]);%坐标轴范围
box off;%删除图片上除坐标轴外的黑框,国内很多EI期刊要求出图时删掉黑框
绘制结果为:
此外还可绘制横向误、航向误差和计算时间图:
figure(2)
plot(ll,e,'r');
xlabel('\fontname{宋体}里程\fontname{Times New Roman}/m');
ylabel('\fontname{宋体}位移误差\fontname{Times New Roman}/m');
box off;
figure(3)
plot(ll,eh,'r');
xlabel('\fontname{宋体}里程\fontname{Times New Roman}/m');
ylabel('\fontname{宋体}航向误差\fontname{Times New Roman}/rad');
box off;
figure(4)
plot(t,'r');
xlabel('\fontname{宋体}仿真时间\fontname{Times New Roman}/s');
ylabel('\fontname{宋体}计算时间\fontname{Times New Roman}/s');
box off;
绘制结果为:
出现计算时间这种情况后,可以先运行:
xlabel('\fontname{宋体}仿真时间\fontname{Times New Roman}/s');
ylabel('\fontname{宋体}计算时间\fontname{Times New Roman}/s');
然后再重复运行:
plot(t,'r');
xlabel('\fontname{宋体}仿真时间\fontname{Times New Roman}/s');
ylabel('\fontname{宋体}计算时间\fontname{Times New Roman}/s');
box off;
另“时序图”字样可以运行如下代码去除:
title('');
源码
本文分享自 Path Tracking Letters 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!