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

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

Окружение парковки

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

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

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

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

  • Положение X 7 m

  • Положение по Y 3.1 m

  • Угол рыскания 0 рад

egoInitialPose = [7,3.1,0];

Чтобы припарковать центр автомобиля , оборудованного датчиком в целевом месте (X = 0, Y = 0) используйте следующее целевое положение, которое задает местоположение контрольной точки задней оси.

  • Положение X, равное половине длины колесной базы в отрицательном направлении X

  • Положение по Y 0 m

  • Угол рыскания 0 рад

egoTargetPose = [-distToCenter,0,0];

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

Tv = 0.1;
helperSLVisualizeParking(egoInitialPose,0);

Figure Automated Parallel Parking contains an axes. The axes with title Parallel Parking contains 20 objects of type rectangle, line, patch, polygon.

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

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

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

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

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

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

Нелинейный прогнозирующий контроллер модели для парковки разработан на основе следующего анализа.

  • Выход функции состояния транспортного средства совпадает с состоянием транспортного средства (x,y,ψ). Поэтому объект контроллера NLMPC создается с тремя состояниями, тремя выходами и двумя манипулированными переменными.

  • Скорость автомобиля , оборудованного датчиком ограничивается в пределах от -2 до 2 м/с, а угол поворота автомобиля , оборудованного датчиком ограничивается в пределах от -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

  • Чтобы улучшить эффективность симуляции, якобианцы функции состояния, функции стоимости и ограничений неравенства все предоставляются контроллеру NLMPC. Якобианцы с ограничениями неравенства аппроксимируются на основе [1].

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

Задайте шаг расчета (Ts), горизонт предсказания (p), и управляют горизонтом (m) для нелинейного контроллера MPC.

Ts = 0.1;
p = 70;
c = 70;

Задайте матрицы постоянного веса для контроллера. Задайте обе матрицы веса отслеживания (Qp и Rp) и терминальных весовых матриц (Qt и Rt).

Qp = diag([0.1 0.1 0]);
Rp = 0.01*eye(2);
Qt = diag([1 5 100]); 
Rt = 0.1*eye(2);

Задайте безопасное расстояние 0.1 m, который контроллер использует при определении своих ограничений.

safetyDistance = 0.1;

Задайте максимальное количество итераций для решателя NLMPC.

maxIter = 40;

Создайте нелинейный контроллер MPC. Для ясности сначала отключите сообщения командного окна MPC.

mpcverbosity('off');

Создайте nlmpc Объект контроллера с тремя состояниями, тремя выходами и двумя входами.

nx = 3;
ny = 3;
nu = 2;
nlobj = nlmpc(nx,ny,nu);

Задайте шаг расчета (Ts), горизонт предсказания (PredictionHorizon), и управляют горизонтом (ControlHorizon) для контроллера.

nlobj.Ts = Ts;
nlobj.PredictionHorizon = p;
nlobj.ControlHorizon = c;

Задайте ограничения для управляемых переменных. Здесь, MV(1) - скорость автомобиля , оборудованного датчиком в м/с и MV(2) - угол управления в радианах.

nlobj.MV(1).Min = -2;
nlobj.MV(1).Max = 2;
nlobj.MV(2).Min = -pi/4;
nlobj.MV(2).Max = pi/4;

Задайте функцию состояния контроллера и функцию состояния Jacobian.

nlobj.Model.StateFcn = "parkingVehicleStateFcn";
nlobj.Jacobian.StateFcn = "parkingVehicleStateJacobianFcn";

Задайте функцию стоимости контроллера и функцию стоимости Jacobian.

nlobj.Optimization.CustomCostFcn = "parkingCostFcn";
nlobj.Optimization.ReplaceStandardCost = true;
nlobj.Jacobian.CustomCostFcn = "parkingCostJacobian";

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

nlobj.Optimization.CustomIneqConFcn = "parkingIneqConFcn";
nlobj.Jacobian.CustomIneqConFcn = "parkingIneqConFcnJacobian";

Сконфигурируйте оптимизационный решатель контроллера.

nlobj.Optimization.SolverOptions.FunctionTolerance = 0.01;
nlobj.Optimization.SolverOptions.StepTolerance = 0.01;
nlobj.Optimization.SolverOptions.ConstraintTolerance = 0.01;
nlobj.Optimization.SolverOptions.OptimalityTolerance = 0.01;
nlobj.Optimization.SolverOptions.MaxIter = maxIter;

Задайте начальное предположение для оптимального решения состояния. Это начальное предположение является прямой линией от начального положения до целевого положения. Кроме того, задайте значения параметров автомобиль , оборудованный датчиком в nlmpcmoveopt объект.

opt = nlmpcmoveopt;
opt.X0 = [linspace(egoInitialPose(1),egoTargetPose(1),p)', ...
          linspace(egoInitialPose(2),egoInitialPose(2),p)'...
          zeros(p,1)];
opt.MV0 = zeros(p,nu);

Вычисление функции стоимости и ограничений неравенства, наряду с их якобийцами, требует передачи параметров пользовательским функциям. Определите вектор параметра и количество параметров. Кроме того, задайте значения параметров в nlmpcmoveopt объект.

paras = {egoTargetPose,Qp,Rp,Qt,Rt,distToCenter,safetyDistance}';
nlobj.Model.NumberOfParameters = numel(paras);
opt.Parameters = paras;

Симулируйте контроллер в MATLAB

Чтобы симулировать контроллер NLMPC в MATLAB ®, можно использовать одну из следующих опций:

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

  • Создайте файл MEX для контроллера с помощью buildMEX функция. Оценка этого файла MEX улучшает эффективность симуляции по сравнению с nlmpcmove.

Симулируйте контроллер NLMPC для парковки с помощью runParkingAndPlot скрипт. Для этой симуляции не создавайте файл MEX (set useMEX на 0).

useMex = 0; 
runParkingAndPlot

Figure Automated Parallel Parking contains an axes. The axes with title Parallel Parking contains 91 objects of type rectangle, line, patch, polygon.

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.

Summary of results:
1) Valid results. No collisions.
2) Minimum distance to obstacles = 0.1797 (Valid when greater than safety distance 0.1000)
3) Optimization exit flag = 1 (Successful when positive)
4) Elapsed time (s) for nlmpcmove = 19.5123
5) Final states error in x (m), y (m) and theta (deg):  -0.0031, 0.0310, 0.1601
6) Final control inputs speed (m/s) and steering angle (deg): -0.0034, -0.4517

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

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

useMex = 1;
runParkingAndPlot
Generating MEX function "parkingMex" from nonlinear MPC to speed up simulation.
Code generation successful.

MEX function "parkingMex" successfully generated.

Figure Automated Parallel Parking contains an axes. The axes with title Parallel Parking contains 162 objects of type rectangle, line, patch, polygon.

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.

Summary of results:
1) Valid results. No collisions.
2) Minimum distance to obstacles = 0.1845 (Valid when greater than safety distance 0.1000)
3) Optimization exit flag = 1 (Successful when positive)
4) Elapsed time (s) for nlmpcmove = 22.0876
5) Final states error in x (m), y (m) and theta (deg):  -0.0007, 0.0290, 0.1594
6) Final control inputs speed (m/s) and steering angle (deg): 0.0206, 1.9807

Симуляция с использованием файла MEX дает аналогичные результаты и значительно быстрее, чем симуляция с использованием nlmpcmove.

Симулируйте контроллер в Simulink

Чтобы симулировать контроллер NLMPC в Simulink ®, используйте блок Nonlinear MPC Controller. В данном примере для симуляции автомобиля , оборудованного датчиком используйте блок Транспортного средства Body 3DOF Lateral, который является блоком Bicycle Модели (Automated Driving Toolbox).

Задайте длительность симуляции и откройте модель Simulink.

Duration = p*Ts;
mdl = 'mpcVDAutoParking';
open_system(mdl)

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

createParameterBus(nlobj,[mdl '/Nonlinear MPC Controller'],'parasBusObject',paras);

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

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

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

sim(mdl)

Figure Automated Parallel Parking contains an axes. The axes with title Parallel Parking contains 90 objects of type rectangle, line, patch, polygon.

ans = 
  Simulink.SimulationOutput:

                   tout: [2142x1 double] 

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

Исследуйте Автомобиль , оборудованный датчиком Положения и Controls возможностей.

open_system([mdl '/Ego Vehicle Model/Ego Vehicle Pose'])
open_system([mdl '/Controls'])

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

Заключение

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

% Enable message display
mpcverbosity('on');
% Close Simulink model
bdclose(mdl)
% Close animation plots
f = findobj('Name','Automated Parallel Parking');
close(f)

Ссылки

[1] Шульман, Джон, Ян Дуан, Джонатан Хо, Алекс Ли, Ибрагим Аввал, Генри Брэдлоу, Джиа Панорамирование, Сачин Патил, Кен Голдберг и Питер Аббил. "Планирование движения с последовательной оптимизацией выпуклых и выпуклой Международный журнал исследований робототехники 33, № 9 (август 2014): 1251-70. https://doi.org/10.1177/0278364914528132.

См. также

Функции

Блоки

Похожие темы