Настройте модель UR10 робота, чтобы выполнить совместное моделирование между Gazebo и Simulink™. Совместное моделирование с Gazebo позволяет вам подключаться непосредственно от Simulink к Gazebo и управлять темпами симуляции с помощью модели Simulink.
Введение в совместное моделирование и подключение Gazebo впервые см. в разделе «Выполнение совместного моделирования между Simulink и Gazebo». Этот пример использует виртуальную машину и плагин, представленные в этом примере, но также рассказывает, как сконфигурировать свою собственную модель и систему. Рука робота, используемая в этом примере, является роботом- 6-DoF, UR10 Universal Robots.
Сначала добавьте манипулятор в файл 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);
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 с установленным плагином для ко-симуляции и предоставленным файлом привязки. Эти шаги описаны в разделе «Выполнение совместного моделирования между 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:
cd /home/user/src/GazeboPlugin/export export SVGA_VGPU10=0 gazebo /home/user/worlds/Ur10BasicWithPlugin.world --verbose
Gazebo показывает робота и любые другие объекты в мире. Если симулятор Gazebo не откроется, возможно, потребуется переустановить плагин. См. раздел Установка плагина Gazebo вручную в разделе «Совместное моделирование между Simulink и 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
Теперь, когда мир 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.