Этот пример показывает вам, как сгенерировать Код С++ из модели Simulink®, чтобы развернуться как автономный узел ROS 2. Код сгенерирован на вашем компьютере и должен быть вручную передан целевому устройству ROS. Никакая связь с оборудованием не необходима для сгенерированного код. Для автоматизированного развертывания узла ROS 2 смотрите, Генерируют Автономный узел ROS 2 от Simulink®.
Этот пример требует Simulink Coder™ и Embedded Coder™.
Если это - ваш первый раз, развертывая узел ROS, проверяйте Системные требования ROS.
Система Linux Ubuntu с ROS необходима для создания и выполнения сгенерированного Кода С++. Можно использовать собственный Ubuntu система ROS, или можно использовать виртуальную машину Linux, используемую для примеров ROS Toolbox™. Смотрите Начало работы с Gazebo и Симулированным TurtleBot для получения инструкций относительно подготовки симулированного робота.
Рассмотрите Управление с обратной связью поддерживающего ROS Робота по примеру 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>:
В системе 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")