Բովանդակություն:

Գնդակին հետևող ռոբոտ ՝ 8 քայլ
Գնդակին հետևող ռոբոտ ՝ 8 քայլ

Video: Գնդակին հետևող ռոբոտ ՝ 8 քայլ

Video: Գնդակին հետևող ռոբոտ ՝ 8 քայլ
Video: «Աղուէս» դաս 8 - Խաղի օրինակ PING PONG։ Lesson 8 - Game example Ping Pong 2024, Հուլիսի
Anonim
Գնդակին հետևող ռոբոտ
Գնդակին հետևող ռոբոտ
Գնդակին հետևող ռոբոտ
Գնդակին հետևող ռոբոտ
Գնդակին հետևող ռոբոտ
Գնդակին հետևող ռոբոտ

Այսպիսով, այստեղ ես կպատմեմ, թե ինչպես պատրաստել գնդակին հետևող ռոբոտ, որը ռոբոտը նույնականացնելու է գնդակը և հետևում է դրան: Այն հիմնականում վերահսկման ավտոմատացված տեխնիկա է, որը կարող է օգտագործվել ժամանակակից աշխարհում: Այսպիսով, պարզապես եկեք ներս մտնենք և սկսենք կառուցել…

EԱՆՈԹՈԹՅՈՆ. Սա մասի առաջադրանքն է, որը ներկայացվել է Դիկինի համալսարան, ՏՏ դպրոց, SIT-210 Embedded Systems Development:

Պարագաներ

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

Քայլ 1: Ներածություն

Ներածություն
Ներածություն

Այսօրվա հսկողությունն ապահովում է մի հիմնական թերություն, որն այն է, որ այն հիմնված է մարդկանց ներգրավման վրա, որը, ինչպես բոլորս գիտենք, կարող է հեշտությամբ շեղվել, ուստի մեր կարևորագույն նշանակությունն էր գտնել մի համակարգ, որը կարող է ինքնուրույն և շարունակաբար վերահսկել շրջանները: Եվ նաև մենք ցանկանում ենք որոշումներ կայացնելիս բացահայտել տհաճ կամ անցանկալի իրերն ու վտանգները և համապատասխան արձագանքել դրան: Այսպիսով, խելացի համակարգերի և համակարգիչների օգտագործմամբ օբյեկտներին հետևելը էական և կարևոր է ավտոմատացված վերահսկողության հասնելու համար:

Բացօթյա հսկողության ցանկացած համակարգ պետք է կարողանա հետևել իր տեսադաշտում շարժվող օբյեկտներին, դասակարգել այդ օբյեկտները և հայտնաբերել դրանց որոշ գործունեություն: Ես մշակել եմ այս օբյեկտներին իրատեսական սցենարներում հետևելու և դասակարգելու մեթոդ: Առանձին ֆոտոխցիկում օբյեկտներին հետևելը կատարվում է ֆոնային հանումով, որին հաջորդում է տարածաշրջանի համապատասխանությունը: Սա հաշվի է առնում բազմաթիվ հուշումներ, ներառյալ սահմանափակող տուփերի արագությունները, չափերը և հեռավորությունները:

Քայլ 2: Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր

Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր
Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր
Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր
Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր
Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր
Այս նախագծում օգտագործվող նյութեր և փափուկ իրեր

Օգտագործված ապարատային բաղադրիչներ

  • Ազնվամորի Pi (x1)
  • Raspberry Pi Camera Module (x1)
  • Ուլտրաձայնային տվիչ (x3)
  • SparkFun Dual H-Bridge շարժիչով վարորդներ L298 (x1)
  • DC շարժիչ (x1)
  • Հացաթուղթ (x1)
  • Լարերի միացում

Օգտագործված ծրագրակազմ

OpenCV

Ձեռքի գործիքներ:

Պիթոն

Քայլ 3: Ի՞նչ անել:

Բացօթյա հսկողության ցանկացած համակարգ պետք է կարողանա հետևել իր տեսադաշտում շարժվող օբյեկտներին, դասակարգել այդ օբյեկտները և հայտնաբերել դրանց որոշ գործունեություն: Ես մշակել եմ այս օբյեկտներին իրատեսական սցենարներում հետևելու և դասակարգելու մեթոդ: Առանձին ֆոտոխցիկում օբյեկտներին հետևելը կատարվում է ֆոնային հանումով, որին հաջորդում է տարածաշրջանի համապատասխանությունը: Սա հաշվի է առնում բազմաթիվ հուշումներ, ներառյալ սահմանափակող տուփերի արագությունները, չափերը և հեռավորությունները:

Պատկերը շրջանակ առ շրջանակ հայտնաբերելիս ամենակարևորը խուսափելն էր շրջանակի ցանկացած անկումից, քանի որ այդ դեպքում բոտը կարող է մտնել անորոշ վիճակում, եթե շրջանակն ընկնելու պատճառով բոտը չնկատի գնդակի շարժման ուղղությունը: Եթե գնդակը դուրս է գալիս տեսախցիկի տիրույթից, այն մտնում է այն, ինչ մենք անվանում ենք լիմբո վիճակ, այդ դեպքում բոտը շրջում է 360 աստիճանի շրջակայքը ՝ մինչև գնդակը հետ գա շրջանակի մեջ: տեսախցիկը, ապա սկսեք շարժվել դրա ուղղությամբ:

Պատկերի վերլուծության համար ես վերցնում եմ յուրաքանչյուր շրջանակ և այնուհետև դիմակավորում այն անհրաժեշտ գույնով: Հետո գտնում եմ բոլոր ուրվագծերը և գտնում դրանցից ամենամեծը և կապում ուղղանկյունի մեջ: Եվ ցույց տվեք հիմնական պատկերի ուղղանկյունը և գտեք ուղղանկյան կենտրոնի կոորդինատները:

Վերջապես, բոտը փորձում է գնդակի կոորդինատները հասցնել իր կոորդինատային առանցքի կենտրոնին: Այսպես է աշխատում ռոբոտը: Դա կարող է ավելի մեծանալ ՝ օգտագործելով ֆոտոնային մասնիկի նման IoT սարք, որը կարող է ձեզ տեղեկացնել, երբ ինչ -որ բան հայտնաբերվում է, և որ ռոբոտը հետևում է դրան, կամ երբ ռոբոտը կորցրել է դրա հետքը և այժմ վերադառնում է բազա:.

Պատկերի մշակման նպատակով դուք պետք է տեղադրեք OpenCV ծրագրակազմ ձեր ազնվամորու pi- ի վրա, որն ինձ համար բավականին բարդ էր:

OpenCV- ի տեղադրման համար անհրաժեշտ տեղեկատվություն կարող եք ստանալ այս հղման միջոցով. Կտտացրեք այստեղ

Քայլ 4: Սխեմաներ

Image
Image
Սխեմաներ
Սխեմաներ
Սխեմաներ
Սխեմաներ

Վերևում ես տրամադրել եմ իմ նախագծի սխեմաները, իսկ դրա հետ մեկտեղ ՝ Տպագիր տպատախտակները (PCB):

Եվ ահա մի քանի հիմնական կապեր, որոնք դուք պետք է անեք.

• Առաջին հերթին Raspberry Pi Camera մոդուլը անմիջականորեն կապված է Raspberry Pi- ի հետ:

• Ուլտրաձայնային տվիչները VCC- ն միացված են ընդհանուր տերմինալին, նույնը `GND- ով (հիմք), իսկ ուլտրաձայնային տվիչի մնացած երկու նավահանգիստները միացված են Raspberry Pi- ի GPIO կապին:

• Շարժիչները միացված են H-Bridge- ի միջոցով:

• Էլեկտրաէներգիան մատակարարվում է մարտկոցի միջոցով:

Ես նաև ավելացրել եմ տեսանյութը, որը կարող է օգնել հասկանալ ուլտրաձայնային տվիչի աշխատանքի և դրա աշխատանքի մասին:

և նաև կարող եք հետևել այս հղմանը, եթե չեք գտնում վերը նշված տեսանյութը:

Քայլ 5: Ինչպե՞ս վարվել:

Ես պատրաստել եմ այս նախագիծը ՝ պատկերելով հիմնական ռոբոտը, որը կարող է հետևել գնդակին: Ռոբոտը օգտագործում է տեսախցիկ ՝ նկարներ մշակելու համար ՝ շրջանակներ վերցնելով և հետևելով գնդակին: Գնդակին հետևելու համար օգտագործվում են տարբեր հատկություններ, ինչպիսիք են դրա գույնը, չափը, ձևը:

Ռոբոտը գտնում է կոշտ ծածկագրված գույն, այնուհետև փնտրում է այդ գույնի գնդակը և հետևում դրան: Այս նախագծում ես ընտրել եմ Raspberry Pi- ն որպես միկրոկառավարիչ, քանի որ այն մեզ թույլ է տալիս օգտագործել իր տեսախցիկի մոդուլը և մեծ ճկունություն է հաղորդում ծածկագրին, քանի որ այն օգտագործում է Python լեզու, որը շատ օգտագործողի համար հարմար է, ինչպես նաև թույլ է տալիս մեզ օգտագործել OpenCV գրադարանը պատկերները վերլուծելու համար:

H-Bridge- ն օգտագործվել է շարժիչների պտույտի ուղղությունը փոխելու կամ դրանք կանգնեցնելու համար:

Պատկերի վերլուծության համար ես վերցնում եմ յուրաքանչյուր շրջանակ և այնուհետև դիմակավորում այն անհրաժեշտ գույնով: Հետո գտնում եմ բոլոր ուրվագծերը և գտնում դրանցից ամենամեծը և կապում ուղղանկյունի մեջ: Եվ ցույց տվեք հիմնական պատկերի ուղղանկյունը և գտեք ուղղանկյան կենտրոնի կոորդինատները:

Վերջապես, բոտը փորձում է գնդակի կոորդինատները հասցնել իր կոորդինատային առանցքի կենտրոնին: Այսպես է աշխատում ռոբոտը: Դա կարող է ավելի մեծանալ ՝ օգտագործելով ֆոտոնային մասնիկի նման IoT սարք, որը կարող է ձեզ տեղեկացնել, երբ ինչ -որ բան հայտնաբերվում է, և որ ռոբոտը հետևում է դրան, կամ երբ ռոբոտը կորցրել է դրա հետքը և այժմ վերադառնում է բազա:. Եվ դա անելու համար մենք կօգտագործենք առցանց ծրագրային հարթակ, որը միացնում է սարքերը և թույլ է տալիս նրանց որոշակի գործողություններ կատարել հատուկ հրահրիչների վրա, որոնք են IFTTT գործարկիչները:

Քայլ 6: Կեղծ ծածկագիր

Կեղծ-ծածկագիր
Կեղծ-ծածկագիր

Ահա OpenCV- ի միջոցով հայտնաբերման մասի կեղծ ծածկագիրը, որտեղ մենք հայտնաբերում ենք գնդակ:

Քայլ 7: Կոդ

Կոդ
Կոդ
Կոդ
Կոդ
Կոդ
Կոդ
Կոդ
Կոդ

Վերևում կան կոդի հատվածներ, իսկ ներքևում `ծածկագրի մանրամասն նկարագրությունը:

# ներմուծեք անհրաժեշտ փաթեթները

ՆԵՐՄՈՄ ԵՆՔ ԲՈԼՈՐ ՊԱՅՄԱՆ ՓԱԹԵԹԸ

picamera.array ներմուծումից

picamera ներմուծումից PiCamera ներմուծում RPi. GPIO որպես GPIO ներմուծման ժամանակի ներմուծում numpy որպես np

ՀԻՄԱ ԿԱՌԱՎԱՐՈՄ ԵՆՔ ՍԱՐԴԱՎՈՐԸ և Ո ASՇԱԳՐՈՄ ԵՆՔ ՌԵPԲԵՌՆԱՅԻ ԿՐԹՈ CONՄ ՄԻԱՎԱ ՊԻՆԵՐԸ

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Ձախ ուլտրաձայնային տվիչ

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Առջևի ուլտրաձայնային տվիչ

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Ուլտրաձայնային աջ սենսոր

GPIO_ECHO3 = 35

MOTOR1B = 18 #Ձախ շարժիչ

MOTOR1E = 22

MOTOR2B = 21 #Աջ շարժիչ

MOTOR2E = 19

LED_PIN = 13 #Եթե այն գտնի գնդակը, ապա այն կլուսավորի led- ը

# Սահմանեք կապում որպես ելք և մուտքագրում

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Ձգան GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHOIN. PP) GPIO_TRIGGER3, GPIO. OUT) # Գործարկիչ GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# Տեղադրեք ձգանը «Կեղծ» (ցածր)

GPIO.output (GPIO_TRIGGER1, Կեղծ) GPIO.output (GPIO_TRIGGER2, Կեղծ) GPIO.output (GPIO_TRIGGER3, Կեղծ)

ԱՅՍ ԳՈՐՈՆԵՈԹՅՈՆԸ ՕԳՏԱԳՈՐՈ ALLՄ Է ԲՈԼՈR ՈRԼՏՐԱՍՈՆԱԿԱՆ Սենսորները ՝ հավաքելով հեռավորությունը մեր բոտի շուրջը գտնվող օբյեկտներից

# Թույլ տալ, որ մոդուլը կարգավորվի

def sonar (GPIO_TRIGGER, GPIO_ECHO). սկիզբ = 0 կանգառում = 0 # Տեղադրեք կապում որպես ելք և մուտքագրում (Lowածր) GPIO.output (GPIO_TRIGGER, False) #Թույլ տվեք, որ մոդուլը կարգավորի ժամանակը: քուն (0.01) #մինչ հեռավորություն> 5: #Ուղարկեք 10 զարկերակ ՝ GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO գործարկման համար: ելք (GPIO_TRIGGER, Կեղծ) սկիզբ = time.time () մինչ GPIO.input (GPIO_ECHO) == 0 և time.time ()

ՍՏԵԵԼՈ M DC ՄՈՏՈՐՍՆԵՐԻՆ ԱՇԽԱՏԵԼ ՌԵPՊՆԻ ՊԻ -ով

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)

ՌՈԲՈՏԻ ԳՈՐՈՆԵՈ ANDԹՅԱՆ ԵՎ ՏԱՐԲԵՐ REԱՌԱՅՈԹՅՈՆՆԵՐՈՄ ԳՈՐՈՆԵԼՈ ԳՈՐՈՆԵՈԹՅՈՆՆԵՐԸ

def առաջ ():

GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.putput (MOTOR1, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1), GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH)

def stop ():

GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW)

ԿԱՄԵՐԱՅԻ ՄՈԴՈLEԼԻ ԱՇԽԱՏԱՆՔ ԵՎ ԿԱՐԳԱՎՈՐՈՄՆԵՐԻ ԿԱՐԳԱՎՈՐՈՄ

#ԿԱՄԵՐԱ ՍՏԵՈՄ

# սկզբնականացնել տեսախցիկը և վերցնել հղում չմշակված ֆոտոխցիկի նկարահանման տեսախցիկին = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (տեսախցիկ, չափ = = (160, 120)) # թույլ տալ տեսախցիկին տաքացման ժամանակ. քուն (0.001)

ՀԻՄԱ ԻՐԱԿԱՆԱՆԵԼՈIN ՀԻՄՆԱԿԱՆ ԲԱՆԸ, ՈՐՏԵOT ԲՈՏԸ ԳՆԱԴՈՄ Է ANDԱՆԱՊԱՐՀՈՄ AVԱՆԿԱԱ ԽԱOԻ

մինչդեռ (1 <10). { #հեռավորությունը ՝ առջևի ուլտրաձայնային տվիչի հեռավորությունից C = սոնար (GPIO_TRIGGER2, GPIO_ECHO2) #հեռավորություն, որը գալիս է աջ ուլտրաձայնային տվիչի հեռավորությունից, GPIO_ECHO1) եթե (հեռավորությունը C = 8: աջ շրջադարձ () ժամանակ. Քուն (0.00625) կանգ () ժամանակ. Քուն (0.0125) առաջ () ժամանակ. Քուն (0.00625) կանգառ () ժամանակ. Քուն (0.0125) #մինչ հայտնաբերված == 0: leftturn () time.sleep (0.00625) elif distanceL> = 8: leftturn () time.sleep (0.00625) stop () time.sleep (0.0125) առաջ () time.sleep (0.00625) stop () time.sleep (0.0125) rightturn () time.sleep (0.00625) stop () time.sleep (0.0125) else: stop () time.sleep (0.01) else: #Հակառակ դեպքում այն առաջ է շարժվում առաջ () time.sleep (0.00625) եթե (distanceC> 10): #այն գնդակի կոորդինատները բերում է տեսախցիկի երևակայական առանցքի կենտրոն: եթե (centre_x = 20): if (centre_x0): flag = 1 leftturn () time.sleep (0.025) forward () time.) կանգ առնել () ժամանակը. քնել (0.00625) այլ `դադարեցնել () ժամանակը: քնել (0.01)

այլ:

#եթե այն գտնում է գնդակը և այն շատ մոտ է, այն լուսավորում է լուսարձակը: GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow («նկարել», շրջանակ) rawCapture.truncate (0) # ջնջել հոսքը նախապատրաստման համար հաջորդ շրջանակ}

ԿԱՏԱՐԵՔ ԱՆՀՐԱԵՇՏ ՄԱՔՈՄԸ

GPIO.cleanup () #անվճար բոլոր GPIO կապում

Քայլ 8: Արտաքին հղումներ

Հղում դեպի ցուցադրական տեսանյութ. Սեղմեք այստեղ (Youtube)

Հղում դեպի Git-hub կոդ. Կտտացրեք այստեղ (Git-Hub)

Խորհուրդ ենք տալիս: