www.gusucode.com > ident_featured 案例代码 matlab源码程序 > ident_featured/idnlgreydemo5.m
%% Friction Modeling: MATLAB File Modeling of Static SISO System % This example shows grey-box modeling of a static single-input, % single-output system using a MATLAB function as the ODE file. % % System identification normally deals with identifying parameters of % dynamic models. However, static models are also of interest, sometimes on % their own and sometimes as sub-models of larger more involved models. An % example of the latter is discussed in the case study "An Industrial Robot % Arm" (idnlgreydemo13.m), where a static friction model is employed as a % fixed (pre-estimated) component of a robot arm model. % % We discuss how to represent static friction phenomenon as an IDNLGREY % model and estimate the corresponding coefficients. % Copyright 2005-2015 The MathWorks, Inc. %% A Continuously Differentiable Friction Model % Discontinuous and piecewise continuous friction models are often % problematic for high-performance continuous controllers. This very fact % motivated Makkar, Dixon, Sawyer and Hu to suggest a new continuously % and differentiable friction model that captures the most common friction % phenomena encountered in practice. The new friction model structure was % reported in % % C. Makkar, W. E. Dixon, W. G. Sawyer, and G.Hu "A New Continuously % Differentiable Friction Model for Control Systems Design", IEEE(R)/ASME % International Conference on Advanced Intelligent Mechatronics, % Monterey, CA, 2005, pages 600-605. % % and will serve as a basis for our static identification experiments. %% % The friction model proposed by Makkar, et al, links the slip speed v(t) % of a body in contact with another body to the friction force f(t) via the % static relationship % % f(t) = g(1)*(tanh(g(2)*v(t) - tanh(g(3)*v(t)) % + g(4)*tanh(g(5)*v(t)) + g(6)*v(t) % % where g(1), ..., g(6) are 6 unknown positive parameters. This model % structure displays a number of nice properties arising in real-world % applications: % % 1. The friction model is symmetric around the origin. % 2. The static friction coefficient is approximated by g(1)+g(4). % 3. The first term of the equation, tanh(g(2)*v(t) - tanh(g(3)*v(t), % captures the so called Striebeck effect, where the friction term % shows a rather sudden drop with increasing slip speed near the % origin. % 4. The Coulombic friction effect is modeled by the term % g(4)*tanh(g(5)*v(t)). % 5. The viscous friction dissipation is reflected by the last term, % g(6)*v(t). % % Consult the above mentioned paper for many more details about friction % in general and the proposed model structure in particular. %% IDNLGREY Friction Modeling % Let us now create an IDNLGREY model object describing static friction. As % usual, the starting point is to write an IDNLGREY modeling file, and here % we construct a MATLAB file, friction_m.m, with contents as follows. % % function [dx, f] = friction_m(t, x, v, g, varargin) % %FRICTION_M Nonlinear friction model with Stribeck, Coulomb and viscous % % dissipation effects. % % % Output equation. % f = g(1)*(tanh(g(2)*v(1))-tanh(g(3)*v(1))) ... % Stribeck effect. % + g(4)*tanh(g(5)*v(1)) ... % Coulomb effect. % + g(6)*v(1); % Viscous dissipation term. % % % Static system; no states. % dx = []; % % Notice that a state update dx always must be returned by the model file % and that it should be empty ([]) in static modeling cases. %% % Our next step is to pass the model file, information about model order, % guessed parameter vector and so forth as input arguments to the IDNLGREY % constructor. We also specify names and units of the input and output and % state that all model parameters must be positive. FileName = 'friction_m'; % File describing the model structure. Order = [1 1 0]; % Model orders [ny nu nx]. Parameters = {[0.20; 90; 11; ... 0.12; 110; 0.015]}; % Initial parameters. InitialStates = []; % Initial initial states. Ts = 0; % Time-continuous system. nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, ... 'Name', 'Static friction model', ... 'InputName', 'Slip speed', 'InputUnit', 'm/s', ... 'OutputName', 'Friction force', 'OutputUnit', 'N', ... 'TimeUnit', 's'); nlgr = setpar(nlgr, 'Minimum', {zeros(5, 1)}); % All parameters must be >= 0. %% % After these actions we have an initial friction model with properties as % follows. present(nlgr); %% % In our identification experiments we are not only interested in the full % friction model, but also in examining how a reduced friction model would % perform. By reduced we here mean a friction model that contains two of % the three terms of the full model. To investigate this, three copies of % the full model structure are created and in each copy we fix the % parameter vector so that only two of the terms will contribute: nlgr1 = nlgr; nlgr1.Name = 'No Striebeck term'; nlgr1 = setpar(nlgr1, 'Value', {[zeros(3, 1); Parameters{1}(4:6)]}); nlgr1 = setpar(nlgr1, 'Fixed', {[true(3, 1); false(3, 1)]}); nlgr2 = nlgr; nlgr2.Name = 'No Coulombic term'; nlgr2 = setpar(nlgr2, 'Value', {[Parameters{1}(1:3); 0; 0; Parameters{1}(6)]}); nlgr2 = setpar(nlgr2, 'Fixed', {[false(3, 1); true(2, 1); false]}); nlgr3 = nlgr; nlgr3.Name = 'No dissipation term'; nlgr3 = setpar(nlgr3, 'Value', {[Parameters{1}(1:5); 0]}); nlgr3 = setpar(nlgr3, 'Fixed', {[false(5, 1); true]}); %% Input-Output Data % At our disposal are 2 different (simulated) data sets where the input % slip speed was swept from -10 m/s to 10 m/s in a ramp-type manner. We % load the data and create two IDDATA objects for our identification % experiments, ze for estimation and zv for validation purposes. load(fullfile(matlabroot, 'toolbox', 'ident', 'iddemos', 'data', 'frictiondata')); ze = iddata(f1, v, 1, 'Name', 'Static friction system'); set(ze, 'InputName', 'Slip speed', 'InputUnit', 'm/s', ... 'OutputName', 'Friction force', 'OutputUnit', 'N', ... 'Tstart', 0, 'TimeUnit', 's'); zv = iddata(f2, v, 1, 'Name', 'Static friction system'); set(zv, 'InputName', 'Slip speed', 'InputUnit', 'm/s', ... 'OutputName', 'Friction force', 'OutputUnit', 'N', ... 'Tstart', 0, 'TimeUnit', 's'); %% % The input-output data that will be used for estimation are shown in a % plot window. figure('Name', ze.Name); plot(ze); %% % *Figure 1:* Input-output data from a system exhibiting friction. %% Performance of the Initial Friction Models % With access to input-output data and four different initial friction % models the obvious question now is how good these models are? Let us % investigate this for the estimation data set through simulations carried % out by COMPARE: set(gcf,'DefaultLegendLocation','southeast'); compare(ze, nlgr, nlgr1, nlgr2, nlgr3); %% % *Figure 2:* Comparison between true output and the simulated outputs % of the four initial friction models. %% Parameter Estimation % None of the initial models are able to properly describe the true % output. To overcome this we estimate the model parameters of all four % model structures. We configure all estimations to perform at most 30 % iterations and to stop the iterations only in case the tolerance is % almost zero (which it in practice never will be for real-world data). % These computations will take some time. opt = nlgreyestOptions('Display', 'on'); opt.SearchOption.MaxIter = 30; opt.SearchOption.TolFun = eps; opt.EstCovar = false; nlgr = nlgreyest(nlgr, ze, opt); nlgr1 = nlgreyest(nlgr1, ze, opt); nlgr2 = nlgreyest(nlgr2, ze, opt); nlgr3 = nlgreyest(nlgr3, ze, opt); %% Performance of the Estimated Friction Models % The performance of the models are once again investigated by comparing % the true output with the simulated outputs of the four models as obtained % using COMPARE, but this time the comparison is based on the validation % data set zv. compare(zv, nlgr, nlgr1, nlgr2, nlgr3); %% % *Figure 3:* Comparison between true output and the simulated outputs % of the four estimated friction models. %% % For this system we clearly see that the full model outperforms the % reduced ones. Nevertheless, the reduced models seem to be able to capture % the effects they model rather well, and in each case estimation results % in a much better fit. The worst fit is obtained for the model where the % viscous dissipation term has been left out. The impressive fit of the % full model comes as no big surprise as its model structure coincide with % that used to generate the true output data. The parameters of the full % model are also close to the ones that were used to generate the true % model output: disp(' True Estimated parameter vector'); ptrue = [0.25; 100; 10; 0.1; 100; 0.01]; fprintf(' %7.3f %7.3f\n', [ptrue'; getpvec(nlgr)']); %% % The Final Prediction Error (FPE) criterion (low values are good) applied % to all four friction models confirms the superiority of the full friction % model: fpe(nlgr, nlgr1, nlgr2, nlgr3); %% % As for dynamic systems, we can also examine the prediction errors of a % static model using PE. We do this for the full friction model and % conclude that the residuals seem to have a random nature: pe(zv, nlgr); %% % *Figure 4:* Prediction errors obtained with the estimated full friction % model. %% % We further verify the randomness by looking at the residuals % ("leftovers") of the full friction model: figure('Name', [nlgr.Name ': residuals of estimated IDNLGREY model']); resid(zv, nlgr); %% % *Figure 5:* Residuals obtained with the estimated full friction model. %% % The step response of static models can also be computed and plotted. Let % us apply a unit step and do this for all four estimated friction models: figure('Name', [nlgr.Name ': step responses of estimated models']); step(nlgr, nlgr1, nlgr2, nlgr3); legend(nlgr.Name, nlgr1.Name, nlgr2.Name, nlgr3.Name, 'location', 'SouthEast'); %% % *Figure 6:* Unit step responses of the four estimated friction models. %% % We finally display a number of properties, like the estimated standard % deviations of the parameters, the loss function, etc., of the full % friction model. present(nlgr); %% Conclusions % This example showed how to perform IDNLGREY modeling of a static system. % The procedure for doing this is basically the same as for dynamic % systems' modeling. %% Additional Information % For more information on identification of dynamic systems with System Identification Toolbox(TM) % visit the % <http://www.mathworks.com/products/sysid/ System Identification Toolbox> % product information page.