lateralControllerStanley

Вычислите держащуюся угловую команду для следования траектории при помощи метода Стэнли

Описание

пример

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity) вычисляет держащуюся угловую команду, в градусах, который настраивает текущее положение транспортного средства, чтобы совпадать со ссылочным положением, учитывая текущую скорость транспортного средства. По умолчанию функция принимает, что транспортное средство находится в движении вперед.

Контроллер вычисляет держащуюся угловую команду с помощью метода Стэнли [1], чей закон о надзоре основан на кинематической модели велосипеда. Используйте этот контроллер в следовании траектории в низкоскоростных средах, где инерционные эффекты минимальны.

пример

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity,Name,Value) задает опции с помощью одной или нескольких пар "имя-значение". Например, lateralControllerStanley(refPose,currPose,currVelocity,'Direction',-1) вычисляет держащуюся угловую команду для транспортного средства в противоположном движении.

Примеры

свернуть все

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

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

Установите ссылочное положение на пути. Положение в положении (4,8 м, 6,5 м) и имеет угол ориентации 2 градусов.

refPose = [4.8, 6.5, 2]; % [meters, meters, degrees]

Установите текущее положение транспортного средства. Положение в положении (2 м, 6,5 м) и имеет угол ориентации 0 градусов. Установите текущую скорость транспортного средства к 2 метрам в секунду.

currPose = [2, 6.5, 0]; % [meters, meters, degrees]
currVelocity = 2; % meters per second

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

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity)
steerCmd = 2.0000

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

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

Установите ссылочное положение на пути. Положение в положении (5 м, 9 м) и имеет угол ориентации 90 градусов.

refPose = [5, 9, 90]; % [meters, meters, degrees]

Установите текущее положение транспортного средства. Положение в положении (5 м, 10 м) и имеет угол ориентации 75 градусов.

currPose = [5, 10, 75]; % [meters, meters, degrees]

Установите текущую скорость транспортного средства к-2 метрам в секунду. Поскольку транспортное средство находится в противоположном движении, скорость должна быть отрицательной.

currVelocity = -2; % meters per second

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

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity,'Direction',-1)
steerCmd = -15.0000

Входные параметры

свернуть все

Ссылочное положение, заданное как [x, y, Θ] вектор. x и y исчисляются в метрах, и Θ в градусах.

x и y задают контрольную точку, чтобы вести транспортное средство к. Θ задает угол ориентации пути в этой контрольной точке и положителен в направлении против часовой стрелки.

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

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

Типы данных: single | double

Текущее положение транспортного средства, заданного как [x, y, Θ] вектор. x и y исчисляются в метрах, и Θ в градусах.

x и y задают местоположение транспортного средства, которое задано как центр задней оси транспортного средства.

Θ задает угол ориентации транспортного средства в местоположении (x, y) и положителен в направлении против часовой стрелки.

Для получения дополнительной информации о положении транспортного средства смотрите Системы координат в Automated Driving Toolbox.

Типы данных: single | double

Текущая продольная скорость транспортного средства, заданного как действительный скаляр. Модули исчисляются в метрах в секунду.

  • Если транспортное средство находится в движении вперед, то это значение должно быть больше 0.

  • Если транспортное средство находится в противоположном движении, то это значение должно быть меньше 0.

  • Значение 0 представляет транспортное средство, которое не находится в движении.

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'MaxSteeringAngle',25

Направление движения транспортного средства, заданного как разделенная запятой пара, состоящая из 'Direction' и любой 1 для движения вперед или -1 для противоположного движения. Направление движения определяет ошибку положения, и угловая погрешность использовалась для расчета держащейся угловой команды. Для получения дополнительной информации см. Алгоритмы.

Усиление положения транспортного средства, заданного как разделенная запятой пара, состоящая из 'PositionGain' и положительный действительный скаляр. Это значение определяет, насколько ошибка положения влияет на держащийся угол. Типичные значения находятся в области значений [1, 5]. Увеличьте это значение, чтобы увеличить величину держащегося угла.

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

Максимум позволил регулировать угол транспортного средства, в градусах, заданный как разделенная запятой пара, состоящая из 'MaxSteeringAngle' и действительный скаляр в области значений (0, 180).

steerCmd значение насыщается к области значений [-MaxSteeringAngle, MaxSteeringAngle].

  • Значения ниже -MaxSteeringAngle установлены в -MaxSteeringAngle.

  • Значения выше MaxSteeringAngle установлены в MaxSteeringAngle.

Выходные аргументы

свернуть все

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

Для получения дополнительной информации смотрите Системы координат в Automated Driving Toolbox.

Алгоритмы

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

Когда транспортное средство находится в движении вперед ('Direction' парой "имя-значение" является 1):

  • position error является боковым расстоянием от центра передней оси к контрольной точке на пути.

  • angle error является углом переднего колеса относительно ссылочного пути.

Когда транспортное средство находится в противоположном движении ('Direction' парой "имя-значение" является -1):

  • position error является боковым расстоянием от центра задней оси к контрольной точке на пути.

  • angle error является углом заднего колеса относительно ссылочного пути.

Для получения дополнительной информации о том, как контроллер минимизирует эти ошибки, см. [1].

Ссылки

[1] Хоффман, Габриэль М., Клэр Дж. Томлин, Майкл Монтемерло и Себастиан Трун. "Автономное Автомобильное Отслеживание Траектории для Управления Для бездорожья: Проектирование контроллера, Экспериментальная Валидация и Гонки". Американская Конференция по Управлению. 2007, стр 2296–2301. doi:10.1109/ACC.2007.4282788

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018b