exponenta event banner

Робот-манипулятор с совместным моделированием в Simulink и беседке

Моделирование управления роботизированным манипулятором с помощью совместного моделирования между Simulink и Gazebo. В примере используется Simulink™ для моделирования поведения робота, создания управляющих команд, отправки этих команд в Беседку и управления ходом моделирования Беседки.

  • Блок Gazebo Pacer выполняет моделирование Gazebo с той же скоростью, что и Simulink, что позволяет точно выполнять команды при моделировании физической динамики в Gazebo.

  • Для связи между MATLAB ® и Gazebo используются блоки команд чтения и применения беседок.

  • gzlink, gzjoint, и gzworld функции обеспечивают простой доступ к параметрам модели и запросам.

В этом примере подробно рассматривается каждый из этих компонентов и их конфигурации с использованием модели Simulink, которая управляет положениями манипулятора Universal Robotics UR10. Модель использует обратную кинематику, чтобы соотнести требуемую концевую эффекторную позу с позициями соединения, затем применяет ПД-контроллер с динамической компенсацией для управления движением.

Дополнительные сведения о настройке среды для этого примера см. в разделе Настройка беседки и симулятора для совместного моделирования робота-манипулятора.

Настройка беседки с моделью робота и подключаемым модулем

Чтобы настроить мир беседки, установите необходимые плагины и протестируйте соединение с MATLAB и simulink, см. раздел Настройка беседки с моделью робота и плагина в разделе Настройка беседки и Simulink для совместного моделирования робота-манипулятора.

Открытый мир в беседке

Откройте мир, выполнив следующие команды на терминале машины «Беседка»:

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);

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

В этой модели используется универсальный робот UR10, созданный с помощью loadrobot. Модель Gazebo и модели роботов совпадают, так как они из одного исходного репозитория. Дополнительные сведения см. в разделе Настройка беседки и симулятора для совместного моделирования робота-манипулятора.

robot = loadrobot('universalUR10','Gravity',[0 0 -9.81],'DataFormat','column');
showdetails(robot)
--------------------
Robot: (10 bodies)

 Idx             Body Name                            Joint Name                            Joint Type             Parent Name(Idx)   Children Name(s)
 ---             ---------                            ----------                            ----------             ----------------   ----------------
   1             base_link                           world_joint                                 fixed                     world(0)   base(2)  shoulder_link(3)  
   2                  base            base_link-base_fixed_joint                                 fixed                 base_link(1)   
   3         shoulder_link                    shoulder_pan_joint                              revolute                 base_link(1)   upper_arm_link(4)  
   4        upper_arm_link                   shoulder_lift_joint                              revolute             shoulder_link(3)   forearm_link(5)  
   5          forearm_link                           elbow_joint                              revolute            upper_arm_link(4)   wrist_1_link(6)  
   6          wrist_1_link                         wrist_1_joint                              revolute              forearm_link(5)   wrist_2_link(7)  
   7          wrist_2_link                         wrist_2_joint                              revolute              wrist_1_link(6)   wrist_3_link(8)  
   8          wrist_3_link                         wrist_3_joint                              revolute              wrist_2_link(7)   ee_link(9)  tool0(10)  
   9               ee_link                        ee_fixed_joint                                 fixed              wrist_3_link(8)   
  10                 tool0        wrist_3_link-tool0_fixed_joint                                 fixed              wrist_3_link(8)   
--------------------

Задайте начальную конфигурацию робота.

q0 = [0 -70 140 0 0 0]' * pi/180; 

Загрузить модель Simulink

gazeboCosimControl модель управляет конечным положением манипулятора с помощью ползунков в разделе User Input: End Effector. Подсистема обратной кинематики генерирует конфигурацию соединения, которая обеспечивает требуемое положение. Затем подсистемы контроллера соединения генерируют силы крутящего момента для каждого соединения, чтобы достичь этого положения.

Откройте модель.

open_system('gazeboCosimControl');

Задание времени выборки контроллера и траектории

Ts = 0.01;
Ts_trajectory = 0.05;

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

Понимание конструкции модели

Модель Simulink состоит из четырех областей:

  • Пользовательский ввод: обеспечивает ввод требуемого положения конечного эффектора робота с помощью ползунков.

  • Управление: Отображает конечное положение эффектора в положение соединения с помощью обратной кинематики и управляет положением соединения с помощью вычисленного регулятора крутящего момента

  • Gazebo Pacer: Поддерживает связь с Gazebo, чтобы модель Simulink выполняла оба моделирования.

  • Робот-беседка: Отправляет команды и получает команды из мира беседки.

Эти разделы более подробно изложены ниже.

Ввод данных пользователем

Пользовательский ввод содержит 6 ползунков, которые управляют положением конечного эффектора: три для управления положением X, Y и Z в пространстве и три для управления ориентацией.

Контроль

Секция управления преобразует требуемую позу концевого эффектора в крутящие моменты соединения. Во-первых, подсистема обратной кинематики вычисляет положения соединения, которые удовлетворяют целевому положению конечного эффектора. Затем подсистема контроллера соединения создает входные моменты исполнительного механизма с учетом исходного положения соединения, скорости и ускорения, а также текущего состояния робота. Состояние содержит измеренное положение и скорость на выходе из беседки.

Подсистема обратной кинематики

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

Подсистема объединенного контроллера

В этом примере контроллер соединения использует обратную связь и условия передачи. Значения гравитационного крутящего момента и скорости продукта объединяются для формирования условия обратной связи. Контроллер пропорциональной производной (PD) генерирует член обратной связи. Дополнительные сведения о совместных контроллерах см. в разделе Выполнение безопасного управления отслеживанием траектории с помощью блоков манипуляторов робототехники.

Беседка Пэйсера

Блок Gazebo Pacer обеспечивает совместное моделирование с Gazebo путем пошагового моделирования Gazebo синхронно со шагами Simulink. Это важно для таких приложений, как эта модель, где контроллер используется для непосредственного управления положением робота в мире Беседки. Команды измерения соединения и крутящего момента должны быть синхронизированы, чтобы обеспечить отражение фактического поведения при моделировании.

В маске блока укажите время выборки как Ts. Можно протестировать подключение к «Беседке» с помощью ссылки Настройка сети «Беседка» и настройки моделирования. Это подключение уже настроено с помощью gzinit.

Модель беседки

Подсистема Gazebo Model содержит блоки, используемые для связи с миром Gazebo. В этом случае контроллер прикладывает крутящий момент к каждому соединению и считывает обратно положение и скорость соединения.

Применить крутящий момент соединения

Для каждого соединения крутящий момент должен быть приложен в подсистемах Set < имя соединения > зоны Transmit to Gazebo подсистемы модели Gazebo. Например, для соединения между панелями обочин инструменты для отправки подсистемы плана обочин содержатся в подсистеме «Задать панорамирование обочин».

Каждая из этих подсистем использует блок Назначение шины (Bus Assignment), входные данные которого определяют тип шины, детали модели и длительность, а также результирующую команду.

Блок Gazebo Blank Message определяет тип шины как формат сообщения Gazebo соответствующего типа. В диалоговом окне параметров блока выберите «ApplyJointTorque» из списка типов команд. Этот блок необходим для проверки того, что используется правильный шаблон шины, т.е. что порт является блоком назначения шины, имеет правильные значения.

Блок «Выбрать объект беседки» выбирает объект, к которому будет применено это сообщение. В этом случае, поскольку применяется крутящий момент, «объект» является соединением. Поскольку эта подсистема будет прикладывать крутящий момент к плечевому соединению, выберите соответствующее соединение в мире Gazebo из списка типов объектов. Пока установлена связь с миром Беседки, этот список будет заполняться автоматически. Если соединение потеряно, щелкните ссылку «Настройка сети беседки и параметров моделирования» для восстановления или используйте gzinit интерфейс командной строки. Мир Беседки должен быть открыт для успеха этой операции.

Блок Gazebo Apply Command принимает содержимое сообщения, отправляемого на сервер Gazebo. Откройте диалоговое окно параметров блока, выберите параметр типа команды и выберите ApplyJointTorque, чтобы отправить соответствующую команду в беседку.

Остальные входные данные определяют величину и продолжительность приложенной силы. При вводе усилий задается величина крутящего момента соединения. Ввод индекса определяет ось, к которой должен быть приложен крутящий момент. Поскольку каждое из вращающихся соединений имеет только 1 степень свободы, это значение должно быть установлено в uint32(0) для указания первой оси. Наконец, входы длительности определяют длительность прикладываемого крутящего момента, разделенную на секунды и наносекунды. Например, если длительность составляет 1,005 секунды, это будет 1 секунда и 5 000 000 наносекунд в качестве шины. В этом случае контроллер применяет крутящий момент в течение времени выборки, предварительно заданного равным 0,01 секундам, или 1e7 наносекундам. Поэтому первый вход равен нулю (0 секунд), а второй вход равен 1e7.

Подсистема модели беседки включает в себя 5 других подсистем, соответствующих пяти другим соединениям, которые были сконфигурированы таким же образом.

Измерить совместное состояние

Вторая часть интерфейса Gazebo Model требует считывания значений из Gazebo с помощью блока Gazebo Read для каждого соединения. Например, блок соединения противня плеча показан ниже.

Блок чтения беседки считывает сообщения с сервера беседки. В диалоговом окне блока нажмите «Выбрать».. рядом с разделом, чтобы выбрать нужный раздел для чтения, и выберите соответствующее измеренное значение соединения. /gazebo/ground_truth/joint_state/ur10/shoulder_pan_joint. Это сообщение выбирает точное значение истинности земли, хотя также можно разместить датчики в беседке и считывать их вместо этого.

Селектор шины используется только для выбора соответствующих значений из сообщения. В этом случае измеряется только положение от модели Gazebo, которая в конечном итоге подается обратно в контроллер.

Этот раздел также считывает значение красного ящика в Беседке. Хотя можно также установить положение этого поля, используя формат, аналогичный использованному выше, проще использовать интерфейс командной строки gzlink для обновления блока в дискретные моменты во время выполнения модели.

Настройка объектов шины для моделирования

Объекты шины беседки генерируются, когда блоки косимуляции вводятся в модель. Сигналы из Беседки считываются через эти объекты шины. По умолчанию размеры имеют переменный размер, поскольку соединения могут иметь несколько степеней свободы. Поскольку все соединения в этом примере являются вращающимися соединениями, они являются одномерными и фиксированными по размеру, что может быть определено как свойство сигналов шины. Этот шаг является необязательным, но полезно преодолеть ограничения сигналов переменного размера.

Загрузите пользовательские объекты шины.

load('custom_busobjects_basic');   

Для этого вручную откройте редактор шины в Simulink. Это можно найти в меню «Моделирование» > «Проектирование» > «Редактор шины».

Выберите шину, используемую для считывания состояния соединения, а затем выберите соответствующее имя элемента в правой части. Для Gazebo_SL_Bus_gazebo_msgs_JointState выберите joint_position и joint_velocity, а для параметра Размер (DimensionMode) измените значение на Фиксированный (Fixed).

Запуск моделирования

Перед моделированием с помощью команд MATLAB сбросьте положение поля и поля «Беседка». Команды, подобные этим, могут быть более непосредственно включены в модель Simulink как StartFcn обратный вызов для обеспечения их выполнения при каждом запуске моделирования. В параметрах блока Gazebo Pacer при запуске модели сбрасывается только время моделирования, если не изменить раскрывающийся список «Сбросить поведение».

gzworld("reset"); % Reset the world to its initial state
gzlink("set","redBox","link","Position",[0.5 -0.4 .3]); % Move the box to a new location
STATUS:  Succeed


MESSAGE:  Parameter set successfully.

Эти типы команд можно также выполнять во время моделирования. Для этого используйте зеленую кнопку «Выполнить» для моделирования модели Simulink, а не sim-команду, чтобы убедиться, что командная строка может быть выполнена во время моделирования.

Запустите моделирование в течение 20 секунд и протестируйте различные позы с помощью ползунков в User Input: End Effector. Убедитесь, что обратная кинематика и контроллер соединения работают правильно в Gazebo.

simoutput = sim('gazeboCosimControl','StopTime','20');

Используйте инспектор данных моделирования для просмотра поведения положений соединений. Это изображение показывает данные, когда позиции команд манипулятора менялись несколько раз в ходе моделирования.

Просмотр производительности

Регистрируются совместные измерения и ссылки. После завершения моделирования постройте график зарегистрированных выходных данных.

measuredPosition = simoutput.logsout{1}.Values; 
referencePosition = simoutput.logsout{2}.Values; 
figure
plot(measuredPosition.Time, measuredPosition.Data, '-', referencePosition.Time, referencePosition.Data, '--')
legend({'Meas1','Meas2','Meas3','Meas4','Meas5','Meas6','Ref1','Ref2','Ref3','Ref4','Ref5','Ref6'})