В этом примере показано, как распределить Автоматизированное приложение Камердинера Парковки среди различных узлов в сети 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 в сети и темами, используемыми в каждом.
Наблюдайте деление компонентов в четыре отдельных модели 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 узла.
1. Загрузите записанные заранее данные о карте локализации в базовом рабочем пространстве MATLAB с помощью exampleHelperROSValetLoadLocalizationData
функция помощника.
exampleHelperROSValetLoadLocalizationData;
2. Откройте все модели и запустите симуляцию с помощью exampleHelperROS2ValetStartSimulation
функция помощника. Рисунок открывает и показывает, как транспортное средство отслеживает ссылочный путь. Синяя линия представляет ссылочный путь, в то время как красная линия является фактическим путем, перемещенным транспортным средством. Симуляция для всех моделей останавливается, когда транспортное средство достигает итогового места для парковки.
exampleHelperROS2ValetStartSimulation
Visualization
подсистема в модели транспортного средства генерирует результаты для этого примера.
open_system('ROS2ValetVehicleExample/Vehicle model/Visualization');
visualizePath
блок ответственен за создание и обновление графика путей к транспортному средству, показанных ранее. Скорость транспортного средства и держащиеся команды отображены в осциллографе.
open_system("ROS2ValetVehicleExample/Vehicle model/Visualization/Commands")
Сгенерируйте 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 узлами.