В этом примере показано, как управлять углом рулевого управления транспортного средства, который следует по плановому пути во время изменения полосы движения, с помощью блока Lateral Controller Stanley.
Управление транспортным средством является конечным шагом в навигационной системе и обычно выполняется с помощью двух независимых контроллеров:
Боковой контроллер: Отрегулируйте угол поворота так, чтобы транспортное средство следовало по ссылке пути. Контроллер минимизирует расстояние между текущим положением транспортного средства и ссылки путем.
Продольные Контроллеры: Следуя по ссылке пути, поддерживайте желаемую скорость, управляя дросселем и тормозом. Контроллер минимизирует различие между углом рыскания транспортного средства и ориентацией исходного пути.
Этот пример фокусируется на боковом управлении в контексте пути, следующего в сценарии постоянной продольной скорости. В примере вы будете:
Узнайте об алгоритме, стоящем за блоком Lateral Controller Stanley.
Создайте сценарий вождения с помощью приложения Driving Scenario Designer и сгенерируйте путь ссылки для транспортного средства.
Протестируйте боковой контроллер в сценарии с помощью модели Simulink ® с обратной связью.
Визуализация сценария и связанных с ним результатов симуляции с помощью функции Bird ' s-Eye Scope.
Боковой контроллер Стэнли [1] использует нелинейный закон управления, чтобы минимизировать перекрестную ошибку и угол рыскания переднего колеса относительно пути ссылки. Блок Lateral Controller Stanley вычисляет команду угла поворота, которая настраивает положение транспортного средства тока так, чтобы оно совпадало с положением ссылки.
В зависимости от модели транспортного средства, используемой в выведении закона управления, блок Lateral Controller Stanley имеет два строений [1]:
Кинематическая модель велосипеда: Кинематическая модель принимает, что транспортное средство имеет незначительную инерцию. Это строение в основном подходит для низкоскоростных окружений, где инерционные эффекты минимальны. Команда рулевого управления вычисляется на основе положения ссылки, положения тока и скорости транспортного средства.
Динамическая модель велосипеда: Динамическая модель включает эффекты инерции: скольжение шины и сервопривод рулевого управления. Эта более сложная, но более точная модель позволяет контроллеру обрабатывать реалистичную динамику. В этом строении контроллер также требует кривизны пути, текущей скорости рыскания транспортного средства и текущего угла рулевого управления, чтобы вычислить команду рулевого управления.
Можно задать строение через Транспортное средство параметра модели в диалоговом окне блока.
Сценарий был создан с использованием приложения Driving Scenario Designer. Этот сценарий включает одну, трехполосную дорогу и автомобиль , оборудованный датчиком. Подробные шаги по добавлению дорог, полос движения и транспортных средств см. в разделе «Интерактивное создание сценария вождения» и «Генерация синтетических данных о датчике». В этом сценарии транспортное средство:
Начинается в средней полосе.
Переключается на левую полосу после выхода на изогнутую часть дороги.
Переходит назад на среднюю полосу.
На протяжении всей симуляции транспортное средство работает с постоянной скоростью 10 метров/секунду. Этот сценарий был экспортирован из приложения как функция MATLAB ® с помощью кнопки « Экспорта» > «Экспорт функции MATLAB». Экспортированная функция имеет имя helperCreateDrivingScenario
. Дороги и актёры из этого сценария были сохранены в файле сценария LateralControl.mat
.
Откройте учебную модель Simulink.
open_system('LateralControlTutorial')
Модель содержит следующие основные компоненты:
Латеральная подсистема варианта контроллера, модель варианта (Simulink), которая содержит два блока бокового контроллера Стэнли, один сконфигурирован с кинематической моделью велосипеда, а другой с динамической моделью велосипеда. Они оба могут управлять углом поворота транспортного средства. Можно задать активный из командной строки. Для примера, чтобы выбрать боковой Контроллер кинематический блок Стэнли, используйте следующую команду:
variant = 'LateralControlTutorial/Lateral Controller'; set_param(variant, 'LabelModeActivechoice', 'Kinematic');
A HelperPathAnalyzer
блок, который обеспечивает опорный сигнал для бокового контроллера. Учитывая текущее положение автомобиля, он определяет ссылку положение путем поиска ближайшей точки к транспортному средству на ссылку пути.
Подсистема Транспортного средства и Окружения, которая моделирует движение транспортного средства с помощью блока 3DOF Тела Транспортного средства (Vehicle Dynamics Blockset). Подсистема также моделирует окружение с помощью блока Scenario Reader, чтобы считать дороги и актёров из файла сценария LateralControl.mat.
Открытие модели также запускает helperLateralControlTutorialSetup
скрипт, который инициализирует данные, используемые моделью. Скрипт загружает определенные константы, необходимые модели Simulink, такие как параметры транспортного средства, параметры контроллера, дорожный сценарий и эталонные положения. В частности, скрипт вызывает ранее экспортированную функцию helperCreateDrivingScenario
для создания сценария. Скрипт также настраивает шины, необходимые для модели, вызывая helperCreateLaneSensorBuses
.
Вы можете построить график дороги и запланированного пути с помощью:
helperPlotRoadAndPath(scenario, refPoses)
При симуляции модели можно открыть Область глаз птицы (Bird 's-Eye Scope), чтобы проанализировать симуляцию. После открытия возможностей нажатия кнопки Find Signals, чтобы настроить сигналы. Затем запустите симуляцию, чтобы отобразить транспортное средство, контуры дороги и разметку маршрута. На изображении ниже показан Bird ' s-Eye Scope для этого примера через 25 секунд. В этот момент транспортное средство переключилось на левую полосу.
Полную симуляцию и исследования результатов можно запустить с помощью следующей команды:
sim('LateralControlTutorial');
Можно также использовать Simulink ® Scope (Simulink) в Подсистеме Транспортного средства и Окружения, чтобы проверить эффективность контроллера, когда транспортное средство следует запланированному пути. На возможности показано максимальное отклонение от пути менее 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 Контроллера Stanley Kinematic, блок Lateral Контроллера Stanley Dynamic обеспечивает улучшенную производительность в пути после меньшего бокового отклонения от пути ссылки.
[1] Гофман, Габриэль М., Клэр Дж. Томлин, Майкл Монтемерло и Себастьян Трун. Autonomobile Automobile Trajectory Tracking for Off-Road Driving: Проектирование контроллера, Experimental Validation and Racing (неопр.) (недоступная ссылка). Американская контрольная конференция. 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