Автоматизированный камердинер парковки с ROS 2 в Simulink

В этом примере показано, как распределить Автоматизированное приложение Камердинера Парковки среди различных узлов в сети ROS 2 в Simulink® и развернуть их как автономный ROS 2 узла. Этот пример расширяет Автоматизированного Камердинера Парковки (Automated Driving Toolbox) пример в Automated Driving Toolbox™. Используя модель Simulink в Автоматизированном Камердинере Парковки в примере Simulink, настройте планировщика, диспетчера и транспортное средство динамические параметры прежде, чем разделить модель в ROS 2 узла.

Необходимые условия: автоматизированный камердинер парковки (Automated Driving Toolbox), сгенерируйте автономный узел ROS 2 от Simulink®

Введение

Это автономное приложение транспортного средства имеет следующие компоненты.

Этот пример концентрируется на симуляции Планирования, Управления и компонентов Транспортного средства. Для Локализации этот пример использует записанные заранее данные о карте локализации. Компонент Планирования далее разделен на планировщика Поведения и компоненты Планировщика Пути. Это приводит к сети ROS 2, состоявшей из четырех ROS 2 узла: Behavioral Planner, Path Planner, Controller и Vehicle. Следующий рисунок показывает отношения между каждым узлом ROS 2 в сети и темами, используемыми в каждом.

Исследуйте ROS Simulink 2 узла и возможность соединения

Наблюдайте деление компонентов в четыре отдельных модели Simulink. Каждая модель Simulink представляет узел ROS 2.

Узел транспортного средства

1. Откройте модель транспортного средства.

open_system('ROS2ValetVehicleExample');

2. Subscribe подсистема содержит ROS 2, Подписывают блоки, которые читают входные данные из узла Контроллера.

3. Vehicle model подсистема содержит блок Bicycle Model (Automated Driving Toolbox), Vehicle Body 3DOF, чтобы симулировать контроллер транспортного средства, эффекты и отправляют, информация о транспортном средстве по сети ROS 2 через ROS 2 Публикуют блоки в Publish подсистема.

Поведенческий узел планировщика

1. Откройте поведенческую модель планировщика.

open_system('ROS2ValetBehavioralPlannerExample');

2. Эта модель считывает текущие информации транспортного средства из сети ROS 2, отправляет следующую цель и проверяет, достигло ли транспортное средство итогового положения сегмента с помощью rosAutomatedValetHelperGoalChecker.

3. Behavioral Planner and Goal Checker подсистема запускается, когда новое сообщение доступно на любом /currentvel или /currentpose.

4. Модель отправляет состояние, если транспортное средство достигло итоговой цели парковки использование /reachgoal тема, которая использует std_msgs/Bool тип сообщения. Все модели останавливают симуляцию, когда этим сообщением является true.

Узел планировщика пути

1. Откройте модель планировщика пути.

open_system('ROS2ValetPathPlannerExample');

2. Эта модель планирует выполнимый путь через карту среды с помощью pathPlannerRRT Объект (Automated Driving Toolbox), который реализует оптимальное быстро исследующее случайное дерево (RRT*) алгоритм и отправляет план контроллеру по сети ROS 2.

3. Path Planner подсистема запускается, когда новое сообщение доступно на /plannerConfig или /nextgoal темы.

Узел контроллера

1. Откройте модели контроллеров транспортного средства.

open_system('ROS2ValetControllerExample');

2. Эта модель вычисляет и отправляет регулирование и скоростные команды по сети ROS 2.

3. Подсистема контроллера запускается, когда новое сообщение доступно на /velprofile тема.

Симулируйте ROS 2 узла, чтобы проверить разделение

Проверьте, что поведение модели остается то же самое после разделения системы в четыре ROS 2 узла.

1. Загрузите записанные заранее данные о карте локализации в базовом рабочем пространстве MATLAB с помощью exampleHelperROSValetLoadLocalizationData функция помощника.

exampleHelperROSValetLoadLocalizationData;

2. Откройте имитационную модель.

open_system('ROS2ValetSimulationExample.slx');

В левой области выбора парковки можно также выбрать место. Место для парковки по умолчанию является шестым пятном в верхней строке.

3. Во вкладке SIMULATION кликните по Запуску от раздела SIMULATE или запустите sim('ROS2ValetSimulationExample.slx') в командном окне MATLAB. Рисунок открывает и показывает, как транспортное средство отслеживает ссылочный путь. Синяя линия представляет ссылочный путь, в то время как красная линия является фактическим путем, перемещенным транспортным средством. Симуляция для всех моделей останавливается, когда транспортное средство достигает итогового места для парковки.

sim('ROS2ValetSimulationExample.slx');

Результаты симуляции

Visualization подсистема в модели транспортного средства генерирует результаты для этого примера.

open_system('ROS2ValetVehicleExample/Vehicle model/Visualization');

visualizePath блок ответственен за создание и обновление графика путей к транспортному средству, показанных ранее. Скорость транспортного средства и держащиеся команды отображены в осциллографе.

open_system("ROS2ValetVehicleExample/Vehicle model/Visualization/Commands")

Разверните ROS 2 узла

Сгенерируйте ROS 2 приложения для Behavioral Planner, Path planner и Controller узлы. Симулируйте Vehicle узел в MATLAB и сравнивает результаты с симуляцией.

Сгенерируйте и разверните Behavioral Planner, Path Planner и Controller приложения узла с помощью exampleHelperROS2ValetDeployNodes функция помощника. Вызовы функции помощника slbuild (Simulink) команда с именем модели Simulink как входной параметр, для каждой модели, чтобы сгенерировать Код С++ и развернуть приложение на хосте - компьютере.

exampleHelperROS2ValetDeployNodes(); % generate C++ code and deploy the application for ROS 2 nodes
### Starting build procedure for: ROS2ValetBehavioralPlannerExample
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: C:\Users\joshchen\OneDrive - MathWorks\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetBehavioralPlannerExample_ert_rtw
### Generated code for 'ROS2ValetBehavioralPlannerExample' is up to date because no structural, parameter or code replacement library changes were found.
### Evaluating PostCodeGenCommand specified in the model
### Using toolchain: Colcon Tools
### Building 'ROS2ValetBehavioralPlannerExample': all
Running colcon build in folder 'C:/Users/joshchen/OneDrive - MathWorks/Documents/MATLAB/Examples/ros-ex88924338'.Done.
Success
### Successfully generated all binary outputs.
### Successful completion of build procedure for: ROS2ValetBehavioralPlannerExample
### Creating HTML report file ROS2ValetBehavioralPlannerExample_codegen_rpt.html

Build Summary

Top model targets built:

Model                              Action         Rebuild Reason                           
===========================================================================================
ROS2ValetBehavioralPlannerExample  Code compiled  Compilation artifacts were out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 1m 32.504s
### Starting build procedure for: ROS2ValetPathPlannerExample
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: C:\Users\joshchen\OneDrive - MathWorks\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetPathPlannerExample_ert_rtw
### Generated code for 'ROS2ValetPathPlannerExample' is up to date because no structural, parameter or code replacement library changes were found.
### Evaluating PostCodeGenCommand specified in the model
### Using toolchain: Colcon Tools
### Building 'ROS2ValetPathPlannerExample': all
Running colcon build in folder 'C:/Users/joshchen/OneDrive - MathWorks/Documents/MATLAB/Examples/ros-ex88924338'.Done.
Success
### Successfully generated all binary outputs.
### Successful completion of build procedure for: ROS2ValetPathPlannerExample
### Creating HTML report file ROS2ValetPathPlannerExample_codegen_rpt.html

Build Summary

Top model targets built:

Model                        Action         Rebuild Reason                           
=====================================================================================
ROS2ValetPathPlannerExample  Code compiled  Compilation artifacts were out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 1m 53.874s
### Starting build procedure for: ROS2ValetControllerExample
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: C:\Users\joshchen\OneDrive - MathWorks\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetControllerExample_ert_rtw
### Generated code for 'ROS2ValetControllerExample' is up to date because no structural, parameter or code replacement library changes were found.
### Evaluating PostCodeGenCommand specified in the model
### Using toolchain: Colcon Tools
### Building 'ROS2ValetControllerExample': all
Running colcon build in folder 'C:/Users/joshchen/OneDrive - MathWorks/Documents/MATLAB/Examples/ros-ex88924338'.Done.
Success
### Successfully generated all binary outputs.
### Successful completion of build procedure for: ROS2ValetControllerExample
### Creating HTML report file ROS2ValetControllerExample_codegen_rpt.html

Build Summary

Top model targets built:

Model                       Action         Rebuild Reason                           
====================================================================================
ROS2ValetControllerExample  Code compiled  Compilation artifacts were out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 2m 1.851s

Откройте модель транспортного средства и запустите симуляцию.

open_system("ROS2ValetVehicleExample"); 
set_param("ROS2ValetVehicleExample","SimulationCommand","start"); 

Проверьте, что результаты симуляции совпадают развернутому ROS с 2 узлами.