You are on page 1of 10

Лабораторна робота №1

Моделювання роботи механічного захоплення промислового маніпулятора в


середовищі V-REP
Мета роботи: Створити тривимірну комп'ютерну модель та створити сценарій
симуляції найпростішого механічного захвату для маніпулятора.
Завдання.
1.) Створити тривимірну модель простого захоплення, що складається з трьох
елементів, у будь-якій CAD-системі та імпортувати в V-REP (або створити модель
механічного захоплення безпосередньо у V-REP).
2.) Встановити структуру моделі (задати взаємозв'язки).
3.) Додати в модель кілька сенсорів та написати алгоритм управління, який забезпечує
керування захопленням. У захоплення має бути два стійкі положення: активне та вихідне.
У цій лабораторній роботі пропонується реалізувати симуляцію роботи механічного
захоплення для промислового маніпулятора. Перед тим як приступити до виконання роботи,
необхідно попередньо ознайомитись з описом лабораторної роботи.
Опис роботи.
Тривимірну модель захоплення можна створити в будь-якій CAD-системі та
імпортувати в V-REP без особливих труднощів, даний метод розглядатися в рамках
лабораторної роботи №1 не буде.
Для створення тривимірних моделей механічного захоплення безпосередньо в програмі
V-REP створимо нову сцену. У новій сцені користуватимемося інструментами Primitive
Shape для створення захоплення, яке складатиметься з трьох прямокутних паралелепіпедів
(кубоїдів).
Використовуючи команди [Add - Primitive Shape - Cuboid] та вводячи наступні
параметри (як показано на рис. 1) можна отримати тривимірну модель основи захоплення.

Рисунок 1 – Контекстне меню інструменту Primitive Shape (Проста форма) при


створенні тривимірної моделі основного компонента захоплення
Далі необхідно створити другий та третій елемент, тут можна їх зробити однаковими,
отже, достатньо створити один елемент та його скопіювати.
Рис. 2 – Контекстне меню інструменту "Primitive Shape" (Проста форма) для другого
компонента
Другий елемент повинен мати параметри, вказані на рис. 2. Далі необхідно його
скопіювати та задати всім трьом елементам назву відповідно до їх призначення. За
замовчуванням V-REP задає їм імена, відповідні назві інструменту, за допомогою якого вони
були створено. Щоб перейменувати, достатньо навести курсор на ім'я та виконати подвійне
натискання правої кнопки миші комп'ютера, задати нове ім'я та натиснути кнопки введення
на клавіатурі (Enter). Зверніть увагу, що V-REP не підтримує кириличні символи. Нові назви
мають бути "Gripper_Base", "Right_side" та "Left_side".
Тепер необхідно встановити коректне розташування для двох елементів механічного
захоплення щодо основи, що відповідає вихідному положенню. Для цього виділяємо у
лівому вікні дерева моделі Left_side та активуємо інструмент "Object/Item shift" з верхнього
основного меню інструментів. У вікні інструменту, що з'явилося, вибираємо вкладку
Position, потім вводимо нові значення розташування елемента по осі «x» і по осі «y», т. до.
тільки з цих осях поточні значення відповідають необхідним.

Рис. 3 – Контекстне меню інструмента «Object/Item Position»


Потім необхідно вибрати елемент "Right_side" і задати відповідні значення зі зворотним
за знаком значенням для осі «x».
Рисунок 4 – Контекстне меню інструмента «Object/Item Position»
В результаті виконання вищеописаних операцій має вийти результат, поданий на рис. 5.

Рисунок 5 – Зовнішній вигляд створених компонентів типу Random Shape


Далі необхідно задати механічні з'єднання для наявних елементів за допомогою
елементів "З'єднання". У цьому випадку необхідно додати два з'єднання типу
"призматичний". Додати їх можна через команди "Add" - "Joint" - "Prismatic". Поряд із
наявними елементами з'явиться новий елемент, який необхідно зменшити, так як його розмір
заданий замовчуванням і не дозволяє нам з достатньою точністю керувати становищем
елементів нашого механізму. Розміри елементів із категорії «З'єднання» використовуються
лише для зручності роботи з ними під час створення симуляції ніяк не впливають на
функціональні параметри з'єднання. Поміняємо розміри з'єднання через редагування
властивостей, як показано на Рис. 6 для цього в дереві моделі вибираємо необхідний елемент
з'єднання і відкриваємо вікно властивостей з'єднання за допомогою інструмента Scene
Object Properties» (перший інструмент у лівій панелі).
Рисунок 6 – Контекстне меню інструмента «Властивості»
Далі необхідно задати правильно розташування та орієнтацію в просторі для елемента
з'єднання, що можна зробити, скориставшись інструментами для зміни положення та
орієнтації.
Опишемо докладніше основні прийоми, які дозволяють виконати вищеописані операції.
Щоб встановити положення для з'єднання, ми можемо скористатися візуальним
інтерфейсом та за допомогою мишки «перетягнути» елемент на необхідне становище, однак
такий підхід не рекомендується, тому що не гарантує високу точність. Рекомендується
використовувати швидший спосіб - скопіювати координати іншого елемента і вже ставити
розташування щодо нового становища. Копіювати координати іншого елемента можна,
виконавши наступні операції: спочатку вибираємо в дерево моделі об'єкт, в який хочемо
скопіювати координати, і при затиснутій клавіші «ctrl» вибираємо другий елемент, чиї
координати ми хочемо скопіювати. Потім вибираємо інструмент «Object/Item shift» та у
вкладці "Position" натискаємо на кнопку "Apply to selection" (показано на рис. 7).

Рисунок 7 – Копіювання положення елемента «Left_side» у властивості шарніра


У такий же спосіб можна скопіювати параметри орієнтації з одного об'єкта в інший,
скориставшись інструментом "Object/Item rotate" замість "Object/Item shift".
Однак одного копіювання даних орієнтації та положення буває недостатньо, як і
нашому випадку. У таких випадках необхідно скористатися вкладкою "Translation" для
інструменту "Object/Item shift", де можна вказати значення переміщення щодо поточного
положення, та після натискання кнопки «Translate» буде застосовано зазначені зміни.
Схожа функція є і інструментом «Object/Item rotate», де у вкладці "Rotation" можна
вказати кути повороту щодо поточної орієнтації, обравши вісь обертання, та після
натискання кнопки «Rotate selection» отримати результат. При використанні даного
інструменту варто звернути увагу, що необхідно вибрати, щодо якої системи координат
виконується обертання. У більшості випадків ця операція виконується щодо системи
координат, пов'язаної з елементом, що обертається, і в такому випадку слід у параметрі
"Relative to" встановити на "Own Frame".
Таким чином, скориставшись вищеописаними прийомами, ми можемо отримати
результат, поданий на рис. 8.

Рисунок 8 – Зовнішній вигляд елементів сцени з коректними координатами та


орієнтацією
Після того, як задали потрібне положення та орієнтацію для всіх елементів, необхідно
задати зв'язки цих елементів.
Елемент під назвою «Gripper_Base» є основою нашого механізму та, отже, всі зв'язки
мають виходити із нього. У V-REP доступні два способу визначення зв'язків.
Перший спосіб найпростіший і найшвидший - виділити та перетягнути один елемент
на інший у дереві моделі. При цьому елементи повинні утворювати деревоподібну
структуру, де один елемент стоїть в основі (базовий елемент), а наступні елементи можуть
з'єднуватися із основою або іншим елементом однієї з гілок дерева.
Другий спосіб - виділити елемент, який необхідно з'єднати з батьківським елементом,
затиснути кнопку "ctrl" і виділити елемент, який хочемо зробити дочірнім, потім натиснути
праву кнопку миші та в меню вибрати «Edit», «Make last selected Object parent». Також при
визначенні зв'язків необхідно дотримуватися наступне правило: два елементи, що
моделюють динаміку, не можна з'єднувати без застосування елемента типу «шарнір», тобто.
щоб з'єднати елементи Gripper_Base та Left_side, необхідно між ними у дереві додати
"Left_joint".
Таким же чином необхідно задати зв'язки між «Gripper_Base» та "Right_side".
Підсумкова деревоподібна структура, яку необхідно отримати, представлена на рис. 9.
Рисунок 9 – Підсумкова ієрархія сцени із заданими зв'язками компонентів
Далі необхідно увімкнути вбудовані мотори в шарнірах «Left_joint» та "Right_joint",
задати необхідні налаштування. Для цього потрібно вибрати елемент у дереві моделі та у
лівій панелі активувати інструмент «Scene object properties», далі в контекстному меню
інструменту, що з'явилося. необхідно вибрати "Show dynamic properties dialog" і включити
мотор, поставивши відповідну позначку напроти «Motor enabled». Після цього активуються
рядки номінальної швидкості обертання та максимального моменту - "Target velocity" та
"Maximum force" відповідно. З огляду порівняно малих розмірів захоплення максимальну
силу можна поставити на 5.0е+00 Ньютон і швидкість залишити на 0 м. с., тому що в даній
роботі його будемо ставити через скрипт. Зверніть увагу, що необхідно враховувати
напрямок призматичного шарніра: залежно від його орієнтації потрібно вказати швидкість
для кожного із захоплень з позитивним або негативним знаком.
Визначити знак можна експериментальним способом, провівши симуляцію сценарію та
примусово включивши мотори та додавши значення до швидкості. Якщо позитивне значення
не співпадає з необхідним напрямом, необхідно розвернути шарнір на 180°. Приклад
налаштування шарніру наведено на рис. 10.

Рисунок 10 – Підсумкова ієрархія сцени із заданими зв'язками компонентів


Тепер необхідно додати "Proximity Sensor" (датчик наближення).
Додати його можна через головне меню [Add - Proximity Sensor - Ray Type]. Далі
необхідно розташувати (задати координати) сенсор одному з рухомих елементів захоплення
так, як показано на рис. 12. Після цього можна встановити зв'язок між рухомим елементом
захоплення і сенсором через ієрархію сцени. Зробити це найпростіше шляхом «перетягнути
і відпустити», перетягуємо сенсор «Proximity_sensor» на назву елемента захоплення, з
яким поєднали сенсор, і відпускаємо. Підсумкова ієрархія сцени, яка має вийти,
представлена на рис. 11.
Рисунок 11 – Підсумкова ієрархія сцени із заданою прив'язкою Proximity sensor до
захоплення

Рисунок 12 – Підсумкове розташування всіх об'єктів сцени


У властивостях "Proximity Sensor" необхідно перейти в меню "Show detection"
parameters» та зробити активним параметр «Don't allow detections if distance smaller than»
та встановивши значення 0. Це пов'язано з похибкою сенсора та об'єкта в захопленні, який
також потрібно додати до сценарію симуляції. Для цього скористаємося вже знайомим
інструментом у меню «Add» - «Primitive shape» - «Cuboid» і задамо розміри, що підходять
під масштаб нашого механічне захоплення.

Рисунок 13 – Параметри об'єкта, що підходить під розміри захоплення


Розмістити можна відразу в захопленні, для цього потрібно поставити коректне
становище. Приклад показано на рис. 14.
Рисунок 14 – Розташування об'єкта у захопленні
Далі потрібно перейти до реалізації системи управління через скрипт. Для цього
вибираємо елемент «Gripper_Base» та в меню виконуємо [Add - Associated Child script -
Non-threaded child script]. Тепер у ієрархії сцени (часто її ще називають деревом моделі)
з'явилася нова піктограма праворуч від назви елемента "Gripper_Base". Ця піктограма
означає, що дочірній скрипт прив'язаний до цього елемента. Завжди керуючий скрипт
прив'язується саме до базового елементу, т.як. у разі перенесення моделі вдасться уникнути
проблем з керуванням.
Додати скрипт можна й іншим способом, відкривши в лівій панелі інструмент
"Scripts", після активації якого можна додати новий скрипт, натиснувши на "Insert new
script" і в контекстному меню вибравши "Child script (non-threaded)" з випадаючого
списку. Після цього у списку скриптів з'явиться відповідний запис «Non-threaded child
script (unassociated)», який ще потрібно прив'язати: робиться це шляхом виділення
скрипта у вікні інструменту «Scripts» і вибору у списку внизу вікна відповідних об'єктів
прив'язування (рис. 15).

Рисунок 15 – Створення нового скрипту та прив'язка до базового елемента через


інструмент "Scripts"
Після того, як скрипт створено та прив'язаний до базового елемента, можна розпочати
його редагування. Для цього потрібно виконати подвійне натискання на піктограму праворуч
від елемента Gripper_Base. Після переходу в режим редагування скрипта можна побачити
шаблон скрипта (мал. 16). В цій роботі необхідно написати скрипти у двох розділах: блок
ініціалізації та блок керуючого скрипта.
Малюнок 16 – Шаблон скрипта
У блоці ініціалізації необхідно оголосити лише назви моторів та сенсора (а точніше,
отримати посилання на їхні обробники). Перед захопленням об'єкта також необхідно
переконатися, що об'єкт знаходиться між рухомими елементами захватного устрою. Щоб
реалізувати цю функцію, оголосимо додаткову змінну з таким значенням, що відстань до
протилежного захоплення дорівнює 1. Тому значення змінною «Detection» можна поставити
0.5, що дорівнюватиме визначенню предмета сенсором до середини захвату.

Рисунок 17 – приклад фрагмента скрипта для блоку ініціалізації


Переходимо до основного коду управління: вміст блоку безпосередньо залежить від
алгоритму управління. У нашому випадку можна використовувати наступний алгоритм:
якщо об'єкт знаходиться між рухомими елементами захоплення, то активуємо захоплення,
інакше чекаємо. Відповідно до скрипті необхідно реалізувати прийняття рішення
захоплення, або очікування об'єкт.
Насамперед необхідно зчитувати дані із сенсора при кожній ітерації. Для зчитування
даних із сенсора "Proximity sensor" необхідно скористатися відповідною функцією V-REP
(зверніться до довідника регулярних функцій). Ця функція, як видно з документації, на
першому місці повертає стан сенсора, що у наведеному прикладі буде записано до змінної
«result» (рис. 18, 13 рядок). Також із документації видно, що значення цієї змінної "1"
відповідає робочому стану сенсора, тобто в робочій зоні сенсора є якийсь об'єкт, «0» -
зворотному.
Другим значенням повертається відстань, яка записується в змінну "distance".

Рисунок 18 – Фрагмент скрипта, який відповідає за реалізацію алгоритму управління


захопленням
Тепер необхідно написати логічну частину коду за допомогою розгалуження. Для цього
скористаємося умовним оператором «if» і умовою що входить до нього необов'язковою
"else". У 14 рядку на рис. 29 розгалуження виконується трьома умовами – станом сенсора,
перевіркою входження у діапазон доступності та умови відключення захоплення (нульова
відстань до об'єкта).
Якщо три умови виконуються, тобто. сенсор виявив якийсь об'єкт («result > 0»),
відстань до нього менша за значення змінної «Detection» і відстань до об'єкта ненульова,
активуємо захоплення (задаємо швидкість рухи моторів). У V-REP допускається керування
моторами через задану швидкість і через задане положення. У цій роботі будемо
використовувати управління за швидкістю. Швидкість задаємо рівну 0.008 м/с.
Якщо ж будь-яка умова із зазначених у «if» не виконується спочатку або перестане
виконуватись, то необхідно деактивувати захоплюючий механізм, тобто. задати нульову
швидкість, що вже прописується за умови "else" (Інакше).
Наведений у цій роботі алгоритм управління є найпростішим і має ряд недоліків, проте
з розумінням всього описаного вище можна з легкістю його покращить
Код скрипта:

Скріншоти роботи:

Висновки.

You might also like