Обучите агента PPO для автоматической парковки

Этот пример демонстрирует проект гибридного контроллера для задачи автоматического поиска и парковки. Гибридный контроллер использует прогнозирующую модель (MPC), чтобы следовать по ссылке пути на парковке, и обученного агента обучения с подкреплением (RL), чтобы выполнить маневр парковки.

Алгоритм автоматической парковки в этом примере выполняет серию маневров, одновременно измеряя и избегая препятствий в плотных пространствах. Он переключается между адаптивным контроллером MPC и агентом RL, чтобы завершить маневр парковки. Контроллер MPC перемещает транспортное средство с постоянной скоростью по ссылке пути, в то время как алгоритм ищет пустое парковочное место. Когда место найдено, агент RL принимает и выполняет предварительно обученный маневр парковки. Контроллерам доступны предварительные знания об окружении (стоянке), включая местоположение пустых мест и припаркованных транспортных средств.

Парковка

Парковка представлена ParkingLot класс, который хранит информацию о автомобиль , оборудованный датчиком, пустых парковочных местах и статических препятствиях (припаркованных автомобилях). Каждое парковочное место имеет уникальный номер индекса и индикаторный свет, который является либо зеленым (бесплатно), либо красным (занят). Припаркованные транспортные средства представлены черным цветом.

Создайте ParkingLot объект со свободным пятном в местоположении 7.

freeSpotIdx = 7;
map = ParkingLot(freeSpotIdx);

Figure Auto Parking Valet contains an axes. The axes contains 272 objects of type rectangle, line, text, polygon.

Задайте начальное положение (X0,Y0,θ0) для автомобиля , оборудованного датчиком. Целевое положение определяется на основе первого доступного свободного места, когда транспортное средство перемещается по парковке.

egoInitialPose = [20, 15, 0];

Вычислите целевое положение для транспортного средства с помощью createTargetPose функция. Целевое положение соответствует местоположению в freeSpotIdx.

egoTargetPose = createTargetPose(map,freeSpotIdx)
egoTargetPose = 1×3

   47.7500    4.9000   -1.5708

Сенсорные модули

Алгоритм парковки использует датчики камеры и лидара, чтобы собрать информацию от окружения.

Камера

Поле зрения камеры, установленной на автомобиль , оборудованный датчиком, представлено площадью, затененной зеленым цветом на следующем рисунке. Камера имеет поле зрения φ ограничены ±60degrees и максимальная глубина измерения dmax 10 м.

Когда автомобиль , оборудованный датчиком двигается вперед, модуль камеры обнаруживает парковочные места, которые попадают в поле зрения, и определяет, является ли место свободным или занятым. Для простоты это действие реализуется с использованием геометрических отношений между местоположениями точек и текущим положением транспортного средства. Парковочное место находится в области значений камер, если didmax и φminφiφmax, где di расстояние до парковочного места и φi - угол к парковочному месту.

Лидар

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

Модель автоматической парковки (Auto Parking Valet)

Модель парковочного клапана, включая контроллеры, автомобиль , оборудованный датчиком, датчики и парковку, реализована в Simulink ®.

Загрузите параметры автоматической парковки.

autoParkingValetParams

Откройте модель Simulink.

mdl = 'rlAutoParkingValet';
open_system(mdl)

Динамика автомобиля , оборудованного датчиком в этой модели представлена однопутной моделью велосипеда с двумя входами: Транспортное средство скорость v (м/с) и угол поворота руля δ (радианы). Контроллеры MPC и RL помещаются в блоки Enabled Subsystem, которые активируются сигналами, представляющими, должно ли транспортное средство искать пустое место или выполнять маневр парковки. Сигналы включения определяются алгоритмом Camera в подсистеме Vehicle Mode. Первоначально транспортное средство находится в режиме поиска, и контроллер MPC отслеживает путь ссылки. Когда свободное место найдено, активируется режим парковки, и агент RL выполняет маневр парковки.

Адаптивный прогнозирующий контроллер модели

Создайте адаптивный объект контроллера MPC для отслеживания эталонной траектории с помощью createMPCForParking скрипт. Для получения дополнительной информации об адаптивном MPC смотрите Adaptive MPC (Model Predictive Control Toolbox).

createMPCForParking

Окружение обучения с подкреплением

На следующем рисунке окружения для настройки агента RL является область, заштрихованная красным цветом. Из-за симметрии на парковке обучения в этой области достаточно, чтобы политика адаптировалась к другим областям после применения соответствующих координатных преобразований к наблюдениям. Использование этой небольшой области обучения значительно сокращает время обучения по сравнению с обучением на всей парковке.

Для этого окружения:

  • Область обучения является пространством 22,5 м х 20 м с целевым пятном в его горизонтальном центре.

  • Наблюдения являются ошибками положения Xe и Ye Автомобиля , оборудованного датчиком относительно целевого положения, синуса и косинуса истинного угла рыскания θ, и показания датчика лидара.

  • Скорость транспортного средства во время стоянки является постоянной 2 м/с.

  • Сигналы действия являются дискретными углами управления, которые варьируются между +/-45 степенями в шагах 15 степеней.

  • Транспортное средство считается припаркованным, если ошибки в отношении целевого положения находятся в пределах установленных допусков +/-0,75 м (положение) и +/-10 степени (ориентация).

  • Эпизод прекращается, если автомобиль , оборудованный датчиком выходит за пределы области обучения, сталкивается с препятствием или успешно паркуется.

  • Вознаграждение rt обеспечивается в момент t, является:

rt=2e-(0.05Xe2+0.04Ye2)+0.5e-40θe2-0.05δ2+100ft-50gt

Вот, Xe, Ye, и θe являются положением и углом рыскания ошибок автомобиля , оборудованного датчиком из целевого положения, и δ - угол поворота руля. ft (0 или 1) указывает, припарковано ли транспортное средство и gt (0 или 1) указывает, столкнулось ли транспортное средство с препятствием в момент t.

Координатные преобразования на положении транспортного средства (X,Y,θ) наблюдения для различных мест стоянки:

  • 1-14: нет преобразования

  • 15-22: X=Y,Y=-X,θ=θ-π/2

  • 23-36: X=100-X,Y=60-Y,θ=θ-π

  • 37-40: X=60-Y,Y=X,θ=θ-3π/2

  • 41-52: X=100-X,Y=30-Y,θ=θ+π

  • 53-64: X=X,Y=Y-28,θ=θ

Создайте наблюдения и спецификации действия для окружения.

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 Agent.

blk = [mdl '/RL Controller/RL Agent'];
env = rlSimulinkEnv(mdl,blk,observationInfo,actionInfo);

Задайте функцию сброса для обучения. The autoParkingValetResetFcn функция устанавливает начальное положение автомобиля , оборудованного датчиком на случайные значения в начале каждого эпизода.

env.ResetFcn = @autoParkingValetResetFcn;

Для получения дополнительной информации о создании окружений Simulink смотрите rlSimulinkEnv.

Создайте агента

Агент RL в этом примере является агентом проксимальной оптимизации политики (PPO) с дискретным пространством действий. Агенты PPO полагаются на представления актёра и критика, чтобы узнать оптимальную политику. Агент поддерживает функциональные аппроксимации на основе глубоких нейронных сетей для актёра и критика. Дополнительные сведения об агентах PPO см. в разделе Агенты оптимизации проксимальной политики.

Установите генератор случайного seed для повторяемости.

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);

Figure Auto Parking Valet contains an axes. The axes contains 296 objects of type rectangle, line, text, polygon.

Транспортное средство достигает целевого положения в пределах заданных ошибок допусков +/- 0,75 м (положение) и +/-10 степени (ориентация).

Чтобы просмотреть положение автомобиля , оборудованного датчиком и ориентацию, откройте Автомобиль , оборудованный датчиком возможностей Pose.

См. также

Похожие темы