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

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

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

Парковка

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

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

freeSpotIdx = 7;
map = ParkingLot(freeSpotIdx);

Figure Auto Parking Valet contains an axes object. The axes object 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 м.

Автоматическая модель камердинера парковки

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

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

autoParkingValetParams

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

mdl = 'rlAutoParkingValet';
open_system(mdl)

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

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

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

createMPCForParking

Среда обучения с подкреплением

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

Для этой среды:

  • Учебная область является пробелом на 22,5 м x 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);

Задайте функцию сброса для обучения. 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.

Обучите агента

В данном примере вы обучаете агента максимуму 10 000 эпизодов с каждым эпизодом, длящимся максимум 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 object. The axes object contains 296 objects of type rectangle, line, text, polygon.

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

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

Смотрите также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте