Spisu treści:

NAIN 1.0 - podstawowy robot humanoidalny korzystający z Arduino: 6 kroków
NAIN 1.0 - podstawowy robot humanoidalny korzystający z Arduino: 6 kroków

Wideo: NAIN 1.0 - podstawowy robot humanoidalny korzystający z Arduino: 6 kroków

Wideo: NAIN 1.0 - podstawowy robot humanoidalny korzystający z Arduino: 6 kroków
Wideo: This is Ameca, the most advanced life-like robot in the world! 😯🔥 #shorts 2024, Listopad
Anonim
NAIN 1.0 - podstawowy robot humanoidalny wykorzystujący Arduino
NAIN 1.0 - podstawowy robot humanoidalny wykorzystujący Arduino

Nain 1.0 będzie miał w zasadzie 5 odłączanych modułów-

1) Uzbrojenie – którym można sterować za pomocą serw.

2) Koła – którymi można sterować za pomocą silników prądu stałego.

3) Noga – Nain będzie mógł przełączać się między kółkami lub nogami w celu poruszania się.

4) Głowa – Jego głowa może być kontrolowana dla różnych kiwnięć.

5) Moduł kamery - który może być połączony z dostępem do rozpoznawania twarzy.

Wraz z tym NAIN będzie mógł rozmawiać i wchodzić w interakcje z użytkownikami oraz może wyświetlać czas za pomocą wbudowanego zegara. Będzie miał sterowanie bezprzewodowe za pomocą Wi-fi / Bluetooth.

Krok 1: Potrzebne komponenty

Potrzebne komponenty
Potrzebne komponenty
Potrzebne komponenty
Potrzebne komponenty
Potrzebne komponenty
Potrzebne komponenty
  1. Serwosilniki -4
  2. Arduino Mega - 1
  3. Raspberry Pi - 1
  4. Kamera USB -1
  5. Głośnik -1
  6. Silniki prądu stałego -2
  7. L293D -1
  8. Akumulator - 1
  9. Koła -2
  10. Koła samonastawne - 2

Wraz z nimi potrzebne będą aluminiowe listwy kwadratowe do wykonania korpusu oraz śruby i nakrętki do ich prawidłowego dopasowania.

Krok 2: Struktura ciała

Budowa ciała
Budowa ciała

Konstrukcja nadwozia będzie wykonana z lekkich aluminiowych prętów kwadratowych, które ułatwią jej montaż.

Na chwilę obecną zmontuj je tak, jak pokazano na rysunku, a także wytnij odpowiednie miejsca na mocowanie serwomotorów w ramionach.

Przymocuj sześciokątną drewnianą podstawę na dole.

Pod drewnianą podstawą przymocuj silniki prądu stałego i koła, tak jak robimy to w każdym robocie śledzącym linię.

Co ciekawe, dodaj dwa kółka samonastawne – jedno z przodu, a drugie z tyłu robota.

Krok 3: Okablowanie i kodowanie

Okablowanie i kodowanie
Okablowanie i kodowanie
Okablowanie i kodowanie
Okablowanie i kodowanie

Aby okablować różne moduły, zapoznaj się z kodami załączonymi w tej części.

Najpierw przetestowaliśmy każdy moduł za pomocą samodzielnych kodów, a następnie połączyliśmy je wszystkie w jeden i kontrolowaliśmy ruch kół i ramion za pomocą modułu bluetooth.

Krok 4: Raspberry Pi i rozpoznawanie obrazu

Raspberry Pi i rozpoznawanie obrazu
Raspberry Pi i rozpoznawanie obrazu
Raspberry Pi i rozpoznawanie obrazu
Raspberry Pi i rozpoznawanie obrazu

Rozpoznawanie obrazu odbywa się za pomocą kamery USB i Raspberry Pi.

W tym celu musisz zainstalować bibliotekę OPEN CV na swoim Pi.

Możesz to zrobić stąd -

Następnie będziesz musiał wykonać rozpoznawanie obrazu za pomocą kaskady haar.

Możesz to zrobić stąd -

Po przestudiowaniu powyższego linku i podążaniu za nim wprowadziłem pewne zmiany w końcowym kodzie, którego użyłem, a który wklejam poniżej -

GENERATOR ZBIORU DANYCH:

importcv2

krzywka = cv2. VideoCapture(0)

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

i=0

przesunięcie=50

name=raw_input('wprowadź swój identyfikator')

podczas gdy prawda:

ret, im = kamera.odczyt()

szary=cv2.cvtColor(im, cv2. COLOR_BGR2GREY)

face=detector.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(100, 100), flags=cv2. CASCADE_SCALE_IMAGE)

for(x, y, w, h) w ścianach:

i=i+1

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

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

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

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

przerwa

# przerwa, jeśli numer próbki jest większy niż 20

elif (i>20):

przerwa

krzywka.zwolnienie()

cv2.zniszczWszystkieOkna()

Utworzy zbiór danych Twoich zdjęć, który będzie używany do uwierzytelniania.

TRENER:

importcv2, os

importuj numer jako np

z obrazu importu PIL

aparat rozpoznawania = cv2.face.createLBPHAceRecognizer()

cascadePath = "Klasyfikatory/twarz.xml"

faceCascade = cv2. CascadeClassifier(cascadePath);

ścieżka = 'zestaw danych'

def get_images_and_labels(ścieżka):

image_paths = [os.path.join(ścieżka, f) dla f w os.listdir(ścieżka)]

# obrazy będą zawierały obrazy twarzy

obrazy =

# etykiety będzie zawierać etykietę przypisaną do obrazu

etykiety =

dla image_path w image_paths:

# Przeczytaj obraz i przekonwertuj na skalę szarości

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

# Konwertuj format obrazu na numpy array

obraz = np. tablica(obraz_pil, 'uint8')

# Pobierz etykietę obrazu

nbr = int(os.ścieżka.split(ścieżka_obrazu)[-1].split(".")[1].replace("twarz-", ""))

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

drukuj nbr

# Wykryj twarz na obrazie

twarze = twarzCascade.detectMultiScale(obraz)

# Jeśli twarz zostanie wykryta, dołącz ją do zdjęć, a etykietę do etykiet

dla (x, y, w, h) w ścianach:

images.append(obraz[y: y + h, x: x + w])

etykiety.append(nbr)

cv2.imshow("Dodawanie twarzy do zestawu treningowego…", image[y: y + h, x: x + w])

cv2.waitKey(10)

# zwróć listę obrazów i listę etykiet

zwróć zdjęcia, etykiety

obrazy, etykiety = pobierz_obrazy_i_etykiety(ścieżka)

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

cv2.waitKey(1)

rozpoznawanie.pociąg(obrazy, np. tablica (etykiety))

rozpoznanie.save('trener/trener.yml')

cv2.zniszczWszystkieOkna()

DETEKTOR

importcv2

importuj numer jako np

importuj system

c=0

aparat rozpoznawania = cv2.face.createLBPHAceRecognizer()

rozpoznanie.load('trener/trener.yml')

cascadePath = "Klasyfikatory/twarz.xml"

faceCascade = cv2. CascadeClassifier(cascadePath);

krzywka = cv2. VideoCapture(0)

czcionka = cv2. FONT_HERSHEY_SIMPLEX

skala czcionek = 1

kolor czcionki = (255, 255, 255)

podczas gdy prawda:

ret, im = kamera.odczyt()

szary=cv2.cvtColor(im, cv2. COLOR_BGR2GREY)

face=faceCascade.detectMultiScale(szary, 1.2, 5)

for(x, y, w, h) w ścianach:

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

Id = rozpoznawanie.predict(szary[y:y+h, x:x+w])

jeśli (Id<70):

jeśli(Id==1):

Id="Shashank"

elif(Id==2):

jeśli(c==0):

Id="Śiwam"

c=c+1

os.system("Powiedz 'Witamy Shivam przyznano dostęp'")

w przeciwnym razie:

Id="Śiwam"

w przeciwnym razie:

Id="Nieznany"

cv2.putText(im, str(Id), (x, y+h), czcionka, skala czcionki, kolor czcionki)

cv2.imshow('im', im)

jeśli cv2.waitKey(10) & 0xFF==ord('q'):

przerwa

krzywka.zwolnienie()

cv2.zniszczWszystkieOkna()

Krok 5: Wyświetlacz LCD i głośnik

Użyłem również wyświetlacza LED I2C i głośnika.

Dioda jest sterowana za pomocą Arduino Mega, a jej kod podany jest w kodzie końcowym.

W przypadku głośnika jest połączony z Raspberry Pi i korzysta z narzędzia eSpeak Utility.

Możesz znaleźć jego referencje tutaj -

Krok 6: Ostatnie kroki

Złóż wszystko i przygotuj się na wybuch.

Zalecana: