В этом примере показано, как создать код C++ из модели Simulink ® для развертывания в качестве автономного узла ROS. Код создается на компьютере и должен быть вручную передан на целевое устройство ROS. Для создания кода подключение к аппаратным средствам не требуется. Автоматизированное развертывание узла ROS см. в разделе Создание автономного узла ROS из Simulink ®.
В этом примере требуется Simulink Coder™ и Embedded Coder™.
Система Ubuntu Linux с ROS необходима для построения и запуска сгенерированного кода C++. Можно использовать собственную систему ROS Ubuntu или виртуальную машину Linux, используемую для примеров Toolbox™ ROS. Инструкции по установке и использованию виртуальной машины см. в разделе Начало работы с Gazebo и Simulated TurtleBot.
Просмотрите пример управления обратной связью робота с поддержкой ROS, в котором подробно описывается модель Simulink, из которой создается код.
Настройте модель для генерации кода C++ для автономного узла ROS с помощью параметров конфигурации. Модель, используемая здесь, представляет собой пропорциональный контроллер, представленный в примере управления обратной связью робота с поддержкой ROS.
Откройте модель пропорционального контроллера.
edit robotROSFeedbackControlExample
Скопируйте всю модель в новую пустую модель Simulink.
Удалите блок управления скоростью моделирования.

На вкладке Приложения в разделе Системы управления щелкните Операционная система робота (ROS).
В открывшемся диалоговом окне ROS выберите Robot Operating System (ROS) из раскрывающегося списка Сеть ROS. Откроется вкладка ROS на панели инструментов, на которой отображается указанная сеть ROS в разделе Connect.
В разделе Подготовка (Prepare) на вкладке АФК (ROS) щелкните Настройки оборудования (Hardware Settings), чтобы открыть диалоговое окно параметров конфигурации модели.
Раздел Hardware board settings содержит настройки, относящиеся к сгенерированному пакету ROS, например, информацию, включенную в package.xml файл. Изменить имя сопровождающего на ROS Example User и нажмите кнопку ОК.
На панели «Решатель» диалогового окна «Параметры конфигурации» убедитесь, что для параметра «Тип» задано значение Fixed-step, для решателя установлено значение ode3 (Bogacki-Shampine)а для параметра Фиксированный размер шага (Fixed-step size) установлено значение 0.05. В сгенерированном коде фиксированный размер шага определяет фактический временной шаг, который используется для цикла обновления модели. Дополнительные сведения см. в разделе Выполнение кода, созданного на основе модели (Simulink Coder).
На панели «Создание кода» убедитесь, что включены сигналы переменного размера.
Нажмите кнопку «ОК», чтобы закрыть диалоговое окно «Параметры конфигурации». Сохранить модель как RobotController.slx.
После настройки модели необходимо указать параметры сборки для целевого оборудования и задать папку или создать сгенерированный код.
Щелкните Развернуть на вкладке ROS. Затем в разделе Deployment (Развертывание) щелкните Build Model.Этот параметр обеспечивает создание кода для узла ROS без создания его на внешнем устройстве ROS.
Запустите мастер ROS в MATLAB ®. Этот шаблон ROS используется Simulink для шагов создания кода .
В окне команды MATLAB введите:
rosinit
Установите текущую папку в каталог с возможностью записи. Эта папка является расположением, в котором генерируется код, который будет храниться при построении модели.
На вкладке Код C (C Code) щелкните Создать код (Generate Code) или нажмите клавишу Ctrl+B для начала создания кода для модели.
После завершения построения в папку записываются два новых файла.
RobotController.tgz-- Архив, содержащий код C++
build_ros_model.sh - Сценарий оболочки для извлечения и построения кода C++

Вручную перенесите эти два файла на конечный компьютер. При подключении к устройству ROS с помощью rosdevice, вы можете отправить файлы с помощью putFile. В противном случае предполагается, что вы используете виртуальную машину Linux, используемую для примеров Toolbox™ Robotics System. Виртуальная машина настроена на прием соединений SSH и SCP. Если вы используете собственную систему Linux, обратитесь к системному администратору за безопасным способом передачи файлов.
Убедитесь, что ваша хост-система (система с вашим RobotController.tgz и build_ros_model.sh файлы) имеет клиент SCP. Для систем Windows ® на следующем шаге предполагается, что клиент PuTTY SCP (pcsp.exe) установлен.
Используйте SCP для передачи файлов домашнему директору пользователя на виртуальной машине Linux. Имя пользователя: user и пароль: password. Заменить <virtual_machine_ip> с IP-адресом виртуальных машин.
Хост-системы Windows:
pscp.exe RobotController.tgz build_ros_model.sh user@<virtual_machine_ip>:
Серверные системы Linux или macOS:
scp RobotController.tgz build_ros_model.sh user@<virtual_machine_ip>:
build_ros_model.sh не относится к данной модели. Его необходимо перенести только один раз для нескольких моделей.
В системе Linux выполните следующие команды для создания рабочей области Catkin. Можно использовать существующую рабочую область Catkin.
mkdir -p ~/catkin_ws_simulink/src cd ~/catkin_ws_simulink/src catkin_init_workspace
Распакуйте и создайте узел с помощью следующей команды в Linux. Заменить <path_to_catkin_ws> с путем к вашему рабочему пространству catkin.
cd ~ ./build_ros_model.sh RobotController.tgz <path_to_catkin_ws>
Если это не работает, убедитесь, что build_ros_model.sh устанавливается как исполняемый файл путем ввода следующей команды.
chmod +x build_ros_model.sh
Созданный исходный код находится в разделе ~/catkin_ws_simulink/src/robotcontroller/. Просмотрите содержимое package.xml файл. Убедитесь, что исполняемый файл узла создан с помощью:
file ~/catkin_ws_simulink/devel/lib/robotcontroller/robotcontroller_node
Если исполняемый файл был создан успешно, команда выводит информацию о файле.
Теперь модель готова к запуску в качестве автономного узла ROS на устройстве.
(Необязательно) Затем можно запустить узел с помощью этой команды. Заменить <path_to_catkin_ws> с путем к вашему рабочему пространству catkin.
~/<path_to_catkin_workspace>/devel/lib/robotcontroller/robotcontroller_node