lateralControllerStanley

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

Синтаксис

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity)
steerCmd = lateralControllerStanley(refPose,currPose,currVelocity,Name,Value)

Описание

пример

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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