Տուն - Վերանորոգման պատմություն
Համամասնական ինտեգրալ դիֆերենցիալ PID վերահսկիչ Lego Mindstorms Robotics-ում: Համամասնական կարգավար. Միջազգային ռոբոտների մրցույթներ - Կանոններ - Ռոբոտների օրինակներ - LEGO EV3 Proportional p ծրագրի վրա հիմնված հետագծային ռոբոտ

Ռոբոտաշինությունը նոր հետաքրքիր ուղղություն է, որը, ըստ ամենայնի, հետագայում էլ կզարգանա դրա շրջանակներում դպրոցական դասընթացներհամակարգչային գիտություն և տեխնոլոգիա. Ռոբոտաշինության բումը մեծապես պայմանավորված է նրանով, որ այն մեզ թույլ է տալիս պատասխանել հարցին. «Ինչու՞ ենք մենք իրականում սովորում ծրագրավորում»: Բացի այդ, ռոբոտաշինության ընթացքում կարող եք ծանոթանալ տեսության տարրական հասկացություններին.

ավտոմատ կառավարում

Այս էջում ներկայացված են հեղինակի կողմից մշակված ծրագրավորման սիմուլյատորներ և Arduino տախտակներ: Նրանք կարող են օգնել այն դեպքերում, երբ ինչ-ինչ պատճառներով հնարավոր չէ իրական սարքավորում օգտագործել:Սիմուլյատորներն օգտագործում են HTML5 հնարավորություններ, ուստի դրանք կաշխատեն միայն ժամանակակից բրաուզերներ(լավագույնը օգտագործել Google Chrome).

կամ Mozilla Firefox

Նորություններ
այժմ նաև Telegram ալիքում Նոյեմբերի 27, 2015«Սաղմ» ուղին ավելացվել է սիմուլյատորներին (

Մ.Վ. Լազարեւը
, Օրեխովո-Զուևո):
13 հոկտեմբերի, 2015թ

Այժմ դուք կարող եք բեռնել ձեր սեփական հետքերը (դաշտերը ռոբոտի համար) LEGO ռոբոտների սիմուլյատորներում: Ինչպե՞ս դա անել: Տես.

Ավելացվել են նոր սիմուլյատորներ՝ LEGO ռոբոտներ երկու, երեք, չորս լուսային սենսորներով։ Ռոբոտի կառավարման լեզու (Պարզ ռոբոտների ծրագրավորում).

Լույսի սենսորով ռոբոտի կառավարում

Լույսի սենսորը թույլ է տալիս ռոբոտին նավարկել սեղանի մակերեսով, օրինակ՝ շարժվել սպիտակ և սև տարածքների սահմանի երկայնքով (սև գծի եզրով): Ֆոտոդիոդը լուսավորում է մակերեսը, ֆոտոդետեկտորը «որսում» է արտացոլված ճառագայթները և չափում դրանց ինտենսիվությունը։

Այս տեսակի ամենահայտնի խնդիրը գծի երկայնքով շարժվելն է: Օգտագործելով սիմուլյատորը, դուք կարող եք ուսումնասիրել կառավարման տարբեր օրենքներ՝ ռելե, համամասնական և նույնիսկ PID հսկողություն (համամասնական-ինտեգրալ-ածանցյալ):

Լույսի սենսորով ռոբոտի ծրագրերի օրինակներ

Մինչդեռ 1 (եթե սենսոր > 128 (շարժիչ = 100 շարժիչ = 0), հակառակ դեպքում (շարժիչ = 0 շարժիչ = 100) սպասեք (10))

KP = 0,2 մինչդեռ 1 ( u = kP * (ցուցիչ-128) շարժիչ = 50 + u շարժիչ = 50 - u սպասել (20) )

Հիմնական ( մինչդեռ 1 ( մինչ սենսոր > 128 ( շարժիչ = 100 շարժիչ = 100 սպասել (10) ) հետ () շրջադարձ () ) ետ (շարժիչ = -100 շարժիչ = -100 սպասել (260) ) պտույտ (շարժիչ = -50) շարժիչ = 50 սպասել (50) )

Ռոբոտների կառավարում երկու լուսային սենսորներով

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

Երեք լույսի սենսորներով ռոբոտի ծրագրերի օրինակներ

Ռոբոտների կառավարում չորս լուսային սենսորներով

Լույսի չորս սենսորները թույլ են տալիս ռոբոտին ավելի լավ հայտնաբերել կտրուկ շրջադարձերը: Ներքին սենսորները օգտագործվում են նուրբ ճշգրտման համար; Երկու արտաքին սենսորմի փոքր առաջ տանել և տարածվել կողքերին: Դրանք օգտագործվում են կտրուկ շրջադարձի դեպքում: Արտաքին զույգի սենսորների ընթերցումների հիման վրա վերահսկման շահույթը ընտրվում է ավելի մեծ, քան ներքին զույգի համար (տես. Լ.Յու. Օվսյանիցկայա և այլք, Lego Mindstorms EV3 ռոբոտի շարժման ալգորիթմներ և ծրագրեր գծի երկայնքով, Մ.՝ «Պերո», 2015)։

Չորս լույսի սենսորներով ռոբոտի ծրագրերի օրինակներ

Մինչդեռ 1 (d0 = սենսոր > 128 d1 = սենսոր > 128 d2 = սենսոր > 128 d3 = սենսոր > 128, եթե d1 & !d2 (շարժիչ = 100 շարժիչ = 0), եթե! d1 & d2 (շարժիչ = 0 շարժիչ = 100), եթե d1 == d2 (շարժիչ = 100 շարժիչ = 100), եթե d0 & !d3 (շարժիչ = 30 շարժիչ = 0), եթե!d0 & d3 (շարժիչ = 0 շարժիչ = 30) սպասել(10))

K1 = 0.2 k2 = 0.4 մինչդեռ 1 (u1 = սենսոր - սենսոր u2 = սենսոր - սենսորային շարժիչ = 50+k1*u1+k2*u2 շարժիչ = 50-k1*u1-k2*u2 սպասել(10))

Հեռավորության սենսորով ռոբոտի կառավարում (սոնար)

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

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

Այս խնդիրը դասական է, գաղափարապես պարզ, այն կարելի է բազմիցս լուծել, և ամեն անգամ ինքներդ ձեզ համար նոր բան կբացահայտեք։

Հետևյալ գծի խնդիրը լուծելու բազմաթիվ մոտեցումներ կան. Դրանցից մեկի ընտրությունը կախված է ռոբոտի կոնկրետ դիզայնից, սենսորների քանակից, անիվների և միմյանց նկատմամբ դրանց գտնվելու վայրից:

Մեր օրինակում ռոբոտի երեք օրինակ կվերլուծվեն՝ հիմնվելով Robot Educator-ի հիմնական կրթական մոդելի վրա:

Սկզբից մենք հավաքում ենք ուսումնական ռոբոտի Robot Educator-ի հիմնական մոդելը, դրա համար կարող եք օգտագործել հրահանգները. ծրագրային ապահովում MINDSTORMS EV3.

Նաև օրինակների համար մեզ անհրաժեշտ կլինեն EV3 բաց գույնի սենսորներ: Այս լուսային սենսորները, ինչպես ոչ մի այլ, լավագույնս համապատասխանում են մեր առաջադրանքին, երբ աշխատում ենք նրանց հետ, մենք չպետք է անհանգստանանք շրջապատող լույսի ինտենսիվության համար: Այս սենսորի համար ծրագրերում մենք կօգտագործենք արտացոլված լույսի ռեժիմը, որում գնահատվում է սենսորի կարմիր հետևի լույսի արտացոլված լույսի քանակը։ Սենսորների ընթերցումների սահմանները 0-100 միավոր են՝ համապատասխանաբար «առանց արտացոլման» և «ընդհանուր արտացոլման» համար:

Որպես օրինակ՝ մենք կվերլուծենք հարթ, թեթև ֆոնի վրա պատկերված սև հետագծով շարժվելու ծրագրերի 3 օրինակ.

· Մեկ սենսոր, P կարգավորիչով:

· Մեկ սենսոր, համակարգչի կարգավորիչով:

· Երկու սենսոր:

Օրինակ 1. Մեկ սենսոր՝ P կարգավորիչով:

Դիզայն

Լույսի սենսորը տեղադրված է մոդելի վրա հարմար տեղակայված ճառագայթի վրա:


Ալգորիթմ

Ալգորիթմի գործարկումը հիմնված է այն փաստի վրա, որ կախված սև գծի հետ սենսորային լուսավորության ճառագայթի համընկնման աստիճանից, սենսորի կողմից վերադարձված ընթերցումները աստիճանաբար տարբերվում են: Ռոբոտը պահպանում է լուսային սենսորի դիրքը սև գծի սահմանին։ Լույսի սենսորից մուտքային տվյալները փոխակերպելով՝ կառավարման համակարգը արժեք է ստեղծում ռոբոտի պտտման արագության համար:


Քանի որ իրական հետագծի վրա սենսորը արժեքներ է ստեղծում իր ողջ աշխատանքային տիրույթում (0-100), 50-ն ընտրվում է որպես արժեք, որին ձգտում է ռոբոտը, այս դեպքում ստեղծվում են պտտման գործառույթներին փոխանցվող արժեքները միջակայքը -50-50, բայց այս արժեքները բավարար չեն հետագիծը կտրուկ շրջելու համար: Հետևաբար, միջակայքը պետք է ընդլայնվի մեկուկես անգամ մինչև -75 - 75:

Արդյունքում, ծրագրում հաշվիչի գործառույթը պարզ համամասնական վերահսկիչ է: որի գործառույթը ( (ա-50)*1.5 ) լույսի սենսորի գործառնական տիրույթում առաջացնում է ռոտացիայի արժեքներ՝ համաձայն գրաֆիկի.

Օրինակ, թե ինչպես է աշխատում ալգորիթմը

Օրինակ 2. Մեկ սենսոր, PK կարգավորիչով:

Այս օրինակը հիմնված է նույն կառուցվածքի վրա:

Հավանաբար նկատել եք, որ նախորդ օրինակում ռոբոտը չափից դուրս օրորվել է, ինչը թույլ չի տվել նրան բավականաչափ արագանալ։ Այժմ մենք կփորձենք մի փոքր բարելավել այս իրավիճակը։

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

Համամասնական կարգավորիչը սարք է, որն օբյեկտի վրա իրականացնում է հսկիչ գործողություն u(t)՝ տվյալ x0(t) վիճակից նրա e(t) գծային շեղմանը համամասնորեն.

e(t)=x0(t)-x(t), որտեղ x(t) վիճակն է տվյալ պահին;

u(t)=ke(t), որտեղ k-ն ուժեղացման գործակիցն է:
Այսինքն՝ որքան ռոբոտը շեղվի տրված ընթացքից, այնքան շարժիչները պետք է ավելի ակտիվ աշխատեն այն հարթեցնելու համար։

Գծի շարժում մեկ լուսային սենսորով P-կարգավորիչի միջոցով

Սևի և սպիտակի սահմանի երկայնքով շարժումը կարող է կառուցվել նաև P-կարգավորիչի վրա: Չնայած արտաքուստ թվում է, թե խնդիրը լուծելի է միայն ռելե կարգավորիչի օգնությամբ, քանի որ համակարգն ունի մարդու աչքին տեսանելի միայն երկու վիճակ՝ սև և սպիտակ: Բայց ռոբոտն ամեն ինչ այլ կերպ է տեսնում, նրա համար այս գույների միջև չկա հստակ սահման. Կարելի է ասել, որ նա կարճատես է և տեսնում է մոխրագույնի երանգների գրադիենտ անցում։

Սա կօգնի կառուցել P-կարգավորիչ:
Աշխատանքային վիճակը սահմանելով որպես լույսի սենսորից ստացված ընթերցումներ՝ մենք կսովորենք շարժիչների վրա համամասնական կառավարման ազդեցություն գործադրել հետևյալ օրենքի համաձայն.
e=s1-մոխրագույն, որտեղ s1-ը սենսորային ընթացիկ ընթերցումներ է, իսկ մոխրագույնը սահմանված արժեքն է:

k գործակիցը (հավասար է այս օրինակում 2) պետք է լինի բավականաչափ փոքր (1-ից 3): Նման կարգավորիչը արդյունավետ է աշխատում միայն փոքր շեղման անկյունների դեպքում, ուստի ռոբոտը պետք է տեղադրվի շարժման ուղղությամբ, որպեսզի սենսորը լինի սև գծի ձախ կողմում: Հեշտ է նկատել, որ P-կարգավորիչի գծի երկայնքով շարժումը հարթ է: իսկ աշխատանքի որոշ հատվածներում այն ​​շարժվում է գրեթե գծային կամ ուղիղ հետևելով գծի ոլորաններին։

Սենսորային տրամաչափում

Դիտարկենք բանաձևում օգտագործված 48 թիվը։ Սա լույսի սենսորի ընթերցման միջին թվաբանականն է սև ու սպիտակի վրա, օրինակ (40+56)/2=48։ Այնուամենայնիվ, սենսորների ընթերցումները հաճախ փոխվում են պատճառով տարբեր պատճառներովՏարբեր մակերես, սենյակի ընդհանուր լուսավորության փոփոխություն, դիզայնի մի փոքր փոփոխություն և այլն: Հետևաբար, մենք ձեռքով կչափորոշենք ռոբոտը` որոշելով լույսի սենսորի ընթերցումները սպիտակի և սևի վրա:

Գծի շարժում երկու լույսի սենսորներով, օգտագործելով P-կարգավորիչ
Բավական դժվար է խաչմերուկում ճիշտ նավարկել մեկ լուսային սենսորով։ Եթե ​​ցանկանում եք դա անել բավականաչափ բարձր արագությամբ, ապա ձեզ հարկավոր է առնվազն երկու սենսոր, որը տեղադրված է երկու տողի լայնությամբ (կամ ավելի լայն) հեռավորության վրա:
Վարելիս հնարավոր է սենսորի չորս վիճակ.

  • երկուսն էլ սպիտակի վրա - ուղիղ շարժվելով;
  • ձախ (s1) ոչ սևի վրա, աջ (s2) սպիտակի վրա - շարժում դեպի ձախ;
  • ձախը սպիտակի վրա, աջը սևի վրա - շարժում դեպի աջ;
  • երկուսն էլ սևի վրա՝ ուղիղ առաջ:
Դա. սենսորների հավասար ցուցումներով (երկուսն էլ սպիտակ, թե երկուսն էլ սև), ռոբոտը վարում է ուղիղ: Նախքան ռոբոտը գործարկելը, մենք ավտոմատ կերպով կալիբրացնենք երկու սենսորները: Այնուհետև P-կարգավորիչով գծով շարժվելու ալգորիթմը կունենա հետևյալ տեսքը.

k գործակիցը կարող է տարբեր լինել բավականին լայն միջակայքում (1-ից 20 կամ ավելի)՝ կախված գծի կորությունից, ռոբոտի մանևրելու հնարավորությունից և դաշտում սևի և սպիտակի տարբերությունից։
Կարևոր պայման. Ավտոմատաչափումը պետք է իրականացվի մեկ գունավոր մակերեսի վրա և նախընտրելի է լուսավորության վրա, որը կզբաղեցնի ճանապարհի ամենամեծ մասը: Օրինակ, եթե ռոբոտը շարժվում է սև գծի երկայնքով սպիտակ դաշտի վրա, ապա այն պետք է տրամաչափվի սպիտակ դաշտի վրա: Նրանք. Ռոբոտի դիրքը սկզբում պետք է լինի այսպիսին.


Եվ ևս մեկ նշում. Կան սենսորներ, որոնց ընթերցումները տարբերվում են 10-20%-ով։ Ցանկալի է դրանք չզուգակցել մեծ գործակցով կարգավորիչի հետ, քանի որ ընդհանուր լուսավորության կտրուկ փոփոխությամբ, նույնիսկ միատեսակ սպիտակ դաշտում, շեղումները կարող են տարբեր լինել, ինչը կհանգեցնի անսպասելի հետևանքների: Մանրամասներ Հեղինակ՝ Կոնովալով Իգոր     Համամասնական կարգավարը բարելավում է։ Ռելեի հիմնական թերությունն այն է, որ նրան չի հետաքրքրում, թե որքանով են ընթացիկ արժեքները տարբերվում սենսորի նորմալ արժեքից: Այն ունի ընդամենը երկու վիճակ. կամ փորձեք մեծացնել սենսորների արժեքները որոշակի հաստատուն թվով, եթե դրանք փոքր են նորմալ արժեքից, կամ մեծացրեք այն: Դրա պատճառով տատանումները տեղի են ունենում մշտական ​​ամպլիտուդով, ինչը շատ անարդյունավետ է:
    Շատ ավելի տրամաբանական է որոշել, թե որքանով են «հեռու» ընթացիկ ընթերցումները նորմալից և փոխել ամպլիտուդը՝ կախված դրանից: Ավելի պարզ դարձնելու համար եկեք նայենք մի օրինակի: Օրինակը, ինչպես նախորդ հոդվածում, նույնն է. Lego Mindstorms EV3-ի ռոբոտը սև գծի երկայնքով շրջում է լուսային ռեժիմում մեկ գունավոր սենսորով:

Ռոբոտը փորձում է վարել սպիտակի և սևի սահմանի երկայնքով, և այնտեղ սենսորը ցույց է տալիս լուսավորության մոտավորապես 50%-ը: Եվ որքան հեռու է նորմալ դիրքից, այնքան ավելի շատ ջանք է գործադրում ռոբոտը 50%-ի վերադառնալու համար։
    Ծրագիր գրելու համար մենք կօգտագործենք «սխալ» և «վերահսկման գործողություն» տերմինները: Սխալը սենսորի ընթացիկ ընթերցման և սովորականի միջև եղած տարբերությունն է: Մեր դեպքում, եթե ռոբոտը հիմա տեսնում է լուսավորության 20%-ը, ապա սխալը 20-50 = -30% է: Սխալի նշանը ցույց է տալիս, թե որ ուղղությամբ պետք է ռոբոտը շրջվի՝ սխալից ազատվելու համար: Այժմ մենք պետք է շարժիչներին ասենք, թե ռոբոտը որ ուղղությամբ, ինչ արագությամբ և ինչ կտրուկ շրջեն։ Անհրաժեշտ է շարժիչների վրա վերահսկիչ ազդեցություն գործադրել, ինչը նշանակում է, թե որքան արագ այն պետք է վերադառնա իր նորմալ դիրքին: Վերահսկիչ գործողությունը (UP) հաշվարկվում է որպես սխալ (սխալ) բազմապատկված համաչափության գործակցով (k): Այս գործակիցը օգտագործվում է հսկողության գործողության վրա սխալի ազդեցությունը մեծացնելու կամ նվազեցնելու համար: Վերահսկիչ գործողությունը մատակարարվում է ղեկ, որտեղ սահմանված է ռոբոտի միջին արագությունը։
    Ինչպե՞ս կարգավորել համաչափության գործակիցը: Ընտրեք արժեքները փորձարարական ճանապարհորդելու համար, այն կարող է լինել, օրինակ, 0,2-ից մինչև 1,5, կախված ռոբոտի արագությունից և դիզայնից: Եթե ​​գործակիցը չափազանց մեծ է, ապա ռոբոտը շատ կթռչի, եթե այն փոքր է, այն սահուն կշարժվի, բայց ինչ-որ պահի այն կսահի, երբ պտտվում է անբավարար հսկողության պատճառով: Եկեք գրենք ծրագրի երկու տարբերակ՝ փոփոխականներով (նրանց համար, ովքեր արդեն ուսումնասիրել են դրանք) և առանց:


    Բայց այս կարգավորիչը կարող է ամրապնդվել նաև համամասնական և ինտեգրալ բաղադրիչի ներդրմամբ, նկարագրությունը կլինի հաջորդ հոդվածներում. Կհանդիպենք շուտով:

Համամասնական կարգավար

Նկարագրություն

Ավտոմատ կառավարման մեջ հսկիչ գործողությունը u(t) սովորաբար դինամիկ սխալի ֆունկցիա է՝ վերահսկվող x(t) փոփոխականի շեղումը իր սահմանված արժեքից x0(t):

e(t) = x0(t) – x(t):

Սա շեղումով կարգավորման Պոլզունով-Վատ սկզբունքն է կամ հետադարձ կապի սկզբունքը։ Ցանկալի կառավարման գործողության u0(t) ֆունկցիոնալ կախվածության մաթեմատիկական արտահայտությունը կարգավորիչի կողմից չափվող մեծություններից կոչվում է վերը քննարկված օրենք կամ կառավարման ալգորիթմ։

Համամասնական կարգավորիչը սարք է, որն օբյեկտի վրա հսկիչ ազդեցություն է թողնում տվյալ վիճակից դրա շեղմանը համամասնորեն.

Այստեղ k-ն վերահսկիչի շահույթն է:

Տրված x0 վիճակը սովորաբար կոչվում է սահմանված կետ, իսկ դրանից շեղումը e կոչվում է մնացորդ: Հետևյալում որոշակիության համար մնացորդը կնշանակենք err հապավումով (սկսած Անգլերեն բառ«սխալ» - սխալ):

Շարժիչի կառավարում

Փորձառու մարտիկը սուր չի ճոճում այնպես, ինչպես դա անում է ռելեի կարգավորիչի վրա գտնվող ռոբոտը: Մենք պետք է մտածենք ալգորիթմով, որը կպահի սուրը պահող շարժիչը խիստ ֆիքսված դիրքում (նկ. 7.1): P-կարգավորիչը կօգնի դրան:

Թող e 1 - արագության ցուցիչ 1-ի ընթերցումները A շարժիչի վրա - լինեն կարգավորելի փոփոխական: Պարամետրը x0 = 45, իսկ մնացորդը e = 45 – e 1: Այնուհետև շարժիչի վրա հսկիչ գործողությունը տրվում է բանաձևով.

u = k ∙ (45 – e 1):

Այստեղ k-ն շահույթի գործակիցն է, օրինակ 5, որը կուժեղացնի շարժիչի արձագանքը նույնիսկ սահմանված կետից փոքր շեղումների դեպքում:

1 Մի շփոթեք մնացորդային e-ի մաթեմատիկական նշանակումը (սխալից) e 1 կոդավորիչի (encoder-ից) ընթերցումների հետ, որը նախապես սահմանված Robolab միջավայրի փոփոխական է:

Եթե ​​կա շեղում դրական կողմԲացասական հսկողության մուտքը կկիրառվի շարժիչի վրա և հակառակը: Այս կառավարումը կարող է կիրառվել շարժիչի վրա 1-10 մվ կարճ ուշացումով ցիկլով՝ կարգավորիչը թեթեւացնելու համար (նկ. 7.8):

Բրինձ. 7.8. Շարժիչի կառավարման ալգորիթմ՝ օգտագործելով համամասնական վերահսկիչ:

Եթե ​​շահույթի գործակիցը 5-ից հասցվի 100-ի, ապա մեր համամասնական կարգավորիչը կսկսի գործել ռելեի պես՝ առաջացնելով ուժեղ տատանումներ՝ գերակատարման էֆեկտի պատճառով:

RobotC լեզուն չունի այնպիսի հարմար նշում կոդավորիչի ընթերցումների համար, ինչպես Robolab-ում, ուստի ծրագիրը մի փոքր ավելի երկար է թվում.

int k=5, u; nMotorEncoder=0; մինչդեռ (ճշմարիտ)

u=k*(45-nMotorEncoder); շարժիչ=u;

Ավելին, «սրով հարված» հասցնելու համար բավական է ունենալ փոփոխական 45 թվի փոխարեն և փոխել դրա արժեքը դրսից, օրինակ՝ զուգահեռ առաջադրանքից։ Սա ընդգրկված է 8-րդ գլխի ռոբոտ թմբկահարների մասին բաժնում:

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

NXT կարգավորիչն ունի չորս ներկառուցված ժամանակաչափ, որոնցից յուրաքանչյուրը կարող է չափել ժամանակը վայրկյանի տասներորդական, հարյուրերորդական և հազարերորդական: Եկեք տիրապետենք առաջին ժամանակաչափին, որը վայրկյանում կատարում է 10 «խորհուրդ»:

կով». Robolab-ում այն ​​նշանակված է T1 կամ Timer100ms1, իսկ RobotC-ում՝ timer100:

Եկեք դարձնենք շարժիչի շեղման անկյունը ալֆա, որը նշված է նախորդ օրինակում 45-ում, կախված արագացման k 2 գործակցով ժմչփի ընթերցումներից.

ալֆա = k2 ∙ T1.

Հսկիչ գործողությունը կմնա նույնը ուժեղացման գործակից k 1:

u = k 1 ∙ (ալֆա – e 1):

Համառոտ, Robolab լեզվով ծրագրում մենք կկիրառենք կառավարման գործողությունը անմիջապես շարժիչի վրա, նախապես սկզբնավորելով ժամանակաչափը:

Բրինձ. 7.9. Շարժիչի արագության կառավարումը վայրկյանում մեկ պտույտ է:

k 2 = 36 գործակիցը որոշում է, որ մեկ վայրկյանում ալֆա արժեքը մեծանում է մինչև 360, ինչը համապատասխանում է շարժիչի մեկ ամբողջական պտույտին.

int k1=2, k2=36, u, ալֆա; nMotorEncoder=0; ClearTimer (T1); մինչդեռ (ճշմարիտ)

ալֆա=ժմչփ100*k2; u=k1*(alpha-nMotorEncoder); շարժիչ=u;

Օգտագործելով ամբողջ թվերի բաժանումը, ինչպես ընդունված է C լեզվում (և Robolab-ում) ամբողջ թվի տիպի փոփոխականների համար, հնարավոր է հասնել անկյան դիսկրետ փոփոխության, այսինքն. ավելացնում է այն վայրկյանում մեկ անգամ.

ալֆա = T 1 / 10 ∙ k 2:

k 2 = 60 գործակցով ճառագայթի շարժումը կհամապատասխանի ժամացույցի ժամացույցի վրա երկրորդ ձեռքի շարժմանը: Բայց դա բավարար չէ

նկատելի. Պարզության համար կարող եք սահմանել k2 = 30, այնուհետև սլաքը լրիվ պտույտ կկատարի 12 «տիզով»՝ յուրաքանչյուրը 30 աստիճանով: Զգույշ եղեք ամբողջ թվերի բաժանման և բազմապատկման գործողությունների հաջորդականության հետ, դրանց հերթականությունը փոխելը կամ դրանց «նվազեցնելը», անշուշտ, կփոխի արդյունքը (նկ. 7.10):

Բրինձ. 7.10. Ժամացույցի սլաքի շարժման արագացված իմիտացիա:

Եվ վերջապես, մաթեմատիկական թմբկահարի օրինակ։ Անընդհատ առաջ շարժվելու փոխարեն ասեղը P-կարգավորիչի հսկողության տակ կթռչի հետ ու առաջ։ Դրան կօգնի մնացորդով բաժանման գործողությունը, որը C-ում նշվում է % նշանով։ Ոչ բացասական ամբողջ թվի մնացորդը, որը բաժանվում է 2-ի, միշտ կլինի 0 կամ 1:

ալֆա = T 1% 2 ∙ k 2:

Մեծացնելով շեղումը k 2 = 15 անգամ, մենք ստանում ենք տատանվող սահմանային կետ ալֆա, որը կստիպի վերահսկիչին շարժել շարժիչը վայրկյանում 5 անգամ, կամ 0º կամ 15 աստիճանով: Ծրագրում փոփոխությունները չնչին են: Դիտարկենք օրինակ RobotC-ում.

int k1=3, k2=15, u, ալֆա; nMotorEncoder=0; ClearTimer (T1); մինչդեռ (ճշմարիտ)

ալֆա=ժմչփ100%2*k2; u=k1*(alpha-nMotorEncoder); շարժիչ=u;

Այս նախատիպ թմբկահարը կանոնավոր ընդմիջումներով հարվածում է սեղանին: Գլխավորը ճիշտ դիրքից սկսելն է։ Օգտագործելով ամբողջ թվային մաթեմատիկա, դուք կարող եք սահմանել ավելի բարդ ռիթմիկ օրինակ, օրինակ (Աղյուսակ 7.1).

ալֆա = T 1% 5% 2 ∙ k 2:

կենտրոն = S3.

Գործակիցը որոշվում է ցիկլում.

k 1 = c + (S 3 - կենտրոն) / k 2:

Բրինձ. 7.36. Լողացող գործակցով համամասնական կարգավորիչի վրա գծի շարժում:

Ստացված շահույթի վերահսկման օրենքը կարող է կիրառվել ոչ միայն համամասնական բաղադրիչի, այլև ցանկացած այլ բաղադրիչի, ինչպես նաև վերահսկողության գործողության նկատմամբ որպես ամբողջություն (նկ. 7.36):

PID վերահսկիչ

Համամասնական ինտեգրալ ածանցյալ (PID) կարգավորիչը ամենատարածվածներից է և օգտագործվում է մեծ թվով սարքերում: տարբեր տեսակներ, որոնք պահանջում են արագ արձագանքման և համակարգի դիրքավորման ճշգրտություն։ Ինչպես անունն է հուշում, այս կարգավորիչը բաղկացած է երեք բաղադրիչների գումարից և գրաֆիկորեն պատկերված է Նկ. 7.37.

Բրինձ. 7.37. PID կարգավորիչի միացում:

Սա պարզեցված դիագրամ է: Դինամիկ e (t) սխալի արժեքը մատակարարվում է վերահսկիչի մուտքին, իսկ հսկիչ գործողությունը u (t) ստեղծվում է ելքում.

u (t) = p + i + d = k p ∙ e (t) + k i ∙ ò t

e (τ)d τ + k d ∙

դե.

Համամասնական բաղադրիչը, որը ցույց է տրված դիագրամում որպես եռանկյուն, պատասխանատու է համակարգը տվյալ վիճակում տեղադրելու համար: Որոշ դեպքերում դա կարող է առաջացնել գերազանցում հետագա ինքնահոսքերով: Այսինքն, P-կարգավորիչը կարող է «չափից դուրս գալ», և ռոբոտը կսկսի շրջվել մի կողմից:

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

Դիֆերենցիալ բաղադրիչը (D-բաղադրիչ) վերահսկում է համակարգի վիճակի փոփոխության արագությունը և կանխում է հնարավոր գերազանցումը: Որոշ դեպքերում D բաղադրիչը հակառակ նշանով է համամասնականին, իսկ որոշ դեպքերում՝ նույնը։

Համամասնական բաղադրիչին մենք արդեն ծանոթ ենք, դիֆերենցիալը նկարագրված է նախորդ 6-րդ գլխում։ Վերցնենք ինտեգրալը։ Այս բաղադրիչը որոշվում է դինամիկ կերպով՝ ամփոփված նախորդ արժեքով.

i = i + ki × e(t) × dt.

e(t) × dt մեծության ֆիզիկական իմաստն այն է, որ այն կա

համամասնական է համակարգի սխալ վիճակում գտնվելու տևողությանը: Քանի որ k i գործակիցը հանված է փակագծերից, մենք կարող ենք խոսել i արժեքի մասին՝ որպես սխալի տևողության գումար: Այսպիսով, մենք գտնում ենք ինտեգրալը գումարման միջոցով:

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

RAW ձևաչափ

Սենսորային տվյալները մտնում են NXT կարգավորիչ չմշակված, չմշակված տեսքով: Բոլոր սենսորները փոխանցում են օպերացիոն համակարգթվային արժեք 0-ից մինչև 1023, որն այնուհետև մշակվում է համապատասխան վարորդի կողմից և իջեցվում է ավելի հասկանալի ձևի (հեռավորությունը 0...255, լուսավորությունը 0...100, հպում 0 կամ 1 և այլն): Բայց տվյալները կարող են ուղղակիորեն ստանալ՝ շրջանցելով վարորդին։ Այս հումքի ձևաչափը սովորաբար կոչվում է RAW (անգլերեն «raw»-ից): Որոշ դեպքերում այն ​​կարող է օգտագործվել ավելի մեծ ճշգրտության հասնելու համար: Օրինակ, լույսի սենսորի արժեքների շրջանակը կարող է աճել մոտավորապես 10 անգամ: Հենց այս հնարավորությունն է հետագայում օգտագործվում։

Դուք կարող եք տվյալներ ստանալ RAW ձևաչափով ինչպես Robolab-ում, այնպես էլ RobotC-ում: Դա անելու համար սենսորը համապատասխանաբար սկզբնավորվում է, և դրանից տվյալները կարդացվում են հատուկ նախապես սահմանված փոփոխականի միջոցով:

Հավասարակշռող ռոբոտ

Segway ռոբոտի դիզայնը ներկայացված է Նկ. 7.38. ուղղահայաց դիրքով կարգավորիչ, սերտորեն տեղադրված անիվներ և դեպի ներքև ուղղված լույսի սենսոր: Ալգորիթմը որոշ չափով ավելի բարդ կլինի։

Հավասարակշռված դիրքում Segway-ի կայունացման սկզբունքը հետևյալն է. Եթե ​​ռոբոտը թեքվում է առաջ, լույսի ցուցիչի ցուցիչը մեծանում է արտացոլված լույսի շնորհիվ: Դրան ի պատասխան՝ ստեղծվում է կառավարման գործողություն՝ ստիպելով ռոբոտին առաջ շարժվել և այդպիսով նորից ուղղահայաց դիրք ընդունել:

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

Բրինձ. 7.38. Հավասարակշռող Segway ռոբոտ.

Նկ. 7.39 ցույց է տալիս ալգորիթմը Robolab-ում: Դրա մեծ մասը զբաղեցնում է փոփոխականների սկզբնավորումը։ Ճշգրտությունը բարելավելու համար ոչ միայն սենսորային տվյալները կարդացվում են RAW ձևաչափով, այլև փոփոխականների մեծ մասը հայտարարագրվում են իրական float ձևաչափով: PID ալգորիթմն ինքնին օղակի մեջ է:

Բրինձ. 7.39. Հավասարակշռող ալգորիթմը հիմնված է PID վերահսկիչի վրա:

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

Տրված գործակիցներով ռոբոտը լավ կայունանում է պարզ, բաց գույնի լինոլեումի կամ գրասեղանի վրա։ Այսինքն՝ նրան պետք չէ սպիտակմակերեսներ. Գործարկելու համար դուք պետք է ճշգրիտ սահմանեք Segway-ը հավասարակշռության դիրքում: Եթե ​​ռոբոտը սկսում է որոշակի թեքվելով դեպի առաջ կամ հետ, այն անմիջապես կսկսի շարժվել թեքման ուղղությամբ:

Նմանատիպ օրինակ RobotC-ում մի փոքր տարբերվում է մի շարք պատճառներով: Նախ, այս միջավայրի որոնվածով NXT-ի կատարումը մոտավորապես 1,4 անգամ ավելի բարձր է, քան Robolab-ը, ուստի մասշտաբի գործոնը պետք է մեծացվի: Երկրորդ, RAW արժեքները փոխանցվում են ճիշտ հերթականությամբև դուք պետք է կարգավորեք շարժիչները, որպեսզի շրջվեն կամ պարզապես կիրառեք բացասական կառավարման գործողություն.

int gray=SensorRaw; int err, errold=0;

float kp=25, ki=350, kd=0.3; float scale=14;

float dt=0.001; float p, i=0, d, u; մինչդեռ (ճշմարիտ)

err= մոխրագույն-SensorRaw; //Հակառակ նշանով շեղում p=kp*err;

i=i+ki*err*dt; d=kd*(սխալ-սխալ)/dt; սխալ = սխալ; u=(p+i+d)/սանդղակ; շարժիչ=u; շարժիչ=u; սպասել 1 Մվրկ (1);

Ավտոմատ կառավարման տեսության տարրեր դպրոցում1

Կարևոր և հետաքրքիր մեթոդական խնդիր է «կամուրջ գցել» մասնագետի և ուսանողի գիտելիքների ոլորտների միջև՝ օգնելով դպրոցի աշակերտներին տեսնել ապագա մասնագիտության հեռանկարները, այսինքն. իրականացնել կարիերայի ուղղորդում, և ուսանողները տեսնում են դրանց գործնական կիրառելիությունը մասնագիտական ​​գիտելիքներ. Նմանատիպ էֆեկտի հասնելու համար մշակվել են կարգավորիչների հաշվարկման մեթոդներ՝ օգտագործելով մաթեմատիկական գործիքներ, որոնք չեն անցնում այն ​​կողմը: դպրոցական ծրագրերմաթեմատիկայի և ֆիզիկայի մեջ: Մասնավորապես, փոխարեն դիֆերենցիալ հավասարումներՕգտագործվում են տարբերություններ, որոնք լավ են համապատասխանում համակարգչային հսկողության մեջ օբյեկտի և վերահսկիչի միջև փոխազդեցության դիսկրետ բնույթին:

Դիտարկենք, օրինակ, համամասնական (P) և համամասնական ածանցյալ (PD) կարգավորիչների կառուցման խնդիրը պատի երկայնքով շարժական ռոբոտի շարժումը վերահսկելու հարցում։ xt-ով նշենք ռոբոտի և պատի միջև եղած հեռավորությունը, θt-ով` ռոբոտի վերնագրի անկյունը, իսկ u t-ով` հսկիչ գործողությունը տվյալ պահին, համապատասխանաբար t սերիական համարով, որտեղ t = 0, 1, 2, ... - փոփոխության պահերի թվեր

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

Ենթադրելով, որ կուրսի շեղումները անվանական θt =0-ից փոքր են, իսկ ռոբոտի միջին արագությունը հաստատուն է՝ vt=v , ռոբոտի վիճակի փոփոխականների փոփոխությունների դինամիկան կարելի է նկարագրել առաջին մոտավորությամբ։ գծային հավասարումներնշում է.

որտեղ g = h2vr / b.

Սահմանենք ցանկալի հեռավորությունը պատին x*> 0 և հարաբերությամբ որոշենք կառավարման նպատակը (CT):

xt → x* որպես t→∞:

Այժմ եկեք, բնականաբար, բովանդակային մակարդակում ներկայացնենք ասիմպտոտիկ կայունության հայեցակարգը որպես (4) համակարգի լուծումների հատկություն՝ ապահովելով նպատակային արժեքի (5) ձեռքբերումը ցանկացած սկզբնական պայմաններում, որոնք բավականին քիչ են տարբերվում թիրախային պայմաններից: Հեշտ է տեսնել, որ u t = 0-ի համար (4) հավասարման լուծումը ցանկացած հաստատուն արժեք է x t = x*: Բայց քանի որ հավասարումը (4), որը համապատասխանում է կրկնակի ինտեգրատորի մոդելին (կրկնակի գումարիչ), չունի ասիմպտոտիկ կայունության հատկություն, կառավարման կենտրոնը (5) ժամը մշտական ​​կառավարումձեռք չի բերվում: Սա հեշտությամբ կարելի է ցույց տալ վերլուծական կերպով՝ ամփոփելով մի շարք



 


Կարդացեք.



Ինչպես պատրաստել տավարի լեզուն տանը

Ինչպես պատրաստել տավարի լեզուն տանը

Խոհարարական արդյունաբերությունը առաջարկում է մեծ քանակությամբ համեղ ուտեստներ, որոնք կարող են բավարարել ցանկացած մարդու գաստրոնոմիական կարիքները։ Նրանց թվում...

Սաղմոնը թխված է ջեռոցում

Սաղմոնը թխված է ջեռոցում

Ջեռոցում թխած սաղմոնը գեղեցիկ տոնական ուտեստ է։ Եթե ​​ցանկանում եք իմանալ, թե ինչպես պատրաստել այն համեղ, ապա կարդացեք գաղտնիքները և դիտեք համեղ...

Ինչու՞ երազում մկներ տեսնել:

Ինչու՞ երազում մկներ տեսնել:

ըստ կենդանիների երազանքի գրքի, քթոնիկ խորհրդանիշ, որը նշանակում է խավարի ուժեր, անդադար շարժում, անիմաստ հուզմունք, իրարանցում: Քրիստոնեության մեջ...

Երազեք քայլել ծովի վրա. Ինչու՞ ես երազում ծովի մասին: Ծովում լողալու երազանքի մեկնաբանություն. Երազում մոլեգնած ծովը

Երազեք քայլել ծովի վրա.  Ինչու՞ ես երազում ծովի մասին:  Ծովում լողալու երազանքի մեկնաբանություն.  Երազում մոլեգնած ծովը

Եթե ​​երազում տեսնում ենք ջուր՝ լինի դա ջրվեժ, գետ, առու, թե լիճ, այն միշտ ինչ-որ կերպ կապված է մեր ենթագիտակցության հետ։ Քանի որ այս ջուրը մաքուր է...

feed-պատկեր RSS