Сгенерируйте код, чтобы вручную развернуть узел ROS 2 от Simulink®

Этот пример показывает вам, как сгенерировать Код С++ из модели Simulink®, чтобы развернуться как автономный узел ROS 2. Код сгенерирован на вашем компьютере и должен быть вручную передан целевому устройству ROS. Никакая связь с оборудованием не необходима для сгенерированного код. Для автоматизированного развертывания узла ROS 2 смотрите, Генерируют Автономный узел ROS 2 от Simulink®.

Необходимые условия

Сконфигурируйте модель для генерации кода

Сконфигурируйте модель, чтобы сгенерировать Код С++ для автономного узла ROS 2. Модель является пропорциональным контроллером, введенным в Управлении с обратной связью поддерживающего ROS Робота по примеру ROS 2.

  • Откройте модель управления с обратной связью робота, сконфигурированную для ROS 2.

open_system("robotFeedbackControllerROS2");
  • Под вкладкой Robot кликните по настройкам Hardware. В панели Аппаратной реализации Аппаратный раздел настроек платы содержит настройки, характерные для сгенерированного пакета ROS 2, такие как информация, которая будет включена в package.xml файл. Поменяйте Обслуживающее имя на ROS 2 Example User, click Применяться.

  • Модель требует массивов переменного размера. Чтобы включить эту опцию, проверяйте сигналы переменного размера под Генерацией кода> Интерфейс> Программная среда.

  • В панели Решателя гарантируйте, что Тип решателя установлен в Fixed-step, и размер Фиксированного шага набора к 0.05. В сгенерированном коде размер Фиксированного шага задает фактический временной шаг в секундах, который используется для цикла обновления модели (см. Подписание Кода, Сгенерированного из Модели (Simulink Coder) (Simulink Coder)). Это может быть сделано меньшим (e.g., 0.001 или 0.0001), но в текущих целях 0.05 достаточно.

  • Нажать ОК.

Сконфигурируйте опции сборки для генерации кода

После конфигурирования модели необходимо задать опции сборки для целевого компьютера и установить папку или создание сгенерированного кода.

Откройте диалоговое окно Параметров конфигурации. Под вкладкой Modeling нажмите Model Settings.

Во вкладке Hardware Implementation, под ресурсами Целевого компьютера, кликают по группе опций Сборки. Установите действие Сборки на Build. Эта установка гарантирует, что код сгенерировал для узла ROS 2, не создавая ее на внешнем устройстве ROS 2.

Сгенерируйте и разверните код

В этой задаче вы генерируете исходный код для узла ROS 2, вручную развертываете в Ubuntu систему Linux и создаете его в системе Linux.

  • В MATLAB®, превращаются текущая папка в местоположение, где у вас есть разрешение записи.

  • Под вкладкой Simulation, в Готовят, выбирают ROS Toolbox> ROS Network.

  • Установите Доменный ID (ROS 2) сети ROS 2. Этот пример использует Доменный ID в качестве 25.

  • Во вкладке Robot, от раздела Deploy, нажимают Build Model. Если вы получаете какие-либо ошибки о несоответствии типа шины, закрываете модель, очищаете все переменные из основного рабочего пространства MATLAB и вновь открыли модель. Нажмите на ссылку Диагностики Представления в нижней части панели инструментов модели, чтобы видеть выход процесса сборки.

Если сборка завершается, src папка, которая содержит исходный код пакета, будет записана в вашу папку.

Сожмите src папка к файлу tar путем выполнения следующей команды в командном окне MATLAB:

>> tar('src.tar','src');

После генерации файла tar вручную передайте его целевой машине. Этот пример принимает, что вы используете виртуальную машину от Начало работы с Gazebo и Симулированным TurtleBot. Виртуальная машина сконфигурирована, чтобы принять связи SCP и SSH. Если вы используете свою собственную систему 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>:

Создание и запуск узла ROS 2

В системе Linux выполните следующие команды, чтобы создать рабочую область Сережки и распаковать исходный код. Можно использовать существующую рабочую область Сережки.

mkdir ~/ros2_ws_simulink
tar -C ~/ros2_ws_simulink/ -xvf ~/src.tar

Создайте узел ROS 2 используя следующую команду в Linux. Замените <path_to_catkin_ws> с путем к вашей рабочей области сережки. В этом примере, <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> с путем к вашей рабочей области сережки.

Дважды щелкните по Gazebo Empty и ROS Bridge на рабочем столе виртуальной машины, чтобы настроить среду Gazebo. Переменные окружения Setup и запуск использование узла ROS 2:

export ROS_DOMAIN_ID=25
source /opt/ros/dashing/local_setup.sh
~/<path_to_catkin_ws>/install/robotfeedbackcontrollerros2/lib/robotfeedbackcontrollerros2/robotFeedbackControllerROS2

Примечание: возможно, что вращения робота в неожиданном местоположении, это вызвано тем, что положение и мир возмещены в Gazebo. Перезапустите виртуальную машину и повторно выполните Gazebo и узел.

Можно также использовать 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")