Квадрупрированная локация робота с использованием агента DDPG

Этот пример показывает, как обучить четырехкратного робота ходить с помощью агента глубокого детерминированного градиента политики (DDPG). Робот в этом примере моделируется с помощью Simscape™ Multibody™. Для получения дополнительной информации об агентах DDPG, смотрите Twin-Delayed Deep Deterministic Policy Gradient Agents.

Загрузите необходимые параметры в базовое рабочее пространство в MATLAB ®.

initializeRobotParameters

Квадрупрированная модель робота

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

Робот моделируется с помощью Simscape Multibody и библиотеки Simscape Multibody Contact Forces Library. Основными компонентами конструкции являются четыре ноги и туловище. Ноги соединяются с туловищем посредством шарниров вращения. Значения действия, обеспечиваемые блоком Агент, масштабируются и преобразуются в значения крутящего момента в соединениях. Эти значения крутящего момента в соединениях используются шарнирными соединениями для вычисления движения.

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

mdl = 'rlQuadrupedRobot';
open_system(mdl)

Наблюдения

Окружение робота обеспечивает 44 наблюдения агента, каждое нормировано между -1 и 1. Этими наблюдениями являются:

  • Y (вертикальное) и Y (боковое) положение центра масс туловища

  • Кватернион, представляющий ориентацию туловища

  • X (прямая), Y (вертикальная) и Z (боковая) скорости туловища в центре масс

  • Скорость крена, тангажа и рыскания туловища

  • Угловые положения и скорости тазобедренного и коленного суставов для каждой ноги

  • Нормальная сила и сила трения от контакта земли для каждой ноги

  • Значения действия (крутящий момент для каждого соединения) от предыдущего временного шага

Для всех четырёх ног начальные значения для углов поворота шарнира бедра и колена установлены на -0,8234 и 1,6468 рад соответственно. Нейтральные положения соединений находятся на 0 рады. Ноги находятся в нейтральном положении, когда они растянуты до максимума и выровнены перпендикулярно земле.

Действия

Агент генерирует восемь действий, нормированных между -1 и 1. После умножения с масштабным коэффициентом они соответствуют восьми сигналам крутящего момента для шарниров вращения. Общий крутящий момент в соединении составляет +/- 10 Н· м для каждого соединения.

Вознаграждение

Следующее вознаграждение предоставляется агенту на каждом временном шаге во время обучения. Эта функция вознаграждения побуждает агента двигаться вперед, предоставляя положительное вознаграждение для положительной скорости вперед. Это также побуждает агента избегать раннего расторжения, предоставляя постоянное вознаграждение (25Ts/Tf25 Тс/Тф) на каждом временном шаге. Остальные условия в функции вознаграждения являются штрафами, которые препятствуют нежелательным состояниям, таким как большие отклонения от желаемой высоты и ориентации или использование чрезмерных моментов в соединениях.

rt=vx+25TsTf-50yˆ2-20θ2-0.02iut-1i2r (t) = vx (t) + 25 * Ts/Tf - - 50 *

где

  • vxvx (t) - скорость центра масс туловища в направлении х.

  • TsTs и TfTf - шаг расчета и окончательное время симуляции окружения, соответственно.

  • yˆ - масштабная ошибка высоты центра масс туловища с желаемой высоты 0,75 м.

  • θ - угол тангажа туловища.

  • ut-1iu (t-1)- значение действия для соединения i с предыдущего временного шага.

Прекращение эпизода

Во время обучения или симуляции эпизод прекращается, если происходит какая-либо из следующих ситуаций.

  • Высота центра масс туловища от земли ниже 0,5 м (упала).

  • Голова или хвост туловища ниже земли.

  • Любой коленный сустав находится ниже земли.

  • Углы крена, тангажа или рыскания являются внешними границами (+/- 0,1745, +/- 0,1745 и +/- 0,3491 рад, соответственно).

Создайте интерфейс окружения

Задайте параметры для набора наблюдений.

numObs = 44;
obsInfo = rlNumericSpec([numObs 1]);
obsInfo.Name = 'observations';

Задайте параметры для набора действий.

numAct = 8;
actInfo = rlNumericSpec([numAct 1],'LowerLimit',-1,'UpperLimit', 1);
actInfo.Name = 'torque';

Создайте окружение с помощью модели обучения с подкреплением.

blk = [mdl, '/RL Agent'];
env = rlSimulinkEnv(mdl,blk,obsInfo,actInfo);

Во время обучения функция сброса вводит случайные отклонения в начальные углы поворота шарнира и скорости вращения.

env.ResetFcn = @quadrupedResetFcn;

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

Агент DDPG аппроксимирует долгосрочное вознаграждение, заданные наблюдения и действия, используя представление функции ценности критика. Агент также решает, какое действие принять, учитывая наблюдения, используя представление актера. Сети актёра и критика для этого примера вдохновлены [2].

Для получения дополнительной информации о создании представления функции ценности глубокой нейронной сети, смотрите, Создают политику и представления функции ценности. Для примера, который создает нейронные сети для агентов DDPG, смотрите Обучите Агента DDPG для управления Системой Double Integrator.

Создайте сети в рабочем пространстве MATLAB с помощью createNetworks вспомогательная функция.

createNetworks

Можно также создать сети актёра и критика в интерактивном режиме с помощью приложения Deep Network Designer.

Просмотрите строение критика.

plot(criticNetwork)

Задайте опции агента используя rlDDPGAgentOptions.

agentOptions = rlDDPGAgentOptions;
agentOptions.SampleTime = Ts;
agentOptions.DiscountFactor = 0.99;
agentOptions.MiniBatchSize = 250;
agentOptions.ExperienceBufferLength = 1e6;
agentOptions.TargetSmoothFactor = 1e-3;
agentOptions.NoiseOptions.MeanAttractionConstant = 0.15;
agentOptions.NoiseOptions.StandardDeviation = 0.1;

Создайте rlDDPGAgent объект для агента.

agent = rlDDPGAgent(actor,critic,agentOptions);

Настройка опций обучения

Чтобы обучить агента, сначала задайте следующие опции обучения:

  • Запускайте каждый эпизод тренировки самое большее для 10 000 эпизодов с каждым эпизодом, длящимся самое большее maxSteps временные шаги.

  • Отображение процесса обучения в диалоговом окне Диспетчер эпизодов (установите Plots опция) и отключить отображение командной строки (установите Verbose опция).

  • Остановите обучение, когда агент получит среднее совокупное вознаграждение, больше 190 для 250 последовательных эпизодов.

  • Сохраните копию агента для каждого эпизода, где совокупное вознаграждение больше 200.

maxEpisodes = 10000;
maxSteps = floor(Tf/Ts);  
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',maxEpisodes,...
    'MaxStepsPerEpisode',maxSteps,...
    'ScoreAveragingWindowLength',250,...
    'Verbose',true,...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',190,...                   
    'SaveAgentCriteria','EpisodeReward',... 
    'SaveAgentValue',200);                       

Чтобы обучить агента параллельно, задайте следующие опции обучения. Для параллельного обучения требуется программное обеспечение Parallel Computing Toolbox™. Если у вас нет установленного программного обеспечения Parallel Computing Toolbox™, установите UseParallel на false.

  • Установите UseParallel опция t rue.

  • Обучите агента параллельно асинхронно.

  • После каждого 32 шага каждый работник отправляет опыт на хост.

  • Агенты DDPG требуют, чтобы работники отправляли 'Experiences' на хост.

trainOpts.UseParallel = true;                    
trainOpts.ParallelizationOptions.Mode = 'async';
trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;
trainOpts.ParallelizationOptions.DataToSendFromWorkers = 'Experiences';

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

Обучите агента с помощью train функция. Из-за сложности модели робота этот процесс является вычислительно интенсивным и занимает несколько часов. Чтобы сэкономить время при запуске этого примера, загрузите предварительно обученного агента путем установки doTraining на false. Чтобы обучить агента самостоятельно, установите doTraining на true. Из-за случайности параллельного обучения можно ожидать разных результатов обучения по графику ниже.

doTraining = false;
if doTraining    
    % Train the agent.
    trainingStats = train(agent,env,trainOpts);
else
    % Load a pretrained agent for the example.
    load('rlQuadrupedAgent.mat','agent')
end

Симуляция обученного агента

Исправьте начальное значение генератора для повторяемости.

rng(0)

Чтобы подтвердить производительность обученного агента, моделируйте его в среде робота. Для получения дополнительной информации о симуляции агента смотрите rlSimulationOptions и sim.

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
experience = sim(env,agent,simOptions);

Для примеров о том, как обучить агента DDPG ходить по двухъядерному роботу и гуманоидному ходунку, смоделированному в Simscape™ Multibody™ см. Train Biped Robot, чтобы ходить с использованием агентов обучения с подкреплением и Train Humanoid Walker (Simscape Multibody), соответственно.

Ссылки

[1] Хисс, Николас, TB Dhruva, Сринивасан Срирэм, Джей Леммон, Джош Мерель, Грег Уэйн, Ювал Тасса, и др. «Появление Поведения Передвижения в Богатых Окружениях». ArXiv:1707.02286 [Cs], 10 июля 2017 года. https://arxiv.org/abs/1707.02286.

[2] Lillicrap, Timothy P., Jonathan J. Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver, and Daan Wierstra. «Непрерывное управление с глубоким обучением с подкреплением». ArXiv:1509.02971 [Cs, Stat], 5 июля 2019 года. https://arxiv.org/abs/1509.02971.

См. также

Похожие темы