Автоматизированная парковка с ROS 2 в Simulink

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

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

Введение

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

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

Исследуйте узлы Simulink ROS 2 и возможности подключения

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

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

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

open_system('ROS2ValetVehicleExample');

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

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

Узел планировщика поведения

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

open_system('ROS2ValetBehavioralPlannerExample');

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

3. The 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. The 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 нажмите Run from SIMULATE, или run sim('ROS2ValetSimulationExample.slx') в Командном Окне MATLAB. Откроется рисунок, на котором показано, как транспортное средство отслеживает ссылку путь. Синяя линия представляет путь ссылки, в то время как красная линия является фактическим путем, пройденным автомобилем. Симуляция для всех моделей останавливается, когда транспортное средство достигает конечного места парковки.

sim('ROS2ValetSimulationExample.slx');

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

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

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

The v isualizePath блок отвечает за создание и обновление графика путей транспортных средств, показанных ранее. Команды скорости и рулевого управления транспортного средства отображаются в возможности.

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

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

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

Создавайте и развертывайте Behavioral Planner, Path Planner и Controller приложения узлов, использующие exampleHelperROS2ValetDeployNodes вспомогательная функция. Функция helper вызывает 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.