В этом примере показано, как создать код C++ из модели Simulink ® для развертывания в качестве автономного узла ROS 2. Код создается на компьютере и должен быть вручную передан на целевое устройство ROS. Для создания кода подключение к аппаратным средствам не требуется. Автоматизированное развертывание узла ROS 2 см. в разделе Создание автономного узла ROS 2 из Simulink ®.
В этом примере требуется Simulink Coder™ и Embedded Coder™.
Если узел ROS развертывается впервые, проверьте системные требования ROS.
Система Ubuntu Linux с ROS необходима для построения и запуска сгенерированного кода C++. Можно использовать собственную систему ROS Ubuntu или виртуальную машину Linux, используемую для примеров Toolbox™ ROS. Инструкции по настройке имитированного робота см. в разделе Начало работы с беседкой и моделируемым TurtleBot.
Просмотрите пример управления обратной связью робота с поддержкой ROS над ROS 2, в котором подробно описывается модель Simulink, из которой создается код.
Настройте модель для генерации кода C++ для автономного узла ROS 2. Модель представляет собой пропорциональный контроллер, представленный в примере управления обратной связью робота с поддержкой ROS над ROS 2.
Откройте модель управления обратной связью робота, сконфигурированную для ROS 2.
open_system("robotFeedbackControllerROS2");На вкладке ROS щелкните Hardware settings (Параметры оборудования). На панели «Hardware implementation» раздел «Hardware board settings» содержит настройки, относящиеся к сгенерированному пакету ROS 2, такие как информация, которая будет включена в package.xml файл. Изменить имя сопровождающего на ROS 2 Example User, click Применить.
Для модели требуются массивы переменного размера. Чтобы включить этот параметр, проверьте сигналы переменного размера в разделе «Создание кода» > «Интерфейс» > «Программная среда».
На панели «Решатель» убедитесь, что для параметра «Тип решателя» задано значение Fixed-stepи задайте для параметра Фиксированный размер шага значение 0.05. В сгенерированном коде размер фиксированного шага определяет фактический временной шаг в секундах, который используется для цикла обновления модели (см. Выполнение кода, сгенерированного из модели (Simulink Coder) (Simulink Coder)). Его можно сделать меньшим (например, 0,001 или 0,0001), но для текущих целей достаточно 0,05.
Нажмите кнопку ОК.
После настройки модели необходимо указать параметры сборки для целевого оборудования и задать папку или создать сгенерированный код.
Откройте диалоговое окно «Параметры конфигурации». На вкладке Моделирование (Modeling) щелкните Параметры модели (Model Settings).
На вкладке Реализация оборудования в разделе Целевые аппаратные ресурсы щелкните группу Параметры построения. Задайте для действия Построение значение Build. Этот параметр обеспечивает создание кода для узла ROS 2 без создания его на внешнем устройстве ROS 2.
В этой задаче создается исходный код для узла ROS 2, вручную развертывается в системе Ubuntu Linux и создается в системе Linux.
В MATLAB ® измените текущую папку на папку с разрешением на запись.
На вкладке Моделирование (Simulation) в разделе Подготовка (Prepare) выберите пункт Панель инструментов ROS (ROS Toolbox) > Сеть ROS (ROS Network).
Установите идентификатор домена (ROS 2) сети ROS 2. В этом примере используется идентификатор домена 25.
На вкладке ROS в разделе Deploy щелкните Build Model. При обнаружении ошибок, связанных с несоответствием типов шин, закройте модель, очистите все переменные из базового рабочего пространства MATLAB и снова откройте модель. Щелкните ссылку Вид (View) Диагностика (Diagnostics) в нижней части панели инструментов модели, чтобы увидеть выходные данные процесса построения.
После завершения построения src папка, содержащая исходный код пакета, будет записана в папку.

Сжать src путем выполнения следующей команды в окне команд MATLAB:
>> tar('src.tar','src');
После создания файла дегтя вручную перенесите его на целевой компьютер. В этом примере предполагается, что вы используете виртуальную машину из команды «Начать работу с беседкой» и Simulated TurtleBot. Виртуальная машина настроена на прием соединений SSH и SCP. Если вы используете собственную систему Linux, обратитесь к системному администратору за безопасным способом передачи файлов.
Убедитесь, что ваша хост-система (система с вашим src.tar файл) имеет клиент SCP. Для систем Windows ® на следующем шаге предполагается, что клиент PuTTY SCP (pcsp.exe) установлен.
Используйте SCP для передачи файлов домашнему директору пользователя на виртуальной машине Linux. Имя пользователя: user и пароль: password. Заменить <virtual_machine_ip> с IP-адресом виртуальных машин.
Хост-системы Windows:
pscp.exe src.tar user@<virtual_machine_ip>:
Серверные системы Linux или macOS:
scp src.tar user@<virtual_machine_ip>:
В системе Linux выполните следующие команды для создания рабочей области Catkin и распаковки исходного кода. Можно использовать существующую рабочую область Catkin.
mkdir ~/ros2_ws_simulink tar -C ~/ros2_ws_simulink/ -xvf ~/src.tar
Создайте узел ROS 2 с помощью следующей команды в Linux. Заменить <path_to_catkin_ws> с путем к вашему рабочему пространству catkin. В этом примере <path_to_catkin_ws> будет ~/ros2_ws_simulink. (Примечание.В процессе построения могут возникать предупреждения, например, о неиспользуемых параметрах. Эти параметры необходимы только для среды Simulink, это не повлияет на процесс сборки.)
cd <path_to_catkin_ws> source /opt/ros/dashing/local_setup.sh colcon build
Убедитесь, что исполняемый файл узла создан с помощью:
file ~/ros2_ws_simulink/install/robotfeedbackcontrollerros2/lib/robotfeedbackcontrollerros2/robotFeedbackControllerROS2
Если исполняемый файл был создан успешно, команда выводит информацию о файле. Теперь модель готова к работе в качестве автономного узла ROS 2 на устройстве.
(Необязательно) Затем можно запустить узел с помощью этих команд. Заменить <path_to_catkin_ws> с путем к вашему рабочему пространству catkin.
Дважды щелкните значок «Gazebo Empty» и «ROS Bridge» на рабочем столе виртуальной машины, чтобы настроить среду «Gazebo». Установите переменные среды и запустите узел ROS 2, используя:
export ROS_DOMAIN_ID=25 source /opt/ros/dashing/local_setup.sh ~/<path_to_catkin_ws>/install/robotfeedbackcontrollerros2/lib/robotfeedbackcontrollerros2/robotFeedbackControllerROS2
Примечание: Возможно, что робот крутится в неожиданном месте, это потому, что поза и мир смещены в Беседке. Перезапустите виртуальную машину и снова запустите беседку и узел.
Также можно использовать ros2 node для вывода списка всех работающих узлов в сети ROS 2. robotFeedbackControllerROS2 должен находиться в отображаемом списке узлов.
ros2('node','list')
Убедитесь, что этот узел ROS 2 публикует данные по теме ROS 2. /cmd_vel, для управления движением моделируемого робота.
ros2('topic','list')
Если ожидаемые узел и раздел недоступны, попробуйте задать ROS_DOMAIN_ID с использованием setenv в окне команд MATLAB.
setenv("ROS_DOMAIN_ID","25")