В этом примере показано, как сгенерировать код С++ из модели Simulink ® для развертывания в качестве автономного узла ROS 2. Код генерируется на вашем компьютере и должен быть вручную передан на целевое устройство ROS. Для сгенерированного кода подключение к оборудованию не требуется. Для автоматического развертывания узла ROS 2 смотрите Сгенерируйте автономный узел ROS 2 из Simulink ®.
Этот пример требует Simulink Coder™ и Embedded Coder™.
Если вы впервые развертываете узел ROS, проверьте системные требования ROS.
Система Ubuntu Linux с ROS необходима для создания и выполнения сгенерированного кода С++. Можно использовать собственную систему Ubuntu ROS, или можно использовать виртуальную машину Linux, используемую для примеров ROS Toolbox™. Инструкции по настройке моделируемого робота см. в Запуск с Gazebo и моделируемым TurtleBot.
Рассмотрим пример управления обратной связью робота с поддержкой ROS Over 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>:
В системе 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")