2017年认证杯SPSSPRO杯数学建模
A题 安全的后视镜
原题再现:
汽车后视镜的视野对行车安全非常重要。一般来说,汽车的后视镜需要有良好的视野范围,以便驾驶员能够全面地了解车后方的道路情况。同时,后视镜也要使图像的畸变尽可能小,以使驾驶员能够准确地判断距离。
如果汽车的后视镜使用平面镜,图像没有畸变,对距离的判断十分准确。但是当镜面大小受限时,视野相对较小。如果使用凸面镜,可以以较小的镜面获得更加宽广的视野,但是图像存在畸变,很难准确判断镜中物体与自己的距离。有的镜面是由平面镜和凸面镜拼合在一起组成,意图兼顾两者的优点。但事实上,驾驶员在观察后视镜时,两者很难同时看清。较受欢迎的做法是构造一个变曲率的后视镜,使后视镜可以兼顾两者的优点,也降低了观察和距离判断上的难度。目前市场上有售不同设计的变曲率后视镜。最常见的是一种双曲率后视镜,内侧接近平面镜,外侧则是一个凸面镜,在它们之间进行了平滑的过渡。图 1 是两个例子,为了便于驾驶员对距离进行判断,镜中由虚线或细实线示意了不同曲率的镜面间的分界线。它们的具体设计有所区别,性能也会有所不同。
第二阶段问题: 对后视镜的布置而言,相比于形式较为类似的小轿车,大客车具有复杂得多的情况。即使在车体轮廓近似为长方体的前提下,镜面的形状、大小和安装位置等各种参数也都可能有很大的差别 ( 如图 2 )。请你建立相应的数学模型,对车体外形近似为长方体的大客车设计最优的后视镜方案,方案中需要包括镜面的曲面外形、边缘轮廓、尺寸以及安装位置等参数。同样地,由于我们只做理论上的研究,所以在设计时暂不需要考虑和遵循相应的国家标准。
整体求解过程概述(摘要)
后视镜作为驾驶员的"第三只眼睛",在倒车、制动等过程中发挥着重要作用。相对于小轿车,大客车底盘较高,车身较长,视野盲区较大,后视镜设计更为复杂。本文的目的在于提供一种大客车后视镜的最优布置方案,以实现综合性能最优化。
第一,确定后视镜的布置参数。采用两种双曲率曲面作镜面,利用解析几何求出其曲面方程。在设计后视镜时让视野覆盖主要的下视野盲区、设定下方视野约束。此外结合现实和人机工程,将后视镜尺寸及安装位置控制在一定范围内。
第二,计算视野面积。基于反射原理和数值模拟技术,本文求出后视镜边缘点在测试屏板上的投影,从而得到了视野区域的大致轮廓。采用改进的蒙特卡洛模拟计算出该不规则视野区域的面积。剔除地面以下和左、右眼视野重复计算的部分后,得到驾驶员双眼的有效视野区域。
第三,计算畸变指数。作关于镜面平行于坐标轴的 21*20 的网格剖分,分别计算平面后视镜与双曲率后视镜上的网格点在屏板上形成的投影的平均距离。定义畸变指数为衡量图像畸变程度的无量纲指标。
第四,计算空气阻力。根据空气阻力公式,计算后视镜面积对应的空气阻力大小。最后,建立多目标最优化模型。以视野分界比率、曲率半径等为自变量,以视野面积、畸变指数和空气阻力为优化目标,建立多目标最优化数学模型。运用理想点法,找出理想比率取值,基于欧式距离构建评判函数。根据现有的专利和行业标准,设定自变量的合理范围,并采用遗传算法求解该模型,使得评判函数最小化。本模型便于计算,适用范围广,兼顾求解的速度和质量。同时无须对模型进行过多修改,即可有效提升求解精度。
本文选取三种型号的金龙客车作为参考车型,求解最优化参数设计。结果分析表明,○1 不同车型的最优的后视镜安装位置有很大的差异:对于车型较大、底盘较高的客车,最佳位置在驾驶员位置的上前方;而车型较小、底盘较低的客车则在与驾驶员眼点相对持平的位置。○2 最优的镜面形状需要考虑与车型有关的因素,针对不同车型具体设计。○3 就镜面类型而论,第一类镜面适用于车 1 和车 2,而第二类镜面对车 3 是更好的选择。
问题分析:
第一,载客汽车驾驶座附近车身的盲区需要特别考虑。载客汽车后视镜常常安装于车身前部或侧部,驾驶员可通过前风挡玻璃和左右汽车玻璃看外视镜,但是由于客车车型与小轿车车型相比,客车底座更高、车身更长,在驾驶时,车头、左右后视镜下方等区域容易形成视觉盲区,形成交通安全隐患。大客车外后视镜往往采用竖直的长方形造型,以增加可观察的地面面积(或下视野面积),大多数的客车还会安装一面小凸面镜来减少盲区,如图所示。在驾驶过程中,驾驶员通过小凸面镜观察车身下方以及一些死角,通过外后视镜观察道路两侧情况。因此相对于小轿车,大客车的外后视镜在设计上尤其要考虑到驾驶座附近车身的盲区问题。
第二,采用双曲率曲面作为后视镜的镜面。后视镜如果采用平面镜,图像没有畸变,但由于镜面大小受限,视野相对较小;如果采用凸面镜,可以以较小的镜面获得更宽广的视野范围,但是图像产生畸变,而双曲率镜面可以有效减少平、凸面镜带来的不利影响,因此本文仍然采用双曲率曲面作为后视镜镜面设计的要件。沿用第一阶段的研究结论,我们设计出一种由两个柱面拼接而成的镜面,解决了下视野盲区问题,但是水平视野仍然受到约束。经过第一阶段相关论文启发,我们又设计出一种由柱面与球面拼接而成的镜面。
第三,结合现实考虑,客车后视镜尺寸以及安装位置应控制在一定范围内。镜面面积越大,视野范围越大,但面积大的镜面也会给车辆增加空气阻力,因此在设计时镜面面积应该控制在一定的范围下。根据人机工程理论,在驾驶过程中驾驶员如果频繁转动头部和眼部,将会增加驾驶员的疲劳程度。出于驾驶员驾驶的舒适度和安全性考虑,后视镜安装位置控制在驾驶员眼点一定的可视区域内。
第四,最优的后视镜方案与后视镜所要实现的目的有关,比如满足驾驶适宜性、减少空气阻力,与整车风格一致、外形美观等要求,本文考虑视野面积、畸变率和空气阻力作为最优方案指标。
此外,由于不同的载客汽车具有不同的固有车辆参数,比如车身长度、宽度、长度,司机双眼位置等,这些固有参数将影响最优方案的结果。因此我们选用了三种不同车型的载客汽车,运用建立的模型设计出了各自后视镜的最优方案,并对影响后视镜最优方案的因素进行分析。
模型假设:
1. 只考虑水平面上的视野区域和失真度,后视镜所用的镜面为柱面、球面镜
2. 后视镜垂直于水平地面,与车身前进方向夹角与 90°
3. 镜面光滑,材质均匀,光在镜面没有能量损失,反射率为 100%
4. 忽略后视镜外壳以及其他配件,只考虑镜面玻璃
5. 只考虑左侧外后视镜的布置情况
论文缩略图:
全部论文请见下方" 只会建模 QQ名片" 点击QQ名片即可
部分程序代码:(代码和文档not free)
bash
function view=edgefunc(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye)
screen_y=11950;
number=length(edge_x);
view=[];
y_1=-r_max+sqrt(-L^2*ratio^2+r_max^2);
z_1=h-L*ratio;%分界点
sin_theta=(L*ratio)/r_max;
cos_theta=sqrt(-L^2*ratio^2+r_max^2)/r_max;
y_min=y_1-r_min*cos_theta;
z_min=z_1+sin_theta*r_min;%小圆圆心
for i=1:number
edge=[edge_x(i),edge_y(i),edge_z(i)];
rushe=edge-eye;
rushe=rushe/norm(rushe);
if edge_z(i)>=z_1
faxian=[0,edge_y(i)+r_max,edge_z(i)-h];
faxian=faxian/norm(faxian);
chushe=rushe-2*dot(rushe,faxian)*faxian;
else
faxian=[0,edge_y(i)-y_min,edge_z(i)-z_min];
faxian=faxian/norm(faxian);
chushe=rushe-2*dot(rushe,faxian)*faxian;
end
c=(screen_y-edge_y(i))/chushe(2);
screen_x=chushe(1)*c+edge_x(i);
screen_z=chushe(3)*c+edge_z(i);
view=[view [screen_x;screen_y;screen_z]];
%plot3(view(1,:),view(2,:),view(3,:),'*')
%plot(view(1,:),view(3,:),'*')
%set(gca,'xlim',[-7000,0],'ylim',[-1500,1500])
%title('最优设计参数下的投影点')
%legend('投影点','Location','northeast')
end
end
bash
function a=mianji(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye1,eye2)
view1=edgefunc(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye1);
v1=[view1(1,:);view1(3,:)];
vx1=v1(1,:);
vz1=v1(2,:);
view2=edgefunc(edge_x,edge_y,edge_z,r_max,r_min,ratio,L,W,h,eye2);
v2=[view2(1,:);view2(3,:)];
vx2=v2(1,:);
vz2=v2(2,:);
vx=[vx1 vx2];
vz=[vz1 vz2];
vL=max(vz)-min(vz);
vW=max(vx)-min(vx);
count=0;
popx=linspace(min(vx),max(vx),1000);
popz=linspace(min(vz),max(vz),1000);
for i=1:2500
rx=randsample(popx,1);
rz=randsample(popz,1);
if rz<0
continue;
end
vsx=vx1(1:100);
vsz=vz1(1:100);
mx=abs(vsx-rx);
[s1,d1]=min(mx);
range1=vsz(d1);
vsx=vx1(201:300);
vsz=vz1(201:300);
mx=abs(vsx-rx);
[s1,d1]=min(mx);
range2=vsz(d1);
if (range1-rz)*(range2-rz)<=0
vsx=vx1(101:200);
vsz=vz1(101:200);
mz=abs(vsz-rz);
[s1,d1]=min(mz);
range1=vsx(d1);
vsx=vx1(301:400);
vsz=vz1(301:400);
mz=abs(vsz-rz);
[s1,d1]=min(mz);
range2=vsx(d1);
if (range1-rx)*(range2-rx)<=0
count=count+1;
else
vsx=vx2(1:100);
vsz=vz2(1:100);
mx=abs(vsx-rx);
[s1,d1]=min(mx);
range1=vsz(d1);
vsx=vx2(201:300);
vsz=vz2(201:300);
mx=abs(vsx-rx);
[s1,d1]=min(mx);
range2=vsz(d1);
if (range1-rz)*(range2-rz)<=0
vsx=vx2(101:200);
vsz=vz2(101:200);
mz=abs(vsz-rz);
[s1,d1]=min(mz);
range1=vsx(d1);
vsx=vx2(301:400);
vsz=vz2(301:400);
mz=abs(vsz-rz);
[s1,d1]=min(mz);
range2=vsx(d1);
if (range1-rx)*(range2-rx)<=0
count=count+1;
end
end
end
end
end
a=vL*vW*count/2500/1000/1000;%视野面积
vx=[vx1 vx2];
vz=[vz1 vz2];
%plot(vx,vz,'*')
%hold on
%plot(rx,rz,'*')
%plot(ones(1,100)*min(vx),linspace(min(vz),max(vz)),'k','LineWidth',4);
%plot(ones(1,100)*max(vx),linspace(min(vz),max(vz)),'k','LineWidth',4);
%plot(linspace(min(vx),max(vx)),ones(1,100)*min(vz),'k','LineWidth',4);
%plot(linspace(min(vx),max(vx)),ones(1,100)*max(vz),'k','LineWidth',4);
%hold off
End