В этом примере показано, как распределить Автоматизированное приложение Камердинера Парковки среди различных узлов в сети ROS в Simulink®. Этот пример расширяет Автоматизированного Камердинера Парковки (Automated Driving Toolbox) пример в Automated Driving Toolbox™. Используя модель Simulink в Автоматизированном Камердинере Парковки в примере Simulink, настройте планировщика, диспетчера и параметры динамики аппарата прежде, чем разделить модель в узлы ROS.
Предпосылка: автоматизированный камердинер парковки (Automated Driving Toolbox), сгенерируйте автономный узел ROS от Simulink®
Типичное автономное приложение транспортного средства имеет следующий рабочий процесс.
Этот пример концентрируется на симуляции Планирования, Управления и компонентов Транспортного средства. Для Локализации этот пример использует записанные заранее данные о локализации карты. Компонент Планирования далее разделен на планировщика Поведения и компоненты Планировщика Пути. Это приводит к сети ROS, состоявшей из четырех узлов ROS: Behavioral Planner
, Path Planner
, Controller
и Vehicle Sim
. Следующий рисунок показывает отношения между каждым узлом ROS в сети и темами, используемыми в каждом.
Наблюдайте деление компонентов в четыре отдельных модели Simulink. Каждая модель Simulink представляет узел ROS.
1. Откройте модель транспортного средства.
open_system('ROSValetVehicleExample');
2. Subscribe
подсистема содержит ROS, Подписывают блоки, которые читают входные данные из узла Контроллера.
3. Vehicle model
подсистема содержит Велосипедный блок Model, Vehicle Body 3DOF
, чтобы симулировать контроллер транспортного средства, эффекты и отправляют, информация о транспортном средстве по сети ROS через ROS Публикуют блоки в Publish
подсистема.
1. Откройте поведенческую модель планировщика.
open_system('ROSValetBehavioralPlannerExample');
2. Эта модель читает текущее положение транспортного средства, скорость и направление от сети ROS, и отправляет следующую цель. Это проверяет, достигло ли транспортное средство целевого положения сегмента с помощью exampleHelperROSValetGoalChecker
.
3. Behavior Planner
and
Goal Checker
модель запускается, когда новое сообщение доступно на любом /currentpose
или /currentvel
.
4. Модель отправляет состояние, если транспортное средство достигло цели парковки использование /reachgoal
тема, которая использует std_msgs/Bool
сообщение. Все модели останавливают симуляцию, когда этим сообщением является true
.
1. Откройте модель планировщика пути.
open_system('ROSValetPathPlannerExample');
2. Эта модель планирует выполнимый путь через карту среды с помощью pathPlannerRRT
объект, который реализует оптимальное быстро исследующее случайное дерево (RRT*) алгоритм и отправляет план контроллеру по сети ROS.
3. Path Planner
подсистема запускается, когда новое сообщение доступно на /plannerConfig
или /nextgoal
темы.
1. Откройте модели контроллеров транспортного средства.
open_system('ROSValetControllerExample');
2. Эта модель вычисляет и отправляет регулирование и скоростные команды по сети ROS.
3. Подсистема контроллера запускается, когда новое сообщение доступно на /velprofile
тема.
Проверьте, что поведение модели остается то же самое после разделения системы в четыре узла ROS.
1. Запустите rosinit
в Командном окне MATLAB®, чтобы инициализировать глобальный узел и ведущее устройство ROS
rosinit
Initializing ROS master on http://ah-agadkari:56533/. Initializing global node /matlab_global_node_83566 with NodeURI http://ah-agadkari:56537/
2. Загрузите записанные заранее данные о карте локализации в базовом рабочем пространстве MATLAB с помощью exampleHelperROSValetLoadLocalizationData
функция помощника.
exampleHelperROSValetLoadLocalizationData;
3. Откройте все модели и запустите симуляцию с помощью exampleHelperROSValetStartSimulation
функция помощника. Рисунок открывает и показывает, как транспортное средство отслеживает ссылочный путь. Синяя линия представляет ссылочный путь, в то время как красная линия является фактическим путем, перемещенным транспортным средством. Симуляция для всех моделей останавливается, когда транспортное средство достигает итогового места для парковки.
exampleHelperROSValetStartSimulation;
Visualization
подсистема в модели транспортного средства генерирует результаты для этого примера.
open_system('ROSValetVehicleExample/Vehicle model/Visualization');
visualizePath
блок ответственен за создание и обновление графика путей к транспортному средству, показанных ранее. Скорость транспортного средства и держащиеся команды отображены в осциллографе.
open_system("ROSValetVehicleExample/Vehicle model/Visualization/Commands")
Сгенерируйте приложения ROS для Behavioral planner
, Path planner
, Controller
узлы, и симулируют Vehicle
узел в MATLAB и сравнивает результаты с симуляцией. Относитесь, чтобы Сгенерировать Автономный Узел ROS из примера Simulink® для руководства при генерации узлов ROS.
1. Разверните Behavioral planner
, Path planner
и Controller
Узлы ROS.
2. Откройте модель транспортного средства.
open_system('ROSValetVehicleExample');
3. От вкладки Simulation нажмите Run, чтобы запустить симуляцию.
4. Наблюдайте перемещение транспортного средства относительно графика и сравните результаты запущенной симуляции.
5. Закройте сеть ROS с помощью rosshutdown
.
rosshutdown
Shutting down global node /matlab_global_node_83566 with NodeURI http://ah-agadkari:56537/ Shutting down ROS master on http://ah-agadkari:56533/.