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

更多推荐

倾角,汽车,单位,前轮,产生