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

Ինքնավար մեքենա. 7 քայլ (նկարներով)
Ինքնավար մեքենա. 7 քայլ (նկարներով)

Video: Ինքնավար մեքենա. 7 քայլ (նկարներով)

Video: Ինքնավար մեքենա. 7 քայլ (նկարներով)
Video: 7 կանոն, որոնց կատարումը թույլ է տալիս ձեր ընտանեկան կյանքը դարձնել ավելի երջանիկ. 2024, Նոյեմբեր
Anonim
Ինքնավար մեքենա
Ինքնավար մեքենա
Ինքնավար մեքենա
Ինքնավար մեքենա

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

Ռոբոտը կշարժվի երկու DC շարժիչով և երկու պտտվող անիվներով: Շարժիչները կցվելու են շրջանաձեւ հարթակի հատակին: Շարժիչները կառավարելու են երկու շարժիչով վարորդներ: Շարժիչային վարորդները կստանան PWM հրամաններ Zynq պրոցեսորից: Յուրաքանչյուր շարժիչի կոդավորիչներն օգտագործվում են մեքենայի դիրքի և կողմնորոշման հետևելու համար: Ամբողջ համակարգը սնուցվելու է LiPo մարտկոցով:

Քայլ 1: Տրանսպորտային միջոցների հավաքում

Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում
Տրանսպորտային միջոցների հավաքում

Ռոբոտը սնուցվում է երկու շարժիչներով, որոնք ամրացված են կողային անիվներին, այնուհետև լրացուցիչ աջակցվում է երկու պտուտակավոր անիվներով ՝ մեկը առջևի, իսկ մյուսը ՝ հետևի: Հարթակը և շարժիչի ամրակները պատրաստված էին ալյումինե թիթեղից: Անիվները շարժիչին ամրացնելու համար գնվել է շարժիչ հանգույց: Այնուամենայնիվ, անհրաժեշտ էր պատրաստել միջանկյալ միակցիչ, քանի որ հանգույցի անցքի ձևը տարբերվում էր անիվի անցքի ձևից:

Ընտրված շարժիչը Port Escap 12V DC շարժիչ էր `ներկառուցված կոդավորիչներով: Այս շարժիչը կարելի է գնել ebay- ում շատ ողջամիտ գնով (տես «Նյութերի օրինագիծը»): Շարժիչը գտնելու համար ebay- ում որոնեք «12V Escap 16 Coreless Geared DC Motor with Encoders with» հիմնաբառեր: Սովորաբար կան բավականին մեծ քանակությամբ վաճառողներ, որոնցից կարելի է ընտրել: Շարժիչների տեխնիկական բնութագրերը և եզրագծերը ներկայացված են ստորև ներկայացված դիագրամներում:

Ռոբոտի հավաքումը սկսվեց շասսիի CAD մոդելի ձևավորմամբ: Ստորև բերված մոդելը ցույց է տալիս շասսիի համար նախատեսված 2D ձևի պրոֆիլի վերին տեսքը:

Առաջարկվում է, որ շասսին նախագծվի որպես 2Dprofile, որպեսզի այն հեշտությամբ արտադրվի: Մենք կտրեցինք 12”X12” ալյումինե թերթը շասսիի տեսքով ՝ օգտագործելով ջրային ռեակտիվ դանակ: Շասսիի հարթակը կարող էր կտրվել նաև ժապավենի սղոցով:

Քայլ 2: Շարժիչների տեղադրում

Մոնտաժող շարժիչներ
Մոնտաժող շարժիչներ
Մոնտաժող շարժիչներ
Մոնտաժող շարժիչներ

Հաջորդ քայլը շարժիչի ամրացումներն անելն է: Առաջարկվում է, որ շարժիչի ամրակները պատրաստված լինեն 90 աստիճանի թիթեղյա ալյումինից: Օգտագործելով այս հատվածը, շարժիչը կարող է ամրացվել սահնակով ՝ թիթեղի մեկ երեսին, օգտագործելով երկուսը

Շարժիչի և մյուս երեսի M2 անցքերը կարող են պտուտակվել հարթակին: Շարժիչի ամրացման մեջ պետք է անցքեր բացվեն, որպեսզի պտուտակներով շարժիչը շարժիչի ամրացման և շարժիչի ամրացման վրա հարթակի վրա ամրացվեն: Շարժիչի լեռը կարելի է տեսնել վերևի նկարում:

Հաջորդը, Pololu Motor Hub- ը (տես «Նյութերի հաշիվը») տեղադրվում է շարժիչի լիսեռի վրա և ամրացվում է տրված պտուտակով և Ալենի բանալիով: Pololu շարժիչի հանգույցի անցքի օրինակը չի համընկնում VEX անիվի անցքի նախշին, ուստի պետք է պատրաստվի հատուկ միջանկյալ կցորդիչ: Առաջարկվում է, որ շասսի հարթակը պատրաստելու համար օգտագործվող Ալյումինե մետաղի ջարդոնը օգտագործվի միացման համար: Այս զույգի անցքերի ձևն ու չափերը ներկայացված են ստորև ներկայացված նկարում: Անհատական ալյումինե կցորդիչի արտաքին տրամագիծը և ձևը (անհրաժեշտ չէ շրջանաձև լինել) կարևոր չէ, քանի դեռ բոլոր անցքերը տեղավորվում են մասի վրա:

Քայլ 3. Ստեղծեք Vivado բլոկի դիզայն

Ստեղծելով Vivado բլոկի դիզայն
Ստեղծելով Vivado բլոկի դիզայն
Ստեղծելով Vivado բլոկի դիզայն
Ստեղծելով Vivado բլոկի դիզայն

- Սկսեք ՝ ստեղծելով նոր Vivado նախագիծ և որպես նպատակային սարք ընտրեք Zybo Zynq 7000 Z010- ը:

- Հաջորդը կտտացրեք ստեղծել նոր բլոկի ձևավորում և ավելացրեք Zynq IP- ը: Կրկնակի սեղմեք Zynq IP- ի վրա և ներմուծեք Zynq- ի համար տրամադրված XPS կարգավորումները: Այնուհետեւ միացրեք UART0- ը MIO 10..11- ով MIO կոնֆիգուրացիաների ներդիրի ներքո, ինչպես նաև համոզվեք, որ erամաչափ 0 -ն ու Watchdog ժամաչափը միացված են:

- Բլոկի նախագծին ավելացրեք երկու AXI GPIOS: GPIO 0 -ի համար միացրեք երկակի ալիքը և երկուսն էլ դրեք բոլոր ելքերի վրա: Սահմանեք GPIO լայնությունը 1 -ից 4 բիթ ալիքի համար, իսկ 2 -ից 12 բիթերի համար `այս ալիքները կօգտագործվեն շարժիչի ուղղությունը սահմանելու և կոդավորիչի չափիչ նշանների քանակը պրոցեսորին ուղարկելու համար: GPIO 1 -ի համար ընդամենը մեկ ալիք սահմանեք բոլոր մուտքերի համար, որոնց ալիքի լայնությունը 4 բիթ է: Սա կօգտագործվի կոդավորիչներից տվյալներ ստանալու համար: Բոլոր GPIO նավահանգիստները դարձնել արտաքին:

- Հաջորդը ավելացրեք երկու AXI ժմչփ: Երկու ժամաչափերի pwm0 նավահանգիստները դարձնել արտաքին: Սրանք կլինեն pwms- ը, որոնք վերահսկում են շարժիչների պտտման արագությունը:

- Վերջապես գործարկեք բլոկի ավտոմատացումը և միացման ավտոմատացումը: Ստուգեք, որ ձեր ունեցած բլոկի դիզայնը համընկնում է տրամադրվածի հետ:

Քայլ 4. Հաղորդակցություն LiDAR- ի հետ

Այս LiDAR- ը UART- ի միջոցով հաղորդակցվելու համար օգտագործում է SCIP 2.0 արձանագրություն, կից ֆայլը նկարագրում է ամբողջ արձանագրությունը:

LiDAR- ի հետ շփվելու համար մենք կօգտագործենք UART0: LiDAR- ը վերադարձնում է տվյալների 682 կետ, որոնցից յուրաքանչյուրը ներկայացնում է այդ անկյան տակ գտնվող օբյեկտի հեռավորությունը: LiDAR- ը սլաքում է ժամացույցի սլաքի ուղղությամբ -30 աստիճանից մինչև 210 աստիճան ՝ 0,351 աստիճան քայլով:

- LiDAR- ի հետ ամբողջ հաղորդակցումը կատարվում է ASCI նիշերով, օգտագործված ձևաչափի համար դիմեք SCIP արձանագրությանը: Մենք սկսում ենք ուղարկել QT հրաման ՝ LiDAR- ը միացնելու համար: Այնուհետև մենք մի քանի անգամ ուղարկում ենք GS հրամանը ՝ պահանջելով միաժամանակ 18 տվյալների միավոր UARTS 64 բայթ FIFO ֆտ: LiDAR- ից վերադարձված տվյալները հետագայում վերլուծվում և պահվում են SCANdata գլոբալ զանգվածում:

- Պահված տվյալների յուրաքանչյուր կետ 2 կոդ կոդավորված տվյալ է: Այս տվյալները վերծանողին փոխանցելը կվերադարձնի հեռավորությունը միլիմետրերով:

Main_av.c ֆայլում դուք կգտնեք LiDAR- ի հետ հաղորդակցվելու հետևյալ գործառույթները

sendLIDARcmd (հրաման)

- Սա մուտքագրման տողը կուղարկի LiDAR- ին UART0- ի միջոցով

recvLIDAR տվյալներ ()

- Սա կստանա տվյալներ LiDAR- ին հրաման ուղարկելուց հետո և տվյալները կպահի RECBuffer- ում

requestDistanceData ()

- Այս գործառույթը մի շարք հրամաններ կուղարկի ՝ բոլոր 682 տվյալների կետերը առբերելու համար: Տվյալների 18 միավորների յուրաքանչյուր հավաքածու ստանալուց հետո parseLIDARinput () - ը կանչվում է տվյալները վերլուծելու և տվյալների կետերն աստիճանաբար պահելու համար SCANdata- ում:

Քայլ 5. Խոչընդոտներով ցանցի համալրում

Բնակեցման ցանց խոչընդոտներով
Բնակեցման ցանց խոչընդոտներով
Բնակեցման ցանց խոչընդոտներով
Բնակեցման ցանց խոչընդոտներով

GRID- ը, որը պահվում է, 2D զանգված է, որի յուրաքանչյուր ինդեքսի արժեքը ներկայացնում է տեղանքը: Յուրաքանչյուր ինդեքսում պահվող տվյալները կամ 0 են, կամ 1, համապատասխանաբար ոչ մի խոչընդոտ և խոչընդոտ: Միլիմետրերով քառակուսի հեռավորությունը, որը ներկայացնում է յուրաքանչյուր ինդեքս, կարող է փոխվել autom.h ֆայլում GRID_SCALE սահմանմամբ: 2D զանգվածի չափը կարող է նաև փոխվել, որպեսզի թույլ տա մեքենային սկանավորել ավելի մեծ տարածք ՝ փոփոխելով GRID_SIZE սահմանումը:

LiDAR- ից հեռավորության նոր տվյալների հավաքագրումից հետո updateGrid () կոչվում է: Սա կկրկնվի SCANdata զանգվածում պահվող տվյալների յուրաքանչյուր կետի միջոցով `որոշելու, թե ցանցում որ ինդեքսներն ունեն խոչընդոտներ: Օգտագործելով մեքենայի ընթացիկ կողմնորոշումը, մենք կարող ենք որոշել այն անկյունը, որը համապատասխանում է տվյալների յուրաքանչյուր կետին: Որոշելու համար, թե որտեղ եք գտնվում խոչընդոտը, պարզապես համապատասխան հեռավորությունը բազմապատկեք անկյունի cos/sin- ով: Այս երկու արժեքները մեքենաների ընթացիկ x և y դիրքին ավելացնելով ՝ ցուցանիշը կվերադառնա խոչընդոտի ցանցում: GRID_SCALE- ի կողմից այս գործողությամբ վերադարձված հեռավորությունը բաժանելը թույլ կտա մեզ փոխել, թե որքան մեծ է յուրաքանչյուր ինդեքսի քառակուսի տարածությունը:

Վերոնշյալ նկարները ցույց են տալիս մեքենաների ընթացիկ միջավայրը և արդյունքում ստացված ridանցը:

Քայլ 6. Շփումներ շարժիչների հետ

Շարժիչների հետ շփվելու համար մենք սկսում ենք GPIO- ների վերահսկումը նախաստորագրելով շարժիչի պտույտը: Այնուհետև AXI ժմչփով PWM- ների հիմնական հասցեին գրելը թույլ է տալիս սահմանել այնպիսի ժամանակաշրջաններ և գործառնական ցիկլ, որոնք ուղղակիորեն վերահսկում են արագությունը, որով շարժիչը պտտվում է.

Քայլ 7: Ուղու պլանավորում

Կիրականացվի մոտ ապագայում:

Օգտագործելով նախկինում նկարագրված ցանցի և շարժիչի ֆունկցիոնալությունը, շատ հեշտ է իրականացնել այնպիսի ալգորիթմներ, ինչպիսիք են A*-ը: Մեքենայի շարժման ընթացքում այն կշարունակի սկանավորել շրջակա տարածքը և որոշել, թե արդյոք այն ճանապարհը դեռ վավեր է

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