10 июня в 16:03

Hexapod-робот под управлением ROS из песочницы



Робот гексапод — это платформа, использующая для передвижения шесть ног. После просмотра множества видео в интернете, стало ясно, что очень интересно наблюдать за передвижением подобных роботов. И тут возникло желание сделать что-то похожее, но с одноплатным компьютером BeagleBone Black (далее BBB) на борту, потому что подобных проектов еще не было. Информацию о таких роботах было найти непросто, особенно, что касается программной составляющей. Некоторое время было непонятно с чего начинать, но вскоре было решено начать с изготовления конструктива робота — шасси и электронной составляющей, а затем заняться программированием того, что получилось.

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

Выбор «железа»


Как отмечено выше, мозгом системы стал BeagleBone Black:



Также BBB поддерживает Ubuntu, но с ядром для ARM архитектуры.

Экспериментальный режим, в котором пока работает ROS для ARM, на процесс работы никак не повлиял, так как были использованы инструменты, стабильно работающие на linux-arm.

Следующая важная часть — это серво-контроллер. BBB обладает несколькими каналами PWM, но их явно не достаточно для 18ти сервоприводов. К тому же управление PWM излишне будет нагружать процессор. Логичнее использовать готовый серво-контроллер с управлением через какой-нибудь интерфейс. Выбор пал на подходящий Mini Maestro 18-Channel USB Servo Controller:



Этот контроллер обладает 18ю каналами для серво, имеет интерфейс UART и USB. Управляется он через «свой» протокол, в который входят установки целевого угла сервопривода, а также его скорости и ускорения, кроме этого обладает удобными средствами калибровки в графической оболочке.

Но быстро подключить Mini Maestro к BBB не получится, так как уровни UART интерфейса у них различные: 5 V и 3.3 V. Выходом стало использование дополнительного устройства — конвертера логических уровней, которой преобразует 3.3 V в 5 V и обратно. Такая штука пришла со Sparkfaun.com. Это BOB-08745:



Теперь можно без проблем соединить BBB и контроллер, чтобы они общались по UARTу.

Для будущих исследований захотелось IMU, чтобы робот хоть как-то ощущал себя в пространстве. IMU с акселерометром, магнитометром и гироскопом так же заказана на Pololu:



Это маленькая плата MinIMU-9 v2 с двумя чипами L3GD20 и LSM303DLHC, связывающиеся с периферией по интерфейсу I2C. MiniIMU способна работать от 2.5V до 5.5V, поэтому никаких конвертеров не понадобилось.

На многих видео гексаподы управлялись геймпадом от различных приставок. И не зря. Обладающий множеством кнопок и двумя «аналоговыми» ручками, джойстик становится удобным устройством управления. В ROS нашелся драйвер для стандартного джойстика и, чтобы избежать проблем с подключением, было решено приобрести оригинальный PS3 Dual Shock 3:



Для подключения по Bluetooth, очевидно, необходим был USB адаптер. В итоге их у меня оказалось два, потому что один из них не захотел работать с имеющимся драйвером (об этом далее). А MobileData UBT-206 — заработал.

Для связи BBB с настольным компьютером используется протокол SSH, который в свою очередь использует, к примеру, Ethernet, Ethernet-over-USB (технология, позволяющая эмулировать ethernet-сеть через USB) или Wi-Fi. Подключать каждый раз провода не очень удобно и чтобы избавиться от этого был добавлен еще USB Wi-Fi адаптер. Ознакомившись, какой лучше адаптер подойдет для BBB, стало ясно, что ядро arm-linux поддерживает драйвер rtl8192cu на базе которого работает широкий круг устройств. Был выбран компактный NetGear WNA1000M (на картинке вместе с MobileData UBT-206):




Хотя многие рекомендуют использовать адаптеры с внешней антенной, этот работает довольно стабильно.

Ну и чтобы расширить всего один USB Host разъем BBB, необходим USB концентратор. Понравился вот этот — MobileData HDH-700, потому что у него есть кнопочки-выключатели на каждое из четырех устройств:



Следующим пунктом идет элементы питания всех бортовых устройств. Аккумулятор — Li-Po 2200mAh, состоящий из двух банок. Вместе с ним два стабилизатора напряжения преобразуют напряжение аккумулятора в необходимые 5V (для BBB и серво-контроллера) и 6V (для сервоприводов). Также на аккумулятор установлен сигнализатор низкого заряда, который пронзительно пищит, когда напряжение батареи падает до минимума.



Выбор конструкции и сервоприводов


Существует множество конструкций гексаподов, сделанных из различных материалов. Не буду здесь выкладывать фото, так как их легко найти в интернете. Классический вариант состоит из трех приводов на каждую ногу, что дает достаточную степень свободы. Конечно, можно обойтись и двумя приводами — но движения при этом станут более «дерганными».

Различны материалы и технологии изготовления частей подвески. Это может быть печать на 3d принтере или лазерная резка из листов пластика, фанеры или металла. Так как 3d принтера под рукой не было и прочность напечатанных деталей оставляет желать лучшего, была выбрана конструкция из металла, а именно из алюминия и дюралюминия. Тем более на работе у меня был доступ к фрезерному станку с ЧПУ, поэтому детали было решено изготовить из листов металла путем фрезеровки.

Главным примером, по образу которого создана собственная конструкцию, является Lynxmotion Phoenix:



В создании также очень помогла модель с GrabCAD.

Одной из главных частей робота являются сервоприводы. Они должны обладать достаточным крутящим моментов и, для надежности, редуктор стоит выбрать из металла. Такие сервы от известных фирм Hitec и Futaba стоят порядка $20-$30. Поэтому, вместо «не дешевых» сервоприводов Hitec HS-645/485MG были заказаны китайские, которые в два раза дешевле Turnigy TGY-S901D:



При питании в 6V они способны справляться с максимальной нагрузкой в 12.5 кг/см, чего с запасом хватало для робота с расчетной массой в 2 кг. А запас в китайских сервах необходим, так как качество у них оставляет желать лучшего. Некоторые из них работают с посторонними звуками с самого начала. Также они имеют довольно большой люфт и кривые оси. Но за 10$ за штуку — это приемлемо.

К сервам был куплен алюминиевый дисковый крепеж на вал для повышения прочности и упругости конструкции:



Создание 3d модели в SolidWorks и изготовление деталей


Таким образом, определившись с базовым набором комплектующих деталей, я начал создавать 3d чертеж, используя SolidWorks. Вот рендер того, что получилось (все винтики прорисовывать не стал):



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



Развертка этих деталей получена с помощью специального инструмента в SolidWorks. Вырезаны они из листа алюминия 2 мм, снятого с корпуса ненужного прибора. На нем присутствовала гибка, поэтому марка алюминия видимо была подходящая для этого. Проблема согнуть все детали одинаково и ровно была решена с помощью специальной приспособы, тисков и молотка. Получилось даже лучше, чем я ожидал от ручного способа изготовления.



Следующий пункт — это втулки на противоположной от вала стороне сервы. Через эти втулки сервоприводы крепится в нижней части рамы.



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



И последнее, на чем стоит остановиться — детали на окончаниях ног.



Они напечатаны на 3d принтере из ABS пластика. Далее в их круглые пазы вклеиваются резиновые ножки для приборных корпусов. В итоге получается завершенная деталь, способствующая увеличению трения контакта с поверхностью. Без них, соотношение инерции робота и «цепкости» лапок, ведет к проскальзыванию последних при ходьбе и других действиях на любой ровной поверхности.



Остальные плоские части изготовлены из дюралюминия толщиной 2.2 мм.



Сборка робота


Сборка происходила в несколько этапов. Это связано с отладкой его отдельных частей. Сначала были собраны только шасси с сервоконтроллером, а управление осуществлялось с настольного компьютера amd64 через USB. Затем появился BBB с хабом, и в последнюю очередь — батарея со стабилизаторами и IMU.

На фото — различные этапы сборки и конечный результат.






BeagleBone


На BBB установлена система Ubuntu 13.04 из готового образа. Сегодня уже нет доступной для скачивания этой версии дистрибутива, а есть только последняя и LTS. Версия ядра 3.8.

eMMC прошивалась через microSD карту. Самый простой способ записи образа на флешку — это с помощью программы Image Writer для Windows. Инструкции по прошивке можно найти здесь.

Теперь про инициализацию UART в BBB. Это делается через Device Tree Compiler (DTC) и подробнее об этом можно узнать здесь. Установить на BBB можно таким способом:

wget -c https://raw.github.com/RobertCNelson/tools/master/pkgs/dtc.sh chmod +x dtc.sh ./dtc.sh

Взято отсюда.

После того как Rx и Tx UART появились на пинах P9_11 и P9_13 (в случае с uart5), можно передавать данные. А для того, чтобы менять битрейт используется утилита stty. Запускается она через скрипт, перед началом работы с серво-контроллером:

stty -F /dev/ttyO4 cs8 115200

На контроллере скорость устанавливается через Maestro Control Center.

Чтобы UART «заводился» каждый раз при старте системы, стоит добавить строчку
sudo bash -c "echo enable-uart5 > /sys/devices/bone_capemgr.*/slots"
в rc.local.

Как было описано выше, IMU использует интерфейс I2C. I2C на BBB работает по умолчанию, никаких дополнительных действий для его запуска не требуется. Но прежде чем писать узел ROS для IMU, была полезна проверка правильности подключения интерфейса посредствам утилиты i2c-tools для Linux. Разобраться с I2C еще помогло видео.

Большой проблемой оказалось заставить нормально работать джойстик по bluetooth. Подключить его не составило труда — всё в соответствии с описание узла ps3joy и учебником к нему. Только драйвер для джойстика, начиная с версии ядра 3.5, стал получать события с устройства с низкой частотой: порядка 5Гц. Этого недостаточно для нормального управления. О проблеме как раз говорится здесь. Поэтому, перепробовав кучу других драйверов, нашел один рабочий для arm-linux. Это драйвер sixad. Но чтобы он заработал на BBB, его необходимо собрать вручную. Это было сделано для Raspberry PI и подробно описано здесь. При компиляции у меня почему-то возникла ошибка:

error: ... was not declared in this scope

Она разрешилась добавлением хедера unistd.h в каждый исходный файл драйвера.

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

echo "DisablePlugins = input" >> /etc/bluetooth/main.conf

После этого можно было сделать запуск драйвера как демона и свободно подключать джойстик по нажатию кнопки PS3.

USB Wi-Fi работает из коробки. Чтобы он клиентом подключался к роутеру, нужно изменить в /etc/network/interfaces поля:

wpa-ssid "" wpa-psk ""

ROS


Для начала ROS был установлен на настольный компьютер. Версия дистрибутива Hydro Desktop-Full, установилась без проблем на Ubuntu 13.04. На «большом» компьютере удобно заниматься отладкой написанных узлов и кинематической модели в средствах визуализации ROS. Вдобавок, компиляция идет гораздо быстрее, чем на BBB. Поэтому все разрабатывалось на компьютере, а потом только переносилось на BBB и компилировалось там. К сожалению кросс-компиляция для ROS пока является трудной задачей.

Для визуализации существует удобный инструмент — rviz. Он использовался для просмотра получившейся модели и того, как она ведет себя при управлении. Для этого есть joint_state_publisher — пакет содержащий инструменты настройки и изменения положения «суставов» и robot_state_publisher — пакет транслирующий положение робота в tf. Сама модель содержится в URDF файле. В нем описываются все сегменты (links) и их сочленения (joints), а также их взаимное расположение. Для наглядности прикрепляются 3d модели частей в формате STL. Но так как робот содержит повторяющиеся части (ноги), удобно использовать формат XACRO (XML Macros), который затем преобразуется в URDF. Главные преимущества XACRO: наличие макросов, математических операций и констант. Таким образом, можно минимизировать код, описывающий модель робота. На рисунке структура и визуализация модели в rviz.




При написании основных узлов на С++ использовалась IDE Eclipse Kepler. Про конфигурацию Eclipse можно почитать тут. А вообще перед началом стоит ознакомиться с учебником, roscpp и catkin.

Разработка ПО


В этой статье не будет описываться код узлов, будут представлены только их общая структура и назначение. Подробнее про написание кода — в следующей статье.

Итак, общая схема структуры узлов ROS на BBB (в эллипсах — название узлов, в прямоугольниках — название топиков):



joy_node — готовый пакет, позволяет преобразовывать данные из файла стандартного устройства Linux (/dev/input/js) в сообщения «Joy» и транслировать их в топики ROS. Полезным будет посмотреть в tutorial пакета. Почти всегда в них кроются многие ответы на вопросы.

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

crab_leg_kinematics — узел-сервис. Его назначение — решение задачи инверсной кинематики, то есть на основе координат end-effector'а (в моем случае — это кончики ножек) вычислять углы положения суставов (углы сервоприводов). Запрос сервису формируется в виде шести векторов целевого положения кончиков ног, а ответ приходит в виде 18'ти углов сервоприводов. Написан узел с использованием Kinematics and Dynamics Library (KDL), которая интегрирована в ROS. Клиентами узла являются crab_body_kinematics и crab_gait.

crab_body_kinematics — вычисляет векторы положения концов ног на основе модели робота URDF и данных из сообщения, которое содержит желаемые линейные и угловые отклонения рамы от начального положения, а также радиус раскрытия ног. Также реализованы команды подъема из стартового положения (когда робот лежит на раме, а ноги сложены) и возврат в стартовое положение.

crab_gait — узел, генерирующий векторы положения концов ног для реализации двух типов походки. На входе — сообщения, содержащие команды о типе и состоянии походки (идти/стоять) и величины управления: углы курса и рыска и размер шага. Типы походки следующие — tripod и ripple:



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

Управление осуществляется с помощью двух «аналоговых» ручек джойстика: левый — изменение курса при постоянном рыске (перемещение «крабиком»), правый — изменение курса с изменением рыска (передвижение вперед-назад и влево-вправо).

crab_imu — драйвер MinIMU-9, собран из частей Arduino скетча. Содержит алгоритм расчета углов Эйлера на основе данных с MEMS датчиков. Также содержит простой П-регулятор, формирующий воздействия, компенсирующие отклонения по тангажу и крену. Эти воздействия передаются через топик move_body в crab_body_kinematics для задания нужного положения ног.

crab_maestro_controller — последний узел-драйвер для Mini Maestro. На входе у него 18 угловых положений сервоприводов, которые он преобразует в протокол общения сервоконтроллера по UART.

Структурная схема визуализации незначительно отличается от схемы системы робота. В визуализации всё те же узлы, кроме узла crab_maestro_controller, который заменяют узлы crab_joint_publisher, joint_state_publisher, robot_state_publisher и tf.



О последних было написано выше.

crab_joint_publisher — преобразует сообщения предназначенные для контроллера, в сообщения «JointState», которые подаются на вход joint_state_publisher.

Теперь о некоторых этапах разработки с видео.

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



Затем собраны части управления положением и ориентацией тела:



И воплощение этого на настоящем роботе:



После этого запустил всё это на BBB и испытывал узел IMU:



Потом робот пошел ripple походкой, управляемый с джойстика:



И в конце возможности гексапода на сегодняшний день:



Заключение


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

P. S. Исходники проекта на github
+126
40248
389
tuuzdu 12,0

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

+4
32bit_me #
Это пять.
+24
Vokabre #
Не, это шесть.
0
alfedo #
Четсно говоря, сначала прочитал ROS и подумал что гексапод на Микротике =)
+5
alfedo #
Но выглядит очень круто. Можно сделать ходячий хот-спот для дачи.
0
Kpblc #
Я тоже хочу такого!
Было бы крайне интересно узнать во что обошлись комплектующие, будут ли выложены исходники?
+2
tuuzdu #
Исходники прикрепил! Первый раз писал на C++, поэтому критика крайне приветствуется)
Могу примерно сказать общие затраты на робота — это около 20-25 т.р., учитывая, что резка металла и 3д печать обошлись бесплатно.
0
Nashev #
Было б полезно к исходникам приложить ридмишку со ссылкой на эту статью, а из отладочной среды сделать максимально легко устанавливаемый на ББ эмулятор гексопода, для заочного программирования поведения. И конкурс объявить на программу лучшего поведения, самой крутой походки и т.п. Или, вот, адаптивность — habrahabr.ru/post/225845/#comment_7674837

Я б при случае в кружок программирования деткам подсунул бы…
+1
Nashev #
Добавьте с первого упоминания ROS ссылочку на robocraft.ru/tag/ROS/, плиз.
+2
Kwent #
Поздравляю с победой в конкурсе КиберВесна, отличный проект)
+2
tuuzdu #
спасибо!
0
Sleuthhound #
Работа проделана коллосальная, молодец!
+2
WaveCut #
У меня нет слов!

Включился рефлекс «ХОЧУ ТАКОГО ЖЕ»!
+2
tuuzdu #
Да вот стоит щас на полочке… Интересно было делать, а когда он просто есть, как-то пофиг))
+1
Nashev #
сделайте из него 3d-фрезер
+4
koka #
Я тоже ракого собирал — но вот как то не осилил программную часть (
А железо вышло хорошее

Могу если кому то надо поделиться чертежами и схемами.
+2
xxxFeLiXxxx #
Поделитесь, пожалуйста ^_^
+1
koka #
Оки, сформирую подборку и выложу тут ссылку
0
eugenios #
Отлично сделано.
Я сам начал такой же проект, но пока недалеко продвинулся — рисовал круг одной ногой с помощью ардуины.
Кстати, шасси нашел на ибее за 100 долларов от китайцев. Там еще опоры ног у основания — подшипники, а у вас, как я понал, просто втулки.

А вот описанный ROS вселяет надежду на продолжение моего хексапода.

Есть вопрос про точность сервоприводов. На видео с кругом этот самый круг далек от идеального. Когда я такое сделал, он получился такой же, что расстроило немного. Но потом на вашем видео он нормально ходит. Получается, что точность не так влияет или что-то поменялось?
+1
tuuzdu #
Спасибо!
Да, готовые китайские видел, но интересно было самому все изготовить.
Просто втулки, но капролоновые. До сих пор на них выработки не наблюдается.
Точность порядка +-3мм на конце ноги. Это по большей части вызвано люфтом редукторов китайских сервоприводов. Hitec и Futaba уверен будут лучше, но и стоят в 1.5 раза дороже. А при ходьбе неточность компенсируется гибкостью конструкции, поэтому не заметно отрицательного влияния. Программная часть считает с точностью до сотых мм.
0
eugenios #
Хорошие новости.

Я уже купил партию сервоприводов Hitec(HS-485HB) — 6 штук аналоговых, для тестов. Не знаю насколько разные будут аналоговые/цифровые в шестиноге. И хватит ли мощности, они слабее, чем у вас, но зато фирменные.

Буду теперь своего опять допиливать.
+1
Mario_Z #
А при разработке не рассматривался случай потери одной из конечности? Теоретически даже пользуясь пятью оставшимися машина может двигаться. Не обязательно заниматься членовредительством, ногу гексапод может просто поджать в приподнятом состоянии.
0
Vokabre #
Можно даже не поджимать ногу, а просто отключить сервопривод. Даже интереснее.
0
tuuzdu #
О таком даже не задумывался)
Есть идеи брать что-нибудь двумя передними ногами, а идти на 4х. Но пока проект заморожен)
0
Mario_Z #
Четыре конечности это еще интересней, но я подразумевал именно выход из строя произвольной конечности. Можно написать адаптивный код, хотя это будет непросто. Основная проблема для робота это определить, что конечность не функционирует.
0
tuuzdu #
Сейчас нет никакой обратной связи по положению ног. Для таких целей нужны датчики нагрузки на концах ног или приводы с ОС по усилию. Но это уже другой робот будет) На порядок сложнее.
+1
artp #
Можно тензометры поставить и следить за синхронностью нагружания ноги.
0
yrouban #
Можно ли было бы сделать так, чтобы он мог ходить и на спине? Например, если переделать всю ходовую часть, сделав симметричной относительно горизонтальной плоскости.
0
tuuzdu #
Да, можно) На 3:07
www.youtube.com/watch?v=rAeQn5QnyXo
0
DanNsk #
Ого по цене мини маэстро, можно наверное 2*TLC5940 использовать в ряд (я правда пробовал ее только для 16 каналов) и еще 14 каналов останется — сделать хвост и голову.
0
tuuzdu #
Паять решил по минимуму)
А для маэстро еще идет удобная программа для установки скорости, ускорения серв и их калибровки.
–1
Lici #
В чем плюс гексаподов и прочих шагоходов перед другими методами передвижения? Колеса, гусеницы, всякие жгутики, щетки, миллионы еще вариантов — все это почти всегда быстрее и часто еще и проходимость выше. Единственное место, где у гексапода может быть хоть какое-то преимущество это большие сухие и не скользкие камни.
0
vsabadazh #
Да нет, членистоногие могут пройти по любому бездорожью, где колесные/гусеничные сядут на дно. Ну, или практически по любому.
0
vvzvlad #
Где бы такого купить, чтобы не собирать самому.
0
Nashev #
на ибее, говорят, есть
0
eugenios #
Не, я нашел только аллюминиевое шасси.
В статье упоминался www.lynxmotion.com/c-117-phoenix.aspx, на таком же шасси, немного другая электроника, попроще, но он стоит 800 долларов
0
tuuzdu #
Да, на ибее наборы алюминиевых шасси и серв бывают. Целиком с электроникой не видел, ну кроме пластмассовых на пультике.
0
roller #
Мне кажется, или снова взята стандартная библиотека движения гексапода, такая как например в V-REP?
Кстати, почему все используют серво вместо шагового двигателя + екнодера ( на самомо деле понятно почему — из за дешевизны). Ведь стоит только наступить на ногу гексаподу — как серва отломится, в том время как шаговый двигатель просто прокрутится дальше «прогнувшись» под нагрузку?
0
Int_13h #
Стоп-стоп-стоп. А зачем шаговому двигателю энкодер?
0
roller #
В отличии от сервомашинки, шаговый двигатель мало того что крутится на 360 градусов, так еще и не имеет никаких ограничителей. При включении такого гексопода ему надо знать положение своих ног хотя бы, потому что без питания все его ноги буду собраны в рандомную кучу. Да и просто чтобы не вывернуть ноги слишком далеко. Шаговый двигатель имеет возможность проскакивать шаги, под собственным весом робота либо если во что-то упрется. И вообще, человек например постоянно получает обратную связь от своих конечностей и «знает» где они находятся. Так что энкодер + шаговый двигатель представляется мне оптимальным вариантом. Естественно ногу сажать не прямо на вал шаговика а через понижающую шестеренку.
0
DanNsk #
Ну работает же принцип KISS, какой смысл городить огород, если серва — просто и отработано, при сгорании простая замена на аналогичную серву и бот поскакал дальше. Такможно докатиться до SPT5 JetCat и магнитных муфт, что уж мелочиться.
0
tuuzdu #
Инверсная кинематика, геометрия, построение траекторий и динамика движения на базе KDL. В статье есть даже ссылка.
+1
koka #
Как и обещал выше, выкладываю для людей чертежи моего варинта

www.izobot.com/zprojects/constructions/zobot-hexopod-v-2/

Вопросы — велком. Все сделано в Autodesk Inventor
Кому пригодиться буду раз лайкам в карму )

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