Этот пример демонстрирует проект гибридного контроллера для автоматического поиска и парковки задачи. Гибридный диспетчер использует прогнозирующее управление модели (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
Алгоритм парковки использует датчики камеры и лидара, чтобы собрать информацию средой.
Поле зрения камеры, смонтированной на автомобиле, оборудованном датчиком, представлено областью, заштрихованной в зеленом в следующем рисунке. Камера имеет поле зрения ограниченный и максимальная глубина измерения из 10 м.
Когда автомобиль, оборудованный датчиком продвигается, модуль камеры обнаруживает места для парковки, которые находятся в пределах поля зрения, и определяет, свободно ли место или занято. Для простоты это действие реализовано с помощью геометрических отношений между точечными местоположениями и текущим положением транспортного средства. Место для парковки в области значений камеры если и , где расстояние до места для парковки и угол на место для парковки.
Агент обучения с подкреплением использует показания датчика лидара, чтобы определить близость автомобиля, оборудованного датчиком к другим транспортным средствам в среде. Датчик лидара в этом примере также моделируется с помощью геометрических отношений. Расстояния лидара измеряются вдоль 12 линейных сегментов, которые радиально появляются из центра автомобиля, оборудованного датчиком. Когда линия лидара пересекает препятствие, она возвращает расстояние препятствия от транспортного средства. Максимальное измеримое расстояние лидара вдоль любого линейного сегмента составляет 6 м.
Модель камердинера парковки, включая контроллеры, автомобиль, оборудованный датчиком, датчики, и парковку, реализована в Simulink®.
Загрузите автоматические параметры камердинера парковки.
autoParkingValetParams
Откройте модель Simulink.
mdl = 'rlAutoParkingValet';
open_system(mdl)
Движущие силы автомобиля, оборудованного датчиком в этой модели представлены однодорожечной моделью велосипеда с двумя входными параметрами: скорость транспортного средства (m/s) и держащийся угол (радианы). MPC и контроллеры RL размещаются в Enabled блоках Subsystem, которые активируются представлением сигналов, должно ли транспортное средство искать пустое место или выполнить маневр парковки. Разрешать сигналы определяются алгоритмом Камеры в подсистеме Режима Транспортного средства. Первоначально, транспортное средство находится в режиме поиска, и контроллер MPC отслеживает ссылочный путь. Когда свободное место найдено, режим парка активируется, и агент RL выполняет маневр парковки.
Создайте адаптивный контроллер MPC объект для ссылочного отслеживания траектории с помощью createMPCForParking
скрипт. Для получения дополнительной информации об адаптивном MPC смотрите Адаптивный MPC (Model Predictive Control Toolbox).
createMPCForParking
Среда для обучения агент RL является областью, заштрихованной в красном в следующем рисунке. Из-за симметрии на парковке, обучение в этой области достаточно для политики настроить в другие области после применения соответствующих координатных преобразований к наблюдениям. Используя эту меньшую учебную область значительно уменьшает учебное время по сравнению с обучением по целой парковке.
Для этой среды:
Учебная область является пробелом на 22,5 м x 20 м с целевым пятном в его горизонтальном центре.
Наблюдения являются ошибками положения и из автомобиля, оборудованного датчиком относительно целевого положения, синуса и косинуса истинного угла рыскания , и показания датчика лидара.
Скорость транспортного средства во время парковки составляет постоянные 2 м/с.
Сигналы действия являются дискретными руководящими углами, которые располагаются между +/-45 градусов с шагом 15 градусов.
Транспортное средство рассматривается припаркованным, если ошибки относительно целевого положения в заданных допусках +/-0,75 м (положение) и +/-10 степени (ориентация).
Эпизод завершает работу, если автомобиль, оборудованный датчиком выходит из границ учебной области, сталкивается с препятствием или паркуется успешно.
Вознаграждение если во время t:
Здесь, , , и положение и ошибки угла рыскания автомобиля, оборудованного датчиком от целевого положения, и держащийся угол. (0 или 1), указывает, припарковалось ли транспортное средство и (0 или 1), указывает, столкнулось ли транспортное средство с препятствием во время .
Координатные преобразования на положении транспортного средства наблюдения для различных местоположений места для парковки следующие:
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 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);
Транспортное средство достигает целевого положения в заданных ошибочных допусках +/-0,75 м (положение) и +/-10 степени (ориентация).
Чтобы просмотреть положение автомобиля, оборудованного датчиком и ориентацию, откройте осциллограф Положения Автомобиля, оборудованного датчиком.