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

®

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

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

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

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

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

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

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

  • На панели Решатель убедитесь, что для Типа решателя задано значение Fixed-step, и установите размер фиксированного шага равным 0.05. В сгенерированном коде размер Fixed-step определяет фактический временной шаг, в секундах, который используется для цикла обновления модели (см. Выполнение кода, сгенерированного из модели (Simulink Coder) (Simulink Coder)). Он может быть сделан меньшим (например, 0,001 или 0,0001), но для текущих целей достаточно 0,05.

  • Нажмите кнопку ОК.

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

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

Откройте диалоговое окно Параметров конфигурации. На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings).

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

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

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

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

  • На вкладке Simulation, в разделе Prepare, выберите ROS Toolbox > ROS Network.

  • Установите идентификатор области (ROS 2) сети ROS 2. Этот пример использует идентификатор области как 25.

  • На вкладке ROS в разделе Deploy нажмите Build Model. Если вы получите какие-либо ошибки о несоответствии типов шины, закройте модель, очистите все переменные из базового рабочего пространства MATLAB и повторно откройте модель. Щелкните ссылку View Diagnostics в нижней части панели инструментов модели, чтобы увидеть выходы процесса сборки.

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

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

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

После генерации файла tar вручную передайте его на целевую машину. Этот пример предполагает, что вы используете виртуальную машину из Запуск with Gazebo и моделируемого 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

Примечание: Возможно, что робот вращается в неожиданном месте, это потому, что положение и мир смещения в 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")