首页/文章/ 详情

基于MATLAB的轨道车辆轮轨接触位置求解程序

8月前浏览13617

1. 前言  

轨道车辆振动绝大部分来源于车轮与钢轨之间的碰撞,车轮与钢轨接触关系(轮轨关系)直接决定了车辆运行状态,这也是轨道车辆区别于其他机械装备的唯一一点。本文介绍使用左右轮轨等间距迭代法求轮轨接触位置。  

左右轮轨等间距迭代法假设轮对和钢轨均为刚体,轮轨接触几何关系可以考虑成平面和空间两种情况。如果假设轮轨接触几何关系只是轮对横移量的函数,则是平面问题。如果综合考虑轮对横移、摇头对轮轨接触几何关系的影响,则为空间问题。为了抛砖引玉,本文只介绍轮轨接触的平面问题。  

2. 原理简述  

左右轮轨等间距迭代法的基本思路是过轮对轴线做一铅垂面切割车轮,车轮外廓与切割面的交线称为车轮主轮廓线。作一垂直轨道中心线的平面切割钢轨,钢轨轮廓与切割面的交线为钢轨轮廓线。用实测或计算可以得到车轮和钢轨主轮廓线上各点的坐标值。分别过主轮廓线上各点可以确定四条样条函数来拟合左右车轮踏面和轨头的轮廓线。只要把代表轮轨外形的离散坐标点安排得足够密集,样条函数中所给出的边界条件就接近实际情况,由样条函数表示的轮轨外形就越精确。己知轮轨的拟合曲线后,就可以用样条插值来得到轮轨上任意点的坐标。  

当考虑到平面问题时,先人为把轮对向上平移足够距离保证轮轨不相互嵌入,把求解轮轨接触点问题转化为求轮轨之间垂向位移最小而且两者垂向位移相等的问题。如果找到了两点的位置,则轮对向下平移这个距离,轮轨就发生接触,所找到的两点就是左右轮轨的接触点。当轮对发生横移后,循环计算左右轮轨主轮廓线各坐标点的垂向距离,得到最小垂向距离。这一过程称为扫描过程。当左右轮轨最小垂向距离相等时,说明这几个点正好是轮轨的几何接触点。如果左右轮轨最小垂向距离不相等,则通过迭代轮对侧滚角,使得最终两边垂向距离相等,得到轮轨接触点位置,见图1所示。  

最小距离搜索示意图  

3. 程序解读  

(1)原始数据读入  

clc;
clear all;
load('初始数据.mat')
%%%% 为了保持命名规则一致 %%%%%
RRy=RRY;
RRz=RRZ;
%%%% 原始踏面外形 %%%%%
figure(1)
plot(WLy1,WLz1);holdon;plot(0,0,'o'),title('踏面数据')    %%%查看踏面外形,看看原点是否在滚动圆上。
%%%% 原始钢轨廓形 %%%%%%
figure(2)
subplot(1,2,1),plot(RLy,RLz);holdon,plot(-1435/2,0,'o'),title('原始左钢轨廓形')
subplot(1,2,2),plot(RRy,RRz);holdon,plot(1435/2,0,'o'),title('原始右钢轨廓形')  

运行后,得到图1-2(为了与程序中的figure编号一致,从图1开始编号)。

1 原始踏面外形  

2 原始左右钢轨廓形  

从图1中发现:原始踏面滚动圆在原点上(没有区分左右轮缘),且轮缘在上面(一般都是把轮缘放在下面)。从图2中发现:区分了左右钢轨,但是廓形的最高点并没有在原点上。  

基于以上问题,需要调整车轮、钢轨坐标,见步骤(2)  

(2) 调整车轮、钢轨原始坐标  

%%%% 根据原始踏面外形生成左、右轮踏面坐标,原点在轨道中间(需要根据原始踏面数据灵活处理) %%%
WRy=WLy1+(1353/2+70); %%% 右轮踏面y坐标,1353是轮对内侧距
WRz=-WLz1+10;  %%% 右轮踏面z坐标,乘以-1是为了让轮缘在下面(原始数据显示轮缘在上面);加上10,把车轮抬高10,画图方便一些
WLy=-WRy;    %%% 左轮踏面y坐标,与右轮关于原点对称
WLz=WRz;     %%% 左轮踏面z坐标  
figure(3)
subplot(1,2,1),plot(WLy,WLz),title('调整后左轮踏面');
subplot(1,2,2),plot(WRy,WRz),title('调整后右轮踏面');
%%%%% 原始钢轨先去除轨底坡,再把顶点放在原点上,然后施加轨底坡,最后按轨距来定坐标 %%%%%%
RLy_1=RLy*cos(1/40)-RLz*sin(1/40);  %%% 左侧钢轨去掉轨底坡(逆时针转)  
RLz_1=RLy*sin(1/40)+RLz*cos(1/40);
RRy_1=RRy*cos(-1/40)-RRz*sin(-1/40); %%% 右侧钢轨去掉轨底坡(顺时针转)  
RRz_1=RRy*sin(-1/40)+RRz*cos(-1/40);
[max_val_L,max_idx1]=max(RLz_1);   %%%最大值及其位置  
dyL=0-RLy_1(max_idx1);      %%% 把左侧钢轨轨顶放在原点上,需要移动的距离  
dzL=0-max_val_L;
[max_val_R,max_idx2]=max(RRz_1);  %%%最大值及其位置  
dyR=0-RRy_1(max_idx2);    %%% 把右侧钢轨轨顶放在原点上,需要移动的距离  
dzR=0-max_val_R;
RLy_2=RLy_1+dyL;    %%%把左钢轨轨顶放在原点后左钢轨坐标  
RLz_2=RLz_1+dzL;
RRy_2=RRy_1+dyR;    %%%把右钢轨轨顶放在原点后右钢轨坐标  
RRz_2=RRz_1+dzR;
RLy_3=RLy_2*cos(-1/40)-RLz_2*sin(-1/40);   %%% 左侧钢轨加上轨底坡(顺时针转)  
RLz_3=RLy_2*sin(-1/40)+RLz_2*cos(-1/40);
RRy_3=RRy_2*cos(1/40)-RRz_2*sin(1/40);     %%% 右侧钢轨加上轨底坡(逆时针转)  
RRz_3=RRy_2*sin(1/40)+RRz_2*cos(1/40);
RLy_measure=interp1(RLz_3(max_idx1:end),RLy_3(max_idx1:end),-16,'spline');%%% 左侧钢轨轨距测量点
dyLL=-1435/2-RLy_measure;   %%%    按照左侧钢轨轨距测量点来定位左侧钢轨坐标  
RLy_3=RLy_3+dyLL;
RRy_measure=interp1(RRz_3(max_idx2:end),RRy_3(max_idx2:end),-16,'spline');%%%右侧钢轨轨距测量点
dyRR=1435/2-RRy_measure; %%%按照右侧钢轨轨距测量点来定位右侧钢轨坐标  
RRy_3=RRy_3+dyRR;
figure(4)
subplot(1,2,1),plot(RLy_3,RLz_3);holdon,plot(-1435/2,-16,'o');title('调整后左钢轨廓形')
subplot(1,2,2),plot(RRy_3,RRz_3);holdon,plot(1435/2,-16,'o');title('调整后右钢轨廓形')
RLy=RLy_3; %%%%为了简洁,把符号换回来  
RLz=RLz_3;
RRy=RRy_3;
RRz=RRz_3;
%%%%%% 坐标转换后,画出左、右车轮与左、右钢轨的装配%%%%%%%%
figure(5)
subplot(1,2,1),plot(WLy,WLz),holdon,plot(RLy,RLz),title('左轮与左轨廓形')
subplot(1,2,2),plot(WRy,WRz),holdon,plot(RRy,RRz),title('右轮与右轨廓形')
运行程序后,结果见图3-5。  

3  调整后左右车轮踏面外形  

4  调整后左右钢轨廓形  

图5 车轮与钢轨的装配图  

(3) 插值得到钢轨离散坐标  

RLy_s=-789:0.01:-716.5;    %%%(根据轨顶宽度给定扫描范围)

RLz_s=interp1(RLy,RLz,RLy_s,'spline'); %%%(插值得到左钢轨离散坐标)

RRy_s=716.5:0.01:789;     %%%(根据轨顶宽度给定扫描范围)

RRz_s=interp1(RRy,RRz,RRy_s,'spline'); %%%(插值得到右钢轨离散坐标)  

(4) 不同轮对横动量下的接触(重点)  

pp=0;

for i=-15:0.5:15   %%%轮对横动量范围  

pp=pp+1;

WLy_yd=WLy+i;  %%% 横动之后左踏面横坐标  

RLy_s=-789:0.01:-716.5;  %%% 根据轨顶宽度给定扫描范围  

WLz_yd=interp1(WLy_yd,WLz,RLy_s,'spline'); %%% 根据轨顶宽度得到左车轮横动之后踏面坐标

[zLMin,idx]=min(WLz_yd-RLz_s);    %%% 找出左边轮轨之间最小值以及最小值所在位置

min_Ly=RLy_s(idx);  %%% 最小值所在位置的左侧钢轨y坐标  

min_WLz=WLz_yd(idx);  %%% 最小值所在位置的左侧车轮z坐标  

normcicle_Ly=-746.5+i;    %%% 左轮滚动圆的横坐标(-1353/2+70=-746.5  

normcicle_Lz=interp1(WLy_yd,WLz,normcicle_Ly,'spline');%%% 左轮滚动圆处的z坐标  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%

WRy_yd=WRy+i;  %%% 横动之后右踏面横坐标  

RRy_s=716.5:0.01:789; %%% 根据轨顶宽度给定扫描范围  

WRz_yd=interp1(WRy_yd,WRz,RRy_s,'spline');%%% 根据轨顶宽度得到右车轮横动之后踏面坐标

[zRMin,idx]=min(WRz_yd-RRz_s);    %%% 找出右边轮轨之间最小值以及最小值所在位置

min_Ry=RRy_s(idx); %%% 最小值所在位置的右侧钢轨y坐标  

min_WRz=WRz_yd(idx); %%% 最小值所在位置的右侧车轮z坐标  

normcicle_Ry=746.5+i;   %%% 右轮滚动圆的横坐标(1353/2+70=746.5  

normcicle_Rz=interp1(WRy_yd,WRz,normcicle_Ry,'spline');%%% 右轮滚动圆处的z坐标  

%%%%%%%%通过调整侧滚角求接触位置(利用while循环实现)%%%%%%%%%%%%%%

Alpha=0.5; %%%轮对初始假定的侧滚角系数  

a=0;

while abs(zRMin-zLMin)>0.0001 ;     %%%%判定条件(如不符合,一直while循环)  

Theta=Alpha*(zRMin-zLMin)/(min_Ry-min_Ly);    %%%调整车轮侧滚角  

a=a-Theta;  %%% 左右车轮往左横移时,会顺时针侧滚, a为侧滚回到原始位置的角度,为逆时针  

%%%%%%%%  车轮侧滚后的坐标(顺时针侧滚)%%%%%%%%%%%%

WLy_cg=(RLy_s-i)*cos(Theta)+(WLz_yd-470)*sin(Theta)+i;   %%% 左车轮侧滚后的y坐标  

WLz_cg=-(RLy_s-i)*sin(Theta)+(WLz_yd-470)*cos(Theta)+470;%% 左车轮侧滚后的z坐标  

WRy_cg=(RRy_s-i)*cos(Theta)+(WRz_yd-470)*sin(Theta)+i;   %%% 右车轮侧滚后的y坐标  

WRz_cg=-(RRy_s-i)*sin(Theta)+(WRz_yd-470)*cos(Theta)+470;%%右车轮侧滚后的z坐标  

%%%%%%%%%%%%% 侧滚后寻找车轮与钢轨的最小垂直距离 %%%%%%%%

[zLMin,idx]=min(WLz_cg-RLz_s); %%% 侧滚后,找到左侧车轮与钢轨垂直最小距离      

min_Ly=WLy_cg(idx);  %%%左边最小值所在的车轮y坐标  

min_WLz=WLz_cg(idx);  %%%左边最小值所在的车轮z坐标  

[zRMin,idx]=min(WRz_cg-RRz_s); %%% 侧滚后,找到右侧车轮与钢轨垂直最小距离      

min_Ry=WRy_cg(idx); %%%右边最小值所在的车轮y坐标  

min_WRz=WRz_cg(idx); %%%右边最小值所在的车轮z坐标  

%%%%%%%% 变量替换,为下一次迭代做准备 %%%%%

RLy_s=WLy_cg;

WLz_yd=WLz_cg;

RRy_s=WRy_cg;

WRz_yd=WRz_cg;

end

%%%%%%%% 利用while循环求得接触位置后,下一步获取接触处左、右车轮的坐标 %%%%%%%%

WLy_contact=min_Ly; %%% 左轮  

WLz_contact=min_WLz;

WRy_contact=min_Ry; %%% 右轮  

WRz_contact=min_WRz;

%%%%% 最小距离处(接触处)左、右钢轨的坐标 %%%

RLy_contact=WLy_contact;    %%%%左钢轨  

RLz_contact=interp1(RLy,RLz,RLy_contact,'spline'); 

RRy_contact=WRy_contact;     %%%右钢轨  

RRz_contact=interp1(RRy,RRz,RRy_contact,'spline');

%%%% 左、右车轮接触位置侧滚前的坐标 %%%%

WLy_contact_cg_q=(WLy_contact-i)*cos(a)+(WLz_contact-470)*sin(a)+i;  %%% 左车轮接触位置侧滚前的y坐标

WLz_contact_cg_q=-(WLy_contact-i)*sin(a)+(WLz_contact-470)*cos(a)+470;%%% 左车轮接触位置侧滚前的z坐标

WRy_contact_cg_q=(WRy_contact-i)*cos(a)+(WRz_contact-470)*sin(a)+i;    %%% 右车轮  

WRz_contact_cg_q=-(WRy_contact-i)*sin(a)+(WRz_contact-470)*cos(a)+470;%%%

%%%% 接触点原始坐标(侧滚前减去横动量) %%%

WLy_contact_ori=WLy_contact_cg_q-i; %%%左车轮  

WLz_contact_ori=WLz_contact_cg_q;

WRy_contact_ori=WRy_contact_cg_q-i; %%%右车轮  

WRz_contact_ori=WRz_contact_cg_q;

%%%%%%%%%% 画轮轨接触点的连线 %%%%%%%%%%%%

yL=[WLy_contact_ori,RLy_contact]; %%%左侧轮轨接触点的y坐标  

zL=[WLz_contact_ori,RLz_contact]; %%%左侧轮轨接触点的z坐标                                  

figure(6)

plot(yL,zL);hold on;

yR=[WRy_contact_ori,RRy_contact]; %%%右侧轮轨接触点的y坐标  

zR=[WRz_contact_ori,RRz_contact];  %%%右侧轮轨接触点的z坐标                                

figure(7)

plot(yR,zR);hold on;

end  

运行完,左右车轮与钢轨的接触点连线已经画出来了,见图6和图7  

6 左车轮与钢轨的接触点连线 图7 右车轮与钢轨的接触点连线  

(5) 把接触点连线放到车轮与钢轨装配图中  

figure(6)

plot(WLy,WLz);hold on;plot(RLy,RLz);title('左侧车轮、钢轨接触点');%%% 左侧车轮、钢轨廓形

figure(7)

plot(WRy,WRz);hold on;plot(RRy,RRz);title('右侧车轮、钢轨接触点');%%% 右侧车轮、钢轨廓形

运行完之后,左右车轮与钢轨的轮轨接触关系就出来了,见图8和图9  

  图8 左车轮与钢轨的接触关系  9 右车轮与钢轨的接触关系

4. 程序验证  

为了验证上述程序的正确性,把车轮和钢轨调整后的坐标(不分左右,车轮滚动圆、钢轨轨顶都在原点处)写入钢轨prr文件和车轮pwr文件,把它们读入simpack软件,查看左右车轮与钢轨的接触关系。见图10,与图8和图9对比,发现接触关系是一致的,证明了该程序的有效性。  

10 左右车轮与钢轨接触关系(simpack


来源:CAE与Dynamics学习之友
ACTSimpack振动碰撞MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-02-25
最近编辑:8月前
CAE与Dynamics学习之友
博士 乾坤未定,你我皆是黑马
获赞 26粉丝 68文章 32课程 0
点赞
收藏
未登录
1条评论
悲傷牛油果
签名征集中
4月前
你好,初始数据可以分享一份吗?
回复 1条回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈