Этот пример показывает вам, как сгенерировать Код С++ из модели Simulink®, чтобы развернуться как автономный узел ROS. Код сгенерирован на вашем компьютере и должен быть вручную передан целевому устройству ROS. Никакая связь с оборудованием не необходима для сгенерированного код. Для автоматизированного развертывания узла ROS смотрите, Генерируют Автономный Узел ROS от Simulink®.
Этот пример требует Simulink Coder™ и Embedded Coder™.
Система Linux Ubuntu с ROS необходима для создания и выполнения сгенерированного Кода С++. Можно использовать собственный Ubuntu система ROS, или можно использовать виртуальную машину Linux, используемую для примеров ROS Toolbox™. Смотрите Начало работы с Gazebo и Симулированным TurtleBot для получения инструкций относительно того, как установить и использовать виртуальную машину.
Рассмотрите Управление с обратной связью поддерживающего ROS примера Робота, который подробно излагает модель Simulink, от которой генерируется код.
Сконфигурируйте модель, чтобы сгенерировать Код С++ для автономного узла ROS с помощью Configuration Parameters. Модель, используемая здесь, является пропорциональным контроллером, введенным в Управлении с обратной связью поддерживающего ROS примера Робота.
Откройте пропорциональные модели контроллеров.
edit robotROSFeedbackControlExample
Скопируйте целую модель в новую пустую модель Simulink.
Удалите блок Simulation Rate Control.
Откройте диалоговое окно Configuration Parameters. Под вкладкой Simulation нажмите Model Settings.
В панели Hardware Implementation, набор Hardware board к Robot Operating System (ROS)
.
Раздел Hardware board settings содержит настройки, характерные для сгенерированного пакета ROS, такие как информация, включенная в package.xml
файл. Измените Maintainer name в ROS Example User
и нажмите OK.
В панели Solver диалогового окна Configuration Parameters гарантируйте, что Type установлен в Fixed-step
, Solver установлен в ode3 (Bogacki-Shampine)
и Fixed-step size установлен в 0.05
. В сгенерированном коде размер фиксированного шага задает фактический временной шаг, который используется для цикла обновления модели. Смотрите Подписание Кода, Сгенерированного из Модели (Simulink Coder) для получения дополнительной информации.
В панели Code Generation гарантируйте, что variable-size signals включен.
Нажмите OK, чтобы закрыть диалоговое окно Configuration Parameters. Сохраните модель как RobotController.slx
.
После конфигурирования модели необходимо задать опции сборки для целевого компьютера и установить папку или создание сгенерированного кода.
Откройте диалоговое окно Configuration Parameters. Под вкладкой Simulation нажмите Model Settings.
Во вкладке Hardware Implementation, под Target hardware resources, кликают по группе Build options. Установите Build action на None
. Эта установка гарантирует, что код сгенерировал для узла ROS, не создавая ее на внешнем устройстве ROS.
Запустите ведущее устройство ROS в MATLAB®. Это ведущее устройство ROS используется Simulink для шагов генерации кода.
В Командном Окне MATLAB введите:
rosinit
Установите текущую папку на перезаписываемую директорию. Эта папка является местоположением, которые генерируют код, будет храниться, когда вы создаете модель.
Под вкладкой C Code нажмите Generate Code или нажмите Ctrl+B
запустить генерацию кода для модели.
Если сборка завершается, два новых файла записаны в вашу папку.
RobotController.tgz
– Архив, содержащий Код С++
build_ros_model.sh
– Сценарий оболочки для извлечения и создания Кода С++
Вручную передайте эти два файла целевой машине. Если вы связываете с устройством ROS с помощью rosdevice
, можно отправить использование файлов putFile
. В противном случае этот шаг принимает, что вы используете виртуальную машину Linux, используемую для примеров Robotics System Toolbox™. Виртуальная машина сконфигурирована, чтобы принять связи SCP и SSH. Если вы используете свою собственную систему 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 выполните следующие команды, чтобы создать рабочую область Сережки. Можно использовать существующую рабочую область Сережки.
mkdir -p ~/catkin_ws_simulink/src cd ~/catkin_ws_simulink/src catkin_init_workspace
Распакуйте и создайте узел там используя следующую команду в Linux. Замените <path_to_catkin_ws>
с путем к вашей рабочей области сережки.
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>
с путем к вашей рабочей области сережки.
~/<path_to_catkin_workspace>/devel/lib/robotcontroller/robotcontroller_node