Этот пример показывает, как управлять держащимся углом автомобиля, который следует за запланированным путем при перестраивании на другую полосу, использовании Бокового блока диспетчера Стэнли.
Управление автомобилем является последним шагом в системе навигации и обычно выполняется с помощью двух независимых контроллеров:
Боковой Контроллер: Настройте держащийся угол, таким образом, что автомобиль следует за ссылочным путем. Контроллер минимизирует расстояние между текущим положением автомобиля и ссылочным путем.
Продольный Контроллер: При следовании за ссылочным путем поддержите желаемую скорость путем управления дросселем и тормозом. Контроллер минимизирует различие между направляющимся углом автомобиля и ориентацией ссылочного пути.
Этот пример фокусируется на боковом управлении в контексте следования траектории в постоянном продольном скоростном сценарии. В примере вы будете:
Узнайте об алгоритме позади Бокового блока диспетчера Стэнли.
Создайте ведущий сценарий с помощью приложения Driving Scenario Designer и сгенерируйте ссылочный путь для автомобиля, чтобы следовать.
Протестируйте боковой контроллер в сценарии с помощью модели Simulink® с обратной связью.
Визуализируйте сценарий и связанные результаты симуляции с помощью Видимого с большого расстояния Осциллографа.
Контроллер ответвления Стэнли [1] использование нелинейный закон о надзоре, чтобы минимизировать перекрестный дефект записи и направляющийся угол переднего колеса относительно ссылочного пути. Боковой блок диспетчера Стэнли вычисляет держащуюся угловую команду, которая настраивает текущее положение автомобиля, чтобы совпадать со ссылочным положением.
В зависимости от модели автомобиля, используемой в получении закона о надзоре, Боковой блок диспетчера Стэнли имеет две настройки [1]:
Кинематическая модель велосипеда: кинематическая модель принимает, что автомобиль имеет незначительную инерцию. Эта настройка в основном подходит для низкоскоростных сред, где инерционные эффекты минимальны. Держащаяся команда вычисляется на основе ссылочного положения, текущего положения и скорости автомобиля.
Динамическая модель велосипеда: динамическая модель включает эффекты инерции: утомите промах и держащееся приведение в действие сервомотора. Это более сложная, но более точная, модель позволяет контроллеру обрабатывать реалистическую динамику. В этой настройке контроллер также требует, чтобы искривление пути, текущий уровень отклонения от курса автомобиля и текущий руководящий угол вычислили держащуюся команду.
Можно установить настройку через параметр модели Автомобиля в диалоговом окне блока.
Сценарий был создан с помощью приложения Driving Scenario Designer. Этот сценарий включает одну, трехполосную дорогу и автомобиль, оборудованный датчиком. Для подробных шагов на добавляющих дорогах маршруты и автомобили, видят Сборку Ведущий Сценарий и Генерируют Синтетические Обнаружения. В этом сценарии, автомобиле:
Запускается в среднем маршруте.
Переключатели к левому маршруту после ввода кривой части дороги.
Возвращается к среднему маршруту.
В течение симуляции автомобиль запускается в постоянной скорости 10 метров/секунда. Этот сценарий экспортировался из приложения как функция MATLAB® использование кнопки Export> Export MATLAB Function. Экспортируемую функцию называют helperCreateDrivingScenario
. Дороги и агенты из этого сценария были сохранены в файл сценария LateralControl.mat
.
Откройте модель примера Simulink.
open_system('LateralControlTutorial')
Модель содержит следующие основные компоненты:
Боковой диспетчер Вэриэнт Сабсистем, Вэриэнт Модель, который содержит два Боковых блока диспетчера Стэнли, один сконфигурированный с кинематической моделью велосипеда и другой с динамической моделью велосипеда. Они оба могут управлять держащимся углом автомобиля. Можно задать активный из командной строки. Например, чтобы выбрать блок Lateral Controller Stanley Kinematic, используйте следующую команду:
variant = 'LateralControlTutorial/Lateral Controller'; set_param(variant, 'LabelModeActivechoice', 'Kinematic');
Блок HelperPathAnalyzer
, который предоставляет ссылочный сигнал боковому контроллеру. Учитывая текущее положение автомобиля, это определяет ссылочное положение путем поиска самой близкой точки к автомобилю на ссылочном пути.
Подсистема Автомобиля и Среды, которая моделирует движение автомобиля с помощью блока Vehicle Body 3DOF. Подсистема также моделирует среду при помощи блока Scenario Reader, чтобы считать дороги и агентов из файла сценария LateralControl.mat.
Открытие модели также запускает скрипт helperLateralControlTutorialSetup
, который инициализирует данные, используемые моделью. Скрипт загружает определенные константы, необходимые модели Simulink, такие как параметры автомобиля, параметры контроллера, дорожный сценарий и ссылочные положения. В частности, скрипт вызывает ранее экспортируемый функциональный helperCreateDrivingScenario
, чтобы создать сценарий. Скрипт также настраивает шины, требуемые для модели путем вызова helperCreateLaneSensorBuses
.
Можно построить дорогу и запланированное использование пути:
helperPlotRoadAndPath(scenario, refPoses)
При симуляции модели можно открыть Видимый с большого расстояния Осциллограф, чтобы анализировать симуляцию. После открытия осциллографа нажмите Find Signals, чтобы настроить сигналы. Затем запустите симуляцию, чтобы отобразить автомобиль, дорожные контуры и маркировки маршрута. Изображение ниже показов Видимый с большого расстояния Осциллограф для этого примера в 25 секунд. В сейчас же, автомобиль переключился на левый маршрут.
Можно запустить полную симуляцию и исследовать результаты с помощью следующей команды:
sim('LateralControlTutorial');
Можно также использовать Simulink® Scope в подсистеме Автомобиля и Среды, чтобы осмотреть производительность контроллера, когда автомобиль следует за запланированным путем. Осциллограф показывает, что максимальное отклонение от пути составляет меньше чем 0,3 метра, и самое большое руководящее угловое значение является меньше чем 3 градусами.
scope = 'LateralControlTutorial/Vehicle and Environment/Scope';
open_system(scope)
Чтобы уменьшать боковое отклонение и колебание в держащейся команде, используйте блок Lateral Controller Stanley Dynamic и моделируйте модель снова:
set_param(variant, 'LabelModeActivechoice', 'Dynamic'); sim('LateralControlTutorial');
Этот пример показал, как моделировать боковое управление автомобиля в маршруте, изменяющем сценарий с помощью Simulink. По сравнению с блоком Lateral Controller Stanley Kinematic блок Lateral Controller 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
Видимый с большого расстояния осциллограф | Driving Scenario Designer | Хранение маршрута помогает системе | Боковой диспетчер Стэнли | Кузов 3DOF