Բովանդակություն:
- Քայլ 1: Տրանսպորտային միջոցների հավաքում
- Քայլ 2: Շարժիչների տեղադրում
- Քայլ 3. Ստեղծեք Vivado բլոկի դիզայն
- Քայլ 4. Հաղորդակցություն LiDAR- ի հետ
- Քայլ 5. Խոչընդոտներով ցանցի համալրում
- Քայլ 6. Շփումներ շարժիչների հետ
- Քայլ 7: Ուղու պլանավորում
Video: Ինքնավար մեքենա. 7 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Այս նախագիծը ինքնավար նավարկող ռոբոտ է, որը փորձում է հասնել իր նպատակային դիրքին ՝ միաժամանակ խուսափելով իր ճանապարհին խոչընդոտներից: Ռոբոտը հագեցած կլինի 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 նախագիծ և որպես նպատակային սարք ընտրեք 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*-ը: Մեքենայի շարժման ընթացքում այն կշարունակի սկանավորել շրջակա տարածքը և որոշել, թե արդյոք այն ճանապարհը դեռ վավեր է
Խորհուրդ ենք տալիս:
Ինքնավար գոտի պահող մեքենա ՝ օգտագործելով Raspberry Pi և OpenCV. 7 քայլ (նկարներով)
Ինքնավար երթևեկելի մեքենա, որն օգտագործում է Raspberry Pi և OpenCV
Rանկացած մեքենա/մեքենա դարձնել Bluetooth հավելվածի վերահսկման մեքենա ՝ 9 քայլ
Rանկացած R/C մեքենա վերածել Bluetooth ծրագրի կառավարման R/C մեքենայի. Այս նախագիծը ցույց է տալիս սովորական հեռակառավարման մեքենան Bluetooth (BLE) կառավարման մեքենայի Wombatics SAM01 ռոբոտաշինական տախտակով, Blynk App- ով և MIT App Inventor- ով փոխելու քայլերը: շատ ցածր գնով RC մեքենաներ են `բազմաթիվ հնարավորություններով, ինչպիսիք են LED լուսարձակները և
Ինքնավար հեռակառավարվող մեքենա ՝ 6 քայլ
Ինքնավար հեռակառավարվող մեքենա. Այս հրահանգը ստեղծվել է Հարավային Ֆլորիդայի համալսարանի Makecourse- ի նախագծի պահանջի կատարման համար (www.makecourse.com): Այս նախագիծը ցույց է տալիս, թե ինչպես է Arduino- ն երկակի H-Bridge կամուրջի հետ միասին վերահսկել չորս
Ինքնավար RC մեքենա ՝ 7 քայլ
Ինքնավար RC ավտոմեքենա. Այսօր ինքնակառավարվող, ինքնավար մեքենաների աճով, ես որոշեցի ստանձնել իմ սեփականը դարձնելու մարտահրավերը: Այս նախագիծը նաև ծառայեց որպես իմ գլխավոր նախագիծը ինժեներական դիզայնի և զարգացման և ռոբոտաշինության դասերին և մրցանակ ստացավ
ՔԵՎԻՆ ամբողջական ինքնավար մեքենա. 17 քայլ (նկարներով)
ՔԵՎԻՆ Լրիվ ինքնավար մեքենա. Սա Քևինն է: Այն ռադիոկառավարվող մեքենա է `լիարժեք ինքնավար քշում կատարելու ունակությամբ: Իմ առաջին նպատակը Arduino- ի կողմից վերահսկվող ինքնավար մեքենա սարքելն էր: Այսպիսով, ես գնեցի չինական էժան շասսի: Բայց դա սարսափելի էր, քանի որ ես ի վիճակի չէի որևէ կապ ամրացնել