www.gusucode.com > 自适应巡航控制示例,matlab代码,可运行 > AdaptiveCruiseControlExample.m
%% Adaptive Cruise Control System Using Model Predictive Control % This example shows how to use a model predictive controller (MPC) to % implement an adaptive cruise control (ACC) system. % Copyright 2016 The MathWorks, Inc. %% Adaptive Cruise Control System % An ACC equipped vehicle (host car) has a sensor, such as radar, that % measures the distance to the preceding vehicle in the same lane (lead % car), as well as the relative velocity of the lead car. The ACC system % operates in two modes: _speed control_ and _spacing control_. % % * In speed control, the host car travels at a driver-set speed. % * In spacing control, the host car maintains a safe distance from the % lead car. % % The ACC system decides which mode to use based on real-time radar % measurements. For example, if the lead car is too close, the ACC system % switches from speed control to spacing control. Similarly, if the lead % car is further away, the ACC system switches from spacing control to % speed control. In other words, the ACC system makes the host car travel % at a driver-set speed as long as a safe distance is maintained. % % In this example, to achieve speed control or spacing control, the ACC % system manipulates acceleration. %% ACC System Design % Open the Simulink model. The ACC system is modeled using the Adaptive % Cruise Control System subsystem block in Simulink. mdl = 'mpcACCsystem'; open_system(mdl) %% % The inputs to the ACC system are: % % * Driver-set velocity $V_{set}$ % * Velocity of the host car $V_{host}$ % * Actual distance to the lead car $D_{act}$ (from radar) % * Velocity of the lead car $V_{lead}$ (from radar) % % The output for the ACC system is the acceleration of the host car. % % The dynamics between acceleration and velocity are modeled as: % % $$ \frac{1}{s(0.5s+1)} $$ % % which approximates the dynamics of the throttle body and vehicle % inertia. The same transfer function applies to both the host car and % lead car. % % The safe distance between the lead car and the host car is a function % of the velocity of the host car, $V_{host}$: % % $$ D_{safe} = 10 + 1.4\times V_{host} $$ % % where |10| (m) is the standstill distance and |1.4| (sec) is the time % gap. % % The following rules are used to determine the ACC system operating mode: % % * If $D_{act} \geq D_{safe}$, then speed control mode is active. The % control goal is to track the driver-set velocity, $V_{set}$. % % * If $D_{act} < D_{safe}$, then spacing control mode is active. The % control goal is to maintain the safe distance, $D_{safe}$. % % <<../mpcACCsystem.png>> % % Specify the initial conditions for the two vehicles. x0_lead = 50; % initial position for lead car (m) v0_lead = 25; % initial velocity for lead car (m/s) x0_host = 10; % initial position for host car (m) v0_host = 20; % initial velocity for host car (m/s) a0_host = 0; % initial acceleration for host car (m/s^2) %% % Specify the target driver-set velocity in m/s. v_set = 30; %% % Define the sample time, |Ts|, and simulation duration, |T|, in seconds. Ts = 0.1; T = 80; %% % To approximate a realistic driving environment, vary the acceleration of % the lead car during the simulation. a0_lead.time = (0:0.1:T)'; a0_lead.signals.values = 0.6*sin(a0_lead.time/5); a0_lead.signals.dimensions = 1; %% MPC Structure % In this example, the ACC is implemented using a linear MPC. ACC = [mdl '/Adaptive Cruise Control System']; open_system(ACC) %% % The MPC controller has: % % * Two measured outputs (MO): Spacing error, $e = D_{act}-D_{safe}$, and % host car velocity, $V_{host}$. The spacing error should have a lower % bound of |0| to maintain the safe distance. The desired host car velocity % is the driver-set velocity, $V_{set}$. % % * One manipulated variable (MV): Host car acceleration, $a$. Considering % the physical limitations of the vehicle dynamics, the acceleration is % constrained to be within $[-3,2]$ ($m/s^2$). % % * One measured disturbance (MD): Lead car velocity, $V_{lead}$, % which allows MPC to predict its impact on the spacing error. %% % Given this MPC structure, define the linear prediction model by % linearizing the Simulink model at the initial operating point. This step % requires Simulink(R) Control Design(TM) software. % % Specify analysis points for linearization. io(1) = linio([ACC '/MPC'],1,'openinput'); % MV: acceleration io(2) = linio([mdl '/Lead Car/Sum1'],1,'openinput'); % MD: lead velocity io(3) = linio([ACC '/Sum1'],1,'output'); % OV(1): spacing error io(4) = linio([mdl '/Host Car'],2,'output'); % OV(2): host velocity %% % Linearize the plant and obtain a minimum realization of the resulting % linear model. sys = linearize(mdl,io); sys = minreal(sys); %% % Specify the MPC signal types in the plant. sys = setmpcsignals(sys,'MV',1,'MD',2); %% MPC Design % To design a model predictive controller for the plant model, first create % an MPC controller using a default prediction horizon (|10| steps) and % control horizon (|2| moves). mpc1 = mpc(sys,Ts); %% % Specify the controller nominal values based on the simulation initial % conditions. mpc1.Model.Nominal.Y(1) = (x0_lead-x0_host) - (10+1.4*v0_host); mpc1.Model.Nominal.Y(2) = v0_host; mpc1.Model.Nominal.U(1) = a0_host; mpc1.Model.Nominal.U(2) = v0_lead; %% % Specify scale factors based on the operating ranges of the variables. mpc1.MV.ScaleFactor = 5; % range of acceleration is 2 - (-3) mpc1.DV.ScaleFactor = 30; % assume same as host car speed limit mpc1.OV(1).ScaleFactor = 10; % typical spacing error mpc1.OV(2).ScaleFactor = 30; % host car ACC speed limit %% % Specify MV constraints. mpc1.MV.Min = -3; % maximum deceleration mpc1.MV.Max = 2; % maximum acceleration %% % Specify OV constraints. To achieve spacing control, set the minimum % spacing error contraint to |0|. mpc1.OV(1).Min = 0; %% % Specify weights. To achieve speed control, use a nonzero weight on the % host car velocity. mpc1.Weights.OV = [0 1]; %% % If the spacing error constraint is active, the controller treats the % constraint violation as a higher priority over reference tracking. In % this case, the ACC system is in spacing control mode and maintains a % safe distance. % % If the spacing error constraint is inactive, the controller performs % reference tracking. In this case, the ACC system is in speed control mode % and achieves the driver-set cruising velocity. %% % Write the MPC controller to the Simulink block. set_param([ACC '/MPC'],'mpcobj','mpc1') %% Simulation Analysis % Run the simulation with the designed model predictive controller. sim(mdl) %% % Plot the simulation result. mpcACCplot(logsout) %% % In the first 3 seconds, to reach the driver-set velocity, the host car % accelerates at full throttle. % % From 3 to 13 seconds, the lead car accelerates slowly. As a result, to % maintain a safe distance to the lead car, the host car accelerates with a % much slower rate. % % From 13 to 25 seconds, the host car maintains the driver-set velocity, as % shown in the *Velocity* plot. However, as the lead car reduces speed, the % spacing error starts approaching 0 after 20 seconds. % % From 25 to 45 seconds, the lead car slows down and then accelerates % again. The host car maintains a safe distance from the lead car, as shown % in the *Distance* and *Spacing error* plots, by adjusting its speed. % % From 45 to 56 seconds, the spacing error is above 0. Therefore, the host % car achieves the driver-set velocity again. % % From 56 to 76 seconds, the deceleration/acceleration sequence from the 25 % to 25 second interval is repeated. %% % In this example, an adaptive cruise control system is designed using % model predictive control. The design guarantees that the actual distance % between the two vehicles is greater than a safe distance. If the actual % distance is sufficiently large, then the design guarantees that the % vehicle follows the driver-set velocity. This example demonstrates that % the control objectives and constraints required by the ACC system can be % achieved using MPC. %% bdclose(mdl)