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

В этом примере показов, как сгенерировать траекторию ссылки и отследить траекторию для парковочного клапана, используя нелинейное прогнозирующее управление моделью (NLMPC).

Парковка Гараж

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

Определите параметры автомобиль , оборудованный датчиком.

vdims = vehicleDimensions;
egoWheelbase = vdims.Wheelbase;
distToCenter = 0.5*egoWheelbase;

Задайте начальное положение автомобиля , оборудованного датчиком.

% Ego initial pose: x(m), y(m) and yaw angle (rad)
egoInitialPose = [4,12,0];

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

parkNorth = true;
if parkNorth
    egoTargetPose = [36,45,pi/2];
else
    egoTargetPose = [27.2,4.7,-pi/2];
end

The helperSLCreateCostmap функция создает статическую карту парковки, содержащую информацию о стационарных препятствиях, дорожной разметке и припаркованных автомобилях. Для получения дополнительной информации смотрите пример Automated Parking Valet in Simulink (Automated Driving Toolbox).

costmap = helperSLCreateCostmap();
centerToFront = distToCenter;
centerToRear = distToCenter;
helperSLCreateUtilityBus;
costmapStruct = helperSLCreateUtilityStruct(costmap);

Визуализация окружения парковки. Использование шага расчета 0.1 для визуализатора.

Tv = 0.1;
helperSLVisualizeParkingValet(egoInitialPose, 0, costmapStruct);

Figure Automated Parking Valet contains an axes. The axes with title Parking garage contains 21 objects of type image, rectangle, line, patch, polygon.

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

Сгенерируйте траекторию, используя нелинейный прогнозирующий контроллер модели

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

x˙=vcos(ψ)y˙=vsin(ψ)ψ˙=vbtan(δ)

где (x,y) обозначает положение транспортного средства и ψ обозначает угол рыскания транспортного средства. Параметр b представляет колесную базу транспортного средства. (x,y,ψ) являются переменными состояния функций состояния транспортного средства. Скорость v и угол поворота руля δ являются управляющими переменными функций состояния транспортного средства.

Траектория парковочного клапана от контроллера NLMPC для разработана на основе анализа, аналогичного анализу Параллельной парковки, используя пример нелинейной модели прогнозирующего управления. Проект контроллера реализован в createMPCForParkingValet скрипт.

  • Скорость автомобиля , оборудованного датчиком ограничена в пределах [-6,5,6,5] м/с (приблизительно с ограничением скорости 15 миль/ч), а угол поворота автомобиля , оборудованного датчиком ограничен в пределах [-45,45] степеней.

  • Функция затрат для nlmpc Объект контроллера является пользовательской функцией стоимости, заданной способом, подобным квадратичной стоимости отслеживания плюс стоимость терминала. В следующей пользовательской функции затрат, s(t) обозначает состояния автомобиля , оборудованного датчиком в момент времени t, d представляет длительность симуляции. sref задается целевым положением для автомобиля , оборудованного датчиком. Матрицы Qp, Rp, Qt, и Rt являются постоянными.

J=0d(s(t)-sref)TQp(s(t)-sref)+u(t)TRpu(t)dt+(s(d)-sref)TQt(s(d)-sref)+u(d)TRtu(d)

  • Чтобы избежать столкновения с препятствиями, контроллер NLMPC должен удовлетворить следующим ограничениям неравенства, где минимальное расстояние до всех препятствий distmin должно быть больше безопасного расстояния distsafe. В этом примере автомобиль , оборудованный датчиком и препятствия моделируются как collisionBox (Robotics System Toolbox) объекты и расстояние от ego vehicle до препятствий вычисляется checkCollision (Robotics System Toolbox) функция.

distmindistsafe

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

Выберите среднюю точку для начального пути решения.

if parkNorth
    midPoint = [4,34,pi/2];
else
    midPoint = [27,12,0];
end

Сконфигурируйте параметры контроллера NLMPC. Чтобы спланировать оптимальную траекторию по всему горизонту предсказания, установите контрольный горизонт равным горизонту предсказания.

% Sample time
Ts = 0.1;
% Prediction horizon
p = 100;
% Control horizon
c = 100;
% Weight matrices for terminal cost
Qt = 0.5*diag([10 5 20]); 
Rt = 0.1*diag([1 2]);
% Weight matrices for tracking cost
if parkNorth
    Qp = 1e-6*diag([2 2 0]);
    Rp = 1e-4*diag([1 15]);
else
    Qp = 0*diag([2 2 0]);
    Rp = 1e-2*diag([1 5]);
end
% Safety distance to obstacles (m)
safetyDistance = 0.1;
% Maximum iteration number
maxIter = 70;
% Disable message display
mpcverbosity('off');

Создайте контроллер NLMPC с использованием заданных параметров.

[nlobj,opt,paras] = createMPCForParkingValet(p,c,Ts,egoInitialPose,egoTargetPose,...
    maxIter,Qp,Rp,Qt,Rt,distToCenter,safetyDistance,midPoint);

Установите начальные условия для автомобиль , оборудованный датчиком.

x0 = egoInitialPose';
u0 = [0;0];

Сгенерируйте ссылочную траекторию с помощью nlmpcmove функция.

tic;
[mv,nloptions,info] = nlmpcmove(nlobj,x0,u0,[],[],opt);
timeVal = toc;

Получите эталонные траектории для состояний (xRef) и управляющих действий (uRef), которые являются оптимальными траекториями, вычисленными для горизонта предсказания.

xRef = info.Xopt;
uRef = info.MVopt;

Анализ запланированной траектории.

analyzeParkingValetResults(nlobj,info,egoTargetPose,Qp,Rp,Qt,Rt,...
    distToCenter,safetyDistance,timeVal)
Summary of results:
1) Valid results. No collisions.
2) Minimum distance to obstacles = 0.1200 (Valid when greater than safety distance 0.1000)
3) Optimization exit flag = 1 (Successful when positive)
4) Elapsed time (s) for nlmpcmove = 158.6983
5) Final states error in x (m), y (m) and theta (deg):  0.0013, 0.0024, -0.0980
6) Final control inputs speed (m/s) and steering angle (deg): 0.0161, -0.6212

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

plotTrajectoryParkingValet(xRef,uRef)

Figure contains 3 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line. Axes 3 contains an object of type line.

Figure contains 2 axes. Axes 1 contains an object of type stair. Axes 2 contains an object of type stair.

Отслеживайте опорную траекторию в модели Simulink

Разработайте контроллер для отслеживания эталонной траектории.

Во-первых, установите длительность симуляции и обновите траекторию ссылки на основе длительности.

Duration = 12;
Tsteps = Duration/Ts;
Xref = [xRef(2:p+1,:);repmat(xRef(end,:),Tsteps-p,1)];

Создайте контроллер NLMPC с горизонтом предсказания отслеживания (pTracking) 10.

pTracking = 10;
nlobjTracking = createMPCForTrackingParkingValet(pTracking,Xref);

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

mdl = 'mpcAutoParkingValet';
open_system(mdl)

Закройте анимационные графики перед выполнением симуляции.

f = findobj('Name','Automated Parking Valet');
close(f)

Симулируйте модель.

sim(mdl)

Figure Automated Parking Valet contains an axes. The axes with title Parking garage contains 141 objects of type image, rectangle, line, patch, polygon.

ans = 
  Simulink.SimulationOutput:

                   tout: [125x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

Анимация показывает, что автомобиль , оборудованный датчиком паркуется в целевом положении успешно без каких-либо столкновений препятствий. Можно также просмотреть ego vehicle и поместить траектории с помощью областей Ego Vehicle Pose и Controls.

Заключение

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

mpcverbosity('on');
bdclose(mdl)
f = findobj('Name','Automated Parking Valet');
close(f)

См. также

Функции

Блоки

Похожие темы