Наверное многие из тех, кто открыл для себя мир электроники, рано или поздно задумываются о том чтоб создать некого своего робота, либо просто бытовую автоматику или радиоуправляемые модели. Но если с механикой было все более-менее понятно – то разработка программы для управления таким устройством, в котором слажено должны работать большое количество сервоприводов, вызывала не мало сложностей. Программно–аппаратный комплекс ServoStudio 12 как раз позволит управлять таким устройством, управлять одновременно 12 сервоприводами, создавать последовательности движений при помощи визуального редактора. Также данный комплекс станет удобным инструментом при отладке механики устройства и создания своей программы.

При необходимости, созданную последовательность движений можно экспортировать как скетч Arduino IDE, для автономной работы, без ПК. Либо просто как массив значений ключевых точек для дальнейшего использования в своей программе. ServoStudio 12 обладает интуитивно понятным интерфейсом и разобраться в ней может даже новичок. А использование платы Arduino в качестве исполнительного устройства управления – сделало данную систему легко доступной в повторении и изготовлении.

Немного предыстории. Вдохновившись идеей создания удобного тестера сервоприводов от Сергея Грищенко, я решил создать свою систему, которая была б проста в использовании и одновременно удобна и функциональна. В отличии от вышеуказанного тестера сервоприводов, за все управление отвечает программное обеспечение ServoStudio 12, на персональном компьютере, и плата Arduino поддерживает работу до 12 сервоприводов одновременно. Аппаратная часть же являет собой широко распространённую плату Arduino Nano либо Arduino Uno. Так же данное ПО додерживает работу с вышеуказанным тестером сервоприводов.

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

Сервопривод – в отличии от коллекторного мотора, позволяет делать поворот на определенный угол. Угол поворота задается шириной импульсов управляющего сигнала. Ширина этих импульсов может меняться в пределах 800 – 2300 мкс.



Для начала работы нам потребуется следующее:

  • Плата Arduino Nano/Uno.
  • Arduino IDE, чтоб запрограммировать данную плату.
  • И ПО ServoStudio 12.

Схема подключения очень проста. Выводы D2-D13 подключаются к управляющим входам сервоприводов. Питание подключается к выводам питания Arduino. При большом потреблении тока сервоприводами- необходимо подключить внешний источник питания.



Первым делом в меню программы ServoStudio 12 необходимо выбрать пункт «Генератор кода» и подпункт «Создать скетч ServoStudio HardWare», сохранить данный скетч на диск и открыть в Arduino IDE и залить в Arduino Nano/Uno. Все, аппаратная часть готова! Данное действие производится всего один раз, с новой платой Arduino.

Для начала работы необходимо создать новый проект (меню Файл / Новый). В диалоговом окне выбрать необходимое количество ШИМ каналов (количество сервоприводов), выбрать тип платы тестера и написать имя своего устройства (для удобства).



Теперь об интерфейсе программы



В нижней части расположены инструменты для создания последовательности ключевых точек. Перемещая ползунки регуляторов для соответствующих каналов задается значение ширины импульсов управляющего сигнала (угол поворота сервопривода) на соответствующем канале. Если установить флажок «управлять в реальном времени»- то при перемещении ползунка регулятора будет двигаться сервопривод, подключённый к данному каналу, что очень удобно, так как сразу наглядно видно положение привода в данной точке. После того как установили управляющий сигнал на всех необходимых каналах, нужно создать следующий «кадр» (следующую ключевую точку), при помощи кнопки «Добавить». И таким же образом, при помощи регуляторов, создать новую ключевую точку, и так сколько необходимо. Время, за которое сервоприводы должны повернуться на данный угол, выставляется для каждого кадра отдельно, в поле «время шага», время задается в миллисекундах. Чем больше данное значение– тем медленнее будет перемещение, чем меньше– тем быстрее. В поле «шаг» отображается текущий кадр последовательности. При необходимости, изменяя номер шага в данном поле, можно отредактировать предыдущие шаги. Для удобства, имена каналов можно менять, кликнув 2 раза на названии канала, слева от регулятора.

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

И когда создано какое-то законченное движение (например, шаг вперед), можно сохранить текущую последовательность как отдельную законченную последовательность, нажав кнопку «добавить» на панели «Последовательности», в правой части окна программы. Можно на пример создать несколько последовательностей, для движения вперед, назад, влево, вправо, итд. И эти последовательности можно воспроизводить независимо друг от друга, по двойному щелчку мыши, или из контекстного меню, а также из окна «пульт управления» (но об этом позже). Таким образом, воспроизводя эти последовательности, осуществляется управление устройством (роботом). Так же можно добавлять сохраненные последовательности в основную последовательность, создавая одну большую последовательность действий. Это может быть очень полезно для демонстрации работы устройства.

Так же основную последовательность (которая в данный момент открыта в редакторе), можно экспортировать как скетч для Arduino IDE, для автономного воспроизведения платой Arduino, без участия ПК. Для этого в меню «Генератор кода» необходимо выбрать пункт «Экспорт последовательности» и в диалоговом окне нажать кнопку «Генерировать», после чего данный скетч можно скопировать в буфер обмена, либо сохранить как скетч для Arduino IDE. Дальше этот скетч можно залить обычным образом в контроллер платы Arduino.



Есть возможность воспроизводить данную последовательность циклично либо только один раз, установкой или снятием флажка «повторять циклично». Так же есть возможность экспорта в массив ключевых точек, это может быть полезно, если у вас уже есть своя программа для микроконтроллера и Вам необходимо в ней задать движения, при чем опционально можно добавлять в массив значения времени установки позиции, при помощи установки соответствующего флажка. Если, после прошивки данным скетчем, плату Arduino нужно опять использовать с программой ServoStudio 12 то необходимо опять в меню выбрать пункт «Генератор кода» и подпункт «Создать скетч ServoStudio HardWare», сохранить данный скетч на диск и открыть в Arduino IDE и залить в Arduino Nano/Uno.

Окно «пульт управления»



Позволяет использовать горячие клавиши для воспроизведения отдельных последовательностей. Для начала нужно нажать кнопку «Назначить клавиши», выбрать из выпадающего списка необходимую последовательность и назначить ей горячую клавишу. Когда все установлено- необходимо нажать кнопку «Запомнить». Теперь, пока открыто это окно, при нажатии на горячую клавишу будет воспроизводится назначенная ей последовательность.

Не маловажным есть пункт меню «Исходная позиция» — это положение сервоприводов при включении, либо просто «нормальное положение» для угла поворота сервоприводов. Другими словами, если не хотите, чтоб вашего робота перекосило при включении нужно регуляторами выбрать для него оптимальное положение и выбрать пункт меню «Записать текущий кадр в EEPROM Arduino как исходную позицию», данная функция доступна только для плат Arduino. Так же есть пункты «Записать текущий кадр как исходную позицию» и «Вставить исходную позицию в текущий кадр», это будет очень полезно, если нужно начать новую последовательность и исходной точки. Исходная позиция сохраняется в файле проекта и доступна при открытии файла, так что её не нужно будет заново подбирать.



В программе есть так же возможность ассоциировать файлы проекта с ServoStudio 12. Для этого ее нужно 1 раз запустить с правами администратора. ServoStudio 12 – полностью Portable, состоит из 1 файла (при закрытии программы еще создается файл последнего открытого проекта) и не требует установки.

Более подробно о работе можно посмотреть в видео.



Ссылка на скачивание ПО ServoStudio 12

Немного о планах на будущее:

  • Хочу создать приложение для Android, которое могла б открывать файл проекта и можно б было использовать телефон для управления роботом. Управление осуществлять по BlueTooth или WiFi через TCP-UART переходник.
  • Так же хочу создать версию на большее количество каналов, для управления более сложными устройствами.
  • Добавить обработку сигналов с подключённых датчиков (на пример если впереди препятствие- обойти его).
  • Добавить возможность управления цифровыми выходами (на пример для включения светодиодов или чего-то другого)

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

Комментарии (23)


  1. crezd
    28.03.2017 10:59
    -1

    можна можна


  1. lingvo
    28.03.2017 11:31
    +1

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

    Не знаю. Если это хобби, то делайте. Если это что-то для работы, то есть уже достаточно много программных пакетов, которые позволяют разрабатывать сложные программы управления автоматикой и роботами, тоже не написав ни одной строчки кода. Ну и естественно они работают как с Ардуино так и с другими контроллерами — как по навороченней, так и попроще.


    1. PashaZV
      28.03.2017 11:46

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


      1. mickvav
        28.03.2017 12:33

        Запилите сплайны в управляющие траектории вместо кусочно-линейных интерполяций — получите гладкие траектории и уменьшите износ железок.


  1. DrPass
    28.03.2017 12:01
    +1

    Но если с механикой было все более-менее понятно – то разработка программы для управления таким устройством, в котором слажено должны работать большое количество сервоприводов, вызывала не мало сложностей

    Как только в алгоритме появятся различные условные ветвления, «если сработал такой-то датчик, то сделать поворот на Х градусов, повторить N раз», немало сложностей уже будет вызывать наоборот, борьба с визуальным редактором.


    1. PashaZV
      28.03.2017 12:48

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


  1. maxstar
    28.03.2017 14:09

    Очень нужный и полезный софт, но вот вопрос — в статье сказано что Arduino Uno и Arduino Nano позволяют одновременно управлять 12 серовприводами, что круто. Однако в документации на сайте ардуино сказано, что Uno и Nano имеют всего шесть PWM выводов. Как удается сделать работу с PWM у тех выводов, которые ее не поддерживают?


    1. PashaZV
      28.03.2017 14:14

      Здесь используется программный ШИМ, при помощи таймеров, для этого нужен просто цифровой выход. Стандартная библиотека ардуино поддерживает до 12 выходов управляющего ШИМ сигнала на платах Nano/Uno.


  1. vyacheslavteplyakov
    28.03.2017 15:39
    +1

    Безотносительно вашего проекта, просто сразу вспомнилось это видео как прочитал заголовок.


    1. PashaZV
      28.03.2017 22:27

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


  1. GeMir
    28.03.2017 15:58
    +1

    «Можно создать своего робота, не написав единой строчки кода»: понижение «порога вхождения» — это замечательно, вот только цель, как я понимаю, заинтересовать людей робототехникой на уровне повыше Lego EV3. А там без готовности написания не одной и не двух строчек кода далеко не уйдёшь.

    Не-русскоязычного интерфейса у программы не будет?
    Он, мне кажется, пригодился бы больше, чем фото автора в разделе «О программе».


    1. lingvo
      28.03.2017 17:14

      «Можно создать своего робота, не написав единой строчки кода»: понижение «порога вхождения» — это замечательно, вот только цель, как я понимаю, заинтересовать людей робототехникой на уровне повыше Lego EV3. А там без готовности написания не одной и не двух строчек кода далеко не уйдёшь.

      Еще как уйдешь. Уровень выше — это production code, и там уже заправляют такие гиганты, как Matlab и Labview, в которых не только роботов, а и технику помощнее без написания единой строчки кода программируют.


    1. PashaZV
      29.03.2017 17:12
      +1

      Понижение «порога вхождения» — рассчитано больше на людей, у которых появился 3D принтер, они увидели в интернете интересную вещь, либо придумали сами, но они не понимают ничего ни в схемотехники ни в программировании, но есть желание начать. Так же на кружки по робототехнике, радиолюбителей итд. В первую очередь возможность управлять механикой поможет этим людям.

      Я не ставил цель создать конкурента для Matlab и Labview. Так же я не писал что при помощи данного софта можно создать «терминатора» в 2 клика мышки. Главной целью было создать удобный и простой инструмент для отладки механики, но получилось даже лучше.

      В разделе «о программе» я указал ту информацию, которую посчитал нужной, на работу системы она никак не влияет. А на счет англоязычного интерфейса я уже думал, скорее всего будет, проблема больше в описании, такую же статью написать на английском языке- для меня немного проблематично. Но судя по форумам по 3D печати очень много англоязычных людей как раз в поиске такого инструмента.

      Данную программу я пишу в свободное время, которого у меня не так много. Я ничего на ней не зарабатываю и не собираюсь выпрашивать донат на разработку, как это сейчас принято. Программа бесплатная и всегда такой будет. Но новые функции будут появляться в ней по мере возможности и если это будет интересно людям.


      1. lingvo
        30.03.2017 10:36

        Данную программу я пишу в свободное время, которого у меня не так много. Я ничего на ней не зарабатываю и не собираюсь выпрашивать донат на разработку, как это сейчас принято. Программа бесплатная и всегда такой будет. Но новые функции будут появляться в ней по мере возможности и если это будет интересно людям.

        Рано это утверждать. У вас достаточно серьезные планы, и вы будете тратить на эту программу все больше и больше времени и рано или поздно встанет вопрос — либо забросить все это нафиг, либо продолжать, но уже за деньги.
        И если вы не собираетесь это бросать, то с самого начала подумайте о коммерции. В этом нет ничего плохого — вот вы уже начали изучать рынок, спрашивая про интерес и публикуя «рекламные» статьи о своем продукте.
        Вы можете сделать opensource программу, но оказывать платную поддержку тем, кому это действительно нужно. Или даже курсы обучения на основе своей программы. Или предлагать ее тем же кружкам робототехники или моделирования за деньги. Подумайте об этом.
        Еще раз — в коммерциализации ничего плохого нет — вы тратите свое личное время на разработку и сопровождение и имеете полное право получать оплату за свой продукт. От этого, вопреки распространенному мнению, выигрывают все — у вас появляется материальная мотивация улучшать свою программу, у пользователей появляется удобная программа, «понижающая порог вхождения».


        1. PashaZV
          30.03.2017 13:04

          Просто довольно мало удобных инструментов для людей, у которых хобби электроника. Потому хотелось создать софт который бы помог людям в освоении робототехники.
          По поводу планов и времени, могу сказать что первая версия данной программы была готова давно, еще после выхода статьи Сергея Грищенко. Как бонус — сделал поддержку работы с его тестером. Так как функционал был довольно простой, писать статью по той версии не стал, просто выложил в некоторых технических сообществах ВК. Особого интереса не вызвало и проект был заброшен на несколько месяцев, потому что не возникает особого желания заниматься тем, что не интересно никому.
          Сейчас у меня появился 3D принтер, и как следствие робот. Жена очень хотела побыстрее увидеть как он работает, потому возобновил проект, появились новые возможности, упростилось редактирование, появился просчет промежуточных точек итд. И вот решил им поделится, может еще комуто пригодится.
          По поводу opensource — его не будет, не люблю когда ковыряются в моем софте. По поводу коммерции — программа платной не будет. Я хорошо зарабатываю написанием другого софта, и нет необходимости сдирать денег с людей, которые делают первые шаги в освоении. Здесь бы хоть простое «спасибо» было приятно услышать…


  1. phill753
    29.03.2017 16:27
    +1

    Сделайте под «мегу», на большее количество сервов, можно было бы на inmoovа «натянуть»


    1. PashaZV
      29.03.2017 16:42
      +1

      По большому счету оно уже под «мегу», так как в ардуино собственно и используется контроллер «Atmega328».
      12 выходов взято из соображений что это не нагрузит интерфейс элементами управления плюс такой количество поддерживает стандартная библиотека. Можно написать свою либо использовать другую, но это создает неудобства в использовании, так как необходимо использовать дополнительные файлы. начинающих это очень сбивает с толку. Планирую в будущем сделать на большее количество, на платах ШИМ контроллера, но посмотрим как оно будет.


      1. phill753
        31.03.2017 18:43
        +1

        Я имел ввиду Arduino Mega.


        1. PashaZV
          31.03.2017 18:59

          Извиняюсь, я наверное не так Вас понял. Это не очень целесообразно, можно использовать платы ШИМ контроллера для этого, так и будет для WiFi версии. Просто нужно переделать интерфейс программы, так как в данном варианте больше элементов управления просто сделают не удобным использование.


  1. Nill_Tim
    31.03.2017 02:32

    Спасибо! теперь у меня появилось желание купить ардуинку и делать первые шаги в освоении робототехнике


    1. PashaZV
      31.03.2017 03:40

      Всегда пожалуйста! Рад что Вам понравилось.


  1. Wakdvr
    31.03.2017 18:34

    Павел, добавьте в программу возможность задавать скорость поворота, это было бы очень полезно


    1. PashaZV
      31.03.2017 18:37

      Так «Время шага»- это как раз и есть время, за которое будет произведен поворот в данную позицию относительно предыдущей. Другими словами это и есть установка скорость поворота.
      Если нужно поменять скорость в разные моменты — просто создаете новую точку и устанавливаете новое значение.