前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码详解——Simulink中的运动学模型

代码详解——Simulink中的运动学模型

作者头像
路径跟踪快讯
发布2020-09-01 15:55:31
2.2K0
发布2020-09-01 15:55:31
举报

在先前的仿真代码中,一般采用以dsolve函数求解车辆运动学微分方程的方式作为被控的车辆模型,形如:

代码语言:javascript
复制
Xref=dsolve('Dx-v_actual*cos(z)=0','Dy-v_actual*sin(z)=0','Dz-v_actual*tan(deltaf_actual)/l=0','x(0)=X00(1)','y(0)=X00(2)','z(0)=X00(3)');
    t=T;
    %%更新车辆位置
    State_Initial(1,1)=eval(Xref.x);
    State_Initial(2,1)=eval(Xref.y);
    State_Initial(3,1)=eval(Xref.z);

但是由于dsolve函数的求解功能有限,当微分方程更加复杂时,可能无法获得数值解。

所以也有同行采用经欧拉法或四阶龙格库塔法离散化后的运动学、动力学模型作为被控的车辆模型进行仿真。不过上述离散方法均会降低模型精度,造成仿真结果失真。而且当采用动力学模型时,模型较为复杂,采用离散模型进行迭代需要很大的代码量,在编写程序时容易出现错误,影响工作效率。

通过Simulink建模可以避免上述问题。

通过Simulink建模有两种方式,一种是通过组合模块,下图所示即车辆运动学模型:

不过当模型更加复杂时,这种建模方法也不太适用。

另一种建模方式是采用MATLAB Function模块,如图所示:

fcn中的代码为:

代码语言:javascript
复制
function y = fcn(theta,vx,delta)
l=2.7;
dx=vx*cos(theta);
dy=vx*sin(theta);
dtheta=vx*tan(delta)/l;
u=[ dtheta;
    dx;
    dy;];
y=u;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Path Tracking Letters 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档