Настройка модели робота UR10 для совместного моделирования между «Беседкой» и «Simulink™». Совместное моделирование с Gazebo позволяет подключаться непосредственно от Simulink к Gazebo и управлять процессом моделирования с использованием модели Simulink.
Вводные сведения о совместном моделировании Gazebo и первом подключении см. в разделе Выполнение совместного моделирования между Simulink и Gazebo. В этом примере используется виртуальная машина и подключаемый модуль, представленные в этом примере, а также показано, как настроить собственную модель и систему. Рука робота, используемая в этом примере, является 6-DoF роботом, Universal Robots UR10.
Сначала добавьте манипулятор в файл Gazebo .world. В этом примере предоставляется мировой файл (Ur10BasicWithPlugin.world), который был создан из предоставленных моделей роботов в loadrobot функция. Если ваша цель - просто взаимодействовать с симулятором 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);

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 и добавить ее в существующий мир вручную или с помощью графического интерфейса «Беседка».
В исходном коде мирового файла зафиксируйте робота на нулевой плоскости, вручную добавив фиксированное соединение к модели робота.
<!-- 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 с установленным плагином для совместного моделирования и предоставленным мировым файлом. Эти шаги описаны в разделе Выполнение совместного моделирования между Simulink и Gazebo. Если вы используете виртуальную машину, приведенную в этом примере, перейдите непосредственно к Open World в Gazebo. Возможно, потребуется обновить виртуальные машины, загруженные до R2021a выпуска.
Для выполнения этого примера необходимо либо подключиться к компьютеру с установленной Linux с соответствующей настроенной средой:
Настройте среду Gazebo и добавьте подключаемый модуль. Следуйте инструкциям по установке подключаемого модуля беседки вручную в разделе Выполнение совместного моделирования между Simulink и Gazebo. В этом примере предполагается, что подключаемый модуль расположен в home/user/src/GazeboPlugIn каталог.
Добавить предоставленный файл мира в каталог /home/user/worlds
Доступ к файлам сетки робота из модели робота. Файлы сетки - это файлы 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
Обратите внимание, что для работы этого примера не требуется компоновка пакета (этот пример требует только связанных файлов сетки), но это также не вызовет никаких проблем.
Убедитесь, что файлы сетки робота расположены в /home/user/catkin_ws/src/universal_robot/ur_description/.
Откройте мир, выполнив следующие команды на терминале машины «Беседка»:
cd /home/user/src/GazeboPlugin/export export SVGA_VGPU10=0 gazebo /home/user/worlds/Ur10BasicWithPlugin.world --verbose
Беседка показывает робота и любые другие объекты в мире. Если симулятор Gazebo не открывается, может потребоваться переустановка плагина. См. раздел Установка подключаемого модуля беседки вручную в разделе Выполнение совместного моделирования между Simulink и 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
Теперь, когда мир Gazebo связан с MATLAB, можно выполнить совместное моделирование из Simulink для продвижения состояния моделирования в Gazebo.
gazeboCosimControl модель управляет конечным положением манипулятора с помощью ползунков в разделе User Input: End Effector. Подсистема обратной кинематики генерирует конфигурацию соединения, которая обеспечивает требуемое положение. Затем подсистемы контроллера соединения генерируют силы крутящего момента для каждого соединения, чтобы достичь этого положения. Подробные сведения об этой модели можно найти в примере Робот-манипулятор с совместным моделированием в 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 модель для управления роботом при моделировании см. в примере «Управление роботом-манипулятором с совместным моделированием» в Simulink и Gazebo.