Сконфигурируйте Gazebo и Simulink для ко-симуляции робота

Настройте модель UR10 робота, чтобы выполнить совместное моделирование между Gazebo и Simulink™. Совместное моделирование с Gazebo позволяет вам подключаться непосредственно от Simulink к Gazebo и управлять темпами симуляции с помощью модели Simulink.

Введение в совместное моделирование и подключение Gazebo впервые см. в разделе «Выполнение совместного моделирования между Simulink и Gazebo». Этот пример использует виртуальную машину и плагин, представленные в этом примере, но также рассказывает, как сконфигурировать свою собственную модель и систему. Рука робота, используемая в этом примере, является роботом- 6-DoF, UR10 Universal Robots.

Создайте представления роботов для MATLAB и Gazebo

Сначала добавьте манипулятор в файл Gazebo .world. В этом примере предоставляется файл привязки (Ur10BasicWithPlugin.world), который был создан из предоставленных моделей роботов в loadrobot функция. Если ваша цель - просто интерфейс с симуляцией Gazebo, то файла привязки. Чтобы увидеть, как управлять моделью, используя только файл привязки, смотрите Управление Робота с дифференциальным приводом в Gazebo с Simulink. Однако цель этого примера состоит в том, чтобы управлять роботом с помощью основанных на модели инструментов в MATLAB ® и Simulink. Поэтому вы также должны задать модель робота древовидного твердого тела для вашего манипулятора в MATLAB. Существует несколько способов получить эти представления вместе:

  • Предоставленные модели робота: Получите древовидное твердое тело от loadrobot , затем создайте модель для Gazebo, используя исходный репозиторий.

  • Пользовательские модели URDF: Импортируйте файл URDF как объект древовидного твердого тела через importrobot функция. Вручную измените файл URDF, чтобы сделать его совместимым с форматом модели Gazebo SDF. Сохраните модель в новый или существующий файл .world. Если у вас есть только файл Gazebo .world, рассмотрите изменение аналогичного манипулятора или создание робота с нуля, используя запросы мира Gazebo.

Загрузка модели робота

Чтобы начать, загрузите и покажите робота в MATLAB.

[robot,info] = loadrobot('universalUR10','Gravity',[0 0 -9.81]);
show(robot);

Создайте мир Gazebo из модели робота

The Ur10BasicWithPlugin.world файл привязки, присоединенный к этому примеру, также предоставляется в виртуальной машине из примера выполнения ко-симуляции между Simulink и Gazebo. Если вы используете виртуальную машину, представленную в этом примере, перейдите непосредственно к Open World в Gazebo.

Файл привязки содержит UR10 робота с основой соединением, закрепленным на земле, и красный ящик для манипулятора. Мир был создан с использованием исходного репозитория, представленного в info выход:

info.Source
ans = 
"https://github.com/ros-industrial/universal_robot/tree/1.2.1"

Следующие шаги использовались для создания Ur10BasicWithPlugin.world файл:

  • Откройте репозиторий, связанный в info.Source и установите согласно инструкциям в readme файл. Убедитесь, что теги совпадают, так что числовые данные робота совпадают с используемыми в эквивалентном объекте древовидного твердого тела. При использовании предоставленной виртуальной машины убедитесь, что выделили не менее 4 ГБ оперативной памяти и 4 ядра, чтобы избежать ошибок компиляции. На предоставленной виртуальной машине некоторые инструменты в связанном пакете ROS были отключены, чтобы избежать проблем с зависимостями во время установки:

%# Ignore the ur_kinematics package
touch universal_robot/ur_kinematics/CATKIN_IGNORE
  • Репозиторий устанавливает пакет, чтобы открыть мир, используя roslaunch команда:

roslaunch ur_gazebo ur10.launch
  • Сохраните только что созданный мир в файл .world. Можно также сохранить модель в файл SDF и добавить ее в существующий мир вручную или через графический интерфейс пользователя Gazebo.

  • В исходном коде файла привязки исправьте робота к наземной плоскости, вручную добавив фиксированное соединение к модели робота.

<!-- Add a custom fixed joint that fixes the robot to the world-->
<joint name="world_to_robot" type="fixed">
   <parent>world</parent> 
   <child>ur10::base_link</child>
</joint>
  • В исходный код файла привязки добавьте объект красного ящика, который можно перемещать вокруг.

<!-- Add a red box -->
    <model name='redBox'>
      <link name='link'>
% See file for more
  • В исходном коде файла привязки приложите плагин Gazebo, добавив следующие линии:

<!-- Include the Gazebo plugin to ensure connection to MATLAB/Simulink -->
<plugin name="GazeboPlugin" filename="lib/libGazeboCoSimPlugin.so">
    <portNumber>14581</portNumber>
</plugin>

The Ur10BasicWithPlugin.world файл привязки, приложенный к этому примеру, имеет дополнительные комментарии для прояснения различных элементов. Чтобы узнать больше об элементах робота в мире Gazebo, смотрите документацию Gazebo для руководства «Сделать простой захват».

Настройка Gazebo с моделью робота и плагином

Чтобы запустить этот пример, вы должны иметь доступ к машине с Gazebo с установленным плагином для ко-симуляции и предоставленным файлом привязки. Эти шаги описаны в разделе «Выполнение совместного моделирования между Simulink и Gazebo». Если вы используете виртуальную машину, представленную в этом примере, перейдите непосредственно к Open World в Gazebo. Возможно, потребуется обновить виртуальные машины, загруженные до R2021a релиза.

Чтобы выполнить этот пример, вы должны иметь возможность подключиться к машине с Linux, установленной со окружением, которая была настроена соответствующим образом:

  • Настройте окружение Gazebo и добавьте плагин. Следуйте инструкциям по установке плагина Gazebo вручную в разделе «Совместное моделирование между Simulink и Gazebo». Этот пример принимает, что плагин расположен в home/user/src/GazeboPlugIn директория.

  • Добавьте предоставленные файлы привязки к директории /home/user/worlds

  • Доступ к файлам mesh робота из модели робота. mesh-файлы являются файлами Collada (* .DAE), которые необходимы для визуализации робота .Этот робот был создан с помощью loadrobot, поэтому репозиторий связан в info.Source содержит всю связанную информацию, включая сетки.

disp(info.Source)
https://github.com/ros-industrial/universal_robot/tree/1.2.1
  • Выполните следующие команды на компьютере Gazebo, чтобы клонировать связанный репозиторий. URL-адрес второй команды должен совпадать info.Source.

cd /home/user/catkin_ws/src
git clone -b 1.2.1 https://github.com/ros-industrial/universal_robot/

%# (Optional) Ignore UR_Kinematic package to avoid dependency issue during build
touch universal_robot/ur_kinematics/CATKIN_IGNORE

Обратите внимание, что не обязательно создавать пакет для работы этого примера (этот пример требует только связанных файлов mesh), хотя это также не вызовет никаких проблем.

Проверьте, что файлы mesh робота расположены по адресу /home/user/catkin_ws/src/universal_robot/ur_description/.

Открытый мир в Gazebo

Откройте мир, запустив эти команды в терминале машины Gazebo:

cd /home/user/src/GazeboPlugin/export
export SVGA_VGPU10=0
gazebo /home/user/worlds/Ur10BasicWithPlugin.world --verbose

Gazebo показывает робота и любые другие объекты в мире. Если симулятор Gazebo не откроется, возможно, потребуется переустановить плагин. См. раздел Установка плагина Gazebo вручную в разделе «Совместное моделирование между Simulink и Gazebo».

Подключение к Gazebo

Затем инициализируйте соединение Gazebo с MATLAB и Simulink. Укажите IP-адрес и номер порта 14581, который является портом по умолчанию для плагина Gazebo.

ipGazebo = '192.168.116.162'; % Replace this with the IP of the Gazebo machine
gzinit(ipGazebo,14581);

Смотрите модель

Проверьте, что модель имеет требуемые элементы, используя команды Gazebo MATLAB interface. Вызовите gzmodel функция для возврата всех моделей в текущем мире Gazebo.

gzmodel('list')
MODEL LIST:
ground_plane
ur10
redBox

Перечислите ссылки в модели UR10 робота.

gzlink("list","ur10")
MODEL:  ur10


LINKS:  base_link forearm_link shoulder_link upper_arm_link wrist_1_link wrist_2_link wrist_3_link

Управление положением робота в Simulink

Теперь, когда мир Gazebo соединяется с MATLAB, можно выполнить совместное моделирование от Simulink, чтобы продвинуть состояние симуляции в Gazebo.

The gazeboCosimControl модель управляет положением конечного эффектора манипулятора, используя ползунки в разделе User Input: End Effector. Подсистема обратной кинематики генерирует строение соединения, которая достигает желаемого положения. Затем подсистемы контроллера соединений генерируют силы крутящего момента для каждого соединения, чтобы достичь этого положения. Подробности об этой модели можно найти в примере Control Manipulator Robot with Co-Simulation в Simulink и Gazebo.

Блок Gazebo Pacer контролирует шаг Gazebo на основе шагов Simulink.

Откройте модель и инициализируйте параметры модели для траектории, начального положения и объектов шины для отправки команд.

% Open the model
open_system('gazeboCosimControl');

% Initialize parameters
Ts = 0.01;
Ts_trajectory = 0.05;
q0 = [0 -70 140 0 0 0]' * pi/180; 
load('custom_busobjects_basic'); 

Моделируйте модель на несколько секунд.

sim('gazeboCosimControl','StopTime','5');

Используйте ползунки в области User Input: End Effector слева, чтобы контролировать положение робота.

Теперь запустите модель непосредственно с помощью зеленой стрелы «run».

Пока симуляция выполняется, можно отправить команды MATLAB, чтобы обновить мировое состояние. Например, переместите красный ящик в новое место.

% Move the box to a new position on the opposite side of the robot and 0.3 m off the ground
gzlink("set","redBox","link","Position",[0.5 -0.4 .3])
STATUS:  Succeed


MESSAGE:  Parameter set successfully.

Измените положение робота путем установки положения соединения и посмотрите, как реагирует контроллер.

% Move the robot shoulder lift joint to pi/4
[status,message] = gzjoint('set','ur10','shoulder_lift_joint','Axis','0','Angle',-pi/4);

Поскольку Gazebo сейчас шагает Simulink, пауза модели Simulink также останавливает симуляцию Gazebo.

Следующие шаги

Чтобы узнать больше о gazeboCosimControl модель для управления роботом в симуляции смотрите в примере Control Manipulator Robot with Co-Simulation в Simulink и Gazebo.