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

®

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

Можно следовать шагам в примере, чтобы создать собственную модель, или можно использовать вместо этого эту завершенную версию.

open_system('robotROSConnectToRobotExample');

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

Симулятор Робота

Запустите симулятор на основе ROS для робота с дифференциальным приводом. Симулятор получает и отправляет сообщения по следующим темам:

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

  • Получает geometry_msgs/Twist высокоскоростные командные сообщения на mobile_base/commands или /cmd_vel тема, основанная на ROS-симуляторе

Можно выбрать один из двух опций настройки симулятора на основе ROS.

Опция A: Симулятор в MATLAB ®

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

  • Введите rosinit в командной строке MATLAB. Это создает локальный хозяин ROS с сетевым адресом (URI) http://localhost:11311.

  • Введите ExampleHelperSimulinkRobotROS чтобы запустить Robot Simulator:

  • Примечание: The geometry_msgs/Twist командные сообщения скорости принимаются на mobile_base/commands/velocity/ тема.

Опция B: Симулятор Gazebo

Используйте моделируемый TurtleBot ® в Gazebo .

  • Окружения Gazebo см. в разделе Добавление, сборка и удаление объектов в Gazebo. На рабочем столе Ubuntu ® в виртуальной машине щелкните значок «Gazebo Empty».

  • Обратите внимание на сетевой адрес (URI) ведущего устройства ROS. Будет выглядеть как http://192.168.84.128:11311, но с указанным IP-адресом.

  • Проверьте правильность настройки окружения Gazebo путем ввода rostopic list в окне терминала Ubuntu. Вы должны увидеть список тем, включая /cmd_vel и /odom.

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

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

1. На вкладке Simulation выберите ROS Toolbox > ROS Network.

2. В разделе ROS Master (ROS 1) выберите Custom из выпадающего списка Сетевой адрес.

  • Опция A (MATLAB Simulator): Убедитесь, что для имени хоста/IP-адреса задано значение localhost, и Port установлен в 11311.

  • Опция B (Gazebo Simulator): Укажите IP-адрес и номер порта мастера ROS в Gazebo. Для примера, если это http://192.168.60.165:11311, затем введите 192.168.60.165 в поле Hostname/IP-адрес и 11311 в поле Port.

Отправка команд скорость роботу

Создайте издателя, который отправляет команды управления (линейные и угловые скорости) симулятору. Сделайте эти скорости регулируемыми при помощи блоков Slider Gain.

ROS использует правую систему координат, поэтому ось X является передней, ось Y - левой, а ось Z - верхней. Команды управления отправляются с помощью geometry_msgs/Twist сообщение, где Linear.X указывает линейную прямую скорость (в м/с) и Angular.Z указывает скорость вращения вокруг оси Z (в рад/с).

Настройка блока издателя

  1. Откройте новую модель Simulink.

  2. На вкладке ROS Toolbox > ROS в браузере библиотек перетащите блок Publish в модель. Дважды кликните блок.

  3. Установите значение в поле Topic source на Select From ROS network. Выберите тему на основе симулятора, как показано ниже.

  • Опция A (MATLAB Simulator): Нажмите Select рядом с Topic, выберите /mobile_base/commands/velocity, и нажмите OK. Обратите внимание, что тип сообщения (geometry_msgs/Twist) устанавливается автоматически.

  • Опция B (Gazebo Simulator): Нажмите Select рядом с Topic, выберите /cmd_vel, и нажмите OK. Обратите внимание, что тип сообщения (geometry_msgs/Twist) устанавливается автоматически.

Сконфигурируйте блок сообщений

  1. На вкладке ROS Toolbox > ROS в браузере библиотек перетащите блок Blank Message в модель. Дважды кликните блок.

  2. Нажмите Select рядом с Message type и выберите geometry_msgs/Twist.

  3. Установите значение шага расчета на 0.01 и нажмите OK.

Сконфигурируйте входные параметры сообщения

  1. На вкладке Simulink > Signal Routing в браузере библиотек перетащите блок Bus Assignment в модель.

  2. Соедините Msg выход блока Пустого Сообщения в Bus Вход блока «Назначение шины» и Bus выход на Msg вход блока Publish.

  3. На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться, что информация о шине правильно распространена. Проигнорируйте ошибку: «Selected signal1 'в блоке Bus Assignment' untitled/Bus Assignment 'не может быть найден в входном сигнале шины», если он появляется. Следующий шаг позволит устранить эту ошибку.

  4. Дважды кликните блок «Назначение шины». Выберите ??? signal1 в правом списке и нажмите кнопку Удалить. В левом списке разверните категорию «Линейные» и «Угловые свойства». Выберите «Линейный» > «X» и «Угловой» > «Z» и нажмите «Выбор». Нажмите кнопку «ОК», чтобы закрыть маску блока.

  • Добавьте блок Constant, блок Gain и два блока Slider Gain. Соедините их вместе, как показано на рисунке, и установите значение Gain на -1.

  • Установите пределы и текущие параметры линейного ползунка скорости равными 0.0 на 2.0, и 1.0 соответственно. Установите соответствующие параметры ползунка усилителя рулевого управления равными -1.0 на 1.0, и 0.1.

Получение информации о местоположении от робота

Создайте абонента для получения сообщений, отправленных на /odom тема. Извлеките местоположение робота и постройте его путь в XY-плоскости.

Сконфигурируйте блок Subscriber

  1. На вкладке ROS Toolbox > ROS в браузере библиотек перетащите блок Subscribe в модель. Дважды кликните блок.

  2. Установите источник топик на Select From ROS network и нажмите Select рядом с полем Topic. Выберите «/odom »для темы и нажмите кнопку OK. Обратите внимание, что тип сообщения nav_msgs/Odometry устанавливается автоматически.

Чтение выхода сообщения

  1. На вкладке Simulink > Signal Routing в браузере библиотек перетащите блок Bus Selector в модель.

  2. Подключите выход порт блока Subscribe к входу порту блока Bus Selector. На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться, что информация о шине правильно распространена.

  3. Дважды кликните блок Bus Selector. Выберите ??? signal1 и ??? signal2 в правом списке и нажмите кнопку Удалить. В левом списке разверните меню Pose > Pose > Pose и выберите X и Y. Нажмите Select, а затем OK.

  4. На вкладке «Simulink > Раковины» в браузере библиотек перетащите блок XY Graph в модель. Соедините X и Y выходные порты блока Bus Selector к входным портам блока XY Graph.

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

  • Примечание: Блок Publisher в этой модели использует /mobile_base/commands/velocity тема для использования с опцией симулятора MATLAB. Для опции симулятора Gazebo выберите /cmd_vel тема, как показано выше.

Сконфигурируйте и запустите модель

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

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

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

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

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

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