LabView у робототехніці - створення SCADA системи для управління роботом

image
 
 
Добрий день, шановні хабравчане!
 
 
Що ж таке LabView і з чим його їдять?
LabView — міжплатформенних графічна середовище розробки фірми National Instruments. LabView широко використовується в системах збору даних, а так само для управління технічними об'єктами і технологічними процесами.
 
 image
 
Відмінною особливістю LabView є «заточенность» середовища для розробки під «залізо». Велика кількість бібліотек, розроблених для взаємодії з обладнанням різних виробників, дозволяє дуже швидко і комфортно прототіпіровать вирішення різних завдань, у тому числі для управлінням роботами і системами машинного зору. Крім офіційного LabVIEW Robotics Module, пропонованим National Instruments, і містить бібліотеки для взаємодії з різними робототехнічними компонентами, ентузіасти самі розробляють велику кількість бібліотек і, що найцінніше, поширюють їх безкоштовно. На сьогоднішній день можна побачити велику кількість рішень у робототехніці з іcпользованіем LabView — в нашій країні одним з найяскравіших за останній час — Автономний робот команди НАМТ на «РобоКросс-2013» і «Eurathlon 2013».
 
 
З чого все почалося.
Я є випускником МГТУ ім. Н. Е. Баумана і захоплююся робототехнікою, хоча основним напрямком моєї діяльності є промислова автоматизація. Познайомившись з LabView кілька років тому, я закохався в цю середу, і з тих пір намагаюся використовувати її скрізь, де тільки можна. В даний час, крім використання LabView в різних проектах, я займаюся проведенням факультативних занять і лабораторних робіт для студентів, пов'язаних із застосуванням LabView в системах збору даних. З недавнього часу, завдяки нашому роботоцентру, мені вдалося отримувати робототехнічні набори для використання їх в різних наукових цілях. У зв'язку з цим, я б хотів опублікувати цикл робіт, пов'язаних з використанням LabView у робототехніці, причому основний упор буде робитися на реалізації найпростіших прикладів, для подальшого використання їх при проведення лабораторних робіт для студентів. Не так давно, мені запропонували розібратися з робототехнічні конструктором від корейської фірми Robotis та розробити кілька найпростіших прикладів на LabView для взаємодії з цим конструктором. Особливий інтерес становило те, що обмін даними необхідно було організувати через бездротовий інтерфейс Zigbee. В якості дослідних зразків до мене потрапили набори OLLO BUG і Bioloid STEM.
 
 Склад набору OLLO BUG image
 
 Склад набору Bioloid STEM image
 
Відмінною особливістю OLLO є більш «прості» комплектуючі в порівнянні з Bioloid. Зокрема, до складу набору OLLO входить контролер CM-100, тоді як з набором Bioloid поставляється CM-530.
 
 СМ-100 image
 
 СМ-530 image
 
Для організації бездротового інтерфейсу була використана зв'язка з «рідних» адаптерів, що поставляються Robotis:
1. ZIG-100/110A — підключається до контролера (той, який з хвостом) і встановлюється на перехідник (який виконаний у вигляді чіпа).
 ZIG-100/110A image
2. ZIG2Serial — хустки, по суті представляє собою перехідник з zigbee модуля на стандартний rs-232.
 ZIG2Serial image
3. USB2Dynamixel — дуже цікава і корисна річ. Може працювати в 3х режимах — TTL, RS485, RS232 — наш варіант. Ми використовуємо даний адаптер як перехідник з USB на RS232.
 USB2Dynamixel image
 
В результаті вийшла ось така конструкція:
 image
 
Справа залишилася за малим — встановити зв'язок між двома «половинками» ZIG-100/110A і перейти власне до передвигании квадратиків по екрану реалізації прикладів на LabView. Це робиться за допомогою «рідний» програми — RoboPlus Manager і сам процес дуже докладно описано на сайті розробника.
Для того, щоб наші контролери розуміли, що до них підключений ZigBee модуль і вели обмін даними між ним і підключеної до них периферією потурбувалися написати для них відповідну прошивку. Прошивка писалася за допомогою рідної RoboPlus Task. Процес написання прошивки виглядає наступним чином:
 image
Оскільки з RoboPlus Task неможливо витягнути код прошивки в приємному для ока вигляді і компактній формі, то я не буду надалі викладати скріни прошивок. Тим більше що сам процес розробки досить інтуїтивний і особливих проблем не викликає. Якщо когось зацікавлять самі прошивки — я додам їх у форматі. Tsk.
Спочатку на увазі, що доведеться самому розробляти бібліотеку для роботи з ZIG2Serial, але покопавшись, на офіційному сайті Robotis я виявив Zigbee SDK, який без проблем інтегрувався в LabView через класичний Import Shared Library (. Dll). Даний процес я провів на LV2010 і LV2012 — проблем при інтеграції виявлено не було. В результаті у нас з'явилася ще одна палітра в User Libraries:
 
 image
 
Для демонстрації можливостей LabView було прийнято рішення в якості навчальних прикладів реалізувати наступне:
1. Відправка керуючих команд на контролер через Zigbee інтерфейс.
2. Опитування масиву інфрачервоних сенсорів, підключених до контролера.
3. Опитування інфрачервоних сенсорів.
4. Взаємодія з сервоприводами Dynamixel.
 
Отже, почнемо по-порядку:
 
1. Відправка керуючих команд на контролер через Zigbee інтерфейс.
Під керуючими командами в даному прикладі я маю на увазі команди, які контролер сприймає як команди, відправлені з пульта керування RC-100, але ніщо не забороняє нам відправляти будь-які інші — просто в цьому випадку нам довелося б додатково модифікувати прошивку.
 Схема пульта RC-100 і відповідні кожній кнопці коди image
Принцип роботи в даному випадку наступний — підключається по com-порту до адаптера, і передаємо дані на контролер. Контролер їх інтерпретує і відправляє відповідні команди на сервоприводи робота.
 
 Процес розробки vi Реалізуємо дану програму в кілька етапів.
1. Створимо нову блок-діаграму. Помістимо на неї 2 структури Case Structure, Round LED індикатор з ім'ям ZGB_Connected, і Square LED індикатор з ім'ям TxD_LED. Створимо кнопку OK Button з назвою ZGB_Connect і з'єднаємо її з входом Case Selector перший структури. Встановимо поведінку цієї кнопки Mechanical Action в позицію Switch Until Released. Помістимо всередину даної структури у вікні True структуру Flat Sequence з трьома вікнами (Frame).
2. Помістимо всередину першого вікна функцію zgb_terminate.vi з бібліотеки Zigbee. Це необхідно зробити для закриття сесії роботи з COM портом, у разі коли попередня сесія не була коректно завершена. Так само в це вікно помістимо локальну змінну ZGB_Connected і присвоїмо їй значення FALSE.
3. У наступне вікно помістимо функцію zgb_initialize.vi вхід якої з'єднаємо з numeric контролом COM Port, а вихід, порівнявши зі значенням «0», відправимо на вхід Enable express-vi Display Msg. У вікно Message to Display напишемо Initialization Failed. У цьому вікні буде відбуватися ініціалізація з'єднання з COM портом, до якого підключений модуль ZIG-100 за допомогою ZIG2Serial і USB2Dinamixel. У разі успішної ініціалізації з'єднання функція zgb_initialize.vi поверне значення 1, а в разі не успішною — значення 0 і повідомлення про неуспішною ініціалізації.
4. Останнім вікно помістимо структуру Case Structure, з'єднавши вхід якої з виходом OK express-vi Display Msg. У вікно True помістимо константу False, а у вікно False — константу True і з'єднаємо їх з індикатором ZGB_Connected.
5. Створимо кнопку OK Button з назвою Transmit. Встановимо поведінку цієї кнопки Mechanical Action в позицію Switch Until Released.Теперь перейдемо до другої з двох створених спочатку структур Case Structure. Подамо на вхід структури значення змінної ZGB_Connected за допомогою локальної змінної. Всередину вікна True помістимо цикл While Loop. Всередину циклу помістимо структуру Case Structure, вхід якої з'єднаємо з кнопкою Transmit.
6. Всередину структури помістимо функцію zgb_tx_data.vi, вхід якої з'єднаємо з numeric контролом data to transmit, а вихід, порівнявши зі значенням «0», відправимо на вхід Enable express-vi Display Msg, розташований поза структурою. У вікно Message to Display напишемо Transmission Failed. Так само всередині вікна True поточної структури Case Structure присвоїмо локальної змінної TxD_LED значення true. Цей етап необхідний для відправки даних по Zigbee інтерфейсу
7. У вікні False поточної структури Case Structure помістимо ще одну структуру Case Structure, подавши їй на вхід значення локальної змінної TxD_LED, і в її вікні True помістимо функцію zgb_tx_data.vi, з поданням на вхід значенням «0». Це необхідно для фільтрації повторної відправки команд.
8. Створимо цикл While Loop і помістимо всередину нього всю нашу блок діаграму. Створимо кнопку Stop і встановимо її поведінку в позицію Switch When Released. З'єднаємо кнопку Stop і Loop Condition останнього створеного циклу While Loop. Також всередині поточного циклу While Loop володіємо структуру Case Structure в її вікні True розміщуємо функцію zgb_terminate.vi. З'єднуємо вхід структури з кнопкою Stop.
9. Повернемося до першого створеному циклу While Loop. Об'єднавши локальні змінні stop і ZGB_Connect логічною операцією OR з'єднаємо результат операції з Loop Condition даного циклу.
 
 
У підсумку, для даного прикладу блок-діаграма виглядає наступним чином:
 image
і лицьова панель:
 image
 
 
2. Опитування масиву інфрачервоних сенсорів, підключених до контролера.
До контролера CM-530 можливе підключення масиву сенсорів IR SENSOR ARRAY.
 IR SENSOR ARRAY image
Як приклад ми будемо опитувати цікавить нас сенсор на вимогу.
Принцип роботи в даному випадку наступний — підключається по com-порту до адаптера, відправляємо на контролер номер цікавить нас сенсора — у відповідь отримуємо з нього значення.
 
 Процес розробки vi Для виконання даної вправи модифікуємо попередній vi наступним способом:
1. Очистимо перший створений нами цикл While Loop від вмісту.
2. Створимо всередині нього структуру Case Structure і елемент управління (контрол) з ім'ям Запит. З'єднаємо даний елемент управління з входом структури Case Structure.
3. У вікні True розмістимо структуру Flat Sequence з трьома вікнами (Frame). Помістимо всередину першого вікна функцію zgb_tx_data.vi з бібліотеки Zigbee. У даному випадку ця функція відсилає на контролер номер цікавить нас сенсора з масиву. Тому створимо елемент управління (контрол) з ім'ям Номер сенсора і індикатор з ім'ям Код помилки запиту і з'єднаємо їх відповідно з входом і виходом даної функції.
4. Всередину другого вікна помістимо функцію zgb_rx_data.vi. Ця функція відповідає за отримання даними комп'ютером по інтерфейсу Zigbee. Створимо індикатор з ім'ям результат і з'єднаємо його з виходом функції, пройшовши через третіх вікно структури Flat Sequence. У третє вікно помістимо функцію zgb_rx_check.vi. Ця функція відповідає за виведення результатів. Створимо так само індикатор Код помилки отримання і з'єднаємо його з виходом даної функції.
 
 
В результаті блок-діаграма виглядає наступним чином:
 image
і лицьова панель:
 image
 
 
3. Опитування інфрачервоних сенсорів.
Крім масиву ик-сенсорів до контролерам можна підключити окремі IR Sensor.
 IR Sensor image
Реалізація даного прикладу суттєво не відрізняється від реалізації попереднього, тому я дозволю собі не зупинятися на процесі розробки, просто покажу що в підсумку вийшло.
 
Блок-діаграма виглядає наступним чином:
 image
лицьова панель:
 image
 
 
4. Взаємодія з сервоприводами Dynamixel.
До складу набору Bioloid STEM входить 2 сервоприводу Dynamixel AX-12A, причому з ними можна працювати в 2х режимах — Joint і Wheel. У режимі Wheel сервопривід виступає в ролі обертового мотора, основним показником є ​​швидкість обертання. У режимі Joint сервопривід виконує роль шарніра, основним показником якого є відхилення на деяку величину від свого початкового положення. Режими роботи переключаються через RoboPlus Manager. Відмінною особливістю даного прикладу є безперервний обмін з контролером по Zigbee інтерфейсу. Для цього в блок діаграму були додані паралельно працюючі цикли While Loop. Після вибору режиму роботи (обертання приводів або контроль їх відхилення) на контролер безперервно відправляються дані, що представляють собою цілочисельні значення від 1 до 1023. Для режиму Wheel ці дані є значенням швидкості, а для режиму Joint — величиною відхилення положення приводу від нульового.
 
Блок-діаграма виглядає наступним чином:
 image
лицьова панель:
 image
 
У підсумку дані приклади увійшли в курси навчання основам робототехніки, пропоновані нами.
 
 
Висновок.
Ну і на завершення хочеться сказати що розробкою досить примітивних прикладів справа не закінчилася. Для «швидкого» ознайомлення з наборами було розроблено демонстраційний додаток, що включає в себе «доведені до розуму» можливості, засновані на наведених вище прикладах, а також розширені можливості по управлінню та налаштування сервоприводів в «дротовому» режимі роботи.
 
 image
 image
 image
 image
 image
 image
 image
 
Основним джерелом інформації при розробці був www.robotis.com/ — офіційний сайт виробника.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.