Подключитесь к роботу с поддержкой ROS от Simulink ® по ROS

2

В этом примере показано, как сконфигурировать модель Simulink для отправки и получения информации с отдельного симулятора на основе ROS, такого как Gazebo ® over ROS 2.

Введение

Можно использовать Simulink, чтобы подключиться к физическому роботу с поддержкой ROS или к роботу-симулятору с поддержкой ROS, такому как Gazebo. В этом примере показано, как:

  • Сконфигурируйте Simulink, чтобы подключиться к отдельному симулятору робота с помощью ROS 2

  • Отправка скорости команд моделируемому роботу

  • Получите информацию о положении от моделируемого робота

Вот модель, которую вы будете создавать в этом примере.

open_system('robotROS2ConnectToRobotExample');

Необходимые условия: Запуск с ROS 2, обмен данными с издателями и подписчиками ROS 2, начало работы с ROS 2 в Simulink ®

Задача 1 - Запуск симулятора робота Gazebo

В этой задаче вы запустите симулятор на основе ROS для робота с дифференциальным приводом вместе с ROS-мостом, который воспроизводит сообщения ROS по сети ROS 2.

  1. Запустите рабочий стол виртуальной машины Ubuntu ® с виртуальной машины с помощью ROS 2 Melodic и Gazebo.

  2. На рабочем столе Ubuntu щелкните значок «Gazebo Empty», чтобы начать работу в мире Gazebo.

  3. Щелкните значок «ROS Bridge», чтобы ретранслировать сообщения между ROS и сетью ROS 2.

Симулятор получает и отправляет сообщения по следующим темам:

  • Получает geometry_msgs/Twist высокоскоростные командные сообщения по теме/ cmd_vel.

  • Отправляет nav_msgs/Odometry сообщения в /odom тема.

Задача 2 - Сконфигурируйте Simulink для подключения к сети ROS 2

  • На вкладке Simulation Prepare gallery нажмите ROS Network в разделе ROS TOOLBOX.

  • В диалоговом окне Configure ROS Network Addresses, в разделе Domain ID (ROS 2), установите идентификатор 25. Это значение идентификатора соответствует идентификатору области сети ROS 2 на виртуальной машине Ubuntu, где получены сообщения от Gazebo в сети ROS.

Задача 3 - Отправка Скорости команд роботу

Создайте издателя, который отправляет команды управления (линейные и угловые скорости) симулятору. Сделайте эти скорости регулируемыми при помощи блоков 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.

Задача 4 - Получите информацию о местоположении от робота

Создайте абонента для получения сообщений, отправленных на /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.

Следующий рисунок показывает завершенную модель. Предварительно сконфигурированная модель включена для вашего удобства.

Задача 5 - настройте и запустите модель

  • На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings). На панели Solver установите значение Type на Fixed-step и значение Fixed-step на 0.01.

  • Установите время остановки симуляции на inf.

  • Щелкните Запуском, чтобы запустить симуляцию.

  • И на симуляторе, и на графике XY вы должны увидеть робота, движущегося по кругу.

  • Пока симуляция выполняется, измените значения блоков Slider Gain, чтобы управлять роботом. Дважды кликните блок XY Graph и измените X и Y пределы по осям при необходимости (вы можете сделать это во время симуляции).

  • Чтобы остановить симуляцию, нажмите кнопку Остановить.