В этом примере показано, как сконфигурировать модель Simulink для отправки и получения информации с отдельного симулятора на основе ROS, такого как Gazebo ® over ROS 2.
Можно использовать Simulink, чтобы подключиться к физическому роботу с поддержкой ROS или к роботу-симулятору с поддержкой ROS, такому как Gazebo. В этом примере показано, как:
Сконфигурируйте Simulink, чтобы подключиться к отдельному симулятору робота с помощью ROS 2
Отправка скорости команд моделируемому роботу
Получите информацию о положении от моделируемого робота
Вот модель, которую вы будете создавать в этом примере.
open_system('robotROS2ConnectToRobotExample');
Необходимые условия: Запуск с ROS 2, обмен данными с издателями и подписчиками ROS 2, начало работы с ROS 2 в Simulink ®
В этой задаче вы запустите симулятор на основе ROS для робота с дифференциальным приводом вместе с ROS-мостом, который воспроизводит сообщения ROS по сети ROS 2.
Запустите рабочий стол виртуальной машины Ubuntu ® с виртуальной машины с помощью ROS 2 Melodic и Gazebo.
На рабочем столе Ubuntu щелкните значок «Gazebo Empty», чтобы начать работу в мире Gazebo.
Щелкните значок «ROS Bridge», чтобы ретранслировать сообщения между ROS и сетью ROS 2.
Симулятор получает и отправляет сообщения по следующим темам:
Получает geometry_msgs/Twist
высокоскоростные командные сообщения по теме/ cmd_vel.
Отправляет nav_msgs/Odometry
сообщения в /odom
тема.
На вкладке Simulation Prepare gallery нажмите ROS Network в разделе ROS TOOLBOX.
В диалоговом окне Configure ROS Network Addresses, в разделе Domain ID (ROS 2), установите идентификатор 25
. Это значение идентификатора соответствует идентификатору области сети ROS 2 на виртуальной машине Ubuntu, где получены сообщения от Gazebo в сети ROS.
Создайте издателя, который отправляет команды управления (линейные и угловые скорости) симулятору. Сделайте эти скорости регулируемыми при помощи блоков Slider Gain.
ROS использует правую систему координат, поэтому ось X является передней, ось Y - левой, а ось Z - верхней. Команды управления отправляются с помощью geometry_msgs/Twist
сообщение, где linear.x
указывает линейную прямую скорость (в метрах/с) и angular.z
указывает скорость вращения вокруг оси Z (в радианах/сек).
Откройте новую модель Simulink.
На вкладке Apps, в разделе CONTROL SYSTEMS, нажмите Robot Operating System.
В диалоговом окне ROBOT OPERATING SYSTEM (ROS) нажмите Select a ROS Network и выберите Robot Operative System 2 (ROS 2).
На вкладке ROS Toolbox > ROS 2 в браузере библиотек перетащите блок Publish в модель. Дважды кликните блок.
Установите источник топика в Задать свой собственный. Введите /cmd_vel
в поле Topic. Нажмите Select рядом с Message Type, выберите geometry_msgs/Twist
из раскрывающегося списка и нажмите кнопку ОК.
На вкладке ROS Toolbox > ROS 2 в браузере библиотек перетащите пустой блок Message в модель. Дважды кликните блок.
Нажмите Select рядом с Message type и выберите geometry_msgs/Twist
.
Установите значение шага расчета на 0.01
и нажмите OK.
На вкладке Simulink > Signal Routing в браузере библиотек перетащите блок Bus Assignment в модель.
Соедините выход блока Blank Message с Bus
Вход блока «Назначение шины» и Bus
выход на вход блока Publish.
На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться, что информация о шине правильно распространена. Проигнорируйте ошибку: «Selected signal1 'в блоке Bus Assignment' untitled/Bus Assignment 'не может быть найден в входном сигнале шины», если он появляется. Следующий шаг позволит устранить эту ошибку.
Дважды кликните блок «Назначение шины». Выберите ???
signal1
в правом списке и нажмите кнопку Удалить. В левом списке разверните оба linear
и angular
свойства. Выберите линейный > x и угловой > z и нажмите кнопку «Выбрать». Нажмите кнопку «ОК», чтобы закрыть маску блока.
Добавьте блок Constant, блок Gain и два блока Slider Gain. Соедините их вместе, как показано на рисунке ниже, и установите значение Gain на -1.
Установите пределы и текущие параметры линейной скорости ползунка равными 0.0
на 2.0
, и 1.0
соответственно. Установите соответствующие параметры ползунка усилителя рулевого управления равными -1.0
на 1.0
, и 0.1
.
Создайте абонента для получения сообщений, отправленных на /odom
тема. Вы также извлечете местоположение робота и постройте его путь в XY-плоскости.
На вкладке ROS Toolbox > ROS 2 в браузере библиотек перетащите блок Subscribe в модель. Дважды кликните блок.
Установите источник топик на Select From ROS network и нажмите Select рядом с полем Topic. Выберите «/odom »для темы и нажмите кнопку OK. Обратите внимание, что тип сообщения nav_msgs/Odometry
устанавливается автоматически.
На вкладке Simulink > Signal Routing в браузере библиотек перетащите блок Bus Selector в модель.
Соедините Msg
выходной порт блока Subscribe на входной порт блока Bus Selector. На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться, что информация о шине правильно распространена.
Дважды кликните блок Bus Selector. Выберите ???
signal1
и ???
signal2
в правом списке и нажмите кнопку Удалить. В левом списке разверните положение > положение > положение и выберите x и y. Нажмите Select, а затем OK.
На вкладке «Simulink > Раковины» в браузере библиотек перетащите блок XY Graph в модель. Соедините X
и Y
выходные порты блока Bus Selector к входным портам блока XY Graph.
Следующий рисунок показывает завершенную модель. Предварительно сконфигурированная модель включена для вашего удобства.
На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings). На панели Solver установите значение Type на Fixed-step и значение Fixed-step на 0.01
.
Установите время остановки симуляции на inf
.
Щелкните Запуском, чтобы запустить симуляцию.
И на симуляторе, и на графике XY вы должны увидеть робота, движущегося по кругу.
Пока симуляция выполняется, измените значения блоков Slider Gain, чтобы управлять роботом. Дважды кликните блок XY Graph и измените X
и Y
пределы по осям при необходимости (вы можете сделать это во время симуляции).
Чтобы остановить симуляцию, нажмите кнопку Остановить.