许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  2025中国大学生工创赛新能源车赛道matlab轨迹设计m文件参考

2025中国大学生工创赛新能源车赛道matlab轨迹设计m文件参考

阅读数 5
点赞 0
article_banner


拷贝到matlab的m文件运行

dc = 0.00005;  %定义右后轮(主动轮)滚动的节点间距(米),即积分步长5个丝

A = 0.160; %定义前轮轴与后动轮轴的距离(米)

ey = 0.050 ; %定义前轮与右后轮偏距(米)

ez = 0.130 ; %定义前轮与左后轮偏距(米)

%各段拐角曲线的节点数

N1 = round(1.9/dc);

N2 = round(0.55/dc);

N3 = round(1.6/dc);

N4 = round(1/dc);

N5 = round(0.6/dc);

N6 = round(0.5/dc);

N7 = round(1.5/dc);

N8 = round(0.5/dc);

N9 = round(0.5/dc);

N10 = round(0.5/dc);

N11 = round(0.5/dc);

N12 = round(0.5/dc);

N13 = round(1.1/dc);

N14 = round(0.5/dc);

N15 = round(1.5/dc);

N = N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12+N13+N14+N15;%总节点数N

%构造N1段的前轮拐角曲线余弦函数

a = -5.35/180*pi; %该段前轮拐角的起始角度,并把角度转换为弧度

b = (6/180*pi-a)/2;%该段前轮拐角的终止角度,并把角度转换为弧度

t = pi/(N1):pi/(N1):pi;

st1 = a -b*cos(t)+b;

%构造N2段的前轮拐角曲线余弦函数

c = (4.7/180*pi-st1(N1))/2;

t = pi/(N2):pi/(N2):pi;

st2 = a + 2*b -c*cos(t)+c;

%构造N3段的前轮拐角曲线余弦函数

d = (-2/180*pi-st2(N2-1))/2;

t = pi/(N3):pi/(N3):pi;

st3 = a + 2*b+2*c -d*cos(t)+d;

%构造N4段的前轮拐角曲线余弦函数

e = (-25/180*pi-st3(N3-1))/2;

t = pi/(N4):pi/(N4):pi;

st4 = a + 2*b+2*c+2*d-e*cos(t)+e;

%构造N5段的前轮拐角曲线余弦函数

f = (10/180*pi-st4(N4-1))/2;

t = pi/(N5):pi/(N5):pi;

st5 = a + 2*b+2*c+2*d+2*e-f*cos(t)+f;

%构造N6段的前轮拐角曲线余弦函数

g = (23/180*pi-st5(N5-1))/2;

t = pi/(N6):pi/(N6):pi;

st6 = a + 2*b+2*c+2*d+2*e+2*f-g*cos(t)+g;

%构造N7段的前轮拐角曲线余弦函数

h = (-2/180*pi-st6(N6-1))/2;

t = pi/(N7):pi/(N7):pi;

st7 = a + 2*b+2*c+2*d+2*e+2*f+2*g-h*cos(t)+h;

%构造N8段的前轮拐角曲线余弦函数

j = (-20/180*pi-st7(N7-1))/2;

t = pi/(N8):pi/(N8):pi;

st8 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h-j*cos(t)+j;

%构造N9段的前轮拐角曲线余弦函数

k = (20/180*pi-st8(N8-1))/2;

t = pi/(N9):pi/(N9):pi;

st9 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j-k*cos(t)+k;

%构造N10段的前轮拐角曲线余弦函数

m = (8/180*pi-st9(N9-1))/2;

t = pi/(N10):pi/(N10):pi;

st10 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j+2*k-m*cos(t)+m;

%构造N11段的前轮拐角曲线余弦函数

n = (0/180*pi-st10(N10-1))/2;

t = pi/(N11):pi/(N11):pi;

st11 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j+2*k+2*m-n*cos(t)+n;

%构造N12段的前轮拐角曲线余弦函数

q = (-9/180*pi-st11(N11-1))/2;

t = pi/(N12):pi/(N12):pi;

st12 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j+2*k+2*m+2*n-q*cos(t)+q;

%构造N13段的前轮拐角曲线余弦函数

r = (12/180*pi-st12(N12-1))/2;

t = pi/(N13):pi/(N13):pi;

st13 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j+2*k+2*m+2*n+2*q-r*cos(t)+r;

%构造N14段的前轮拐角曲线余弦函数

s = (2/180*pi-st13(N13-1))/2;

t = pi/(N14):pi/(N14):pi;

st14 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j+2*k+2*m+2*n+2*q+2*r-s*cos(t)+s;

%构造N15段的前轮拐角曲线余弦函数

u = (5/180*pi-st14(N14-1))/2;

t = pi/(N15):pi/(N15):pi;

st15 = a + 2*b+2*c+2*d+2*e+2*f+2*g+2*h+2*j+2*k+2*m+2*n+2*q+2*r+2*s-u*cos(t)+u;

%整合前轮拐角曲线

sita= [st1 st2 st3 st4 st5 st6 st7 st8 st9 st10 st11 st12 st13 st14 st15] ;

%画出前轮拐角曲线

qx = zeros(1,(N));

for i = 1:(N) %画出前轮转角曲线,定义横坐标qx

 qx(i) = i*dc;%计算横坐标qx

end

figure(1);

plot(qx,sita*180/pi);hold on;  

%先计算各轮子的前进步距

Ro = abs(A./tan(sita));%求后轮轴点o的拐弯半径Ro

p = -tan(sita)./A; %求后轮轴点o的曲率p,定义左拐曲率p为正,右拐p为负

Ry = Ro+ey.*p./abs(p); %求右后轮的拐弯半径Ry

ly = 2*Ry.*sin(dc./(2*Ry));      %下一步右后轮前进的步距

lo = ly./(1+p*ey);          %下一步o点经过的步距

lz = ly.*(1-p*ez)./(1+p*ey);     %下一步左后轮前进的步距

lq = lo./cos(sita);          %下一步前轮前进的步距

%计算小车轨迹,先计算各轮子的起点坐标

ox=5.888; %后轮轴点o起始出发点x坐标

oy=0.753;%后轮轴点o起始出发点y坐标

xz=zeros(1, N+1); yz=zeros(1,N+1); %定义左后轮各节点坐标,并清零

xz(1)=ox; yz(1)=oy-ez;       %左后轮起始出发点位置

xy=zeros(1, N+1); yy=zeros(1,N+1); %定义右后轮各节点坐标,并清零

xy(1)=ox; yy(1)=oy+ey;       %右后轮起始出发点位置

xq=zeros(1,N+1); yq=zeros(1,N+1);  %定义前轮各节点坐标,并清零

xq(1)=ox-A; yq(1)=oy;        %前轮起始出发点位置

dip = zeros(1,(N)+1);     %定义后轮轴点o圆心角,即车身倾角各节点坐标

dip(1) =0;          %车身倾角起始为0,即小车沿X轴方向水平放置

%积分计算三个车轮各自的前进坐标

for i =1:(N)

   dip(i+1) = dip(i) + lo(i)*p(i);

   xz(i+1) = xz(i) - lz(i)*cos(dip(i+1));

   yz(i+1) = yz(i) - lz(i)*sin(dip(i+1));

   xy(i+1) = xy(i) - ly(i)*cos(dip(i+1));

   yy(i+1) = yy(i) - ly(i)*sin(dip(i+1));

   xq(i+1) = xq(i) - lq(i)*cos(dip(i+1)-sita(i));

   yq(i+1) = yq(i) - lq(i)*sin(dip(i+1)-sita(i));

end

figure(2);

plot(xq,yq);axis equal;hold on;  %画出前轮轨迹

plot(xz,yz);axis equal;hold on;  %画出左后轮轨迹

plot(xy,yy);axis equal;hold on;  %画出右后轮轨迹

% 画出竞赛场地

rectangle('Position',[0,0,6,6]),axis equal % 画出地图的长宽6米·6米

rectangle('Position',[5.573,0.698,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%瑞金 5588 713 <初赛>

rectangle('Position',[4.448,0.360,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%突破第三道封锁线 4463 375 <初赛>

rectangle('Position',[2.910,0.810,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%血战湘江 2925 825 <初赛>

rectangle('Position',[2.348,1.185,0.030,0.030],'Curvature',[1,1],'EdgeColor','g'),axis equal%强渡乌江 2363 1200

rectangle('Position',[2.160,1.485,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%占领遵义 2175 1500 <初赛>

rectangle('Position',[1.785,2.010,0.030,0.030],'Curvature',[1,1],'EdgeColor','g'),axis equal%四渡赤水 1800 2025

rectangle('Position',[0.560,0.773,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%巧渡金沙江 375 788 <初赛>

rectangle('Position',[0.435,2.198,0.030,0.030],'Curvature',[1,1],'EdgeColor','g'),axis equal%强渡大渡河 450 2213

rectangle('Position',[0.585,2.545,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%飞夺泸定桥 600 2550 <初赛>

rectangle('Position',[0.360,2.723,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%爬雪山 375 2738 <初赛>

rectangle('Position',[0.510,3.210,0.030,0.030],'Curvature',[1,1],'EdgeColor','g'),axis equal%懋功会师 525 3225

rectangle('Position',[0.885,3.923,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%过草地 900 3938 <初赛>

rectangle('Position',[1.260,4.485,0.030,0.030],'Curvature',[1,1],'EdgeColor','g'),axis equal%激战腊子口 1275 4500

rectangle('Position',[1.710,5.235,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%会宁大会师 1725 5250 <初赛>

rectangle('Position',[2.798,5.610,0.030,0.030],'Curvature',[1,1],'EdgeColor','g'),axis equal%吴起镇会议 2813 5625

rectangle('Position',[3.173,5.610,0.030,0.030],'Curvature',[1,1],'EdgeColor','r'),axis equal%延安 3188 5625 <初赛>

hold on;

L1 = 0.033;   %前轮到凸轮左沿距离(米)

L0 = 0.003;   %凸轮厚度(米)

L2 = L1 - L0;  %前轮到凸轮右沿距离(米)

R0 = 0.065;   %凸轮基圆半径(米)

da = 0.005;   %摇杆直径(米)

%计算理论凸轮升程

s = zeros(1,N); %凸轮升程计算值  

for i = 1 : N

 if p(i)<=0 %右转

    s(i) = L2.*tan(sita(i)); %凸轮升程外凸,为正值      

 else    %左转

    s(i) = L1.*tan(sita(i)); %凸轮升程内凹,为负值  

  end    

end

S = R0 + s; %凸轮推程

matlab轨迹设计

%凸轮转角

alpha = zeros(1,N);

for i = 1 : N

  alpha(i) = 2*pi*i/N;

end

% 绘制理论凸轮

figure(3);

polar(alpha,S);hold on  %用极坐标绘制理论凸轮

[x,y]=pol2cart(alpha,S); %把极坐标的理论凸轮点转为笛卡尔坐标点

 

% 计算实际凸轮

tN=200;               %从包络椭圆上取200个点

ra=da/2;              %计算摇杆半径

tx=zeros(length(alpha),tN);ty=tx;  %清零包络椭圆上取点的坐标

for i=1:length(alpha)

  zhoua=ra/cos(sita(i));      %求包络椭圆上最长轴

  talpha=alpha(i)-pi/2:-pi/tN:alpha(i)-1.5*pi+pi/tN;%在包络椭圆的一半上取点的半径长的倾角

  trho=sqrt(zhoua^2*cos(talpha).^2+ra^2*sin(talpha).^2);%求包络椭圆上取点的半径长

  tx(i,:)=x(i)+trho.*cos(talpha);%包络椭圆上取点的横坐标

  ty(i,:)=y(i)+trho.*sin(talpha);%包络椭圆上取点的纵坐标

end

newN=3600; %重新设置包络后凸轮得节点个数,即每等分0.1度

newalpha=-pi:2*pi/newN:pi-2*pi/newN;

[st,sr]=cart2pol(tx,ty); % 把笛卡尔坐标点转为极坐点

st=st+pi;

nstulun=ones(1,newN);

dtulun=2*pi/newN;%重新设置包络后凸轮每等分0.1度

for i=1:length(alpha)

  for j=1:tN

    temp=mod(round(st(i,j)/dtulun),newN)+1;%把原本凸轮的节点数N降低到3600

    if sr(i,j)<nstulun(1,temp) %取包络线上最近的点

      nstulun(1,temp)=sr(i,j);

    end

  end

end

% 绘制实际凸轮

polar(newalpha,nstulun)

[sjx,sjy]=pol2cart(newalpha,nstulun);% 把极坐标实际凸轮点转为笛卡尔坐标点

% 输出实际凸轮轨迹坐标点的文件

fid=fopen('cz2025.txt','w');

for i=1:newN

  fprintf(fid,'%g %g 0\n',sjx(i)*1000,sjy(i)*1000);

end

fclose(fid);

Lu = dc*N    %驱动轮走的路程(米)

i = 27.5;    %设置传动比设置

rhl = Lu/(i*2*pi)%计算右轮(驱动轮)的半径


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空