Dynamixel

Dynamixel AX-12В этой статье мы поговорим о сервоприводах Dynamixel компании Robotis. Приводы Dynamixel - это сервоприводы для робототехники, обеспечивающие высокий выходной момент, хорошую точность позиционирования, управляются цифровыми пакетами и обладают гибкой настройкой, также эти приводы можно объединять в сеть. Компания Robotis выпускает целую линейку приводов с различными параметрами  выходного момента. Приводы стоят от 50 до 500 долларов США за штуку в зависимости от модели. Используя сервоприводы Dynamixel как базовый элемент создано большое количество роботов-игрушек: роботы пауки, шагающие роботы, манипуляторы. Компания производит компактный модуль управления для этого чуда и поставляет некоторые библиотеки с помощью которых можно управлять с компьютера. Также для роботов, созданных целиком из этих сервоприводов, Robotis разработала среду разработки где можно с легкостью создавать различные алгоритмы движения робота. Закончим краткое описание и перейдем к использованию этого маленького чуда.

Для подключения сервоприводов к компьютеру потребуется переходник. Я использовал фирменный переходник USB2Dynamixel. Как понятно из названия переходник подключается к компьютеру через USB. В зависимости от того какие вы используете сервоприводы у них может отличаться интерфейс подключения. Это будет либо TTL - что-то похожее на UART только с одним проводом или RS485. В модуле USB2Dynamixel если все возможные входы и еще его можно использовать как переходник USB - RS232/USB - RS485. Отдельно по модулю еще хочется сказать что он сделан на хорошей микросхеме и стабильно работает на скоростях вплоть до 1Mbod. Если интерфейс привода TTL то можно подключить его к контроллеру, самый простой вариант - напрямую к ножке TX контроллера, как делал пару раз для отладки, да напряжение на линии 5В. Подключив привод к тому с чего он будет управляться в другой разъем привода нужно подвести питание. Вспоминая собственную ошибку хочу предупредить читателя, что источник питания должен быть рассчитан на ток не менее 1А. При токе в 500 мА у меня максимум зажигалась лампочка на корпусе - двигаться сервы категорически отказывались. Рекомендуемое напряжение для наиболее распространенной модели AX-12 по документации составляет 9,6-10В меньше лучше не делать - так как существенно падает момент и быстродействие, автор использует напряжение питания 12В - сервы работают стабильно ничего не горит. При подключении питания привод должен мигнуть - если это произошло, то все подключено верно.

Перейдем к программированию.  Первое с чего бы я советовал начать, это открыть терминал позволяющий посылать данные через com port и опробовать пару готовых рабочих команд. В документации команд достаточно,  но не очень то много - разработчики документации старались показать все и по чуть-чуть и как мне кажется не уделили достаточного внимания "рабочим" командам как установка положения и зажигание диода. Мной был составлен небольшой список команд. Стоит отметить, что ID сервы по умолчанию 1, скорость 1000000 бод. Автор изучил код написанный разработчиками и откровенно говоря остался недоволен. Код страшный, содержит кучу лишнего, что не используется и не самый универсальный. Я решил написать код на С++, который можно легко портировать между операционными системами и легко перенести на контроллер. Немного поразмышляв была разработана следующая схема

Dynamixel HALУправление сервоприводами разделяется на два класса VDynamixelController - класс адаптера, который контролирует группой устройств и класс VDynamixelStrategy класс стратегия/советник, который создает пакет и возвращает его. Используя эту схему класс советник, который генерирует пакеты можно легко перенести куда угодно не важно компьютер это или контроллер. Класс адаптер содержит контейнеры std::set и std::map, если компилятор для контроллера не имеет в своей реализации нужных библиотек, то этот класс можно легко переписать под свои нужны. Для многих задач класс адаптер можно опустить. Что касается передачи данных в сеть, то на компьютере я использовал кросплатформенную библиотеку boost, которая позволяет работать с serial port, об этом можно почитать в этой статье.

В настоящий момент код позволяет:

Класс советник:

создать пакет для смены ID, BaudRate, сброса Reset, пинга Ping, установки значений SetGoalPosition, SetSpeed, SetLed.

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

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

Класс адаптер:

Устанавливать положение на сервах, устанавливать индикацию, скорость.

Автор добавляет функции в проект по необходимости. Вместе с кодом доступна документация.

Проект целиком под linux.

Кое-что о быстродействии. При разработке роботов и встраиваемых систем медленное быстродействие элементов системы пагубно сказывается на общую скорость работы, данные сервоприводы работают на самодельном протоколе обмена, который стабильно выдерживает скорость до 1MBod, приведу некоторые цифры.  Установка положения на 14 приводов на скорости 9600 Bod занимает 8мс, на скорости 1000000 Bod около одной мс. Например в роботе TurboT соревнований Eurobot2011 время цикла работы управляющей программы робота составляло около 15мс и время передачи положения на сервы в 8мс было бы неприемлемо велико.

Dynamixel Servo

Тест работы 14 приводов. При совместной работе требуется приличный ток. Лабораторного блока питания на 2А не хватало - пришлось использовать аккумулятор.

Dynamixel Servo
Сервоприводы AX-12 во всей своей красе.

2 Comments

  1. inVal1d:

    А где можно достать USB2Dynamixel или проще сделать самому?

  2. http://www.crustcrawler.com/

    Здесь есть нужный вам переходник. Стоимость около 1500 руб. Купите фирменный. Кроме этого, он будет выполнять функции универсального переходника. Если вам не нужны ответные команды сервы (обратные связи), то вам запросто подойдет обычный USB-UART переходник, как у МастерКита например. Хотите полный дуплекс, тогда посмотрите схему в даташите на эти приводы. В качестве ножки направления передачи можно использовать ножку сброса переходника (DTR или RTS не помню). Практика показала, что такой способ пока не работает. (лично у нас)

Leave a Reply

You must be logged in to post a comment.