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

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

Для введения в co-симуляцию Gazebo и соединяемый впервые, смотрите, Выполняют Co-симуляцию между Simulink и Gazebo. Этот пример использует виртуальную машину и плагин, обеспеченный в том примере, но также и говорит вам, как сконфигурировать вашу собственную модель и систему. Манипулятор, используемый в этом примере, является роботом с 6 степенями свободы, Универсальными Роботами UR10.

Создайте представления робота для 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 из модели робота

Ur10BasicWithPlugin.world файл привязки, присоединенный к этому примеру, также обеспечивается в виртуальной машине от Выполнять Co-симуляции между примером Gazebo и Simulink. Если вы используете виртуальную машину, обеспеченную в том примере, пропускаете непосредственно, чтобы Открыть Мир в Gazebo.

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

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

Следующие шаги использовались, чтобы создать Ur10BasicWithPlugin.world файл:

  • Откройте репозиторий, соединенный в info.Source и установите на инструкции в readme файл. Убедитесь соответствие тегов так, чтобы числовые соответствия данных робота, которые использовали в эквивалентном объекте дерева твердого тела. При использовании обеспеченной виртуальной машины убедитесь, что выделили RAM на по крайней мере 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>

Ur10BasicWithPlugin.world файл привязки, присоединенный к этому примеру, имеет дополнительные комментарии, чтобы разъяснить различные элементы. Чтобы узнать больше об элементах робота в мире Gazebo, ищите, документация Gazebo для "Делают Простой Механизм захвата" примером.

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

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

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

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

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

  • Доступ к роботу поймал в сети файлы из модели робота. Файлами 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 Вручную в Выполняет Co-симуляцию между 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. Вызовите 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, можно выполнить co-симуляцию от Simulink, чтобы усовершенствовать состояние симуляции в Gazebo.

gazeboCosimControl модель управляет положением исполнительного элемента конца манипулятора с помощью ползунков во Вводе данных пользователем: раздел End Effector. Подсистема Инверсной кинематики генерирует объединенную настройку, которая достигает желаемого постиона. Затем Объединенные Подсистемы контроллера генерирует силы крутящего момента для каждого соединения, чтобы достигнуть этого положения. Детали об этой модели могут быть найдены в Роботе Манипулятора Управления с Co-симуляцией в примере Gazebo и Simulink.

Блок 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');

Используйте ползунки во Вводе данных пользователем: Закончите область Effector слева, чтобы управлять положением робота.

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

Во время симуляции можно отправить команды 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 модель для управления роботом в симуляции, смотрите Робота Манипулятора Управления с Co-симуляцией в примере Gazebo и Simulink.