В этом примере показано, как сгенерировать код С++ из Simulink® модель для развертывания в качестве автономного узла ROS. Код генерируется на вашем компьютере и должен быть вручную передан на целевое устройство ROS. Для сгенерированного кода подключение к оборудованию не требуется. Для автоматического развертывания узла ROS смотрите Сгенерируйте автономный узел ROS из Simulink ®.
Этот пример требует Simulink Coder™ и Embedded Coder™.
Система Ubuntu Linux с ROS необходима для создания и выполнения сгенерированного кода С++. Можно использовать собственную систему Ubuntu ROS, или можно использовать виртуальную машину Linux, используемую для примеров ROS Toolbox™. Посмотрите Запуск с Gazebo и Моделируемым TurtleBot для получения инструкций относительно того, как установить и использовать виртуальную машину.
Рассмотрим пример Управления обратной связью робота с поддержкой ROS, в котором подробно описывается модель Simulink, из которой генерируется код.
Сконфигурируйте модель, чтобы сгенерировать код С++ для автономного узла ROS с помощью Configuration Parameters. Модель, используемая здесь, является пропорциональным контроллером, введенным в пример управления с обратной связью робота с поддержкой ROS.
Откройте пропорциональные модели контроллеров.
edit robotROSFeedbackControlExample
Скопируйте всю модель в новую пустую модель Simulink.
Удалите Simulation Rate Control блок.
На вкладке Apps, в разделе Control Systems, нажмите Robot Operating System (ROS).
В открывшемся Robot Operating System (ROS) окне выберите Robot Operating System (ROS)
из раскрывающегося списка ROS Network. Это открывает вкладку ROS на панели инструментов, которая показывает указанную сеть ROS в Connect разделе.
В разделе Prepare под вкладкой ROS нажмите Hardware Settings, чтобы открыть диалоговое окно параметров конфигурации модели.
Раздел 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
.
После настройки модели необходимо задать опции сборки для целевого компьютера и задать папку или создание сгенерированного кода.
Щелкните Deploy под вкладкой ROS. Затем в разделе Deployment нажмите Build Model. Эта настройка гарантирует, что код будет сгенерирован для узла 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™. Виртуальная машина настроена на прием 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>:
The 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