В этом примере показано, как спроектировать контроллер, следующий за полосой движения, с помощью блока «Контроллер прогнозирования нелинейной модели». В этом примере выполняется следующее:
Спроектируйте нелинейный контроллер ПДК (NLMPC) для следования по полосе.
Сравните производительность NLMPC с адаптивным MPC.
Система отслеживания полосы движения представляет собой систему управления, которая удерживает транспортное средство, движущееся вдоль осевой линии полосы движения по шоссе, при сохранении заданной пользователем скорости. Сценарий следования по полосам показан на следующем рисунке.

Система контроля полосы движения управляет как продольным ускорением, так и углом переднего рулевого управления транспортного средства, с тем чтобы:
Держите боковое отклонение
и относительный угол рыскания
маленькими.
Держите продольную скорость
близкой к заданной скорости привода.
Сбалансировать вышеуказанные две цели, когда они не могут быть достигнуты одновременно.
В отдельном примере вспомогательного средства поддержания полосы предполагается, что продольная скорость является постоянной. Дополнительные сведения см. в разделе Система помощи при сохранении полосы движения с использованием управления прогнозом модели. Это ограничение ослабляется в этом примере, потому что продольное ускорение изменяется в этой системе управления MIMO.
Другой пример дополняет систему следования по полосе с регулированием расстояния, где также поддерживается безопасное расстояние от обнаруженного ведущего автомобиля. Дополнительные сведения см. в разделе Контроль за дорожкой с помощью слияния датчиков и обнаружение полосы.
Откройте модель Simulink.
mdl = 'LaneFollowingNMPC';
open_system(mdl)

Эта модель содержит четыре основных компонента:
Vehicle Dynamics: применять велосипедный режим боковой динамики транспортного средства и аппроксимировать продольную динамику с помощью постоянной времени.
Sensor Dynamics: аппроксимация датчика, например камеры, для вычисления бокового отклонения и относительного угла рыскания.
Lane Follow Controller: моделирование нелинейных MPC и адаптивных MPC.
Средство предварительного просмотра кривизны: определите кривизну на текущем временном шаге и последовательность кривизны на горизонте прогнозирования контроллера MPC.
Динамика автомобиля и сенсорная динамика более подробно обсуждаются в Adaptive Cruise Control with Sensor Fusion. В этом примере применяется одна и та же модель для динамики транспортного средства и датчика.
Необходимые параметры динамики транспортного средства и кривизны дороги определяются с помощью LaneFollowingUsingNMPCData сценарий, который является PreLoadFcn обратный вызов модели.
Модель прогнозирования непрерывного времени для NLMPC имеет следующие уравнения состояния и вывода. Уравнения состояния определены в LaneFollowingStateFcn.


Модель прогнозирования включает в себя модель неизмеренного возмущения (UD). Модель UD описывает, какой тип неизмеренного нарушения NLMPC ожидает встретить и отбраковать на заводе. В этом примере UD-модель является интегратором, входным сигналом которого является белый шум. Его выход добавляется к относительному углу рыскания. Поэтому контроллер ожидает случайного ступенчатого неизмеренного возмущения, возникающего на выходе с относительным углом рыскания, и готов отклонить его, когда это произойдет.
Создайте нелинейный контроллер MPC с моделью прогнозирования, которая имеет семь состояний, три выхода и два входа. Модель имеет два сигнала СН: ускорение и рулевое управление. Произведение кривизны дороги и продольной скорости моделируется как измеренное возмущение, а неизмеренное возмущение моделируется белым шумом.
nlobj = nlmpc(7,3,'MV',[1 2],'MD',3,'UD',4);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Укажите время выборки контроллера, горизонт прогнозирования и горизонт управления.
nlobj.Ts = Ts; nlobj.PredictionHorizon = 10; nlobj.ControlHorizon = 2;
Укажите функцию состояния для нелинейной модели завода и ее якобиана.
nlobj.Model.StateFcn = @(x,u) LaneFollowingStateFcn(x,u); nlobj.Jacobian.StateFcn = @(x,u) LaneFollowingStateJacFcn(x,u);
Укажите функцию вывода для нелинейной модели завода и ее якобиана. Выходные переменные:
Продольная скорость
Боковое отклонение
Сумма возмущений на выходе угла рыскания и угла рыскания
nlobj.Model.OutputFcn = @(x,u) [x(3);x(5);x(6)+x(7)]; nlobj.Jacobian.OutputFcn = @(x,u) [0 0 1 0 0 0 0;0 0 0 0 1 0 0;0 0 0 0 0 1 1];
Задайте ограничения для переменных, которыми манипулируют.
nlobj.MV(1).Min = -3; % Maximum acceleration 3 m/s^2 nlobj.MV(1).Max = 3; % Minimum acceleration -3 m/s^2 nlobj.MV(2).Min = -1.13; % Minimum steering angle -65 nlobj.MV(2).Max = 1.13; % Maximum steering angle 65
Задайте масштабные коэффициенты.
nlobj.OV(1).ScaleFactor = 15; % Typical value of longitudinal velocity nlobj.OV(2).ScaleFactor = 0.5; % Range for lateral deviation nlobj.OV(3).ScaleFactor = 0.5; % Range for relative yaw angle nlobj.MV(1).ScaleFactor = 6; % Range of steering angle nlobj.MV(2).ScaleFactor = 2.26; % Range of acceleration nlobj.MD(1).ScaleFactor = 0.2; % Range of Curvature
Укажите веса в стандартной функции затрат MPC. Третий выход, угол рыскания, может плавать, потому что есть только две манипулируемые переменные, чтобы сделать его квадратной системой. В этом примере не существует ошибки установившегося состояния в угле рыскания до тех пор, пока второй выходной сигнал, боковое отклонение, достигает 0 в установившемся состоянии.
nlobj.Weights.OutputVariables = [1 1 0];
Штрафовать изменения ускорения больше для плавного вождения.
nlobj.Weights.ManipulatedVariablesRate = [0.3 0.1];
Проверка функций модели прогнозирования в произвольной рабочей точке с помощью validateFcns команда. В этой рабочей точке:
x0 содержит значения состояния.
u0 содержит входные значения.
ref0 содержит выходные ссылочные значения.
md0 содержит измеренное значение возмущения.
x0 = [0.1 0.5 25 0.1 0.1 0.001 0.5];
u0 = [0.125 0.4];
ref0 = [22 0 0];
md0 = 0.1;
validateFcns(nlobj,x0,u0,md0,{},ref0);
Model.StateFcn is OK. Jacobian.StateFcn is OK. Model.OutputFcn is OK. Jacobian.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
В этом примере расширенный калмановый фильтр (EKF) обеспечивает оценку состояния для семи состояний. Функция перехода состояния для EKF определена в LaneFollowingEKFStateFcn, и функция измерения определена в LaneFollowingEKFMeasFcn.
Адаптивный контроллер MPC (AMPC) также разработан с использованием блока системы управления по пути в этом примере. Этот контроллер использует линейную модель для динамики транспортного средства и обновляет модель в оперативном режиме по мере изменения продольной скорости.
На практике, если решение линейного управления, такое как адаптивный MPC или MPC с запланированным коэффициентом усиления, может обеспечить сравнимую эффективность управления по сравнению с нелинейным MPC, вы будете реализовывать решение линейного управления, поскольку оно более эффективно с точки зрения вычислений.
Для сравнения результатов NLMPC и AMPC смоделируйте модель и сохраните записанные данные.
Сначала смоделируйте модель с помощью нелинейного MPC. Для этого установите controller_type кому 1.
controller_type = 1; sim(mdl) logsout1 = logsout;
Во-вторых, смоделировать модель с помощью адаптивного MPC. Для этого установите controller_type кому 2.
controller_type = 2; sim(mdl) logsout2 = logsout;
Assuming no disturbance added to measured output channel #1. Assuming no disturbance added to measured output channel #2. -->Assuming output disturbance added to measured output channel #3 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Постройте график и сравните результаты моделирования.
LaneFollowingCompareResults(logsout1,logsout2)


На первом графике как нелинейные MPC, так и адаптивные MPC дают почти одинаковые угловые профили рулевого управления. Боковое отклонение и относительный угол рыскания при маневре близки к нулю. Этот результат подразумевает, что транспортное средство движется по требуемой траектории.
Команда продольного управления и производительность для нелинейных и адаптивных MPC несколько отличаются. Нелинейный контроллер MPC имеет более плавную команду ускорения и лучшее отслеживание заданной скорости, хотя результат адаптивного MPC также приемлем.
Можно также просмотреть результаты с помощью Области выходных данных (Scopes of Outputs) и Входные данные (Inputs) в модели.
Установите вариант контроллера в нелинейный MPC.
controller_type = 1;
В этом примере показано, как спроектировать контроллер прогнозирования нелинейной модели для следования по полосе. Сравниваются характеристики использования нелинейных MPC и адаптивных MPC. Можно выбрать нелинейный MPC или адаптивный MPC в зависимости от информации моделирования и вычислительной мощности приложения.
bdclose(mdl)
nlmpc | Нелинейный контроллер MPC