Автоматизированный камердинер парковки с 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 подсистема содержит Велосипедный блок Model, 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 объект, который реализует оптимальное быстро исследующее случайное дерево (RRT*) алгоритм и отправляет план контроллеру по сети ROS 2.

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

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

open_system('ROS2ValetControllerExample');

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

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

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

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

exampleHelperROSValetLoadLocalizationData;

2. Откройте все модели и запустите симуляцию с помощью exampleHelperROS2ValetStartSimulation функция помощника. Рисунок открывает и показывает, как транспортное средство отслеживает ссылочный путь. Синяя линия представляет ссылочный путь, в то время как красная линия является фактическим путем, перемещенным транспортным средством. Симуляция для всех моделей останавливается, когда транспортное средство достигает итогового места для парковки.

exampleHelperROS2ValetStartSimulation

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

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 как входной параметр, для каждой модели, чтобы сгенерировать Код С++ и развернуть приложение на хосте - компьютере.

exampleHelperROS2ValetDeployNodes(); % generate C++ code and deploy the application for ROS 2 nodes
### Starting build procedure for model: ROS2ValetBehavioralPlannerExample
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: H:\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetBehavioralPlannerExample_ert_rtw
### Invoking Target Language Compiler on ROS2ValetBehavioralPlannerExample.rtw
### Using System Target File: W:\21\agadkari.Bdoc20a.j1181109.Examples\matlab\rtw\c\ert\ert.tlc
### Loading TLC function libraries
........
### Initial pass through model to cache user defined code
...
### Caching model source code
...........................................................................
### Writing header file ROS2ValetBehavioralPlannerExample_types.h
### Writing source file ROS2ValetBehavioralPlannerExample.cpp
### Writing header file ROS2ValetBehavioralPlannerExample_private.h
### Writing header file ROS2ValetBehavioralPlannerExample.h
### Writing header file rtwtypes.h
.
### Writing header file rtGetNaN.h
### Writing source file rtGetNaN.cpp
### Writing header file rt_nonfinite.h
### Writing source file rt_nonfinite.cpp
### Writing header file rtGetInf.h
.
### Writing source file rtGetInf.cpp
### Writing header file rtmodel.h
### Writing source file ROS2ValetBehavioralPlannerExample_data.cpp
### Writing source file ert_main.cpp
### TLC code generation complete.
.### Evaluating PostCodeGenCommand specified in the model
### Using toolchain: Colcon Tools
### Building 'ROS2ValetBehavioralPlannerExample': all
Running colcon build in folder 'H:/Documents/MATLAB/Examples/ros-ex88924338'.Done.
Success
### Successfully generated all binary outputs.
### Successful completion of build procedure for model: ROS2ValetBehavioralPlannerExample
### Creating HTML report file ROS2ValetBehavioralPlannerExample_codegen_rpt.html
### Simulink cache artifacts for 'ROS2ValetBehavioralPlannerExample' were created in 'H:\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetBehavioralPlannerExample.slxc'.
### Starting build procedure for model: ROS2ValetPathPlannerExample
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: H:\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetPathPlannerExample_ert_rtw
### Invoking Target Language Compiler on ROS2ValetPathPlannerExample.rtw
### Using System Target File: W:\21\agadkari.Bdoc20a.j1181109.Examples\matlab\rtw\c\ert\ert.tlc
### Loading TLC function libraries
........
### Initial pass through model to cache user defined code
......
### Caching model source code
...............................................................................
...............................................................................
...............................................................................
...............................................................................
...............................................................................
...
### Writing header file ROS2ValetPathPlannerExample_types.h
### Writing source file ROS2ValetPathPlannerExample.cpp
.
### Writing header file ROS2ValetPathPlannerExample_private.h
### Writing header file ROS2ValetPathPlannerExample.h
### Writing header file rtwtypes.h
### Writing header file rtGetInf.h
### Writing source file rtGetInf.cpp
.
### Writing header file rtGetNaN.h
### Writing source file rtGetNaN.cpp
### Writing header file rt_defines.h
### Writing header file rt_nonfinite.h
### Writing source file rt_nonfinite.cpp
.
### Writing source file ROS2ValetPathPlannerExample_data.cpp
### Writing header file rtmodel.h
### Writing source file ert_main.cpp
### TLC code generation complete.
.### Evaluating PostCodeGenCommand specified in the model
### Using toolchain: Colcon Tools
### Building 'ROS2ValetPathPlannerExample': all
Running colcon build in folder 'H:/Documents/MATLAB/Examples/ros-ex88924338'.Done.
Success
### Successfully generated all binary outputs.
### Successful completion of build procedure for model: ROS2ValetPathPlannerExample
### Creating HTML report file ROS2ValetPathPlannerExample_codegen_rpt.html
### Simulink cache artifacts for 'ROS2ValetPathPlannerExample' were created in 'H:\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetPathPlannerExample.slxc'.
### Starting build procedure for model: ROS2ValetControllerExample
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: H:\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetControllerExample_ert_rtw
### Invoking Target Language Compiler on ROS2ValetControllerExample.rtw
### Using System Target File: W:\21\agadkari.Bdoc20a.j1181109.Examples\matlab\rtw\c\ert\ert.tlc
### Loading TLC function libraries
.......
### Initial pass through model to cache user defined code
.....
### Caching model source code
...............................................................................
.....................................................................
### Writing header file ROS2ValetControllerExample_types.h
### Writing source file ROS2ValetControllerExample.cpp
### Writing header file ROS2ValetControllerExample_private.h
### Writing header file ROS2ValetControllerExample.h
.
### Writing header file rtwtypes.h
### Writing header file rtGetNaN.h
### Writing source file rtGetNaN.cpp
### Writing header file rt_nonfinite.h
### Writing source file rt_nonfinite.cpp
### Writing header file rt_assert.h
.
### Writing header file rtGetInf.h
### Writing source file rtGetInf.cpp
### Writing header file rtmodel.h
### Writing source file ROS2ValetControllerExample_data.cpp
### Writing source file ert_main.cpp
.
### TLC code generation complete.
....### Evaluating PostCodeGenCommand specified in the model
### Using toolchain: Colcon Tools
### Building 'ROS2ValetControllerExample': all
Running colcon build in folder 'H:/Documents/MATLAB/Examples/ros-ex88924338'.Done.
Success
### Successfully generated all binary outputs.
### Successful completion of build procedure for model: ROS2ValetControllerExample
### Creating HTML report file ROS2ValetControllerExample_codegen_rpt.html
### Simulink cache artifacts for 'ROS2ValetControllerExample' were created in 'H:\Documents\MATLAB\Examples\ros-ex88924338\ROS2ValetControllerExample.slxc'.

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

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

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