Можно использовать 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.
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 (в рад/с).
Откройте новую модель Simulink.
На вкладке ROS Toolbox > ROS в браузере библиотек перетащите блок Publish в модель. Дважды кликните блок.
Установите значение в поле 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
) устанавливается автоматически.
На вкладке ROS Toolbox > ROS в браузере библиотек перетащите блок Blank Message в модель. Дважды кликните блок.
Нажмите Select рядом с Message type и выберите geometry_msgs/Twist
.
Установите значение шага расчета на 0.01
и нажмите OK.
На вкладке Simulink > Signal Routing в браузере библиотек перетащите блок Bus Assignment в модель.
Соедините Msg
выход блока Пустого Сообщения в Bus
Вход блока «Назначение шины» и Bus
выход на Msg
вход блока Publish.
На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться, что информация о шине правильно распространена. Проигнорируйте ошибку: «Selected signal1 'в блоке Bus Assignment' untitled/Bus Assignment 'не может быть найден в входном сигнале шины», если он появляется. Следующий шаг позволит устранить эту ошибку.
Дважды кликните блок «Назначение шины». Выберите ???
signal1
в правом списке и нажмите кнопку Удалить. В левом списке разверните категорию «Линейные» и «Угловые свойства». Выберите «Линейный» > «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 в браузере библиотек перетащите блок Subscribe в модель. Дважды кликните блок.
Установите источник топик на Select From ROS network и нажмите Select рядом с полем Topic. Выберите «/odom »для темы и нажмите кнопку OK. Обратите внимание, что тип сообщения nav_msgs/Odometry
устанавливается автоматически.
На вкладке Simulink > Signal Routing в браузере библиотек перетащите блок Bus Selector в модель.
Подключите выход порт блока Subscribe к входу порту блока Bus Selector. На вкладке Моделирование (Modeling) щелкните Обновить модель (Update Model), чтобы убедиться, что информация о шине правильно распространена.
Дважды кликните блок Bus Selector. Выберите ???
signal1
и ???
signal2
в правом списке и нажмите кнопку Удалить. В левом списке разверните меню Pose > Pose > Pose и выберите X и Y. Нажмите Select, а затем OK.
На вкладке «Simulink > Раковины» в браузере библиотек перетащите блок XY Graph в модель. Соедините X
и Y
выходные порты блока Bus Selector к входным портам блока XY Graph.
Этот рисунок показывает завершенную модель. Предварительно сконфигурированная модель включена для вашего удобства.
Примечание: Блок Publisher в этой модели использует /mobile_base/commands/velocity
тема для использования с опцией симулятора MATLAB. Для опции симулятора Gazebo выберите /cmd_vel
тема, как показано выше.
На вкладке Моделирование (Modeling) щелкните Настройки модели (Model Settings). На панели Solver установите значение Type на Fixed-step и значение Fixed-step на 0.01
.
Установите время остановки симуляции на Inf
.
Щелкните Запуском, чтобы запустить симуляцию.
И на симуляторе, и на графике XY вы должны увидеть робота, движущегося по кругу.
Пока симуляция выполняется, измените значения блоков Slider Gain, чтобы управлять роботом. Дважды кликните блок XY Graph и измените X
и Y
пределы по осям при необходимости. (Вы можете сделать это во время выполнения симуляции.)
Чтобы остановить симуляцию, нажмите кнопку Остановить.