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