В этом примере показано, как управлять углом поворота транспортного средства, идущего по запланированному пути при изменении полос движения, с помощью блока бокового контроллера Стэнли.
Управление транспортным средством является последним этапом в навигационной системе и обычно осуществляется с использованием двух независимых контроллеров:
Боковой регулятор: отрегулировать угол поворота таким образом, чтобы транспортное средство следовало по исходной траектории. Контроллер минимизирует расстояние между текущим положением транспортного средства и опорной траекторией.
Продольный контроллер: При следовании по контрольному пути поддерживайте желаемую скорость, управляя дросселем и тормозом. Контроллер минимизирует разницу между курсовым углом транспортного средства и ориентацией контрольного пути.
Этот пример фокусируется на боковом управлении в контексте траектории, следующей в сценарии постоянной продольной скорости. В этом примере будут выполнены следующие действия:
Узнайте об алгоритме бокового контроллера блока Стэнли.
Создайте сценарий вождения с помощью приложения «Конструктор сценариев вождения» и создайте путь ссылки для транспортного средства.
Протестируйте боковой контроллер в сценарии с использованием модели Simulink ® с замкнутым контуром.
Визуализация сценария и связанных результатов моделирования с помощью области «Птичий глаз».
Боковой контроллер Стэнли [1] использует нелинейный закон управления, чтобы минимизировать перекрестную ошибку и угол курса переднего колеса относительно опорной траектории. Блок Стэнли бокового контроллера вычисляет команду угла поворота, которая регулирует текущее положение транспортного средства в соответствии с исходным положением.

В зависимости от модели транспортного средства, используемой для получения закона управления, блок бокового контроллера Стэнли имеет две конфигурации [1]:
Кинематическая модель велосипеда: Кинематическая модель предполагает, что транспортное средство имеет незначительную инерцию. Эта конфигурация в основном подходит для низкоскоростных сред, где инерционные эффекты минимальны. Команда рулевого управления вычисляется на основе опорной позы, текущей позы и скорости транспортного средства.
Динамическая модель велосипеда: Динамическая модель включает эффекты инерции: проскальзывание шины и сервопривод рулевого управления. Эта более сложная, но более точная модель позволяет контроллеру работать с реалистичной динамикой. В этой конфигурации контроллер также требует кривизны траектории, текущей скорости рыскания транспортного средства и текущего угла поворота для вычисления команды поворота.
Можно задать конфигурацию с помощью параметра Модель транспортного средства (Vehicle model) в диалоговом окне блока.
Сценарий был создан с помощью приложения «Конструктор сценариев вождения». Этот сценарий включает однополосную трехполосную дорогу и эго-транспортное средство. Подробные сведения о добавлении дорог, полос движения и транспортных средств см. в разделах Создание сценария вождения в интерактивном режиме и Создание данных синтетических датчиков. В этом сценарии транспортное средство:
Начинается в средней полосе.
Переходит на левую полосу после въезда в изогнутую часть дороги.
Возвращается на среднюю полосу.
На протяжении всего моделирования транспортное средство работает с постоянной скоростью 10 метров/с. Этот сценарий был экспортирован из приложения как функция MATLAB ® с помощью кнопки Экспорт > Экспортировать функцию MATLAB. Экспортируемая функция имеет имяhelperCreateDrivingScenario. Дороги и субъекты из этого сценария были сохранены в файле сценария LateralControl.mat.
Откройте учебную модель Simulink.
open_system('LateralControlTutorial')

Модель содержит следующие основные компоненты:
Вариационная подсистема бокового контроллера, вариационная модель (Simulink), которая содержит два блока бокового контроллера Стэнли, один из которых сконфигурирован с кинематической моделью велосипеда, а другой - с динамической моделью велосипеда. Они оба могут управлять углом поворота транспортного средства. Активный можно указать в командной строке. Например, чтобы выбрать кинематический блок Стэнли бокового контроллера, используйте следующую команду:
variant = 'LateralControlTutorial/Lateral Controller'; set_param(variant, 'LabelModeActivechoice', 'Kinematic');
A HelperPathAnalyzer блок, который обеспечивает опорный сигнал для бокового контроллера. Учитывая текущую позу транспортного средства, он определяет исходную позу путем поиска ближайшей точки к транспортному средству на исходной траектории.
подсистема «Транспортное средство и окружающая среда», которая моделирует движение транспортного средства с помощью блока «3DOF кузова транспортного средства» (блок динамики транспортного средства). Подсистема также моделирует среду с помощью блока чтения сценариев для считывания дорог и действующих лиц из файла сценария CountingControl.mat.
При открытии модели также запускается helperLateralControlTutorialSetup , который инициализирует данные, используемые моделью. Сценарий загружает определенные константы, необходимые для модели Simulink, такие как параметры транспортного средства, параметры контроллера, дорожный сценарий и исходные позы. В частности, сценарий вызывает ранее экспортированную функцию helperCreateDrivingScenario для построения сценария. Сценарий также устанавливает шины, необходимые для модели, путем вызова helperCreateLaneSensorBuses.
Можно построить график дороги и запланированного пути с помощью:
helperPlotRoadAndPath(scenario, refPoses)

При моделировании модели можно открыть область «Птичий глаз» для анализа моделирования. После открытия области щелкните Найти сигналы (Find Signals), чтобы настроить сигналы. Затем выполните моделирование для отображения транспортного средства, границ дорог и разметки полосы движения. На рисунке ниже показана область действия «Птичий глаз» для этого примера через 25 секунд. В этот момент транспортное средство перешло на левую полосу.
Полное моделирование и анализ результатов можно выполнить с помощью следующей команды:
sim('LateralControlTutorial');
Кроме того, можно использовать Simulink ® Scope (Simulink) в подсистеме «Транспортное средство и среда» (Vehicle and Environment) для проверки производительности контроллера при следовании транспортного средства по запланированному пути. Объем показывает максимальное отклонение от траектории менее 0,3 метра и наибольшую величину угла поворота рулевого управления менее 3 градусов.
scope = 'LateralControlTutorial/Vehicle and Environment/Scope';
open_system(scope)

Чтобы уменьшить боковое отклонение и колебания в команде рулевого управления, используйте блок Stanley Dynamic бокового контроллера и снова смоделируйте модель:
set_param(variant, 'LabelModeActivechoice', 'Dynamic'); sim('LateralControlTutorial');

В этом примере показано, как имитировать боковой контроль транспортного средства в сценарии изменения полосы движения с использованием Simulink. По сравнению с кинематическим блоком Stanley для бокового контроллера, блок Stanley Dynamic для бокового контроллера обеспечивает улучшенную производительность в пути следования с меньшим боковым отклонением от опорного пути.
[1] Гофман, Габриэль М., Клэр Дж. Томлин, Майкл Монтемерло и Себастьян Трюн. «Отслеживание автономных автомобильных траекторий для внедорожного вождения: дизайн контроллера, экспериментальная валидация и гонки». Американская конференция по контролю. 2007, стр. 2296-2301.
helperPlotRoadAndPath Печать дороги и опорного пути
function helperPlotRoadAndPath(scenario,refPoses) %helperPlotRoadAndPath Plot the road and the reference path h = figure('Color','white'); ax1 = axes(h, 'Box','on');
plot(scenario,'Parent',ax1) hold on plot(ax1,refPoses(:,1),refPoses(:,2),'b') xlim([150, 300]) ylim([0 150]) ax1.Title = text(0.5,0.5,'Road and Reference Path'); end