В этом примере показана конструкция гибридного контроллера для автоматического поиска и парковки. Гибридный контроллер использует модельный прогнозирующий контроль (MPC), чтобы следовать опорному пути на стоянке, и обученный агент обучения усилению (RL) для выполнения маневра парковки.
Алгоритм автоматической парковки в этом примере выполняет ряд маневров, одновременно считывая и избегая препятствий в стесненных местах. Он переключается между адаптивным контроллером MPC и агентом RL для выполнения маневра парковки. Контроллер MPC перемещает транспортное средство с постоянной скоростью по опорному пути, в то время как алгоритм ищет пустое парковочное место. Когда пятно найдено, Агент RL берет на себя управление и выполняет предварительно обученный маневр парковки. Контролерам предоставляется предварительное знание окружающей среды (места стоянки), включая расположение пустых мест и припаркованных транспортных средств.
Автостоянка представлена ParkingLot класс, в котором хранится информация об эго-транспортном средстве, пустых местах стоянки и статических препятствиях (припаркованных автомобилях). Каждое парковочное место имеет уникальный индексный номер и индикатор зеленого (свободный) или красного (занятый) цвета. Припаркованные транспортные средства представлены чёрным цветом.
Создать ParkingLot объект со свободным пятном в позиции 7.
freeSpotIdx = 7; map = ParkingLot(freeSpotIdx);

Укажите начальную позу для эго-транспортного средства. Целевая поза определяется на основе первого доступного свободного места при навигации транспортного средства по стоянке.
egoInitialPose = [20, 15, 0];
Вычислите целевую позу для транспортного средства с помощью createTargetPose функция. Целевая поза соответствует местоположению в freeSpotIdx.
egoTargetPose = createTargetPose(map,freeSpotIdx)
egoTargetPose = 1×3
47.7500 4.9000 -1.5708
Алгоритм парковки использует датчики камеры и лидара для сбора информации из окружающей среды.
Поле зрения камеры, установленной на эго-транспортном средстве, представлено областью, закрашенной зеленым цветом на следующем рисунке. Камера имеет поле зрения, ограниченное градусами, и максимальную глубину измерения dmax 10 м.

Когда эго-транспортное средство движется вперед, модуль камеры распознает места парковки, которые попадают в поле зрения, и определяет, свободно или занято место. Для простоты это действие реализуется с использованием геометрических отношений между местоположениями пятна и текущей позой транспортного средства. Парковочное место находится в пределах диапазона камеры, если и , где - расстояние до парковочного места, а - угол до парковочного места.
Агент обучения усилению использует показания лидарных датчиков для определения близости эго-транспортного средства к другим транспортным средствам в окружающей среде. Лидарный датчик в этом примере также моделируется с использованием геометрических отношений. Лидарные расстояния измеряются вдоль 12 отрезков линии, которые радиально выходят из центра эго-транспортного средства. Когда лидарная линия пересекает препятствие, она возвращает расстояние препятствия от транспортного средства. Максимальное измеримое расстояние лидара вдоль любого отрезка линии составляет 6 м.

Модель парковочного шкафа, включая контроллеры, эго-транспортное средство, датчики и стоянку, реализована в Simulink ®.
Загрузите параметры устройства автоматической парковки.
autoParkingValetParams
Откройте модель Simulink.
mdl = 'rlAutoParkingValet';
open_system(mdl)
Динамика эго-транспортного средства в данной модели представлена однопутной велосипедной моделью с двумя входами: скорость транспортного средства (м/с) и угол рулевого управления (радианы). Контроллеры MPC и RL помещаются в блоки включенной подсистемы, которые активируются сигналами, представляющими, должно ли транспортное средство искать пустое место или выполнять маневр парковки. Разрешающие сигналы определяются алгоритмом Camera в подсистеме Vehicle Mode. Первоначально транспортное средство находится в режиме поиска, и контроллер MPC отслеживает опорный путь. При обнаружении свободного места активизируется режим парковки, и агент RL выполняет маневр парковки.
Создайте адаптивный объект контроллера MPC для отслеживания опорной траектории с помощью createMPCForParking сценарий. Дополнительные сведения о адаптивном MPC см. в разделе Адаптивный MPC (Model Predictive Control Toolbox).
createMPCForParking
Среда для обучения агента RL представляет собой область, окрашенную красным цветом на следующем рисунке. Из-за симметрии на парковке обучение в этом регионе достаточно для того, чтобы политика подстраивалась под другие регионы после применения соответствующих преобразований координат к наблюдениям. Использование этого меньшего региона обучения значительно сокращает время обучения по сравнению с обучением на всей парковке.

Для этой среды:
Область обучения представляет собой пространство размером 22,5 м х 20 м с целевым пятном в его горизонтальном центре.
Наблюдениями являются погрешности и положения эго-транспортного средства по отношению к целевой позе, синус и косинус истинного угла курса и показания лидарного датчика.
Скорость транспортного средства во время стоянки - постоянная 2 м/с.
Сигналы воздействия представляют собой дискретные углы поворота, которые находятся в диапазоне +/- 45 градусов с шагом 15 градусов.
Транспортное средство считается припаркованным, если погрешности в отношении целевой позы находятся в пределах установленных допусков +/- 0,75 м (положение) и +/-10 градусов (ориентация).
Эпизод заканчивается, если эго-транспортное средство выходит за пределы тренировочной области, сталкивается с препятствием или успешно паркуется.
Вознаграждение , предоставленное в момент времени t, составляет:
+0.5e-40θe2-0.05δ2+100ft-50gt
В данном случае , и - ошибки положения и угла курса эго-транспортного средства из целевой позы, а - угол поворота рулевого управления. (0 или 1) указывает, было ли транспортное средство припарковано, и (0 или 1) указывает, столкнулось ли транспортное средство с препятствием в момент t.
Координатные преобразования в наблюдениях положения транспортного средства (X, Y, start) для различных мест стоянки являются следующими:
1-14: без преобразования
15-22:
23-36:
37-40:
41-52:
53-64:
Создайте спецификации наблюдения и действий для среды.
numObservations = 16; observationInfo = rlNumericSpec([numObservations 1]); observationInfo.Name = 'observations'; steerMax = pi/4; discreteSteerAngles = -steerMax : deg2rad(15) : steerMax; actionInfo = rlFiniteSetSpec(num2cell(discreteSteerAngles)); actionInfo.Name = 'actions'; numActions = numel(actionInfo.Elements);
Создайте интерфейс среды Simulink, указав путь к блоку агента RL.
blk = [mdl '/RL Controller/RL Agent'];
env = rlSimulinkEnv(mdl,blk,observationInfo,actionInfo);Укажите функцию сброса для обучения. autoParkingValetResetFcn функция сбрасывает начальную позу эго-транспортного средства на случайные значения в начале каждого эпизода.
env.ResetFcn = @autoParkingValetResetFcn;
Дополнительные сведения о создании сред Simulink см. в разделе rlSimulinkEnv.
Агент RL в этом примере является агентом ближней оптимизации политики (PPO) с пространством дискретных действий. Агенты PPO полагаются на представления актера и критика, чтобы узнать оптимальную политику. Агент поддерживает глубокие аппроксиматоры функций на основе нейронной сети для актера и критика. Дополнительные сведения об агентах PPO см. в разделе Агенты оптимизации проксимальной политики.
Установите генератор случайного начального числа для воспроизводимости.
rng(0)
Чтобы создать представления критиков, сначала создайте глубокую нейронную сеть с 16 входами и одним выходом. Выходной сигнал критической сети является функцией значения состояния для конкретного наблюдения.
criticNetwork = [
featureInputLayer(numObservations,'Normalization','none','Name','observations')
fullyConnectedLayer(128,'Name','fc1')
reluLayer('Name','relu1')
fullyConnectedLayer(128,'Name','fc2')
reluLayer('Name','relu2')
fullyConnectedLayer(128,'Name','fc3')
reluLayer('Name','relu3')
fullyConnectedLayer(1,'Name','fc4')];Создайте критика для агента PPO. Дополнительные сведения см. в разделе rlValueRepresentation и rlRepresentationOptions.
criticOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1); critic = rlValueRepresentation(criticNetwork,observationInfo,... 'Observation',{'observations'},criticOptions);
Выходами сетей акторов являются вероятности принятия каждого возможного действия рулевого управления, когда транспортное средство находится в определенном состоянии. Создать актерскую глубокую нейронную сеть.
actorNetwork = [
featureInputLayer(numObservations,'Normalization','none','Name','observations')
fullyConnectedLayer(128,'Name','fc1')
reluLayer('Name','relu1')
fullyConnectedLayer(128,'Name','fc2')
reluLayer('Name','relu2')
fullyConnectedLayer(numActions, 'Name', 'out')
softmaxLayer('Name','actionProb')];Создайте стохастическое представление актера для агента PPO. Дополнительные сведения см. в разделе rlStochasticActorRepresentation.
actorOptions = rlRepresentationOptions('LearnRate',2e-4,'GradientThreshold',1); actor = rlStochasticActorRepresentation(actorNetwork,observationInfo,actionInfo,... 'Observation',{'observations'},actorOptions);
Укажите параметры агента и создайте агента PPO. Дополнительные сведения о параметрах агента PPO см. в разделе rlPPOAgentOptions.
agentOpts = rlPPOAgentOptions(... 'SampleTime',Ts,... 'ExperienceHorizon',200,... 'ClipFactor',0.2,... 'EntropyLossWeight',0.01,... 'MiniBatchSize',64,... 'NumEpoch',3,... 'AdvantageEstimateMethod',"gae",... 'GAEFactor',0.95,... 'DiscountFactor',0.998); agent = rlPPOAgent(actor,critic,agentOpts);
Во время тренировки агент собирает переживания, пока не достигнет горизонта опыта в 200 шагов или эпизод завершится, а затем тренируется из мини-партий из 64 переживаний в течение трех эпох. Коэффициент фиксации целевой функции 0,2 повышает стабильность обучения, а коэффициент дисконтирования 0,998 стимулирует долгосрочные вознаграждения. Дисперсию в критике на выходе уменьшают методом обобщенной оценки преимуществ с коэффициентом GAE 0,95.
В этом примере вы обучаете агента максимум 10000 эпизодов, причем каждый эпизод длится максимум 200 временных шагов. Обучение прекращается, когда достигнуто максимальное количество эпизодов или среднее вознаграждение за 100 эпизодов превышает 100.
Укажите параметры обучения с помощью rlTrainingOptions объект.
trainOpts = rlTrainingOptions(... 'MaxEpisodes',10000,... 'MaxStepsPerEpisode',200,... 'ScoreAveragingWindowLength',200,... 'Plots','training-progress',... 'StopTrainingCriteria','AverageReward',... 'StopTrainingValue',80);
Обучение агента с помощью train функция. Обучение этого агента - интенсивный вычислительный процесс, который занимает несколько минут. Чтобы сэкономить время при выполнении этого примера, загрузите предварительно подготовленный агент путем установки doTraining кому false. Чтобы обучить агента самостоятельно, установите doTraining кому true.
doTraining = false; if doTraining trainingStats = train(agent,env,trainOpts); else load('rlAutoParkingValetAgent.mat','agent'); end

Смоделировать модель для парковки транспортного средства в месте бесплатной парковки. Для моделирования парковки транспортного средства в различных местах измените местоположение свободного места в следующем коде.
freeSpotIdx = 7; % free spot location
sim(mdl);
Транспортное средство достигает целевой позы в пределах установленных допусков погрешности +/- 0,75 м (положение) и +/-10 градусов (ориентация).
Для просмотра положения и ориентации эго-транспортного средства откройте область «Ego Vehicle Pose».
