Mundarija:

NAIN 1.0 - Arduino -dan foydalanadigan asosiy gumanoid robot: 6 qadam
NAIN 1.0 - Arduino -dan foydalanadigan asosiy gumanoid robot: 6 qadam

Video: NAIN 1.0 - Arduino -dan foydalanadigan asosiy gumanoid robot: 6 qadam

Video: NAIN 1.0 - Arduino -dan foydalanadigan asosiy gumanoid robot: 6 qadam
Video: NAIN 1.0 - The Basic Humanoid Robot using Arduino 2024, Noyabr
Anonim
NAIN 1.0 - Arduino -dan foydalanadigan asosiy gumanoid robot
NAIN 1.0 - Arduino -dan foydalanadigan asosiy gumanoid robot

Nain 1.0 asosan 5 ta ajratiladigan modulga ega bo'ladi.

1) qo'l - servo orqali boshqarilishi mumkin.

2) g'ildiraklar - ularni doimiy dvigatellar yordamida boshqarish mumkin.

3) Oyoq - Nain harakatlanish uchun g'ildirak yoki oyoq o'rtasida almasha oladi.

4) Bosh - Uning boshini turli xil tugunlar uchun boshqarish mumkin.

5) Kamera moduli- yuzni tanib olish uchun interfeysli.

Shu bilan birga, NAIN foydalanuvchilar bilan gaplasha oladi va ular bilan muloqot qila oladi va o'z vaqtini sizga o'rnatilgan soat orqali ko'rsatib beradi. U Wi-Fi /Bluetooth yordamida simsiz boshqaruvga ega bo'ladi.

1 -qadam: kerakli komponentlar

Kerakli komponentlar
Kerakli komponentlar
Kerakli komponentlar
Kerakli komponentlar
Kerakli komponentlar
Kerakli komponentlar
  1. Servo motorlar -4
  2. Arduino Mega - 1
  3. Raspberry Pi - 1 dona
  4. Usb kamera -1
  5. Karnay -1
  6. DC motorlar -2
  7. L293D -1
  8. Batareya to'plami - 1
  9. G'ildiraklar -2
  10. Kastor g'ildiraklari - 2

Shu bilan bir qatorda, tanani yasash uchun alyuminiy to'rtburchaklar chiziqlar va vintlar va yong'oqlar ularga to'g'ri joylashishi kerak bo'ladi.

2 -qadam: tana tuzilishi

Tana tuzilishi
Tana tuzilishi

Tana tuzilishi yengil alyuminiy kvadratchalardan yasalgan bo'lib, uni oson yig'ishga yordam beradi.

Hozircha ularni rasmda ko'rsatilgandek yig'ing, shuningdek, servo dvigatellarning qo'llariga mahkamlanadigan joylarni kesib oling.

Pastki qismidagi olti burchakli yog'och tayanchni mahkamlang.

Yog'och taglik ostiga biz har qanday robot izdoshi kabi doimiy motorlar va g'ildiraklarni joylashtiramiz.

Qizig'i shundaki, ikkita g'ildirak g'ildiragini qo'shing- biri old tomonda, ikkinchisi robotning orqa tomonida.

3 -qadam: simlarni ulash va kodlash

Ulanish va kodlash
Ulanish va kodlash
Ulanish va kodlash
Ulanish va kodlash

Turli modullarni ulash uchun ushbu qismda biriktirilgan kodlarga murojaat qiling.

Birinchidan, biz har bir modulni mustaqil kod yordamida sinab ko'rdik, keyin hammasini bittaga birlashtirdik va bluetooth moduli yordamida g'ildiraklar va qo'llarning harakatini nazorat qildik.

4 -qadam: Raspberry Pi va tasvirni tanib olish

Raspberry Pi va tasvirni aniqlash
Raspberry Pi va tasvirni aniqlash
Raspberry Pi va tasvirni aniqlash
Raspberry Pi va tasvirni aniqlash

Tasvirni aniqlash USB -kamera va Raspberry Pi yordamida amalga oshiriladi.

Buning uchun siz Pi -ga OPEN CV kutubxonasini o'rnatishingiz kerak bo'ladi.

Siz buni shu erdan qilishingiz mumkin-https://github.com/jabelone/OpenCV-for-Pi

Keyin siz haar kaskad yordamida tasvirni tanib olishingiz kerak bo'ladi.

Siz buni bu erdan qilishingiz mumkin -https://thecodacus.com/category/opencv/#. WvsNC4iFPDc

Yuqoridagi havolani o'rganib, uni ta'qib qilgandan so'ng, men oxirgi kodga ba'zi o'zgartirishlar kiritdim, men quyida joylashtiraman -

DATASET JENERATORI:

importcv2

cam = cv2. VideoCapture (0)

detektor = cv2. CascadeClassifier ('Tasniflagichlar/face.xml')

i = 0

ofset = 50

name = raw_input ("identifikatoringizni kiriting")

rost bo'lsa:

ret, im = cam.read ()

kulrang = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)

yuzlar = detector.detectMultiScale (kulrang, scaleFactor = 1.2, minNeighbors = 5, minSize = (100, 100), bayroqlar = cv2. CASCADE_SCALE_IMAGE)

yuzlarida (x, y, w, h) uchun:

i = i+1

cv2.imwrite ("dataSet/face."+name+'.'+str (i)+".jpg", kulrang [y-ofset: y+h+ofset, x-ofset: x+w+ofset])

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

cv2.imshow ('im', im [y-ofset: y+h+ofset, x-ofset: x+w+ofset])

agar cv2.waitKey (100) & 0xFF == ord ('q'):

tanaffus

# tanaffus, agar namuna raqami 20 dan ortiq bo'lsa

elif (i> 20):

tanaffus

cam.release ()

cv2.destroyAllWindows ()

Bu sizning fotosuratlaringizning ma'lumotlar to'plamini yaratadi, ular autentifikatsiya uchun ishlatiladi.

TRENER:

importcv2, os

numpy ni np sifatida import qilish

PIL import rasmidan

tanuvchi = cv2.face.createLBPHFaceRecognizer ()

cascadePath = "Tasniflagichlar/face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

yo'l = "ma'lumotlar to'plami"

def get_images_and_labels (yo'l):

image_paths = [os.path.join (yo'l, f) f uchun os.listdir (yo'l)]

# rasmda yuz tasvirlari bo'ladi

rasmlar =

# tegda rasmga belgilangan yorliq bo'ladi

teglar =

image_paths -da image_path uchun:

# Rasmni o'qing va kul rangga aylantiring

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

# Rasm formatini numpy qatoriga aylantiring

tasvir = np.array (image_pil, 'uint8')

# Rasm yorlig'ini oling

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

#nbr = int (''. join (str (ord (c)) for c in nbr))

nbr chop etish

# Rasmdagi yuzni aniqlang

yuzlar = faceCascade.detectMultiScale (rasm)

# Agar yuz aniqlansa, yuzni tasvirlarga, belgini teglarga qo'shing

yuzlarida (x, y, w, h) uchun:

rasmlar qo'shish (rasm [y: y + h, x: x + w])

labels.append (nbr)

cv2.imshow ("Ta'rif to'plamiga yuzlar qo'shilmoqda …", tasvir [y: y + h, x: x + w])

cv2.waitKey (10)

# rasmlar va teglar ro'yxatini qaytaring

rasmlarni, teglarni qaytarish

rasmlar, teglar = get_images_and_labels (yo'l)

cv2.imshow ('test', rasmlar [0])

cv2.waitKey (1)

tanituvchi.train (rasmlar, np.array (teglar))

tanib oluvchi.saxlash ('murabbiy/murabbiy.yml')

cv2.destroyAllWindows ()

DETEKTOR

importcv2

numpy ni np sifatida import qilish

import qilish os

c = 0

tanuvchi = cv2.face.createLBPHFaceRecognizer ()

tanınuvchi.yuk ('trener/trainer.yml')

cascadePath = "Tasniflagichlar/face.xml"

faceCascade = cv2. CascadeClassifier (cascadePath);

cam = cv2. VideoCapture (0)

fontface = cv2. FONT_HERSHEY_SIMPLEX

shrift o'lchami = 1

fontcolor = (255, 255, 255)

rost bo'lsa:

ret, im = cam.read ()

kulrang = cv2.cvtColor (im, cv2. COLOR_BGR2GRAY)

yuzlar = faceCascade.detectMultiScale (kulrang, 1,2, 5)

yuzlarida (x, y, w, h) uchun:

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

Id = tanınuvchi.bashorat qilish (kulrang [y: y+h, x: x+w])

agar (Id <70):

agar (Id == 1):

Id = "Shashank"

elif (Id == 2):

agar (c == 0):

Id = "Shivam"

c = c+1

os.system ("xush kelibsiz Shivamga ruxsat beriladi")

boshqa:

Id = "Shivam"

boshqa:

Id = "Noma'lum"

cv2.putText (im, str (Id), (x, y+h), shrift yuzasi, shrift o'lchami, shrift rangi)

cv2.imshow ("im", im)

agar cv2.waitKey (10) & 0xFF == ord ('q'):

tanaffus

cam.release ()

cv2.destroyAllWindows ()

5 -qadam: LCD va karnay

Men I2C LED displeyi va karnaydan ham foydalanganman.

LED Arduino Mega orqali boshqariladi va uning kodi oxirgi kodda berilgan.

Karnay uchun u Raspberry Pi bilan bog'langan va eSpeak Utility dasturidan foydalanadi.

Siz uning havolasini bu erda topishingiz mumkin-https://www.dexterindustries.com/howto/make-your-raspberry-pi-speak/

6 -qadam: Yakuniy qadamlar

Hammasini yig'ing va portlashga tayyorlaning.

Tavsiya: