1-148 matlab的带有gui的轮轨接触几何计算程序 基于matlab的带有gui的轮轨...
总体来说,这个1-148的带GUI的MATLAB轮轨接触几何计算程序,真的是入门铁路工程/车辆工程学生的福音,不用啃复杂的几何方程,不用自己写代码拟合残差点(哦不对残差点还是要自己拼,但是程序能实时看拼的好不好,这点也很重要),结果还能直接导出插论文里,调得通能用,昨天玩了一下午,真的太香了。不过这个程序也有个小缺点,就是硬抓的“接触候选区”是1mm垂向内的轨头,要是碰上个磨耗特别严重的轨头,轨头
1-148 matlab的带有gui的轮轨接触几何计算程序 基于matlab的带有gui的轮轨接触几何计算程序,根据不同的踏面和轨头,计算不同横移量下面的接触点位置。程序已调通,可直接运行
有没有人蹲过现成的、换文件就能换轮轨、不用啃半天赫兹接触前的几何方程、结果还能直观看曲线的MATLAB轮轨接触工具?最近扒到了一个编号1-148、调得通能用的带GUI版本,昨天玩了一下午,连论文里找不到的几个旧踏面残差点的拟合结果都能导出来简单拼,先碎碎念分享一波。
这个程序的核心逻辑其实是经典的“轮轨截面投影重叠求最小距离法”?不对,应该是先把踏面、轨头的左右截面数据(注意是工程上常用的纵向垂直轨距线的横移-垂向数据,txt/excel都能塞)读进去,然后设定横移范围和步长,把轮组踏面沿着横移轴(假设轮对横移量y,左踏面右轨头重叠区往左移y是正方向,或者反过来?程序里有注释说默认右移轮对靠近右轨是y正,其实不用纠结,反正结果可以对着图调逻辑)扫一遍,每个y下面找踏面每个点投影到轨头截面的法向最近点——对,就是那个切线垂直于两点连线的点,不是垂直于轨头底面的垂向最近哦!垂向的那种太粗糙了,过曲线或者脱轨前的几何全靠法向的这个。
给你们看扫轨距区扫重叠的时候,核心循环里我觉得写得最“懒但有用”的一段MATLAB代码,不是那种硬推二次微分找极值的,是先抓肉眼/先验逻辑里的“可能接触区”(轨头顶圆弧附近±某个y0的点,踏面踏面锥/顶圆弧附近的点),然后用欧几里得距离遍历这两个小区域,省了超多计算时间:
% 这里是找当前横移量y时,可能的接触候选点
% 先把轨头数据的x(横移)、y(垂向,这里程序里为了统一命名,把原来的轨头垂向换成了z?不管,看坐标图就懂,不影响核心)
% 假设轮对左移当前y量(这里变量名和投影逻辑要对应程序注释),那么左踏面的原始x_right踏面点(假设原始踏面是从轮缘到轮心?也不管,程序会自动给轮缘侧标个负区还是正区)减去y,就是投影到轨头坐标系的位置
projected_x_left = tread_x_left - y;
% 硬抓轨头顶圆弧:比如轨头数据里垂向z_top_max(轨头顶面最高点垂向值)减1mm以内的点,都是接触顶候选,过了1mm要么是轨距角要么轨底了
contact_candidate_rail = rail_data(abs(rail_z - z_top_max) < 1, :);
% 硬抓左踏面的候选:投影x_left刚好落在轨头候选x的min和max之间的,省得算轮心那边完全碰不到的
contact_candidate_tread = left_tread_data( (projected_x_left >= min(contact_candidate_rail(:,1))) & ...
(projected_x_left <= max(contact_candidate_rail(:,1))), : );
% 遍历欧几里得,找最小的
min_dist = inf;
best_rail_point = [];
best_tread_point = [];
for i = 1:size(contact_candidate_tread,1)
pt_t = [contact_candidate_tread(i,1)-y, contact_candidate_tread(i,2)]; % 再确认投影坐标
for j = 1:size(contact_candidate_rail,1)
pt_r = contact_candidate_rail(j,:);
dist = norm(pt_t - pt_r);
if dist < min_dist
min_dist = dist;
best_rail_point = pt_r;
best_tread_point = contact_candidate_tread(i,:);
end
end
end
这段代码的“懒”真的拯救了我电脑跑1440个点(旧LM踏面残差点超多,我随便找了个同学拼的txt丢进去)的情况——原来如果遍历整个左右轮轨截面,每个横移量步长0.1mm(横移-15到+15mm对吧?脱轨预警大概是±12mm)的话,得跑30014401200次,我之前写过一次纯遍历,电脑卡成PPT,这个硬抓1mm垂向内的轨头,直接降到300200300,秒出结果。
然后是GUI界面,不是那种只有按钮的极简版,是分了三个标签页+坐标实时联动的,这点很贴心:

第一个标签页是“轮轨数据导入与预览”,有两个按钮分别读左/右踏面(默认1-148程序带的是一个旧LMA踏面的左右镜像txt,哦对了,要是对称轮对的话,直接读一个镜像就行,程序有自动镜像右踏面的复选框!我昨天才发现,之前还傻乎乎找同学要了两个一模一样的文件)和左右轨头(轨头不是默认镜像哦,要自己读左右不同的超高曲线下的轨头?不对,是左/右股道的单独轨头截面,比如曲线外侧可能磨耗得更厉害),导入之后会在同一个坐标系里显示原始数据,还能缩放、平移、用鼠标点原始数据的点看坐标——这点找残差点的时候太方便了,之前用Excel拼残差点,一个个翻数值快瞎了。
第二个标签页是“几何计算设置”,横移范围和步长可以自己输,还有个复选框要不要算“接触点的法向夹角、轨距、轮轨间隙(轨距角那边的或者顶的?哦程序注释说是接触点外侧轮缘和轨距角内侧的垂向最小间隙,如果接触在顶的话,间隙就是0对吧?反正结果标签页里会标清楚)”——这些论文里分析动力学的时候经常要用到,不用自己再写公式算。
第三个标签页是“结果显示与导出”,实时联动!改完横移步长之后,点“重新计算”,3秒内就能出四个子图:
1-148 matlab的带有gui的轮轨接触几何计算程序 基于matlab的带有gui的轮轨接触几何计算程序,根据不同的踏面和轨头,计算不同横移量下面的接触点位置。程序已调通,可直接运行
第一个子图是“轮对当前横移量(默认中间的y=0)下的接触放大图”,能看到刚才那段代码抓的最小距离点,还标了欧几里得距离(理论上正常接触的时候应该是0,要是带磨耗的残差点,可能会有0.01mm左右的误差,正常的,因为是离散点拟合的);

第二个子图是“接触点横移量(相对于轮对中心和轨距中心?哦轨距中心标了个红竖线,轮对中心标了个蓝竖线,很清楚)随轮对横移量变化的曲线”——可以看踏面锥的斜率变化、轨距角接触的拐点;
第三个子图是“接触点法向夹角随轮对横移量变化的曲线”;
第四个子图是“轮轨间隙随轮对横移量变化的曲线”;
还有个“数据导出”按钮,能把所有计算结果(轮对横移量y,左右接触点的投影x、垂向z、法向夹角,轮轨间隙,轨距,哦还有算出来的等效踏面锥度?对!等效踏面锥度标签页底部直接显示了y在0到±2mm之间的等效锥度,这点太省事了,之前写课程作业的时候,我对着第二个子图的横移范围0-2mm算了好久斜率,还差点算错正负)导出成Excel或者MATLAB的.mat文件,直接插论文里就行。
昨天我用这个程序,把我自己做课程作业拼的磨耗LMA踏面,和1-148程序自带的CN60轨头,还有我在知网找的旧资料里的磨耗CN60轨头,分别算了一遍横移-10到+10mm的等效锥度,旧资料里的磨耗等效锥度居然是0.3!课程作业要求的踏面锥度范围是0.1-0.4,刚好符合,省了我重新拟合磨耗踏面的时间,拟合残差点真的是个苦差事。

不过这个程序也有个小缺点,就是硬抓的“接触候选区”是1mm垂向内的轨头,要是碰上个磨耗特别严重的轨头,轨头顶圆弧已经凹下去1mm以上了,那接触候选区就抓不到了,不过这点可以自己改那段核心循环里的“abs(railz - ztopmax) < 1”改成“abs(railz - ztopmax) < 2”或者更大的数,改完之后程序运行速度会稍微慢一点,但也不会卡成PPT,毕竟还是抓了候选区,不是纯遍历。
总体来说,这个1-148的带GUI的MATLAB轮轨接触几何计算程序,真的是入门铁路工程/车辆工程学生的福音,不用啃复杂的几何方程,不用自己写代码拟合残差点(哦不对残差点还是要自己拼,但是程序能实时看拼的好不好,这点也很重要),结果还能直接导出插论文里,调得通能用,昨天玩了一下午,真的太香了。
更多推荐


所有评论(0)