exponenta event banner

Создание кода для развертывания узла ROS 2 вручную из Simulink

®

В этом примере показано, как создать код C++ из модели Simulink ® для развертывания в качестве автономного узла ROS 2. Код создается на компьютере и должен быть вручную передан на целевое устройство ROS. Для создания кода подключение к аппаратным средствам не требуется. Автоматизированное развертывание узла ROS 2 см. в разделе Создание автономного узла 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>:

Сборка и запуск узла ROS 2

В системе 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")