![image](https://habrastorage.org/files/2c8/3db/2f8/2c83db2f801e4089bd376e912e9c0830.jpg)
В последующем изложении хотел бы продемонстрировать реализацию шестиконечного манипулятора HEXAPOD, выполненного из корабельной стали. Текущий проект не претендует на оригинальность, инновационные подходы, реализацию сложных алгоритмов управления, использования математических моделей поведения, а так же изначальное проектирование уже существующих и эффективно работающих аппаратных средств. В текущей статье я постараюсь изложить собственный подход к реализации манипулятора из максимально доступных средств и материалов периферийного города.
Основной уклон на данном этапе был сделан в сторону аппаратной составляющей и не очень сложной программной части. В будущем планируется использовать BeagleBoard-xM, организацию автономных режимов работы и минимальную обработку видеоданных. Заниматься всем одновременно физически не хватает времени. Это мой первый опыт в робототехнике, поэтому некоторые аспекты устройства продумывались и подгонялись уже по ходу его реализации.
Предпосылками для создания манипулятора являлся, ставший культовым, анимационный фильм Ghost in the shell. Вышедший практически два десятилетия назад этот фильм произвел неизгладимое впечатление на многих, и на меня в частности. Спустя годы, приобретя определенный уровень технических знаний, располагая временем и некоторым количеством свободных средств, я решил реализовать конструктив из области робототехники.
Изначально оговорюсь, что в моем личном представлении каноническое понятие «робот» неотъемлемо связано с автономными алгоритмами работы. Так как данное устройство не может функционировать (на текущем уровне программного обеспечения) без участия человека, то в текущей статье будет использовано определение «манипулятор».
В качестве изначальной конструкции был выбран один из открытых проектов с сайта grabcad.com. Было это относительно давно, еще до повального интереса к подобным шестиконечным устройствам. Поэтому выбор из существующих открытых проектов на тот момент был не велик, а разрабатывать свою первую робототехническую конструкцию подобного уровня с нуля было весьма затруднительно. Проект был доработан в сторону уменьшения веса конструкции и упрощения краевых линий деталей. Ниже приведен изометрический вид манипулятора в программном продукте SolidWorks (одна из предпоследних версий модификации; самую последнюю, по прошествии стольких лет, найти так и не получилось):
![image](https://habrastorage.org/files/f87/dfd/4e6/f87dfd4e640b4463a67d513ebf4047af.jpg)
В качестве материала манипулятора изначально планировалось использовать алюминий. Но найти такую возможность в рамках моего периферийного города на тот момент так и не получилось (возможно, спустя годы, что-то и поменялось в этой области, однако, сомневаюсь). На помощь пришло наследие ушедших времен – остатки корабельной углеродистой стали и возможность плазменной резки по оной. К тому же в качестве исходных данных подходил проект из SolidWorks 2007, что упрощало подготовку к изготовлению. Толщина материала – 2мм. Изготовление конструкции из оргстекла или пластика было возможным, но изначально не рассматривалось, т.к. желание сделать манипулятор из металла преобладало над здравым взглядом на вещи. Некоторое время спустя детали были получены (извиняюсь за качество, некоторые фотографии в статье сделаны стареньким телефоном):
![image](https://habrastorage.org/files/5ce/ad6/1a6/5cead61a61554c9ea94754134b4a9a3c.jpg)
После внешнего осмотра деталей, все было аккуратно сложено в коробку и отправлено на «этап снятия остаточной напряженности металла». Мягко говоря – отложено на очень длительный срок, ввиду нехватки свободного времени.
Спустя время я вновь вернулся к манипулятору, и начал продумывать систему питания, устройства связи, выбирать сервопривода и управляющую электронику. Исходя из желаемого подхода к реализации, было предположено, что конечный вес будет весьма существенным, поэтому сервопривода нужно было выбирать с некоторым запасом по усилию. Однако стоимость так же играла весомую роль. Исходя из соотношения цена/качество, были приобретены сервопривода HK15328A, имеющие металлический редуктор, двойной шарикоподшипник, латунные втулки, усилие 12.8 кг на см., при напряжении 6.0 В., вес 58 грамм. Качество изготовления терпимое, хотя отсутствуют какие-либо пылезащитные прокладки, управляющая плата свободно болтается внутри корпуса, выводы проводов не загерметизированы, смазка в половине из заказанных приводов практически отсутствует, при длительной нагрузке присутствует незначительный нагрев. Все вышеперечисленное компенсируется стоимостью привода ~7$. Было заказано 18 приводов, все были пересобраны, смазаны графитовой смазкой и проверены под нагрузкой. За длительное время эксплуатации ни один из оных не вышел из строя. Ниже приведено фото внутренностей сервопривода HK15328A:
![image](https://habrastorage.org/files/1ae/8be/68d/1ae8be68d060465f8ba6f947e66ca318.jpg)
На момент заказа алюминиевых качалок не было в ассортименте. Решено было использовать идущие в комплекте с приводом пластиковые качалки, закрепленные подходящими по размеру металлическими шайбами. После доработки напильником и шлифовки деталей, работ на сверлильном станке, использовании метчиков и крепления сервоприводов каркас манипулятора приобрел следующий вид:
![image](https://habrastorage.org/files/6ec/126/80d/6ec12680d7de4f8e904bc62f15de2e6b.jpg)
В качестве элемента питания был использован литий — полимерный аккумулятор 12.6 В., 9800 мАч., 360 грамм. Аккумулятор состоит из 3 элементов, соединенных весьма дешевым тонким проводом, контроллеров заряда для каждого из элементов, штекером зарядки и переключателем:
![image](https://habrastorage.org/files/20b/962/859/20b9628599c24be2be873ca3cc044a85.jpg)
Контроллеры заряда также ограничивали отдаваемый аккумулятором ток в 1А. В качестве зарядного устройства планировалось использовать iMAX B6, поэтому контроллеры заряда были сняты, а проводники, соединяющие элементы, были заменены. Так же были выведены проводники от каждого элемента, для возможности сбалансированной зарядки аккумулятора. Из преобразователей напряжения были доступны DC-DC Turnigy UBEC-15A, DC-DC Turnigy UBEC-7.5A, DC-DC Turnigy Micro UBEC 5V/3A. Первые два используются для питания сервоприводов, последний преобразователь – для питания управляющей электроники.
В роли управляющей электроники было принято использовать весьма распространенный проект от фирмы LynxMotion – SSC-32. Так как на руках имелась плата робо-контроллера MRC28, взятая в свое время с сайта RoboZone.su, было решено отталкиваться от оной. На том же сайте была найдена плата расширения для MRC28 под проект SSC-32:
![image](https://habrastorage.org/files/efc/7cb/9d9/efc7cb9d98aa42baa1cfbecc1c433df4.jpg)
Плата расширения была изготовлена и подключена к плате контроллера, зафиксированного двухсторонним скотчем на аккумуляторе. Были подключены преобразователи напряжения, и управляющая часть предварительно установлена в каркас манипулятора:
![image](https://habrastorage.org/files/bff/7c0/4e7/bff7c04e749a4c93a3678b9cfec74706.jpg)
Для нижнего крепления конечностей использовались маленькие подшипники, снятые с японских шаговых двигателей (разборка старых японских принтеров) и установленные в металлическое крепление. Для максимально надежного контакта использовался клей Loctite 480. Для небольшого зазора между подшипником и нижней частью каркаса использовалась металлическая шайба. Винт крепления М5:
Конечность и крепление соединены между собой по типу струбцины. Так было проще реализовать и позволило немного варьировать при выставлении соосности между валом сервопривода и подшипником:
Общий конструктив одной конечности приобрел следующий вид:
Для связи манипулятора с ПК использовался Bluetooth-модуль HC-05 и Bluetooth-адаптер Class 1. Для передачи видео использовалась самая простая китайская беспроводная аналоговая камера 2.4 GHz с приемником, подключенным к ПК через USB ТВ-тюнер EasyCAP. Разрешение изображения 720x576. Для управления манипулятором был приобретен беспроводной геймпад SpeedLink STRIKE FX.
После распайки питающих проводников с разъемами все провода были сгруппированы и зафиксированы стяжками. Провода от сервоприводов были обтянуты нейлоновой сеткой. Для питания камеры использовался преобразователь напряжения на 9В. с LC-фильтром из подручных средств, что позволило практически полностью избавиться от наводимых помех.
Для крепления аккумулятора (и всей управляющей электроники, крепящейся к нему) к корпусу манипулятора была организована алюминиевая скоба.
Ниже приведена фотография фронтальной стороны манипулятора:
С тыльной стороны манипулятора располагаются разъемы включения и зарядки аккумулятора:
Заряд аккумулятора производится внешним контроллером iMAX B6, установленным в сбалансированный режим заряда, и блоком питания RXN-305D:
После прошивки контроллера, установки всех необходимых модулей и калибровки конечностей манипулятор приобрел окончательный вид, приведенный ниже:
![image](https://habrastorage.org/files/de0/d0e/abb/de0d0eabb7a94a5e94869b38b233537d.jpg)
Конечный вес манипулятора составил ~ 3кг. Для поворота камера была установлена на сервопривод MG995. Время работы от одного заряда аккумулятора ~ 40 минут. Видеосигнал свободно пробивает 3-4 железобетонные стены. Дальность связи на открытом пространстве ~ 30 метров.
Программное обеспечение для ПК было разработано в Microsoft Visual Studio 2008 и представляет собой функционал управления, калибровки и отображения видеоданных. Программа позволяет управлять как отдельно взятым сервоприводом, так и группой – суставами.
![image](https://habrastorage.org/files/2a3/ca4/c91/2a3ca4c91c804a25a7562adb00c127b8.jpg)
Все используемые в алгоритмах параметры выведены на графический интерфейс. Предусмотрено сохранение/загрузка данных калибровки для каждой конечности. Для получения видеоданных с ТВ-тюнера использовался DirectShow (попытки получить картинку по средствам OpenCV не увенчались успехом). Так же была необходима установка DXSDK_Jun10, и подключение к проекту библиотеки работы с графикой gdiplus. Виртуальный COM-порт, реализованный через Bluetooth, адекватно заработал с китайским Bluetooth-адаптером лишь при помощи библиотеки SerialGate.dll (вероятнее всего проблема в драйверах или адаптере, но экспериментировать с другими адаптерами/драйверами не стал). Для работы с геймпадом (HID-устройством) были подключены библиотеки hid.lib, hidpi.h, hidsdi.h, hidusage.h.
![image](https://habrastorage.org/files/6c8/81c/06b/6c881c06b47f481a8229effed68a2bf9.jpeg)
Для определения значений, используемых клавишами геймпада, был реализован дополнительный программный модуль:
![image](https://habrastorage.org/files/0ee/976/9af/0ee9769aff2f45279f72b2dad8bbf7f9.jpg)
Ниже приведено видео первых передвижений манипулятора и дальнейшей его калибровки с оптимизацией алгоритма и уменьшением задержек:
После небольших доработок конструктива и программы управления конечная реализация устройства приведена в следующем видео:
Примерная стоимость всего комплекта ~400$.
В заключении, хотелось бы добавить, что проведя вышеописанные этапы разработки манипулятора, был приобретен определенный опыт и сделаны соответствующие выводы. Как в плане механики передвижения, компоновки, фильтрации питающих напряжений так и в программной части. При создании подобной конструкции в будущем будет учтена и конструкция корпуса, и более легкие материалы, и более быстрые сервоприводы, и более корректные алгоритмы передвижения, и автономные режимы работы с обработкой видеоданных. Но все это при наличии в будущем свободного времени.
Спасибо за уделенное внимание.