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

Երկու անիվի ինքնահավասարակշռող ռոբոտ ՝ 7 քայլ
Երկու անիվի ինքնահավասարակշռող ռոբոտ ՝ 7 քայլ

Video: Երկու անիվի ինքնահավասարակշռող ռոբոտ ՝ 7 քայլ

Video: Երկու անիվի ինքնահավասարակշռող ռոբոտ ՝ 7 քայլ
Video: The most beautiful electric scooters😍💙أجمل سكوترات كهربائية 2024, Դեկտեմբեր
Anonim
Երկու անիվի ինքնահավասարակշռող ռոբոտ
Երկու անիվի ինքնահավասարակշռող ռոբոտ

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

Ի՞նչ է ինքնահավասարակշռող ռոբոտը:

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

Ինչպես է դա աշխատում?

Պարզ անալոգիա, որը պետք է հաշվի առնել, շրջված ճոճանակն է: Այն դեպքում, երբ զանգվածի կենտրոնը գտնվում է առանցքային կետից վեր: Այնուամենայնիվ, մեր դեպքում մենք ճոճանակը սահմանափակում ենք 1 աստիճանի ազատությամբ ՝ ունենալով պտույտի մեկ առանցք, մեր դեպքում ՝ երկու անիվների պտույտի առանցքը: Քանի որ ցանկացած տեսակի խանգարում կառաջացնի ռոբոտի ընկնելը, մեզ անհրաժեշտ է ռոբոտին ակտիվորեն հավասարակշռված պահելու մեթոդ: Այստեղ է, որ գործում է մեր փակ հանգույցի ալգորիթմը (PID վերահսկիչ) ՝ իմանալով, թե որ ուղղությամբ է ընկնում մեր ռոբոտը, մենք կարող ենք կարգավորել մեր շարժիչների պտույտի ուղղությունը ՝ համակարգը հավասարակշռված պահելու համար:

Ինչպե՞ս է գործում փակ հանգույցի ալգորիթմը:

Ռոբոտին հավասարակշռված պահելու հիմնական սկզբունքն այն է, որ եթե ռոբոտը առաջ է ընկնում, այն կփոխհատուցի ՝ ռոբոտի ներքևի հատվածը առաջ տանելով, որպեսզի բռնի իրեն և, հետևաբար, ուղղահայաց պահի: Նմանապես, եթե ռոբոտը հետ է ընկնում, այն փոխհատուցելու է ՝ ռոբոտի ներքևը հետ տանելով ՝ իրեն բռնելու համար:

Այսպիսով, այստեղ մենք պետք է երկու բան անենք, առաջինը ՝ մենք պետք է հաշվարկենք ռոբոտի զգացած թեքության անկյունը (Roll) և արդյունքում ՝ մենք պետք է վերահսկենք շարժիչների պտույտի ուղղությունը:

Ինչպե՞ս ենք չափելու թեքության անկյունը:

Թեքության անկյունը չափելու համար մենք կօգտագործենք իներցիոն չափման միավոր: Այս մոդուլները ներառում են արագացուցիչ և գիրոսկոպ:

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

Այնուամենայնիվ, նման սենսորների օգտագործման խնդիրն այն է, որ.

  • Արագացուցիչը շատ աղմկոտ է, բայց ժամանակի ընթացքում հետևողական է, անկյունը տարբերվում է հանկարծակի հորիզոնական շարժումներով
  • Մյուս կողմից, գիրոսկոպի արժեքը կշարժվի ժամանակի ընթացքում, բայց սկզբնական շրջանում այն բավականին ճշգրիտ է

Այս ուսանելիի համար ես մտադիր չեմ զտիչ ներդնել, փոխարենը, եթե չօգտագործեմ ինքնաթիռի թվային շարժման մշակումը (DMP): Մյուսները օգտագործել են լրացուցիչ զտիչ ՝ սահուն ազդանշան ստանալու համար, կարող եք ընտրել այն մեթոդը, որը Ձեզ դուր է գալիս: քանի որ ռոբոտը հավասարակշռում է ցանկացած իրագործման հետ:

Պարագաներ

Մասեր:

  1. Arduino Pro Mini 3.3V 8 8 ՄՀց ATMEGA328- ով
  2. FT232RL 3.3V 5.5V FTDI USB to TTL սերիական ադապտեր մոդուլ
  3. GY-521 մոդուլ MPU-6050- ով
  4. Pairույգ N20 միկրո փոխանցման շարժիչ 6V - 300rpm
  5. L298N շարժիչի վարորդ
  6. LM2596S DC- ից DC բակ փոխարկիչ
  7. Մարտկոց (վերալիցքավորվող 9.7V Li-ion մարտկոցի փաթեթ)
  8. Մարտկոցի ժապավեն
  9. Երկու նախատիպային PCB տպատախտակներ
  10. Արական և իգական վերնագիր կապում են ցատկող լարերը

Գործիքներ:

  1. Oldոդման երկաթ և զոդ
  2. Նեյլոնե վեցանկյուն տարանջատիչ
  3. Պտուտակահան ճշգրիտ հավաքածու
  4. 3D տպիչ

Քայլ 1: Շինարարություն

Քանի որ ես ունեի մուտք դեպի 3D տպիչ, ես որոշեցի 3D տպել շասսին և օգտագործել կանգառներ ՝ ամեն ինչ իրար միացնելու համար:

Ռոբոտը բաղկացած է 4 շերտից

  1. Ներքևի շերտը միացնում է շարժիչները և ունի ամրացման կետեր L298N շարժիչի շարժիչի մոդուլի համար
  2. Հաջորդ շերտում տեղադրված է Arduino pro mini- ի տախտակի նախատիպը և դրան ամրացված վերնագրեր
  3. Երրորդ շերտը ամրացնում է IMU- ն
  4. Վերին շերտը, որը ես անվանում եմ «բամպերի շերտ» մարտկոցը, կողպեքի փոխարկիչը և դրամական անջատիչը

Իմ նախագծման հիմնական սկզբունքն էր պահել ամեն ինչ մոդուլային: Դրա պատճառն այն էր, որ եթե բաղադրիչներից մեկի հետ ինչ -որ բան սխալ էր, ես հեշտությամբ կարող էի փոխարինել այն, կամ եթե ինձ անհրաժեշտ էր մեկ այլ նախագծի բաղադրիչ, ես կարող եմ հեշտությամբ վերցնել այն ՝ առանց անհանգստանալու, որ նորից չեմ կարողանա օգտագործել համակարգը:

Քայլ 2: Լարերի տեղադրում

Հաղորդալարեր
Հաղորդալարեր

Ես մի քանի կանացի վերնագրեր կպցրեցի ծայրամասային տախտակին, որպեսզի համապատասխանեն Arduino pro մինի վերնագրի քորոցներին: Դրանից հետո ես միացրեցի արական վերնագիրը ՝ ամրացնելով տախտակը, որպեսզի թույլ տամ մուտք գործել I/O: Մնացած բաղադրիչները տեղադրված էին 3D տպված շրջանակի վրա և միացված էին jumper լարերի միջոցով:

Քայլ 3. Վերահսկողության տեսություն

Այժմ մենք անցնում ենք նախագծի առանցքին: Ռոբոտը հավասարակշռված պահելու համար մենք պետք է ստեղծենք համապատասխան կառավարման ազդանշան `շարժիչները ճիշտ ուղղությամբ և ճիշտ արագությամբ ռոբոտին հավասարակշռված և կայուն պահելու համար: Դա անելու համար մենք կօգտագործենք հանրաճանաչ կառավարման հանգույցի ալգորիթմ, որը հայտնի է որպես PID վերահսկիչ: Քանի որ հապավումը ենթադրում է, որ այս վերահսկիչի համար կան երեք տերմիններ, դրանք համամասնական, անբաժանելի և ածանցյալ տերմիններն են: Նրանցից յուրաքանչյուրն ուղեկցվում է գործակիցներով, որոնք որոշում են դրանց ազդեցությունը համակարգի վրա: Հաճախ վերահսկիչի իրականացման առավել ժամանակատար մասը յուրաքանչյուր յուրահատուկ համակարգի ձեռքբերումների կարգավորումն է `առավել օպտիմալ պատասխան ստանալու համար:

  • Համամասնական տերմինը ուղղակիորեն բազմապատկում է սխալը ՝ ելք տալու համար, ուստի որքան մեծ է սխալը, այնքան մեծ է պատասխանը
  • Ինտեգրալ տերմինը առաջացնում է պատասխան ՝ հիմնված սխալի կուտակման վրա ՝ կայուն վիճակի սխալը նվազեցնելու համար: Որքան երկար համակարգն անհավասարակշռված է, այնքան արագ կպատասխանեն շարժիչները
  • Ածանցյալ տերմինը սխալի ածանցյալն է, որն օգտագործվում է ապագա արձագանքը կանխատեսելու համար և դրանով իսկ նվազեցնում է տատանումները կայուն վիճակը գերազանցելու պատճառով:

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

Քայլ 4: Օգտագործելով MPU 6050

MPU6050 գրադարան

github.com/jrowberg/i2cdevlib/tree/master/…

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

www.i2cdevlib.com/forums/topic/96-arduino-…

գրել է Լուիս Ռոդենասը, մենք կստանանք փոխհատուցում: Օֆսեթային սխալները կարող են վերացվել ՝ setup () ռեժիմում սահմանելով offset արժեքները:

Թվային շարժման պրոցեսորի օգտագործումը

MPU6050- ը պարունակում է DMP (թվային շարժման պրոցեսոր):

Ի՞նչ է DMP- ը: Դուք կարող եք մտածել DMP- ի մասին որպես ներկառուցված միկրոկառավարիչ, որը մշակում է mpu6050- ի վրա 3 առանցքի գիրոսկոպից և 3 առանցքի արագացուցիչից բարդ շարժումները ՝ օգտագործելով իր շարժման միաձուլման ալգորիթմները: Բեռնաթափել այն մշակումը, որն այլապես կկատարեր Arduino- ն:

Ինչպե՞ս օգտագործել այն: Պարզելու համար, թե ինչպես օգտագործել DMP- ն, անցեք MPU6050_DMP6 ուրվագծի օրինակով, որը գալիս է MPU6050 գրադարանին (Arduino IDE- ում ՝ Ֆայլ-> Օրինակ-> MPU6050-> MPU6050_DMP6): Սա նաև լավ հնարավորություն է ստուգելու, որ ձեր սենսորն իրականում աշխատում է, և որ լարերը ճիշտ են:

Քայլ 5: Կոդավորում

Ես օգտագործեցի Arduino IDE- ն և FTDI ինտերֆեյսը `Arduino pro mini- ն ծրագրավորելու համար:

Օգտագործելով էսքիզների օրինակը (MPU6050_DMP6), որը գալիս է MPU6050 գրադարանին որպես իմ հիմնական կոդ, ես ավելացրել եմ PID () և MotorDriver () գործառույթները:

Ավելացնել գրադարանը

  • MPU6050. MPU6050 սենսորից օգտվելու համար մենք պետք է ներբեռնենք I2C մշակողի գրադարանը ffեֆ Ռոուբերգից և այն ավելացնենք Arduino «գրադարաններ» պանակում, որը գտնվում է ձեր համակարգչի ծրագրային ֆայլերում:
  • Մետաղալար. Մեզ նաև անհրաժեշտ է Wire գրադարանը, որը թույլ կտա մեզ շփվել I2C սարքերի հետ:

Կեղծ կոդ

Ներառել գրադարանները.

  • Մետաղալար. Ժ
  • MPU6050
  • I2Cdev.h

Նախնականացնել փոփոխականները, հաստատունները և օբյեկտները

Կարգավորում ()

  • Սահմանեք շարժիչների կառավարման համար քորոցային ռեժիմ
  • Սահմանեք PIN ռեժիմը կարգավիճակի LED- ի համար
  • Նախնականացրեք MPU6050- ը և սահմանեք փոխհատուցված արժեքներ

PID ()

Հաշվարկել PID արժեքը

MotorDriver (PID պատասխան)

Օգտագործեք PID արժեքը `շարժիչների արագությունն ու ուղղությունը վերահսկելու համար

Օղակ ()

  • Ստացեք տվյալներ DMP- ից
  • Callանգահարեք PID () MotorDriver () գործառույթներին

Քայլ 6: PID- ի կարգաբերման կարգ

Սա նախագծի ամենա հոգնեցուցիչ մասն է և պահանջում է մի փոքր համբերություն, եթե չբախտավորվեք: Ահա քայլերը.

  1. I և D տերմինները սահմանեք 0
  2. Ռոբոտին բռնելով ՝ կարգավորեք P- ն այնպես, որ ռոբոտը պարզապես սկսի տատանվել հավասարակշռության դիրքի շուրջ
  3. P հավաքածուի հետ ավելացրեք I այնպես, որ հավասարակշռությունից դուրս ռոբոտը ավելի արագ արագանա: P- ի և I- ի հետ պատշաճ կերպով կարգավորված լինելու դեպքում ռոբոտը պետք է կարողանա ինքնահավասարակշռվել առնվազն մի քանի վայրկյան ՝ որոշակի տատանումներով
  4. Ի վերջո, D- ի ավելացումը նվազեցնում է տատանումը

Եթե առաջին փորձը գոհացուցիչ արդյունքներ չի տալիս, կրկնում եք P.- ի այլ արժեք ունեցող քայլերը: Տեղյակ եղեք նաև, որ կարող եք հետագայում ճշգրտել PID- ի արժեքները `կատարումն ավելի բարձրացնելու համար: Այստեղ արժեքները կախված են սարքավորումից, մի զարմանաք, եթե ստանաք շատ մեծ կամ շատ փոքր PID արժեքներ:

Քայլ 7: Եզրակացություն

Օգտագործված միկրո շարժիչների շարժիչները դանդաղ էին արձագանքում մեծ խանգարումներին, և քանի որ համակարգը չափազանց թեթև էր, բավարար իներցիա չկար `ցանկալի ճոճանակի էֆեկտ ստանալու համար, այնպես որ, եթե ռոբոտը թեքվի առաջ, այն պարզապես կթեքվի անկյան տակ և կվազի առաջ: Վերջապես, 3D տպված անիվները վատ ընտրություն էին, քանի որ դրանք անընդհատ սայթաքում էին:

Բարելավման առաջարկներ.

  • Ավելի արագ պտտվող շարժիչներ ՝ ավելի մեծ պտտվող մոմենտով, այսինքն ՝ DC շարժիչների դեպքում լարման աստիճանը բարձր է, ավելի մեծ ոլորող մոմենտը
  • ստանալ ավելի ծանր մարտկոց կամ պարզապես զանգվածը մի փոքր բարձրացնել
  • Փոխարինեք 3D տպված անիվները ռետինե անիվներով `ավելի մեծ քաշքշուկ ստանալու համար

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