主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

车辆动力学系统建模

此示例展示了车辆动力学的非线性灰盒建模。许多新车辆功能(如电子稳定程序 (ESP)、间接轮胎压力监测系统 (TPMS)、道路轮胎摩擦监测系统等)依赖于底层车辆动力学模型。所谓的自行车车辆模型是一种相当简单的模型结构,在车辆动力学文献中经常使用。在这个例子中,我们将从这个模型结构开始,并尝试估计轮胎的纵向和横向刚度。实际建模工作最初是由 Erik Narby 在瑞典 NIRA Dynamics AB 攻读硕士学位期间进行的。

车辆动力学建模

下图说明了需要考虑的车辆建模情况。

图 1:车辆动力学系统示意图。

利用牛顿运动定律和一些基本的几何关系,绕车辆重心 (COG) 测量的纵向速度 v_x(t)、横向速度 v_y(t) 和偏航角速度 r(t) 可以用以下三个方程来描述:

  d
  -- v_x(t) = v_y(t)*r(t) + 1/m*(  (F_x_FL(t) + F_x_FR(t))*cos(delta(t))
  dt                             - (F_y_FL(t) + F_y_FR(t))*sin(delta(t))
                                 + F_x_RL(t) + F_x_RR(t)
                                 - C_A*v_x(t)^2)
  d
  -- v_y(t) = -v_x(t)*r(t) + 1/m*(  (F_x_FL(t) + F_x_FR(t))*sin(delta(t))
  dt                              + (F_y_FL(t) + F_y_FR(t))*cos(delta(t))
                                  + F_y_RL(t) + F_y_RR(t))
  d
  -- r(t)   = 1/J*(  a*(  (F_x_FL(t) + F_x_FR(t))*sin(delta(t))
  dt                    + (F_y_FL(t) + F_y_FR(t))*cos(delta(t)))
                   - b*(F_y_RL(t) + F_y_RR(t)))

其中下标 x 表示力 F 作用于纵向,y 表示力 F 作用于横向。缩写 FL、FR、RL 和 RR 标记轮胎:分别为前左、前右、后左和后右。描述纵向加速度的第一个方程还包含一个空气阻力项,该项被假定为纵向车辆速度 v_x(t) 的二次函数。此外,delta(t)(输入)是转向角,J 是转动惯量,a 和 b 分别是重心到前轴和后轴的距离。

我们假设轮胎力可以通过以下线性近似来建模:

  F_x_i(t) = C_x*s_i(t)
  F_y_i(t) = C_y*alpha_i(t)     for i = {FL, FR, RL, RR}

其中 C_x 和 C_y 分别是纵向和横向轮胎刚度。这里我们假设这 4 个轮胎的刚度参数都是相同的。s_i(t) 是轮胎 i 的所谓(纵向)滑移,alpha_i(t) 是轮胎滑移角。对于前轮驱动车辆(如此处所考虑),滑移量 s_FL(t) 和 s_FR(t) 是通过假设后轮没有任何滑移(即 s_RL(t) = s_RR(t) = 0)从各个车轮速度(测量)得出的。因此,这些单据是我们模型结构的输入。对于前轮,轮胎滑移角 alpha_Fj(t) 可以近似为(当 v_x(t) > 0 时)

alpha_Fj(t) = delta(t) - arctan((v_y(t) + a*r(t))/v_x(t))
            ~ delta(t) - (v_y(t) + a*r(t))/v_x(t)        for j = {L, R}

对于后轮,轮胎滑移角 alpha_Rj(t) 类似地推导并计算为

alpha_Rj(t) = - arctan((v_y(t) - b*r(t))/v_x(t))
            ~ - (v_y(t) - b*r(t))/v_x(t)                 for j = {L, R}

利用 J = 1/((0.5*(a+b))^2*m),我们接下来可以建立一个描述车辆动力学的状态空间结构。引入状态:

  x1(t) = v_x(t)      Longitudinal velocity [m/s].
  x2(t) = v_y(t)      Lateral velocity [m/s].
  x3(t) = r(t)        Yaw rate [rad/s].

五个测量或派生的输入信号

  u1(t) = s_FL(t)     Slip of Front Left tire [ratio].
  u2(t) = s_FR(t)     Slip of Front Right tire [ratio].
  u3(t) = s_RL(t)     Slip of Rear Left tire [ratio].
  u4(t) = s_RR(t)     Slip of Rear Right tire [ratio].
  u5(t) = delta(t)    Steering angle [rad].

以及模型参数:

  m                   Mass of the vehicle [kg].
  a                   Distance from front axle to COG [m].
  b                   Distance from rear axle to COG [m].
  Cx                  Longitudinal tire stiffness [N].
  Cy                  Lateral tire stiffness [N/rad].
  CA                  Air resistance coefficient [1/m].

该系统的输出是纵向车辆速度 y1(t) = x1(t),横向车辆加速度(由加速度计测量):

y2(t) = a_y(t) = 1/m*(  (F_x_FL(t) + F_x_FR(t))*sin(delta(t))
                      + (F_y_FL(t) + F_y_FR(t))*cos(delta(t))
                      + F_y_RL(t) + F_y_RR(t))

偏航率 y3(t) = r(t)(由陀螺仪测量)。

综合起来,我们得到以下状态空间模型结构:

  d
  -- x1(t) = x2(t)*x3(t) + 1/m*(  Cx*(u1(t)+u2(t))*cos(u5(t))
  dt                            - 2*Cy*(u5(t)-(x2(t)+a*x3(t))/x1(t))*sin(u5(t))
                                + Cx*(u3(t)+u4(t))
                                - CA*x1(t)^2)
  d
  -- x2(t) = -x1(t)*x3(t) + 1/m*(  Cx*(u1(t)+u2(t))*sin(u5(t))
  dt                             + 2*Cy*(u5(t)-(x2(t)+a*x3(t))/x1(t))*cos(u5(t))
                                 + 2*Cy*(b*x3(t)-x2(t))/x1(t))
  d
  -- x3(t) = 1/((0.5*(a+b))^2)*m)*(  a*(  Cx*(u1(t)+u2(t)*sin(u5(t))
  dt                                    + 2*Cy*(u5(t) - (x2(t)+a*x3(t))/x1(t))*cos(u5(t)))
                                   - 2*b*Cy*(b*x3(t)-x2(t))/x1(t))
     y1(t) = x1(t)
     y2(t) = 1/m*(  Cx*(u1(t)+u2(t))*sin(u5(t))
                  + 2*Cy*(u5(t)-(x2(t)+a*x3(t))/x1(t))*cos(u5(t))
                  + 2*Cy*(b*x3(t)-x2(t))/x1(t))
     y3(t) = x3(t)

IDNLGREY 车辆模型

作为我们车辆辨识试验的基础,我们首先需要创建一个描述这些车辆方程的 IDNLGREY 模型文件。这里我们依赖 C-MEX 建模,创建一个 vehicle_c.c 模型文件,其中 NY 设置为 3。Vehicle_c.c 的状态和输出更新函数 compute_dx 和 compute_y 有些复杂,包括几个标准 C 定义的数学函数,如 cos(.) 和 sin(.) 以及用于计算其参量幂的 pow(.)。

状态更新函数 compute_dx 返回 dx(参量 1)并使用 3 个输入参量:状态向量 x、输入向量 u 和 p 中编码的六个标量参数(模板 C-MEX 模型文件的 t 和 auxvar 已在此处删除):

  /* State equations. */
  void compute_dx(double *dx, double *x, double *u, double **p)
  {
      /* Retrieve model parameters. */
      double *m, *a, *b, *Cx, *Cy, *CA;
      m  = p[0];   /* Vehicle mass.                    */
      a  = p[1];   /* Distance from front axle to COG. */
      b  = p[2];   /* Distance from rear axle to COG.  */
      Cx = p[3];   /* Longitudinal tire stiffness.     */
      Cy = p[4];   /* Lateral tire stiffness.          */
      CA = p[5];   /* Air resistance coefficient.      */
      /* x[0]: Longitudinal vehicle velocity. */
      /* x[1]: Lateral vehicle velocity. */
      /* x[2]: Yaw rate. */
      dx[0] = x[1]*x[2]+1/m[0]*(Cx[0]*(u[0]+u[1])*cos(u[4])
              -2*Cy[0]*(u[4]-(x[1]+a[0]*x[2])/x[0])*sin(u[4])
              +Cx[0]*(u[2]+u[3])-CA[0]*pow(x[0],2));
      dx[1] = -x[0]*x[2]+1/m[0]*(Cx[0]*(u[0]+u[1])*sin(u[4])
              +2*Cy[0]*(u[4]-(x[1]+a[0]*x[2])/x[0])*cos(u[4])
              +2*Cy[0]*(b[0]*x[2]-x[1])/x[0]);
      dx[2] = 1/(pow(((a[0]+b[0])/2),2)*m[0])
              *(a[0]*(Cx[0]*(u[0]+u[1])*sin(u[4])
              +2*Cy[0]*(u[4]-(x[1]+a[0]*x[2])/x[0])*cos(u[4]))
              -2*b[0]*Cy[0]*(b[0]*x[2]-x[1])/x[0]);
  }

输出更新函数 compute_y 返回 y(参量 1)并使用 3 个输入参量:状态向量 x、输入向量 u 和编码在 p 中的六个参数中的五个(不需要空气阻力 CA):

  /* Output equations. */
  void compute_y(double *y, double *x, double *u, double **p)
  {
      /* Retrieve model parameters. */
      double *m  = p[0];   /* Vehicle mass.                    */
      double *a  = p[1];   /* Distance from front axle to COG. */
      double *b  = p[2];   /* Distance from rear axle to COG.  */
      double *Cx = p[3];   /* Longitudinal tire stiffness.     */
      double *Cy = p[4];   /* Lateral tire stiffness.          */
      /* y[0]: Longitudinal vehicle velocity. */
      /* y[1]: Lateral vehicle acceleration. */
      /* y[2]: Yaw rate. */
      y[0] = x[0];
      y[1] = 1/m[0]*(Cx[0]*(u[0]+u[1])*sin(u[4])
             +2*Cy[0]*(u[4]-(x[1]+a[0]*x[2])/x[0])*cos(u[4])
             +2*Cy[0]*(b[0]*x[2]-x[1])/x[0]);
      y[2] = x[2];
  }

有了适当的模型结构文件,下一步是创建一个反映建模情况的 IDNLGREY 对象。为了便于记账,我们还指定了输入和输出的名称和单位。

FileName      = 'vehicle_c';                        % File describing the model structure.
Order         = [3 5 3];                            % Model orders [ny nx nu].
Parameters    = [1700; 1.5; 1.5; 1.5e5; 4e4; 0.5];  % Initial parameters.
InitialStates = [1; 0; 0];                          % Initial value of initial states.
Ts            = 0;                                  % Time-continuous system.
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ...
                'Name', 'Bicycle vehicle model', 'TimeUnit', 's');
        nlgr.InputName =  {'Slip on front left tire';               ...   % u(1).
                         'Slip on front right tire';              ...   % u(2).
                         'Slip on rear left tire';                ...   % u(3).
                         'Slip on rear right tire';               ...   % u(4).
                         'Steering angle'};                       ...   % u(5).
          nlgr.InputUnit =  {'ratio'; 'ratio'; 'ratio'; 'ratio'; 'rad'};

          nlgr.OutputName = {'Long. velocity';  ...   % y(1); Longitudinal vehicle velocity
                         'Lat. accel.';   ...     % y(2); Lateral vehicle acceleration
                         'Yaw rate'};                             ...   % y(3).
          nlgr.OutputUnit = {'m/s'; 'm/s^2'; 'rad/s'};

通过 SETINIT 指定 (初始) 状态和模型参数的名称和单位。我们还使用此命令来指定第一个初始状态(纵向速度)应该严格为正,以使模型有效,并指定所有模型参数都应该严格为正。随后,在执行初始状态和/或模型参数估计时将遵守这些约束。

nlgr = setinit(nlgr, 'Name', {'Longitudinal vehicle velocity'        ... % x(1).
                       'Lateral vehicle velocity'             ... % x(2).
                       'Yaw rate'});                          ... % x(3).
nlgr = setinit(nlgr, 'Unit', {'m/s'; 'm/s'; 'rad/s'});
nlgr.InitialStates(1).Minimum = eps(0);   % Longitudinal velocity > 0 for the model to be valid.
nlgr = setpar(nlgr, 'Name', {'Vehicle mass';                         ... % m.
                      'Distance from front axle to COG';      ... % a
                      'Distance from rear axle to COG';       ... % b.
                      'Longitudinal tire stiffness';          ... % Cx.
                      'Lateral tire stiffness';               ... % Cy.
                      'Air resistance coefficient'});         ... % CA.
nlgr = setpar(nlgr, 'Unit', {'kg'; 'm'; 'm'; 'N'; 'N/rad'; '1/m'});
nlgr = setpar(nlgr, 'Minimum', num2cell(eps(0)*ones(6, 1)));   % All parameters > 0!

该模型结构的六个参数中有四个可以通过该车辆的数据表轻松获得:

  m  = 1700 kg
  a  = 1.5 m
  b  = 1.5 m
  CA = 0.5 or 0.7 1/m (see below)

因此我们不会估计这些参数:

nlgr.Parameters(1).Fixed = true;
nlgr.Parameters(2).Fixed = true;
nlgr.Parameters(3).Fixed = true;
nlgr.Parameters(6).Fixed = true;

由此,通过 PRESENT 获得输入的 IDNLGREY 模型结构的文本摘要,如下所示。

present(nlgr);
nlgr =

Continuous-time nonlinear grey-box model defined by 'vehicle_c' (MEX-file):

   dx/dt = F(t, x(t), u(t), p1, ..., p6)
    y(t) = H(t, x(t), u(t), p1, ..., p6) + e(t)

 with 5 input(s), 3 state(s), 3 output(s), and 2 free parameter(s) (out of 6).

 Inputs:
    u(1)  Slip on front left tire(t) [ratio]
    u(2)  Slip on front right tire(t) [ratio]
    u(3)  Slip on rear left tire(t) [ratio]
    u(4)  Slip on rear right tire(t) [ratio]
    u(5)  Steering angle(t) [rad]
 States:                                         Initial value
    x(1)  Longitudinal vehicle velocity(t) [m/s]   xinit@exp1   1   (fixed) in ]0, Inf]
    x(2)  Lateral vehicle velocity(t) [m/s]        xinit@exp1   0   (fixed) in [-Inf, Inf]
    x(3)  Yaw rate(t) [rad/s]                      xinit@exp1   0   (fixed) in [-Inf, Inf]
 Outputs:
    y(1)  Long. velocity(t) [m/s]
    y(2)  Lat. accel.(t) [m/s^2]
    y(3)  Yaw rate(t) [rad/s]
 Parameters:                                 Value
    p1   Vehicle mass [kg]                         1700      (fixed) in ]0, Inf]
    p2   Distance from front axle to COG [m]        1.5      (fixed) in ]0, Inf]
    p3   Distance from rear axle to COG [m]         1.5      (fixed) in ]0, Inf]
    p4   Longitudinal tire stiffness [N]         150000      (estimated) in ]0, Inf]
    p5   Lateral tire stiffness [N/rad]           40000      (estimated) in ]0, Inf]
    p6   Air resistance coefficient [1/m]           0.5      (fixed) in ]0, Inf]

Name: Bicycle vehicle model

Status:                                                         
Created by direct construction or transformation. Not estimated.
More information in model's "Report" property.

输入-输出数目据

此时,我们加载可用的输入-输出数目据。该文件包含来自三个不同试验的数据:

  A. Simulated data with high stiffness tires [y1 u1].
  B. Simulated data with low stiffness tires  [y2 u2].
  C. Measured data from a Volvo V70           [y3 u3].

在所有情况下,采样时间 Ts = 0.1 秒。

load('vehicledata');

A. 使用仿真高轮胎刚度数据进行系统辨识

在我们的第一次车辆辨识试验中,我们考虑了仿真的高轮胎刚度数据。首先创建模型结构 nlgr 的副本和反映此特定建模情况的 IDDATA 对象 z1。5 个输入信号存储在 u1 中,3 个输出信号存储在 y1 中。前轮的滑移输入(由车轮速度信号产生)被选择为具有恒定偏移的正弦波;偏航率也是正弦波,但幅度和频率不同。实际上,这是一种有点人为的情况,因为很少会在横向上对车辆产生如此大的刺激。

nlgr1 = nlgr;
nlgr1.Name = 'Bicycle vehicle model with high tire stiffness';
z1 = iddata(y1, u1, 0.1, 'Name', 'Simulated high tire stiffness vehicle data');
z1.InputName = nlgr1.InputName;
z1.InputUnit = nlgr1.InputUnit;
z1.OutputName = nlgr1.OutputName;
z1.OutputUnit = nlgr1.OutputUnit;
z1.Tstart = 0;
z1.TimeUnit = 's';

输入和输出显示在两个绘图图中。

h_gcf = gcf;
set(h_gcf,'DefaultLegendLocation','southeast');
h_gcf.Position = [100 100 795 634];
for i = 1:z1.Nu
   subplot(z1.Nu, 1, i);
   plot(z1.SamplingInstants, z1.InputData(:,i));
   title(['Input #' num2str(i) ': ' z1.InputName{i}]);
   xlabel('');
   axis tight;
end
xlabel([z1.Domain ' (' z1.TimeUnit ')']);

图 2:输入具有高轮胎刚度的车辆系统。

for i = 1:z1.Ny
   subplot(z1.Ny, 1, i);
   plot(z1.SamplingInstants, z1.OutputData(:,i));
   title(['Output #' num2str(i) ': ' z1.OutputName{i}]);
   xlabel('');
   axis tight;
end
xlabel([z1.Domain ' (' z1.TimeUnit ')']);

图 3:来自高轮胎刚度的车辆系统的输出。

下一步是调查初始模型的性能,为此我们进行仿真。请注意,由于第一个状态(纵向车辆速度)在模型结构中用作分母,因此初始状态已固定为非零值。绘图窗口中显示了真实输出和仿真输出(与初始模型)之间的比较。

clf
compare(z1, nlgr1, [], compareOptions('InitialCondition', 'model'));

图 4:真实输出与高轮胎刚度的初始车辆模型的仿真输出之间的比较。

为了提高模型拟合度,接下来估计两个轮胎刚度参数 Cx 和 Cy,并利用估计的模型进行新的仿真。

nlgr1 = nlgreyest(z1, nlgr1);

绘图窗口中显示了真实输出和仿真输出(与估计模型)之间的比较。

compare(z1, nlgr1, [], compareOptions('InitialCondition', 'model'));

图 5:真实输出与高轮胎刚度估计车辆模型的仿真输出之间的比较。

估计模型的仿真性能较好。估计的刚度参数也接近于 Simulink® 中用于生成真实输出数目据的参数:

disp('                        True      Estimated');
fprintf('Longitudinal stiffness: %6.0f    %6.0f\n', 2e5, nlgr1.Parameters(4).Value);
fprintf('Lateral stiffness     : %6.0f    %6.0f\n', 5e4, nlgr1.Parameters(5).Value);
                        True      Estimated
Longitudinal stiffness: 200000    198517
Lateral stiffness     :  50000     53752

B. 使用仿真低轮胎刚度数据进行系统辨识

在第二个试验中,我们重复了第一个试验的建模,但现在使用仿真的低轮胎刚度数据。

nlgr2 = nlgr;
nlgr2.Name = 'Bicycle vehicle model with low tire stiffness';
z2 = iddata(y2, u2, 0.1, 'Name', 'Simulated low tire stiffness vehicle data');
z2.InputName = nlgr2.InputName;
z2.InputUnit = nlgr2.InputUnit;
z2.OutputName = nlgr2.OutputName;
z2.OutputUnit = nlgr2.OutputUnit;
z2.Tstart = 0;
z2.TimeUnit =  's';

输入和输出显示在两个绘图图中。

clf
for i = 1:z2.Nu
   subplot(z2.Nu, 1, i);
   plot(z2.SamplingInstants, z2.InputData(:,i));
   title(['Input #' num2str(i) ': ' z2.InputName{i}]);
   xlabel('');
   axis tight;
end
xlabel([z2.Domain ' (' z2.TimeUnit ')']);

图 6:输入至轮胎刚度较低的车辆系统。

clf
for i = 1:z2.Ny
   subplot(z2.Ny, 1, i);
   plot(z2.SamplingInstants, z2.OutputData(:,i));
   title(['Output #' num2str(i) ': ' z2.OutputName{i}]);
   xlabel('');
   axis tight;
end
xlabel([z2.Domain ' (' z2.TimeUnit ')']);

图 7:来自轮胎刚度较低的车辆系统的输出。

接下来我们研究初始模型(具有与初始高轮胎刚度模型相同的参数)的性能。绘图窗口中显示了真实输出和仿真输出(与初始模型)之间的比较。

clf
compare(z2, nlgr2, [], compareOptions('InitialCondition', 'model'));

图 8:真实输出与低轮胎刚度的初始车辆模型的仿真输出之间的比较。

接下来估计两个刚度参数。

nlgr2 = nlgreyest(z2, nlgr2);

绘图窗口中显示了真实输出和仿真输出(与估计模型)之间的比较。

compare(z2, nlgr2, [], compareOptions('InitialCondition', 'model'));

图 9:低轮胎刚度估计车辆模型的真实输出与仿真输出之间的比较。

估计模型的仿真性能再次非常好。即使使用与高轮胎刚度情况相同的参数起点,估计的刚度参数也接近于 Simulink 中用于生成真实输出数目据的参数:

disp('                        True      Estimated');
fprintf('Longitudinal stiffness: %6.0f    %6.0f\n', 1e5, nlgr2.Parameters(4).Value);
fprintf('Lateral stiffness     : %6.0f    %6.0f\n', 2.5e4, nlgr2.Parameters(5).Value);
                        True      Estimated
Longitudinal stiffness: 100000     99573
Lateral stiffness     :  25000     26117

C. 使用测量的沃尔沃 V70 数据进行系统辨识

在最后的试验中,我们考虑在沃尔沃 V70 中收集的数据。和上面一样,我们复制通用车辆模型对象 nlgr,并创建一个包含测量数据的新 IDDATA 对象。这里我们还将空气阻力系数从 0.50 增加到 0.70,以更好地反映沃尔沃 V70 的情况。

nlgr3 = nlgr;
nlgr3.Name = 'Volvo V70 vehicle model';
nlgr3.Parameters(6).Value = 0.70;   % Use another initial CA for the Volvo data.
z3 = iddata(y3, u3, 0.1, 'Name', 'Volvo V70 data');
z3.InputName = nlgr3.InputName;
z3.InputUnit = nlgr3.InputUnit;
z3.OutputName = nlgr3.OutputName;
z3.OutputUnit = nlgr3.OutputUnit;
z3.Tstart = 0;
z3.TimeUnit = 's';

输入和输出显示在两个绘图图中。可以看出,测量数据含有不少噪声。

clf
for i = 1:z3.Nu
   subplot(z3.Nu, 1, i);
   plot(z3.SamplingInstants, z3.InputData(:,i));
   title(['Input #' num2str(i) ': ' z3.InputName{i}]);
   xlabel('');
   axis tight;
end
xlabel([z3.Domain ' (' z3.TimeUnit ')']);

图 10:从沃尔沃 V70 车辆测量的输入。

clf
for i = 1:z3.Ny
   subplot(z3.Ny, 1, i);
   plot(z3.SamplingInstants, z3.OutputData(:,i));
   title(['Output #' num2str(i) ': ' z3.OutputName{i}]);
   xlabel('');
   axis tight;
end
xlabel([z3.Domain ' (' z3.TimeUnit ')']);

图 11:从沃尔沃 V70 车辆测量的输出。

接下来,我们研究估计初始状态的初始模型的性能。绘图窗口中显示了真实输出和仿真输出(与初始模型)之间的比较。

nlgr3 = setinit(nlgr3, 'Value', {18.7; 0; 0});   % Initial value of initial states.
clf
compare(z3, nlgr3);

图 12:测量输出与初始沃尔沃 V70 车型的仿真输出之间的比较。

接下来估计轮胎刚度参数 Cx 和 Cy,在这种情况下使用 Levenberg-Marquardt 搜索方法,然后使用估计模型进行新的仿真。另外,我们在这里估计纵向速度的初始值,而横向速度和横摆角速度的初始值保持不变。

nlgr3 = setinit(nlgr3, 'Fixed', {false; true; true});
nlgr3 = nlgreyest(z3, nlgr3, nlgreyestOptions('SearchMethod', 'lm'));

绘图窗口中显示了真实输出和仿真输出(与估计模型)之间的比较。

compare(z3, nlgr3);

图 13:测量输出与第一个估计的沃尔沃 V70 车型的仿真输出之间的比较。

最终沃尔沃 V70 模型的刚度参数估计是合理的,但它们的真实值是多少尚不清楚。

disp('                        Estimated');
fprintf('Longitudinal stiffness: %6.0f\n', nlgr3.Parameters(4).Value);
fprintf('Lateral stiffness     : %6.0f\n', nlgr3.Parameters(5).Value);
                        Estimated
Longitudinal stiffness: 108873
Lateral stiffness     :  29964

通过 PRESENT 可以获得有关估计的沃尔沃 V70 车型的详细信息。值得注意的是,与估计的横向轮胎刚度相关的不确定性相当高(并且明显高于纵向轮胎刚度)。这种不确定性部分源于试驾过程中横向加速度变化很小。

present(nlgr3);
nlgr3 =

Continuous-time nonlinear grey-box model defined by 'vehicle_c' (MEX-file):

   dx/dt = F(t, x(t), u(t), p1, ..., p6)
    y(t) = H(t, x(t), u(t), p1, ..., p6) + e(t)

 with 5 input(s), 3 state(s), 3 output(s), and 2 free parameter(s) (out of 6).

 Inputs:
    u(1)  Slip on front left tire(t) [ratio]
    u(2)  Slip on front right tire(t) [ratio]
    u(3)  Slip on rear left tire(t) [ratio]
    u(4)  Slip on rear right tire(t) [ratio]
    u(5)  Steering angle(t) [rad]
 States:                                         Initial value
    x(1)  Longitudinal vehicle velocity(t) [m/s]   xinit@exp1   17.6049   (estimated) in ]0, Inf]
    x(2)  Lateral vehicle velocity(t) [m/s]        xinit@exp1         0   (fixed) in [-Inf, Inf]
    x(3)  Yaw rate(t) [rad/s]                      xinit@exp1         0   (fixed) in [-Inf, Inf]
 Outputs:
    y(1)  Long. velocity(t) [m/s]
    y(2)  Lat. accel.(t) [m/s^2]
    y(3)  Yaw rate(t) [rad/s]
 Parameters:                                    ValueStandard Deviation
    p1   Vehicle mass [kg]                          1700            0   (fixed) in ]0, Inf]
    p2   Distance from front axle to COG [m]         1.5            0   (fixed) in ]0, Inf]
    p3   Distance from rear axle to COG [m]          1.5            0   (fixed) in ]0, Inf]
    p4   Longitudinal tire stiffness [N]          108873      26.8501   (estimated) in ]0, Inf]
    p5   Lateral tire stiffness [N/rad]          29963.5      217.877   (estimated) in ]0, Inf]
    p6   Air resistance coefficient [1/m]            0.7            0   (fixed) in ]0, Inf]

Name: Volvo V70 vehicle model

Status:                                                                        
Termination condition: Maximum number of iterations reached..                  
Number of iterations: 20, Number of function evaluations: 41                   
                                                                               
Estimated using Solver: ode45; Search: lm on time domain data "Volvo V70 data".
Fit to estimation data: [-374.2;29.74;34.46]%                                  
FPE: 2.362e-07, MSE: 0.3106                                                    
More information in model's "Report" property.

结束语

在实践中,估计轮胎刚度参数是一个相当复杂的问题。首先,上述模型结构中引入的近似值适用于相当狭窄的运行区域,并且不能使用高加速、制动等过程中的数据。刚度还会随着环境条件而变化,例如周围温度、轮胎温度和路面状况,而这些在所使用的模型结构中并未考虑。其次,刚度参数的估计很大程度上依赖于驾驶风格。当像第三次辨识试验那样大部分进行直线运动时,刚度参数(尤其是横向参数)就变得难以估计,或者换句话说,参数的不确定性变得相当高。