Введение
Мы привыкли считать, что человек – венец творения. Стоя на верхней ступени эволюции, он приспособился использовать природные ресурсы для своих целей, и вот пещерный охотник, который недавно ставил капкан для мамонта, уже исследует космос.
Но чем шире размах – тем больше требуется ресурсов. Со временем человечество стало поручать рутинную и тяжелую работу компьютерным алгоритмам. Сегодня применение роботов в современном мире уже никого не удивляет.
Робот — это кибернетическая система, способная выполнять операции, относящиеся к физической и умственной деятельности человека. Четвероногий робот компактен, мобилен, способен выполнять широкий спектр операций и передвигаться в условиях пересечённой местности, проще в создании (относительно человекоподобного), а благодаря наличию четырёх ног он устойчив к опрокидыванию или падению.
Актуальность.В двадцать первом веке робототехника используется во всех видах промышленности, строительства, быта, авиации, особенно в экстремальных сферах деятельности человечества таких, как военная, космическая и подводная. Не так давно в нашей жизни появились роботы способные помогать человеку со сложными, рутинными, опасными и даже невозможными операциями. В частности, наша конструкция может совершить такие функции как:
Проверка опасных зон с риском облучения радиацией
Проверка на наличие утечек газа
Наблюдение за территорией
Перенос относительно нетяжёлых вещей
Документирование
Разминирование
Цель работы: сконструировать и создать четвероногого робота на базе Orange pi способного самостоятельно передвигаться по команде оператора и определять препятствия перед собой.
Задачи:
Печать модели на 3D принтере
Создание Аппаратной части
Итоговая сборка прототипа
Программирование прототипа
Методы исследования: При Работе над проектом мы использовали: сбор материала, моделирование, конструирование, эксперимент, анализ, метод технического проектирования
Для создания нашего робота мы проанализировали множество вариантов конструкций четвероногих роботов и на их основе создали свою индивидуальную конструкцию.
Для данного проекта была выбрана программа Autodesk 3Ds Max. Итак, что же она умеет? В первую очередь следует перечислить основные возможности и особенности данного пакета. А именно:
Основная функция программы – создание и редактирование 3D графики. Остальные опции предназначены для дополнения созданных объектов и доведения их до реалистичного внешнего вида. Программа оснащена огромным количеством разнообразных модификаторов, инструментов для работы с моделями. 3Ds Max предлагает такие типы проектирования трехмерных объектов:
Моделирование на основе примитивов. 3Ds Max содержит встроенную библиотеку стандартных объектов, так называемых примитивов. Во многих случаях создание моделей начинается именно с них, ведь к таким примитивам применимы разнообразные модификаторы;
Полигональное моделирование. Самый распространенный вид 3D-моделирования, встречающийся во многих пакетах трехмерной графики. Может использоваться для разработки моделей различной сложности;
Autodesk 3Ds Max – это действительно мощная программа для визуализации. Приложение предоставляет возможность гибкого управления настройками, включая экспозицию, глубину резкости, и многое другое.
Окно Material Editor (редактор материалов) в 3Ds Max реализовано по нодовому принципу, т.е. каждая функция вынесена в отдельное диалоговое окно, за счет чего управлять материалами легко и удобно. В числе визуализаторов для программы такие модули, как Arnold, V-Ray, Mental Ray, RenderMan, FinalRender, Luxrender и многие другие.
Анимация в 3D’s Max реализована очень качественно. Анимации поддаются как целые объекты, так и отдельные их элементы. Присутствуют эффекты движения частиц (огонь, дым, брызги, снег), жидкостные эффекты. Также есть возможность детального моделирования траекторий движения объектов. Пользователь вплоть до малейших перемещений определяет путь передвижения моделей. Вдобавок ко всему, инструменты анимации можно самостоятельно создавать и редактировать, а с их помощью формировать новые контроллеры анимации в среде создания графов. Помимо прочего программа предлагает возможность видеомонтажа анимационных сцен и множество фильтров изображений.
После выбора конструкции робота была поставлена задача спроектировать 3d модель для последующей печати на 3d принтере. Для этой задачи идеально подходит программа 3d’s Max, т.к. имеет обширный список функций, а также данная программа проста в использовании. В 3d’s Max были созданы:
Задние и передние конечности:
Лицевая часть:
Плечевой сустав:
Основной корпус:
Камера:
Целостная модель:
Глава 2. Печать модели на 3D принтере
2.1 Программа для 3D печати - Cura 3D
Для печати готовой модели была выбрана программа Cura 3D.
Cura 3D — это программа-слайсер для 3D–принтеров, которая берет 3D–модель и нарезает ее (slice) на слои, чтобы получить файл, известный как G-Code, в котором содержатся коды, которые понимает 3D–принтер.
Существует три основных этапа подготовки файлов для 3D–печати.
Экспорт 3D–файлов. После того как вы создали модель, ее нужно экспортировать либо в STL-, либо в OBJ-файл. Эти форматы понимает Cura 3D. Они отличаются от форматов приложений для 3D–моделирования, поскольку описывают только конечную геометрию, без индивидуальных параметров и редактируемого содержания.
Экспорт файлов послойной нарезки. После этого файл STL или OBJ может быть импортирован в Cura 3D, где он нарезается и преобразовывается в послойную структуру, называемую G-Code, являющийся по сути просто текстовым документом, содержащим список команд для 3D–принтера, которые принтер читает и выполняет: это температура хот-энда, такое-то перемещение влево, такое-то перемещение вправо и т.д.
2.2 3D Принтер и выбор пластика:
3D модель мы печатали на принтере Geetech A10M, т.к. он обладает рядом преимуществ таких как:
1. Смешанная цветная печать с двойным экструдером
2. 220 * 220 * 260 мм размер печати
3. С детектором накаливания
4. Высокоадгезивная строительная платформа
5. Панель управления с открытым исходным кодом GT2560
6. Модульная конструкция для легкой сборки
7. 360 ° дизайн вентиляции, увеличивает рассеивание тепла
8. V-образные рельсы и колеса на каждой оси
9. Точность печати 0.1мм
Фото принтера:
Выбор пластика: Для печати мы выбрали пластик двух видов PLA и ABS, т.к. это самые доступные виды пластика.
Глава 3. Электронные комплектующие
Помимо 3д печати нам нужно было чтобы наша модель двигалась, для этого мы установили в неё электронные комплектующие представленные ниже.
3.1 Orange pi - это микрокомпьютер, состоящий всего из одной платы, но по своим характеристикам, способный тягаться с полноценными компьютерами. В нашем роботе управляет серводвигателями, также позволяет дистанционно осуществлять управление
Процессор: Allwinner H5 Quad-core 64-bit Cortex-A53 H.265
Графический процессор: Mali450
ОЗУ: 1 ГБ DDR3
ПЗУ: microSD (до 64 ГБ)Б)
Ethernet: 10/100/1000Mbps Ethernet
Видео вход: 1 x CSI входной разъем камеры:
Обладает 40-пинами для подключения любых других устройств.
3.2 Сервопривод MG996R Улучшенная версия сервопривода MG995. Часто используется для установки на радиоуправляемые модели самолётов и планеров. По сравнению с предыдущей моделью обладает повышенным крутящим моментом при стандартном напряжении в 4,8 - 7,2 В. Является виброустойчивым. Именно благодаря сервоприводам наш робот может двигаться, ходить.
Вес: 55 г
Усилие: 10 кг/см
Скорость: 0.2 с/60о (при 4.8 V)
Рабочее напряжение: 4.8 - 7.2 V
Рабочая температура: 0 - 55оС
Размеры: 40.7 x 19.7 x 42.9 мм
Разъём: JR (подходит к JR и Futaba)
Угол поворота: 180 градусов
3.3 Модуль PCA9685 Является 16-канальным ШИМ контроллером с управлением через I²C шину с помощью которого можно управлять 16 сервоприводами. Он позволяет используя лишь I2C шину Orange Pi управлять 12 сервоприводами.
► Напряжения питания контроллера: 3.3 или 5 В;
► Питание сервоприводов: до 5-6 В;
► Частота ШИМ: 40-1000 Гц;
► Возможность подключения 16 сервоприводов;
► Возможность подключения до 62 устройств к одной шине;
► Размер платы: 66 х 25 мм;
Глава 4. Итоговая сборка
После печати модели на 3D принтере была произведена общая сборка устройства, внутрь корпуса были вмонтированы электронные модули, в голову была вмонтирована веб-камера.
Глава 5. Программирование
Была написана программа на языке программирования python специально для микрокомпьютера orange pc, ниже представлена часть программы.
from enum import Enum
from time import sleep
from leg import Leg
from leg import LegName
import smbus
import PCA9685
import ServoPCA9685
import threading
class DogError(Exception):
def __init__(self, message):
self.message = message
pass
class Dog:
def __init__(self):
self.legs = {
LegName.FORWARD_LEFT :None,
LegName.FORWARD_RIGHT :None,
LegName.BACKWARD_LEFT :None,
LegName.BACKWARD_RIGHT:None
}
pass
def configure_forward_left_leg(self, pca, channelKnee, channelElbow, channelShoulder):
leg_name = LegName.FORWARD_LEFT
reverse = False
self.legs[leg_name]=Leg(pca,channelKnee, channelElbow, channelShoulder, reverse, leg_name)
pass
def configure_forward_right_leg(self, pca, channelKnee, channelElbow, channelShoulder):
leg_name = LegName.FORWARD_RIGHT
reverse = True
self.legs[leg_name]=Leg(pca,channelKnee, channelElbow, channelShoulder, reverse, leg_name)
pass
def configure_backward_left_leg(self, pca, channelKnee, channelElbow, channelShoulder):
leg_name = LegName.BACKWARD_LEFT
reverse = False
self.legs[leg_name]=Leg(pca,channelKnee, channelElbow, channelShoulder, reverse, leg_name)
pass
def configure_backward_right_leg(self, pca, channelKnee, channelElbow, channelShoulder):
leg_name = LegName.BACKWARD_RIGHT
reverse = True
self.legs[leg_name]=Leg(pca,channelKnee, channelElbow, channelShoulder, reverse, leg_name)
pass
def is_inited(self):
return self.legs[LegName.FORWARD_LEFT] != None and self.legs[LegName.FORWARD_RIGHT] != None and self.legs[LegName.BACKWARD_LEFT] != None and self.legs[LegName.BACKWARD_RIGHT] != None
def get_leg_forward_left(self):
return self.legs[LegName.FORWARD_LEFT]
def get_leg_forward_right(self):
return self.legs[LegName.FORWARD_RIGHT]
def get_leg_backward_left(self):
return self.legs[LegName.BACKWARD_LEFT]
def get_leg_backward_right(self):
return self.legs[LegName.BACKWARD_RIGHT]
def start(self):
if not self.is_inited():
raise DogError('Legs havent initialised')
leg_forward_left = self.get_leg_forward_left()
leg_forward_right = self.get_leg_forward_right()
leg_backward_left = self.get_leg_backward_left()
leg_backward_right = self.get_leg_backward_right()
threading.Thread(target = leg_forward_left.main_thread).start()
threading.Thread(target = leg_forward_right.main_thread).start()
threading.Thread(target = leg_backward_left.main_thread).start()
threading.Thread(target = leg_backward_right.main_thread).start()
def walk(self):
leg_forward_left = self.get_leg_forward_left()
leg_forward_right = self.get_leg_forward_right()
leg_backward_left = self.get_leg_backward_left()
leg_backward_right = self.get_leg_backward_right()
leg_forward_right.set_speeds(5,2,1)
leg_backward_left.set_speeds(5,2,1)
leg_forward_left.set_speeds(5,2,1)
leg_backward_right.set_speeds(5,2,1)
time_delay = 0.3
while True:
#elbow
elbowForwardAngle = -40
elbowBackAngle = -60
#knee
kneeBackwardAngle = 70
kneeForwardAngle = 90
leg_forward_right.set_angles(kneeForwardAngle, elbowForwardAngle, 0)
leg_backward_left.set_angles(kneeForwardAngle, elbowForwardAngle, 0)
leg_forward_left.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
leg_backward_right.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
sleep(time_delay)
leg_forward_right.set_angles(kneeBackwardAngle, elbowForwardAngle, 0)
leg_backward_left.set_angles(kneeBackwardAngle, elbowForwardAngle, 0)
leg_forward_left.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
leg_backward_right.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
sleep(time_delay)
leg_forward_right.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
leg_backward_left.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
leg_forward_left.set_angles(kneeForwardAngle, elbowForwardAngle, 0)
leg_backward_right.set_angles(kneeForwardAngle, elbowForwardAngle, 0)
sleep(time_delay)
leg_forward_right.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
leg_backward_left.set_angles(kneeBackwardAngle, elbowBackAngle, 0)
leg_forward_left.set_angles(kneeBackwardAngle, elbowForwardAngle, 0)
leg_backward_right.set_angles(kneeBackwardAngle, elbowForwardAngle, 0)
sleep(time_delay)
i2cBus = smbus.SMBus(0)
pca9685 = PCA9685.PCA9685(i2cBus)
dog = Dog()
dog.configure_forward_left_leg(pca9685, PCA9685.CHANNEL00,PCA9685.CHANNEL01,PCA9685.CHANNEL02)
sleep(0.2)
dog.configure_forward_right_leg(pca9685, PCA9685.CHANNEL03,PCA9685.CHANNEL04,PCA9685.CHANNEL05)
sleep(0.2)
dog.configure_backward_left_leg(pca9685,PCA9685.CHANNEL09,PCA9685.CHANNEL10,PCA9685.CHANNEL11)
sleep(0.2)
dog.configure_backward_right_leg(pca9685,PCA9685.CHANNEL06,PCA9685.CHANNEL07,PCA9685.CHANNEL08)
sleep(0.2)
dog.start()
sleep(0.2)
dog.walk()
Глава 6. Выводы
В ходе работы был сконструирован и создан четвероногий робот на базе Orange pi способный самостоятельно передвигаться по команде оператора и определять препятствия перед собой.
Так же были достигнуты поставленные задачи:
Был создан прототип частей модели в программе «3D's MAX»
Модель была напечатана на 3D принтере
Была создана собственная сборка электронных компонентов для данного проекта
Итоговая сборка прототипа
Была написана программа
В перспективе мы хотим добавить нашему проекту компьютерное зрение, с возможностью определять людей и препятствия перед собой, корректируя при этом своё движение, также мы доработаем управляющую роботом программу, и наладим удобное и простое дистанционное управление.
Список литературы
https://www.raspberrypi.org/blog/mini-raspberry-pi-boston-dynamics-inspired-robot/
https://www.bostondynamics.com
https://ru.wikipedia.org/wiki/Робот
https://3ddevice.com.ua/blog/reviews/obzor-3ds-max/
https://github.com