Dynamixel AX-12. Советы пользователю.

 

Угол поворота   (гр) 300
Масса   (гр) 55
Передаточное отношение 1/254
Входное напряжение at 7V at 10V
Максимальный момент (kgf.cm) 12 16.5
Быстродействие Sec/60degree 0.269 0.196

Способ управления: цифровой пакет

Скорости управления до 1 Мбит полудуплекс ТТЛ

Ток потребления до 1.5 А

Обратные связи: момент, положение, скорость, температура, входное напряжение

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

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

Обращаю еще раз внимание, что эти приводы управляются цифровыми пакетами (никакого ШИМ) и объединяются в сеть, при этом находятся на одной управляющей линии. Мы таким образом объединяли до 14 штук и добивались синхронного управления.  При этом разработчики сделали эту линию полудуплексной. С моей точки зрения – это огромный промах. Идеальным для них был бы стандарт RS-485. Из-за этого для управления вам придется либо делать автоматическое перенаправление, либо покупать фирменный переходник.

На данный момент производитель предлагает следующие устройства управления:

1.USBToDynamixel

2.CM-510/700

3.ZigBee

Первый – это обычный переходник USB-TTL,RS485,RS232. Он имеет автоматическое направление передачи данных на линии TTL и является тем минимумом, который позволит управлять сервоприводом. Обратите внимание, линия ТТL не дифференциальная и вам придется выровнять земли устройства и компьютера. В разъеме уже есть выход цифровой земли, не забудьте выровнять его с землей питания сервопривода. Стоимость – около 1500 и мой совет – это недорого, мне устройство помогало в отладке, когда нужен был RS-232-USB переходник.

Блоки управления CM – это то, что идет в фирменном наборе Bioloid. Это уже системы с контроллером на борту (Atmega128). Мы не имели дело с ними, мне кажется, они реализуют уже отличный набор команд от команд управления сервоприводом. Какие преимущества это дает, сложно сказать. Мы смогли использовать все возможности привода с помощью позиции 1.

ZigBee – это стандарт беспроводной передачи данных. Есть модуль, основанный на нем. Какие преимущества он дает, если в сервоприводе нет беспроводного трансивера – сказать сложно.   По сути, это решает проблему удаленного управления подвижной системой с обычного стационарного компьютера, не более. Хотя можно было сделать больше, причем это увеличило бы стоимость привода на 10%, не более.

Теперь о подводных камнях в hardware части. Для удобства, я приведу таблицу регистров системы, откуда станут сразу видны возможности привода:

Таблица регистров АХ-12

Address Item Access Initial Value

0(0X00) Model Number(L) RD 12(0x0C)
1(0X01) Model Number(H) RD 0(0x00)
2(0X02) Version of Firmware RD ?
3(0X03) ID RD,WR 1(0x01)
4(0X04) Baud Rate RD,WR 1(0x01)
5(0X05) Return Delay Time RD,WR 250(0xFA)
6(0X06) CW Angle Limit(L) RD,WR 0(0x00)
7(0X07) CW Angle Limit(H) RD,WR 0(0x00)
8(0X08) CCW Angle Limit(L) RD,WR 255(0xFF)
9(0X09) CCW Angle Limit(H) RD,WR 3(0x03)
10(0x0A) (Reserved) - 0(0x00)
11 (OXOB) the Highest Limit Temperature RD,WR 85(0x55)
12(0X0C) the Lowest Limit Voltage RD,WR 60(0X3C)

 


13(0X0D) the Highest Limit Voltage RD,WR 190(0xBE)
14(0X0E) Max Torque(L) RD,WR 255(0XFF)
15(0X0F) Max Torque(H) RD,WR 3(0x03)
16(0X10) Status Return Level RD,WR 2(0x02)
17(0X11) Alarm LED RD,WR 4(0x04)
18(0X12) Alarm Shutdown RD,WR 4(0x04)
19(0X13) (Reserved) RD,WR 0(0x00)
20(0X14) Down Calibration(L) RD ?
21(0X15) Down Calibration(H) RD ?
22(0X16) Up Calibration(L) RD ?
23(0X17) Up Calibration(H) RD ?
24(0X18) Torque Enable RD,WR 0(0x00)
25(0X19) LED RD,WR 0(0x00)
26(0X1 A) CW Compliance Margin RD,WR 0(0x00)
27(0X1 B) CCW Compliance Margin RD,WR 0(0x00)
28(0X1C) CW Compliance Slope RD,WR 32(0x20)
29(0X1D) CCW Compliance Slope RD,WR 32(0x20)
30(0X1 E) Goal Position(L) RD,WR [Addr36]value
31(0X1F) Goal Position(H) RD,WR [Addr37]value
32(0X20) Moving Speed(L) RD,WR 0
33(0X21) Moving Speed(H) RD,WR 0
34(0X22) Torque Limit(L) RD,WR [Addr14] value
35(0X23) Torque Limit(H) RD,WR [Addr15] value
36(0X24) Present Position(L) RD ?
37(0X25) Present Position(H) RD ?
38(0X26) Present Speed(L) RD ?
39(0X27) Present Speed(H) RD ?
40(0X28) Present Load(L) RD ?
41(0X29) Present Load(H) RD ?
42(0X2A) Present Voltage RD ?
43(0X2B) Present Temperature RD ?
44(0X2C) Registered Instruction RD,WR 0(0x00)
45(0X2D) (Reserved) - 0(0x00)
46[0x2E) Moving RD 0(0x00)
47[0x2F) Lock RD,WR 0(0x00)

48[0x30) Punch(L) RD,WR 32(0x20)
49[0x31) Punch(H) RD,WR 0(0x00)

 

  1. Вспомним, что в документации максимальное потребление привода находится на уровне 900мА. Ничего себе для такой штучки. На самом деле, это не так. Мы проверяли синхронный старт 2 приводов и он включал токовый компаратор в защите источника питания на 2 А. Затем путем более точного замера удалось зафиксировать, что пусковой ток составляет – не менее 1.5 А. Вспомним про напряжение питания привода. Оно – не менее 7 вольт. Сразу становится понятно, что источник питания для привода добавит немалую долю стоимости.  Если приводу не хватает стартового тока, то он отрубается и в дальнейший контакт не входит до перезагрузки.  Этот недостаток связан с дешевым приводом, который стоит на борту. В старших версиях, таких как АХ-18 эту проблему убрали.  (В самой дорогой версии Dynamixel и вовсе установлен Швейцарский движок от Maxon). У меня встала проблема, чем же запитать эту горячую штучку. Если запитывать сразу всю линейку приводов, то нужен источник питания на несколько А. Уже для 4 приводов стоимость DC DC преобразователя находится на уровне стоимости самих приводов. Если же запитывать каждый привод по отдельности – теряется удобство последовательного соединения и каждому приводу нужно тянуть провода отдельно. Я пошел по второму пути и поставил на каждый привод отдельно линейный стабилизатор КР142ЕН8. Старая добрая кренка  обеспечивает максимальный пусковой ток и расширяет диапазон питания. На холостом ходу серва требует около 0.09А, но даже при таком раскладе нужно охлаждение радиатором. Я лично группу кренок накрыл одним большим радиатором. Система в таком исполнении работает стабильно и по сей день.
  2. Напряжение питания. В документации рекомендуется от 7 до 10 вольт. Допускается использование до 12. На самом деле это не совсем так. Если вы внимательно прочитаете документацию, то найдете регистр 13, отвечающий за диапазон питания. Максимальное значение больше минимального в 3 раза, это означает, что критическое напряжение питания находится на уровне 22 вольт. В таком режиме мы привод не тестировали. Мы питаем привод от 12 вольт.
  3. Далее была замечена заводская неточность конфигурации. В документации сказано, что по умолчанию в приводе стоит защита по диапазону питания и максимальному моменту. На самом деле это не так. По умолчанию в серву зашит уход в аварийный режим по температуре и напряжению. Не в коем случае не отключайте опцию по температуре, в противном случае привод выйдет из строя. Сервопривод этот характерен тем, что отключается в аварийной ситуации. Это конечно здорово, но он уходит в аварийный режим, из которого сам не выходит даже спустя некоторое время и мы долгое время не знали, как же вывести его из этого состояния. Эта проблема не была описана в официальном PDF руководстве, но она описана здесь, оказывается нужно просто вписать в регистры 14-15 MaxTorque значение больше 0, так как при уходе в аварийный режим серва сбрасывает этот регистр.
  4. Проблема дискретности значений в регистрах текущего момента и скорости. Это огромный косяк этой модели. Потому, что значения регистров 38-41 обновляются редко. При повороте сервы на угол 60 градусов они меняют всего 5-6 значений. Из-за этого нельзя нормально замкнуть обратные связи и сделать детектирование столкновения с препятствием с помощью самой сервы. Нельзя определить, есть ли объект в схвате и поднимает ли серва груз. Есть решение этой проблемы, но это больше hack, нежели решение production, об этом чуть позже. Значения момента и вовсе не соответствуют действительности. Сами разработчики пишут, что использовать этот регистр только для детектирования направления действия нагрузки. По сути это ток в обмотке привода, а не момент. Поэтому питать тут иллюзии по классическому силомоментному управлению бесполезно.
  5. Как можно реализовать детектирование препятствия? У АХ-12 приемлемую дискретность при повороте имеет регистр положения. Приведу график: 
  6. На нижнем графике видна пила поверх сигнала скорости, это связано с переменным временем дискретизации, которое колебалось от 6 до 7 мс. Скорость обмена с приводом была 1Мбит  По сути мы измерили скорость заново по значениями положения. Для этого требуется довольно точный таймер. Теперь, зная реальную скорость движения и максимальную построим график ошибки и возьмем интеграл в виде конечной суммы с переменным верхним пределом, получит вот такой график:
  7. Здесь сплошным выделен график интеграла ошибки, когда нет препятствия, а точечным - наличие препятствия на пути движения. Как видно, в целом ошибка по углу колеблется относительно нуля, что говорит о хорошей системе управления в сервоприводе, в частности, правильно рассчитанному регулятору контура скорости.  Но при наличии препятствия ошибка резко начинает расти.  Например уже на значении ошибки в 100 единиц можно уже уверенно сказать, что мы с чем-то столкнулись, затем делаем следующее:  запоминаем текущее положение, подаем команду выставить это положение, серва занимает эту позицию и таким образом мы можем удерживать объект.  Задержка до достижения этих 100 единиц ошибки достигает не более 1/3 времени поворота, в случае 60 градусов это около 0.1 секунды, что приемлемо как для сервы, для и для пользователя со стороны.  Стоит отметить, что в случае использования подобного алгоритма нам нужно управление сервой по скорости, а его НЕТ. Поэтому приходится задавать изначально больший угол поворота, чтобы исключить участки разгона и торможения. Кстати, эти участки также регулируются, за них отвечают регистры 26-29. Отмечу, что применение интегрального способа менее восприимчиво к помехам. Также надо анализировать результат не с первых измерений, так как они производятся во время разгона и значения скорости могут быть чересчур завышены. Мы проводили измерения после прихода 3 пакета.
  8. Сервопривод отключается при перегреве и уходит в аварийный режим. По умолчанию в этот регистр записано 85, что это означает, сказать сложно, скорее всего температуру в градусах Цельсия, максимально туда можно записать 150. Отключив эту опцию мы благополучно спалили один привод.
  9. Еще стоит отметить ненадежные разъемы. Они иногда отходят и серва отваливается, происходит это достаточно редко.

Полезные ссылки:

Магазин, где можно купить сервоприводы Dynamixel: http://www.crustcrawler.com/motors/AX12/index.php?prod=63 . Сроки доставки - около месяца.

Там же продаются и переходники: http://www.crustcrawler.com/electronics/USB2Dynamixel/index.php?prod=65

Кроссплатформенная библиотека для управления сервоприводами dynamixel разработанная нами - www.bitbucket.org/wicron/vdyna

SDK для разработки на основе этих приводов: http://support.robotis.com/en/

Официальный сайт компании Robotis http://www.robotis.com/xe/

Leave a Reply

You must be logged in to post a comment.