2023年12月18日发(作者:玛莎拉蒂案件最新消息)
作业任务包括:
一、建立前轮角阶跃输入的汽车三自由度操控模型,并且参数可调。
二、绘制六面体并实现对六面体的三维操作,包括平移、旋转、缩放等。
三、动画:本文动画的实现是在对六面体的具体操作过程(平移、旋转、缩放)中表现。
四、GUI与simulink的联合仿真,并将所有作业内容集成到GUI界面,将程序进行编译,打包生exe的成可执行文件。
汽车三自由度操控模型
1.1建模假设:
?1、汽车车速不变 。
?2、不考虑切向力对轮胎特性的影响。
?3、侧向加速度不大于0.3-0.4g 。
?4、前轮转角不大,不考虑前轮左右的区别。
?5、不考虑非悬架质量的倾角。
?6、不考虑空气动力作用。
?7、侧倾中心与非悬架质心等高,前后一样。
?8、左右对称。
假设汽车的结构:
?前面是独立悬架。
?后面是纵置半椭圆板簧。
?车厢侧倾引起:前轮外倾角变化;后轴发生轴转向;左右侧车轮载荷重新分配引起滚动阻力不相等而产生绕Z轴的力矩。
1.2汽车模型受力分析
车辆坐标系如图1所示
图1 车辆坐标系
M、Ms、Mu分别是整车、悬挂和非悬挂质量,M=Ms、Mu其质心分别是c.g. 、s和u。如图二所示
图2 车辆质量分布示意图
汽车三自由度模型的三个自由度指:汽车沿y轴平动的自由度、汽车绕z轴的转动自由度、汽车绕x轴的转动自由度。一般分别用横向速度v、横摆角速度r、侧倾角?来表征。
汽车三自由度模型的微分方程为:
M(v?rV)?Msh??Y???Yrr?Y???Y????Izr?Ixz??N???Nrr?N???N???Npp? (1-1)
?sIx??Ixzr?Msh(v?rV)?L???Lp??其中各个参数的意义如下:
符号
M
v
r
V
Ms
h
参数名称
整车质量
汽车的侧向速度
汽车横摆角速度
汽车的纵向车速
悬挂质量
离
单位
Kg
m/s
rad/s
m/s
Kg
数值
3021
2687
0.488
悬挂质量重心至侧倾轴线的距m
侧倾角
rad
?
Y?
单位整车侧偏角引起的地面侧N/rad
向反作用力
单位横摆角速度引起的地面侧N.s/rad
向反作用力
单位侧倾角引起的地面侧向反N/rad
作用力
单位前轮转角引起的地面侧向N/rad
反作用力
质心侧偏角
汽车前轮转角
汽车绕垂直轴转动惯量
汽车质量对x轴z轴的惯性积
rad
rad
kg?m2
kg?m2
10437
0
1960
6864
Yr
Y?
Y?
?
?
Iz
Ixz
N?
单位质心侧偏角产生的对z轴N.m/rad
的力矩
单位横摆角速度产生的对z轴N.m.s
的力矩
/rad
/rad
单位侧倾角速度产生的对z轴N.m.s
的力矩
单位前轮转角产生的对z轴的N.m/rad
力矩
单位侧倾角速度产生的对z轴N.m.s/ra的力矩
d
rad/s
kg?m2
Nr
N?
N?
Np
p
s侧倾角速度
悬挂质量对x轴的转动惯量
Ix
L?
单位侧倾角产生的对x轴的外N.m/rad
力矩
单位侧倾角速度产生的对x轴N.m.s/ra的外力矩
算子说明:
Y??k1?k2
Lp
d
Yr?1?ak1?bk2?
V
Y???Y1Y??2?k2
????其中:?????Y1Y前轮外倾刚度;1侧倾外倾角系数;2后轴侧倾转向系数。
??1????Y???k1
N??ak1?bk2??k1h1?k2h2??X?AT?AT??
?Z??1??2其中:h1,h2为前后侧倾中心离地面的高度,即前后非悬挂质量质心离地面的高度
?X为滚动阻力系数
?Z?AT?AT和为轮胎侧偏角回正力矩系数(kg?m/rad)。
??1??2Nr?1?2?X?AT?AT?2???ka?kb?kah?kbh?a?b?
121122??V??Z??1??2???2?Y???AT?Xb?a1Y?2?????????2?Z??Y1Y??2???C?C?h?hk?2122??1?
??????N??k2其中:
C?1、C?2为前、后悬架侧倾角刚度(N?m/rad);
?L1?L2,为前、后减振器因单位侧倾角速度产生的阻力偶矩(N?m?s/rad);
?p?p??2为后轴侧倾转向系数;
??N???k1a?k1h1?X?AT?
?Z??1??L1?L2??XNp????p??p???Z
??L??Gsh?C?1?C?2
??L1?L2?Lp?????p??p??
??
所用到的参数如下:
符号
k1
k2
a
b
c?1
参数名称
前轮侧偏刚度(一个车轮)
后轮侧偏刚度(一个车轮)
重心至前轴距离
重心至后轴距离
前悬架侧倾角刚度
后悬架侧倾角刚度
前轴侧倾转向系数
单位
N/rad
N/rad
m
m
Nm/rad
Nm/rad
数值
23164
38345
1.84
1.88
100620
32755
-0.114
c?2
??1
????2
???AT
??Lp1
后轴侧倾转向系数
0
侧偏角产生的回正力矩
Nm/rad 0
3432
3432
单位侧倾角速度在前减震器产Nm.s/rad
生的阻力矩
单位侧倾角速度在后减震器产Nm.s/rad
生的阻力矩
Lp2
考虑到Np数值不大,予以忽略,且v???V,将代入上述微分方程,可以得到:
?MV??Msh??Y????Yr?MV?r?Y???Y????
?Izr?Ixz??N???Nrr?N???Np??N?????sIx??Ixzr?MshV??L???Lp??MshrV
由于涉及到二次导数,引入新的变量???,上式可写为:
?MV??Msh??Y????Yr?MV?r?Y???Y????Izr?Ixz??N???Nrr?N???Np??N??
??sIx??Ixzr?MshV??L???Lp??MshrV?????将此方程组表达成矩阵形式,即:
Ex?A1x?B1?
其中:
x???r???
0Iz?Ixz00Msh?0?Ixz??
0sIx??10?Y?N?L?0TT
?MV?0E???MshV??0?Y??NA1????0??0B1??Y?
Yr?MVNr?MshV0N?0?Np??
Lp??1?
00?
将三自由度汽车模型的运动微分方程组进一步写成标准形式:
x?Ax?B?
其中A?E?1A,B?E?1B
然后用matlab编程求解其瞬态响应。
1.3simulink建模
本文采用了经典的积分的方法求解,也可以采用状态空间的方法建模。
图3 封装好的模型
图4 联立方程模型
图5 方程一
图6 方程二
图7 方程三
仿真界面
不同车速比较响应输出
不同转角阶阶跃输入响应
绘制六面体及对六面体的三维操作
六面体操作界面
平移操作
六面体缩放操作
六面体旋转操作
GUI主界面,分为两个功能模块:
附录:程序主要代码
1、三自由度车辆模型关键代码:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a=str2double(get(1,\'String\'));
b=str2double(get(2,\'String\'));
h=str2double(get(3,\'String\'));
I_z=str2double(get(4,\'String\'));
I_x=str2double(get(5,\'String\'));
C_fai1=str2double(get(6,\'String\'));
C_fai2=str2double(get(7,\'String\'));
e1=str2double(get(8,\'String\'));
e2=str2double(get(9,\'String\'));
k1=-2*str2double(get(10,\'String\'));
k2=-2*str2double(get(11,\'String\'));
h1=str2double(get(12,\'String\'));
h2=str2double(get(13,\'String\'));
f=str2double(get(14,\'String\'));
g=str2double(get(15,\'String\'));
L1=str2double(get(16,\'String\'));
L2=str2double(get(17,\'String\'));
m=str2double(get(18,\'String\'));
m_s=str2double(get(19,\'String\'));
u=(str2double(get(20,\'String\')))/3.6;
delta=(str2double(get(21,\'String\')))*pi/180;
options=simset(\'SrcWorkspace\',\'current\');
sim(\'three_Dofs_car_0704\',[],options);
axes(1); % 将axes1设置为当前坐标系
plot(tout,yout(:,1));
grid on;
title(\'侧向速度随前轮角输入的关系\');
xlabel(\'时间(s)\');
ylabel(\'侧向速度(m/s)\');
axes(2); % 将axes2设置为当前坐标系
plot(tout,yout(:,2));
grid on;
title(\'横摆角速度随前轮角输入的关系\');
xlabel(\'时间(s)\');
ylabel(\'横摆角速度(rad/s)\');
axes(3); % 将axes1设置为当前坐标系
plot(tout,yout(:,3));
grid on;
title(\'车身侧倾角随前轮角输入的关系\');
xlabel(\'时间(t)\');
ylabel(\'车身侧倾角(rad)\');
2、六面体及操作关键代码
(1)平移关键代码:
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x=[0 1 1 0 0 0;
1 1 0 0 1 1;
1 1 0 0 1 1;
0 1 1 0 0 0];
y=[0 0 1 0 0 0;
0 1 1 1 0 0;
0 1 1 1 1 1;
0 0 1 0 1 1];
z=[0 0 0 0 0 1;
0 0 0 0 0 1;
1 1 1 1 0 1;
1 1 1 1 0 1];
axes(2);
patch(x,y,z,1:6,\'FaceAlpha\',0.9);
h=patch(x,y,z,1:6,\'FaceAlpha\',0.2);
axis equal tight
axis([-2 2 -2 2 -2 2]);
grid on;
title(\'立方体图形变换对比\');
xlabel(\'Variable X\');
ylabel(\'Variable Y\');
zlabel(\'Variable Z\');
view([-45 45]);
%set(h,\'EraseMode\',\'Xor\')
a=str2double(get(1,\'String\'));
b=str2double(get(2,\'String\'));
c=str2double(get(3,\'String\'));
for i=0:1:50;
drawnow;
X=x+(a/50)*i;
Y=y+(b/50)*i;
Z=z+(c/50)*i;
axes(2);
set(h,\'xdata\',X,\'ydata\',Y,\'zdata\',Z)
pause(0.1)
end
(2)缩放关键代码:
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x=[0 1 1 0 0 0;
1 1 0 0 1 1;
1 1 0 0 1 1;
0 1 1 0 0 0];
y=[0 0 1 0 0 0;
0 1 1 1 0 0;
0 1 1 1 1 1;
0 0 1 0 1 1];
z=[0 0 0 0 0 1;
0 0 0 0 0 1;
1 1 1 1 0 1;
1 1 1 1 0 1];
axes(2);
patch(x,y,z,1:6,\'FaceAlpha\',0.9);
h=patch(x,y,z,1:6,\'FaceAlpha\',0.2);
axis equal tight
axis([-2 2 -2 2 -2 2]);
grid on;
title(\'立方体图形变换对比\');
xlabel(\'Variable X\');
ylabel(\'Variable Y\');
zlabel(\'Variable Z\');
view([-45 45]);
%set(h,\'EraseMode\',\'Xor\')
d=str2double(get(4,\'String\'));
e=str2double(get(5,\'String\'));
f=str2double(get(6,\'String\'));
for i=0:1:50;
drawnow;
X=x*(d/50)*i;
Y=y*(e/50)*i;
Z=z*(f/50)*i;
axes(2);
set(h,\'xdata\',X,\'ydata\',Y,\'zdata\',Z)
pause(0.1)
end
(3)旋转关键代码:
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
x=[0 1 1 0 0 0;
1 1 0 0 1 1;
1 1 0 0 1 1;
0 1 1 0 0 0];
y=[0 0 1 0 0 0;
0 1 1 1 0 0;
0 1 1 1 1 1;
0 0 1 0 1 1];
z=[0 0 0 0 0 1;
0 0 0 0 0 1;
1 1 1 1 0 1;
1 1 1 1 0 1];
axes(2);
patch(x,y,z,1:6,\'FaceAlpha\',0.9);
h=patch(x,y,z,1:6,\'FaceAlpha\',0.2);
axis equal tight
axis([-2 2 -2 2 -2 2]);
grid on;
title(\'立方体图形变换对比\');
xlabel(\'Variable X\');
ylabel(\'Variable Y\');
zlabel(\'Variable Z\');
view([-45 45]);
%set(h,\'EraseMode\',\'Xor\')
g=pi*str2double(get(7,\'String\'))/180;
for i=0:1:50;
drawnow;
X=x*cos((g/50)*i)-y*sin((g/50)*i);
Y=x*sin((g/50)*i)+y*cos((g/50)*i);
Z=z;
axes(2);
set(h,\'xdata\',X,\'ydata\',Y,\'zdata\',Z)
pause(0.1)
end
更多推荐
倾角,汽车,单位,前轮,产生
发布评论