Оглавление:

NAIN 1.0 - базовый робот-гуманоид, использующий Arduino: 6 шагов
NAIN 1.0 - базовый робот-гуманоид, использующий Arduino: 6 шагов

Видео: NAIN 1.0 - базовый робот-гуманоид, использующий Arduino: 6 шагов

Видео: NAIN 1.0 - базовый робот-гуманоид, использующий Arduino: 6 шагов
Видео: NAIN 1.0 - The Basic Humanoid Robot using Arduino 2024, Декабрь
Anonim
NAIN 1.0 - базовый робот-гуманоид, использующий Arduino
NAIN 1.0 - базовый робот-гуманоид, использующий Arduino

Nain 1.0 будет иметь в основном 5 съемных модулей -

1) Arm - которым можно управлять с помощью сервоприводов.

2) Колеса - которыми можно управлять с помощью двигателей постоянного тока.

3) Нога - Наин сможет переключаться между колесами или ногами для движения.

4) Голова - ее головой можно управлять для различных кивков.

5) Модуль камеры - который может быть подключен для доступа к распознаванию лиц.

Наряду с этим NAIN сможет разговаривать и взаимодействовать с пользователями и может показывать вам время по встроенным часам. У него будет беспроводное управление с помощью Wi-Fi / Bluetooth.

Шаг 1. Необходимые компоненты

Необходимые компоненты
Необходимые компоненты
Необходимые компоненты
Необходимые компоненты
Необходимые компоненты
Необходимые компоненты
  1. Серводвигатели -4
  2. Ардуино Мега - 1
  3. Малина Пи - 1
  4. USB-камера -1
  5. Спикер -1
  6. Двигатели постоянного тока -2
  7. L293D -1
  8. Аккумулятор - 1
  9. Колеса -2
  10. Колеса - 2 шт.

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

Шаг 2: Строение тела

Конструкция кузова
Конструкция кузова

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

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

Снизу прикрепите шестигранную деревянную основу.

Под деревянным основанием прикрепите двигатели постоянного тока и колеса, как мы делаем с любым роботом-повторителем линии.

Интересно, что добавьте два поворотных колеса - одно спереди, а другое сзади.

Шаг 3. Подключение и кодирование

Электромонтаж и кодирование
Электромонтаж и кодирование
Электромонтаж и кодирование
Электромонтаж и кодирование

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

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

Шаг 4: Raspberry Pi и распознавание изображений

Raspberry Pi и распознавание изображений
Raspberry Pi и распознавание изображений
Raspberry Pi и распознавание изображений
Raspberry Pi и распознавание изображений

Распознавание изображений выполняется с помощью USB-камеры и Raspberry Pi.

Для этого вам нужно будет установить библиотеку OPEN CV на свой Pi.

Вы можете сделать это здесь -

Затем вам нужно будет выполнить распознавание изображений с помощью каскада хаара.

Вы можете сделать это отсюда -

Изучив приведенную выше ссылку и следуя ей, я внес некоторые изменения в окончательный код, который я использовал, который я вставляю ниже -

ГЕНЕРАТОР НАБОРА ДАННЫХ:

importcv2

cam = cv2. VideoCapture (0)

детектор = cv2. CascadeClassifier ('Классификаторы / face.xml')

я = 0

смещение = 50

name = raw_input ('введите свой идентификатор')

в то время как True:

ret, im = cam.read ()

серый = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)

Faces = Detect.detectMultiScale (серый, scaleFactor = 1.2, minNeighbors = 5, minSize = (100, 100), flags = cv2. CASCADE_SCALE_IMAGE)

для (x, y, w, h) в гранях:

я = я + 1

cv2.imwrite ("dataSet / face." + name + '.' + str (i) + ".jpg", серый [y-смещение: y + h + смещение, x-смещение: x + w + смещение])

cv2.rectangle (im, (x-50, y-50), (x + w + 50, y + h + 50), (225, 0, 0), 2)

cv2.imshow ('im', im [y-смещение: y + h + смещение, x-смещение: x + w + смещение])

если cv2.waitKey (100) & 0xFF == ord ('q'):

перерыв

# прервать, если количество отсчетов больше 20

элиф (я> 20):

перерыв

cam.release ()

cv2.destroyAllWindows ()

Он создаст набор данных ваших фотографий, который будет использоваться для аутентификации.

ТРЕНЕР:

importcv2, ОС

импортировать numpy как np

из PIL импорта изображения

распознаватель = cv2.face.createLBPHFaceRecognizer ()

cascadePath = "Классификаторы / face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

путь = 'набор данных'

def get_images_and_labels (путь):

image_paths = [os.path.join (путь, f) для f в os.listdir (путь)]

# изображения будут содержать изображения лиц

images =

# метки будут содержать метку, назначенную изображению

label =

для image_path в image_paths:

# Прочитать изображение и преобразовать его в оттенки серого

image_pil = Image.open (image_path).convert ('L')

# Преобразовать формат изображения в массив numpy

изображение = np.array (image_pil, 'uint8')

# Получить метку изображения

nbr = int (os.path.split (image_path) [- 1].split (".") [1].replace ("face-", ""))

# nbr = int (''. join (str (ord (c)) для c в nbr))

распечатать номер

# Определить лицо на изображении

Faces = faceCascade.detectMultiScale (изображение)

# Если лицо обнаружено, добавить лицо к изображениям и метку к этикеткам

для (x, y, w, h) в гранях:

images.append (изображение [y: y + h, x: x + w])

label.append (число)

cv2.imshow («Добавление лиц в обучающий набор…», изображение [y: y + h, x: x + w])

cv2.waitKey (10)

# вернуть список изображений и список ярлыков

вернуть изображения, ярлыки

изображения, метки = get_images_and_labels (путь)

cv2.imshow ('тест', изображения [0])

cv2.waitKey (1)

распознаватель.train (изображения, np.array (метки))

распознаватель.save ('трейнер / трейнер.yml')

cv2.destroyAllWindows ()

ДЕТЕКТОР

importcv2

импортировать numpy как np

импорт ОС

с = 0

распознаватель = cv2.face.createLBPHFaceRecognizer ()

распознаватель.load ('trainer / trainer.yml')

cascadePath = "Классификаторы / face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

cam = cv2. VideoCapture (0)

fontface = cv2. FONT_HERSHEY_SIMPLEX

fontscale = 1

fontcolor = (255, 255, 255)

в то время как True:

ret, im = cam.read ()

серый = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)

Faces = faceCascade.detectMultiScale (серый, 1,2, 5)

для (x, y, w, h) в гранях:

cv2.rectangle (im, (x-50, y-50), (x + w + 50, y + h + 50), (225, 0, 0), 2)

Id = распознаватель.predict (серый [y: y + h, x: x + w])

если (Id <70):

если (Id == 1):

Id = "Шашанк"

elif (Id == 2):

если (c == 0):

Id = "Шивам"

с = с + 1

os.system («espeak 'Добро пожаловать в Shivam Access Granted'»)

еще:

Id = "Шивам"

еще:

Id = "Неизвестно"

cv2.putText (im, str (Id), (x, y + h), fontface, fontscale, fontcolor)

cv2.imshow ('им', им)

если cv2.waitKey (10) & 0xFF == ord ('q'):

перерыв

cam.release ()

cv2.destroyAllWindows ()

Шаг 5: ЖК-дисплей и динамик

Я также использовал светодиодный дисплей I2C и динамик.

Светодиод управляется через Arduino Mega, и его код указан в окончательном коде.

Что касается динамика, он подключен к Raspberry Pi и использует утилиту eSpeak.

Вы можете найти его ссылку здесь -

Шаг 6: Заключительные шаги

Соберите все и приготовьтесь к взрыву.

Рекомендуемые: