前后轮转向的单车模型的MATLAB代码(介绍待完善)

公式推导
前后轮转向的单车模型的MATLAB代码

clc
clear
close all
state = struct;
state.x = 0;
state.y = 0;
state.psi = 0;
h = animatedline('Marker','o');
axis equal
addpoints(h,state.x,state.y)

while 1
    state = Veh_Model1(state,1,30,0);
    addpoints(h,state.x,state.y)
    pause(0.1)
end

function state = Veh_Model1(state,v,delta_f,delta_r)
%VEH_MODEL 以质心为轴,前后轮同时转向模型
%   state:车量坐标状态[x,y,psi]
%   delta_f:前轮转向角
%   delta_r:后轮转向角
lf = 1;lr = 1;
dt = 0.05;
delta_f = deg2rad(delta_f); delta_r = deg2rad(delta_r); 

beta = atan((lr*tan(delta_f)+lf*tan(delta_r))/(lr+lf));
state.x = state.x + v*cos(state.psi+beta)*dt;
state.y = state.y + v*sin(state.psi+beta)*dt;
state.psi = state.psi+v*cos(beta)*(tan(delta_f)-tan(delta_r))/(lr+lf)*dt;

end
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 IDM(Intelligent Driver Model)模型和它的扩展版本,跟驰模型(Follower Stopper Model),同时考虑交通流的单车MATLAB代码: ```matlab % IDM参数 v0 = 30; % 自由流速度 T = 1.5; % 安全时间头车车距 a = 0.3; % 最大加速度 b = 2; % 舒适减速度 delta = 4; % 惯性时间常数 s0 = 2; % 最小距离 % Follower Stopper Model参数 sStar = 5; % 希望车距 hStar = 1; % 希望头车速度 % 初始化车辆 N = 30; % 车辆数目 x = zeros(N,1); % 位置 v = zeros(N,1); % 速度 a1 = zeros(N,1); % 加速度 s = zeros(N,1); % 车距 s(1) = 100; % 初始车距 % 模拟时间 Tsim = 100; % 总仿真时间 dt = 0.1; % 时间步长 t = 0:dt:Tsim; % 循环仿真 for i=2:length(t) % 计算车距 for j=1:N-1 s(j) = x(j+1) - x(j) - s0; end s(N) = 1000; % 最后一辆车不考虑跟驰 % IDM模型 for j=1:N-1 deltaV = v(j) - v(j+1); sStar = s0 + T*v(j) + v(j)*deltaV/(2*sqrt(a*b)); a1(j) = a*(1 - (v(j)/v0)^4 - (sStar/s(j))^2); end a1(N) = 0; % 最后一辆车不考虑跟驰 % Follower Stopper模型 for j=1:N-1 h = v(j) - v(j+1) + (sStar - s(j))/hStar; if h > 0 a1(j) = -b*(1 - (v(j)/v0)^4 - (sStar/s(j))^2 - (h/hStar)^2); end end % 更新位置和速度 for j=1:N v(j) = v(j) + a1(j)*dt; v(j) = max(0,v(j)); % 速度不能为负 x(j) = x(j) + v(j)*dt; end % 绘图 plot(x,zeros(N,1),'o','MarkerSize',10); xlim([-100,1100]); ylim([-1,1]); drawnow; end ``` 这个代码模拟了30辆车在单车道上的跟驰行为,其中第一辆车的初始位置为0,速度为v0,后续车辆的初始位置为前一辆车的初始位置+100,速度为0。车辆的加速度由IDM和Follower Stopper Model共同决定,绘图时每辆车用一个圆圈表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值