Ինքնավար մեքենաները և DARPA-ի մեծ մարտահրավերը. մաս 3
Երկրորդ Մեծ Մարտահրավերը
Ավտոնոմ (autonomous
) ուղորոշմանը պետք է մոտենալ որպես ծրագրային խնդիր։
Երկրորդ Մեծ Մարտահրավերը
Երկրորդ Մեծ Մարտահրավերը տեղի ունեցավ մեկուկես տարի անց կրկին Mojave֊ի անապատում։ Յուրաքանչյուր հինգ րոպեն մեկ մի ռոբոտ մեքենա շարժվում էր մեկնարկային գծից, որպեսզի երթուղու վրա մեքենաները մեկը մյուսին չխանգարեին։
Կարմիր թիմի մարտավարությունը կրկին նույնն էր՝ գլխավորապես կենտրոնանալ քարտեզագրման և ուղորոշման վրա։ Այս անգամ ընդամենը մեկ ամսում թիմը երեք վարորդ էր ուղարկել՝ սկանավորելու անապատի 2000 մղոն երկարությամբ տարածք, որպեսզի գտնեն պոտենցիալ երթուղի, որտեղով կարող էր անցնել մրցավազքը։
Նախկինի պես անձնակազմը մրցավազքից երկու ժամ առաջ մշակել էր երթուղին, որպեսզի օգներ համակարգչին ծրագրել արահետը, որը հետո պետք է վերբեռնեին Humvee-ում։ Նրանք նաև կոդավորել էին Humvee-ն մի կանոնով, որի նպատակն էր կանխել մեքենայի հնարավոր բախումը մեկ այլ ժայռի հետ։ Մեքենան ծրագրավորել էին այնպես, որ եթե այն բախվեր խոչընդոտի, անիվները պտտվեին, բայց GPS սենսորը ցույց տար, որ այն ոչ մի տեղ չի շաժվում, ապա մեքենան պետք է 10 մետր հետ գնար, գնահատեր խոչընդոտները և փորձեր կրկին։
Մեքենաների համար այս մրցավազքի ամենաբարդ մասն այսպես կոչված Beer Bottle Pass-ն էր։ Այն 1․5 մղոն երկարությամբ հողային ճանապարհ էր, որի մի կողմում ուղղաբերձ ժայռ էր, իսկ մյուս կողմում՝ 100 ոտնաչափ ոչ երթևեկելի հատված։
Մրցակիցները հավաքվել էին ուղիղ եթերով դիտելու, թե արդյոք իրենց ռոբոտ մեքենաները կկարողանան հաղթահարել դա։ Կարմիր թիմի Humvee-ն բավականին լավ անցավ այդ ճանապարհը, չնայած որ մի փոքր քերծվեց։ Իրականում Humvee-ն մրցավազքի ամբողջ 132 մղոնն ընթացավ հաջողությամբ, դա գրեթե քսան անգամ ավելին էր այն ճանապարհից, որ նա անցել էր առաջին մրցավազքի ժամանակ։ Բայց նա, միևնույն է, չհաղթեց։
Մրցավազքի հաղթողը Stanley-ն էր՝ մեքենա, որը ստեղծվել էր Stanford Racing թիմի կողմից, որն այդ տարվա նորեկներից էր։ Stanley-ն այնքան արագ էր ընթանում, որ երկու անգամ ստիպված եղավ կանգնել իր դիմացով ընթացող մեքենային ժամանակ տալու համար։ Ի վերջո, մրցավազքի կազմակերպիչները կանգնեցրին այդ մեքենային՝ Stanley-ին թույլ տալով անցնել։ Եվ վերջում Stanley-ն Կարմիր թիմի Humvee-ից տասը րոպե շուտ ավարտեց մրցուղին։
Stanford Racing թիմը ղեկավարվում էր Sebastian Thrun-ի կողմից։ Նա Stanford’s-ի արհեստական բանականության լաբարատորիայի ղակավարն էր՝ միաժամանակ լինելով ամենաերիտասարդ մասնագետն, ով երբևէ զբաղեցրել է այդ պաշտոնը։ Sebastian֊ը նույնպես Carnegie Mellon-ից էր, որտեղ նա ընդամենը մի քանի տարի առաջ ռոբոտաշինության լաբարատորիայի ֆակուլտետային կրտսեր անդամ էր։
Չնայած նա առաջ երբևէ ինքնավար մեքենա չէր ստեղծել, սակայն առաջին մեծ մարտահրավերը իսկական ոգեշնչում դարձավ նրա համար։ Տեղյակ լինելով առաջին մրցավազքի արդյունքներից, որը հիշվում էր որպես «ջախջախում անապատում», նա ինքն իրեն հարց էր տվել՝ «Կարո՞ղ ենք մենք դա ավելի լավ անել»։ Երկու Volkswagen Touaregs-ի և ընկերության Էլեկտրոնային հետազոտության լաբարատորիայի աջակցությամբ՝ նա կարողացավ ոգեշնչումը դարձնել գործողություն։ Sebastian֊ը մրցավազքի մասին իր անձնական հաշվետվություններից մեկում գրել է, որ մարդկային ներուժ էր հավաքել Stanley-ն կառուցելու համար՝ նախ կազմակերպելով սեմինար դաս՝ նախատիպը ստեղծելու մտադրությամբ։ Դա իհարկե սովորական դաս չէր, չկար դասագիրք, ուսումնական պլան կամ դասախոսություն։ Դասընթացի 20 մասնակիցներն ընդամենը երկու հոդված էին կարդացել այդ սեմինարի համար, որպեսզի կողմնակալ չլինեին որևէ հատուկ մոտեցման նկատմամբ։ Ութ շաբաթվա ընթացքում նրանք ստեղծեցին մեքենայի նախատիպը, որը կարող էր ավելի հեռուն գնալ անապատային երթուղով (թերևս ոչ ավելի արագ), քան Humvee-ն։
Ո՞րն էր այս մրցավազքում Stanley-ի հաջողության գաղտնիքը։ Նախորդ տարվա թիմերը գրեթե հույս չէին դրել այնպիսի բաների վրա, ինչպիսին է օրինակ խոչընդոտների հայտնաբերումը։ Stanford Racing թիմը գիտակցում էր, որ ճիշտ չէր շրջակա միջավայրը մանրակրկիտ զննելու փոխարեն ամբողջ կարևորությունը տալ քարտեզագրմանն ու ուղորոշմանը։ Չնայած նրանց մրցակից Կարմիր թիմը երկրորդ Մեծ մարտահրավերից առաջ հետազոտել էր անապատային ճանապարհի 2000 մղոնը, բայց դա իրական մրցավազքային երթուղու միայն 2%-ն էր։ Stanford Racing թիմը գիտեր, որ նույնիսկ հսկա Humvee-ն կարող էր կանգնել ժայռերի պատճառով, և DARPA-ն հիշեցրել էր, որ քառանիվ փիքափ (pickup
) բեռնատարը կարող է հաղթահարել երթուղին, ուստի նրանք որդեգրեցին նախագծային մեկ այլ գաղափարախոսություն․ ավտոնոմ ուղորշմանը մոտենալ որպես ծրագրային խնդրի։ Դասընթացից հետո, որի ընթացքում մասնակիցները նախագծել էին ռոբոտի նախատիպը, Sebastian֊ը և մի փոքր խումբ (դասընթացի մասնակիցներից մի քանիսը և մի քանի հետազոտողներ) մի կողմ դրեցին իրենց կոդավորման մեծ մասը և սկսեցին նորից ծրագրակազմ գրել Stanley-ի համար, այս անգամ ավելի ուշադիր, քանի որ նրանք մեծ նշանակություն էին տալիս մեքենայում ներառված ծրագրակազմին։ Սակայն, նրանք չէին պատրաստվում հույսը դնել որևէ ծրագրակազմի վրա, նրանք որոշել էին օգտագործել մեքենայական ուսուցում՝ երթևեկելու խնդիրը լուծելու համար։
Մեքենայական ուսուցումը ինքնավար մեքենաներում
Stanford թիմն առաջին հետազոտական խումբը չէր, որ օգտագործում էր մեքենայական ուսուցումը ինքնավար մեքենա նախագծելու համար։ Այն ուսումնասիրվել էր ինքավար մեքենաների համատեքստում՝ սկսած առնվազն 1980-ականներից։ Բայց նրանք մեկն էին առաջին ժամանակակից ինքնավար մեքենաների թիմերից, որ այսպիսի մեծ հույսեր կապեցին մեքենայական ուսուցման հետ։ Նրանք վերջինիս ինտեգրեցին ինքնավար մեքենաների ստեղծման գործընթացում գրեթե մեկ տանսամյակ առաջ այն բանից, երբ «մեքենայական ուսուցում» տերմինն ի վերջո տարածվեց լրատվամիջոցներում։ Sebastian’s-ի թիմը մրցավազքից հետո իրենց մեքենայի նկարագրություններից մեկում այսպես էր գրել․
«Թե՛ մրցավազքից առաջ, թե՛ դրա ընթացքում մեքենայական ուսուցման մասշտաբային կիրառումը դարձրեց Stanley-ին դիմացկուն և ճշգրիտ։ Մենք վստահ ենք, որ այս մեթոդները տեղի ունեցած լայնածավալ թեստավորման հետ միասին իրենց նշանակալից ներդրումն են ունեցել այս մրցավազքում Stanley-ի հաջողության մեջ»։
Երբ Sebastian’s-ն ու իր թիմը սկսեցին կառուցել Stanley-ին, նրանց առջև մի հսկայական խնդիր էր դրված։ Նրանց անհրաժեշտ էր այնպես նախագծել իրենց ավտոմատացված սարքը, որ վերջինս կարողանա ոչ միայն ընկալել աշխարհը, այլ նաև արձագանքել․ նոր երթուղի փնտրելիս Stanley-ն չէր կարող մի քանի վայրկյան դադար տալ, նա պետք է անխափան որոշումներ կայացներ, քանի որ նրա աշխարհընկալման մոդելը փոխվել էր։ Թիմն այս խնդրի շուրջ մտածում էր այնպես, ինչպես կմտածեին ճարտարապետները նոր շենք նախագծելիս։ Նրանց անհրաժեշտ էր գտնել «ճարտարապետություն» Stanley-ի համար։
Stanley-ի «ճարտարապետությունը»
Stanford֊ի թիմի ստեղծած կառուցվածքը (architecture) կազմված էր երեք առանձին մասերից, ինչպես ցույց է տրված գծապատկեր 1-ում։ Կառուցվածքի ձախ կողմում սարքավորման շերտն էր, որը պարունակում է տվյալների հավաքման սենսորներ և մղիչներ (actuators
)՝ ղեկը, արգելակները և շարժիչի արագությունը վերահսկելու համար: Այս սարքը որևէ խելացի գործողություն չէր կատարում, նրա գործառույթը կայանում էր սենսորներից (տեսախցիկներ, լազերային սկաներներ և GPS համակարգ) տվյալներ բերելու և մեքենայի սարքավորումը վերահսկելու նպատակով ծրագրման շերտի հրահանգները (օր․շարժիչի արագություն, անիվի անկյուն) օգտագործելու մեջ։ Բացի Kalman filters-ից, որ կցված էր սարքավորմանը՝ այս շերտը գրեթե ոչինչ չէր անում, որը հնարավոր լիներ վերագրել արհեստական բանականությանը կամ մեքենայական ուսուցմանը։
Հակառակ՝ աջ կողմում, այսպես կոչված «մտածող» շերտն էր, որը մեքենայի համար իրականացնում էր բարձրակարգ պլանավորում (Stanley
-ում այդքան էլ շատ բարձր մակարդակի բանականություն չկար, բայց այն, ինչ կար, հենց այս շերտում էր)։ Այս շերտը, տեսնելով ճանապարհի խոչընդոտները, գլուխ էր բերում, թե մեքենան ինչպես պետք է շրջանցի խոչընդոտները։ Կարելի է ասել՝ այս շերտը պատասխանատու էր բոլոր այն որոշումների համար, որոնց շնորհիվ մեքենան պետք է երթևեկեր։ Այն հրահանգներ էր ուղարկում ձախակողմյան շերտին, հաճախ նաև մեզ արդեն ծանոթ եռականոն կարգավորիչներին (three-rule controllers
)։ Եթե ծրագրման շերտը (the planning layer
) ուզում էր, որ շարժիչն ունենա որևէ հստակ արագություն, օրինակ՝ 25 մղոն/ժամ, այն պարզապես պետք է ուղարկեր համապատասխան հրահանգ սարքավորման կարգավորիչներին։
Նկար 1-ի միջին շերտը տեղակայված է վերահսկող և մտածող շերտերի միջև։ Այն սենսորի դեռևս չմշակված և նախնական տեղեկությունները վերածում է մեկնաբանելի մոդելների, որպեսզի մտածող շերտը կարողանա բարեհաջող աշխատել։ Այս մոդելներից մի քանիսը պարզապես ամփոփում էին բարձրակարգ երթուղին, որին Stanley-ն պետք է հետևեր, երթուղի, որ մեքենան պլանավորել էր դեռևս մրցավազքի սկզբին։ Մյուս մոդելները թվեր էին պարունակում, որոնք Stanley-ին տեղեկացնում էին, թե ինչ են տեսնում վերջինիս սենսորները։ Մեքենայական ուսուցման մի շարք մոդուլներ, այդ թվում որոշ ճանապարհային ուսումնասիրության համակարգեր շարունակաբար աշխատում էին միջին շերտում՝ վերլուծելով սենորից ստացված խառնիխուռն տվյալները և դրանք դարձնելով հասկանալի մեկնաբանություններ ծրագրման շերտի համար։ Սենսորից ստացվող այս տվյալները փոխանցվում էին միջին շերտին, որպես կետային ամպեր։ Մեկնաբանելով դրանք ձախակողմյա ծրագրման շերտի համար՝ միջին շերտը նրան հնարավորություն էր տալիս կենտրոնանալ բացառապես բարձր մակարդակի դատողությունների վրա։ Եվ, չնայած կենտրոնական շերտում աշխատող այս մոդուլները հաճախ նախագծված էին բավականին խելամտորեն և օգտագործվում էին մեքենայական ուսուցման բարդ ալգորիթմներում, նրանք իրականում այնքան էլ «խելացի» չէին։ Այդպիսի տպավորություն էին թողնում, միայն երբ աշխատում էին ծրագրման շերտի հետ համատեղ։ Եկեք հիմա մի փոքր ուսումնասիրենք միջին շերտի ընկալման մոդուլները։
Խոչընդոտների շրջանցում
Կարմիր թիմի նման Stanford Racing թիմը նույնպես լազերային սկաներներ էր կցել մեքենային, որպեսզի վերջինս «տեսնի» իրեն շրջապատող տեղանքը։ Նրանք այնպես էին ծրագրավորել Stanley-ին, որ մեքենային թվա, թե իր շուրջը ցանց կա, ինչպես պատկերված է գծապատկեր 2-ում (պարզապես իրենց քարտեզում վանդակների չափը շատ ավելի փոքր էր)։
Stanley-ն օգտագործում էր լազերային սկաներներից ստացված տվյալները՝ իմանալու, թե ցանցում որ վանդակներն են «զբաղեցված» որևէ օբյեկտով (այդպիսի վանդակները մուգ գույնով են ներկված)։ Այնուհետև, մեքենայի պլանավորման ալգորիթմները թույլ էին տալիս երթևեկել այն վանդակներով, որոնք դատարկ էին՝ միաժամանակ շրջանցելով ոչ ազատ վանդակները։ Բայց ինչպե՞ս էին նրանք իմանում՝ վանդակը ազատ է, թե՞ ոչ։ Sebastian-ը և իր թիմը ծրագրավորել էին մեքենան այնպես, որ այն կարողանա դա իմանալ՝ հաշվարկելով յուրաքանչյուր վանդակի հատկանիշները, օրինակ՝ վանդակում տարբեր կետերի բարձրությունները, կամ թե որքան ժամանակ է անցել նախորդ չափագրումներից։ Այդպիսի տեղեկություններ կարելի էր ստանալ լազերային սկաներից։ Հետո նրանք օգտագործում էին այդ չափագրումները, որպեսզի գնահատեին, թե որքանով է հավանական, որ որևէ վանդակ պարունակի երկու տարբեր բարձրություններով կետեր։ Եթե վանդակն իսկապես պարունակում էր երկու միմյանցից բավականին տարբերվող բարձրություններ ունեցող կետեր, ապա Stanley-ն նման վանդակը համարում էր «զբաղեցված»: Այս մոտեցումը հիրավի լավ գաղափար էր, բայց Sebastian-ն ու իր թիմը գիտակցում էին, որ վանդակները տարբերակելու իրենց ալգորիթմն այդքան էլ լավը չէր։ Օրինակ՝ նրանց սենսորները հակված էին ժամանակի ընթացքում շեղվելու։ Սակայն, եթե Stanley-ի լազերային սկաները շեղվեր թեկուզ մի քանի աստիճանով, ապա մեքենան կմտածեր, թե իր դիմաց որևէ արգելք կա, որի պատճառով էլ իր աջակողմյա ծրագրման ալգորիթմը հրահանգում է շրջանցել ճանապարհը։ Stanford թիմը կարող էր հարյուր հազարավոր դոլարներ ներդնել առաջատար հետազոտող գիտնականների կողմից նախագծված թանկարժեք դիրքորոշման համակարգ ձեռք բերելու համար, բայց չէ որ թիմն ինքն ուներ նման գիտնականներ, ուստի նրանք ինքնուրույն ստեղծեցին մի մոդել, որն ավելի դիմացկուն էր չափագրումների նմանատիպ սխալմունքների դեպքում։ Ի վերջո, նրանց ստացած մոդելը ճշգրիտ էր, առնվազն՝ բնույթով, չնայած այն նույնպես ուներ կարգավորելու շատ պարամետրեր։
Wired-ի թղթակից Joshua Davis-ը նշել էր, որ Sebastian-ը քաջատեղյակ է այս սահմանափակումներից։ Մրցավազքից մի քանի ամիս առաջ, երբ Sebastian-ը մեքենայի հետ անապատում էր, նա ճանապարհի մի կողմում մի փոքր ցեխ էր լցրել, և հիասթափվել՝ տեսնելով, որ մեքենան փորձում էր շեղվել ճիշտ ճանապարհից։ Այն գրեթե վթարի էր ենթարկվում մի առվում: Sebastian-ը համոզվեց, որ Stanley-ն ուներ նույն խնդիրը, ինչ առաջին մարտահրավերի մասնակիցները, որոնք վախենում էին թփերից և ստվերներից։ Ուստի, նա լրջորեն մտածում էր՝ փորձելով օգտագործել այնպիսի ալգորիթմներ, որոնք թույլ կտային մեքենային ավելի լավ կիրառել իր սենսորներից ստացված տվյալները: Ահա այստեղ է պետք գալիս մեքենայական ուսուցումը։ Sebastian֊ի լուծումը հետևյալն էր. ունենալ վարորդ, որը կվարի մեքենան, մինչ Stanley-ի լազերային սկաներները կչափագրեն շրջապատող աշխարհը, և կպահպանի չափագրումները՝ հետագայում օգտագործելու նպատակով (Sebastian֊ն ինքն էլ վարել էր Stanley-ն այդ չափագրումները հավաքագրելու համար)։
Գաղափարն այն էր, որ անկախ վարորդից՝ Stanley-ն պետք է ընթանար միայն ապահով ճանապարհով, իսկ մնացյալ վտանգավոր հատվածներով՝ ոչ։ Նրանք կարող էին օգտագործել իրենց սենսորի չափագրումները՝ կարգավորելու խոչընդոտների հայտնաբերման մոդելում առկա բազմաթիվ պարամետրերը։ Այսպես նրանք փաստացիորեն կարող էին տվյալներով «մարզել» իրենց ալգորիթմը։
Sebastian’s-ի թիմի կողմից օգտագործված այս մեթոդը, որով կարելի էր կանխատեսել, թե ճանապարհի որ հատվածն է ապահով երթևեկելու համար, հայտնի էր, որպես վերահսկվող դասակարգում։ Անհրաժեշտ է իմանալ, որ Stanford Racing թիմի կողմից կիրառված դասակարգիչները համակարգչին հնարավորություն էին տալիս ավտոմատ կերպով կանխատեսել, թե երկու կատեգորիաներից որին է տվյալ օբյեկտը պատկանում։ Համաձայն այդ գաղափարի՝ պետք էր հավաքագրել չափագրումները՝ օգտագործելով կանխատեսումներ կատարող պարզ մաթեմատիկական ֆունկցիա։ Այդ ֆունկցիան կարող էր ունենալ կարգավորման կոճակներ, և ահա այստեղ էլ օգնության էր գալիս մեքենայական ուսուցումը․ եթե այս կոճակները կարող էին կարգավորվել տվյալներով, ապա կանխատեսումները կարող էին լինել չափազանց ճշգրիտ։ Քանի որ Stanford Racing թիմը կարգավորումները կատարում էր՝ հիմնվելով տվյալնների վրա, նրանց տեղանքի ուսումնասիրման ալգորիթմը բարելավվեց ըստ մեծության կարգերի։ Մինչ այս գաղափարի իրականացումը նրանք 12․6% դեպքերում ապահով ճանապարհը սխալմամբ դիտարկում էին որպես վտանգավոր, իսկ այսպիսի սխալը կարող էր Stanley-ին ամբողջովին հանել ճիշտ երթուղուց։ Դասակարգիչը տվյալների հետ համապատասխանեցնելով՝ նրանք այս օրինաչափությունը նվազեցրին 6000 անգամ։ Սա առաջին խոշոր քայլն էր, որով Stanford Racing թիմն առաջ անցավ Կարմիր թիմի «հսկա աչքից»։
Ճամփեզրի որոնումներ
Արդյո՞ք հիմա Stanley-ն կարող էր անվտանգ ընթանալ ճանապարհով։ Ոչ այնքան։ Այս դասակարգիչը մեքենային հաղորդում էր, թե իր տեսադաշտում գետնի որ հատվածն է երթևեկելի, բայց այն ոչինչ չէր հաղորդում ճանապարհների մասին և չէր ստիպում մնալ երթուղու վրա։ Նման դասակարգիչով Stanley-ն կարող էր հեշտությամբ դուրս գալ երթուղուց, եթե այդ ոչ մրցավազքային ճանապարհը երթևեկելի լիներ։ Չնայած, դա հավանաբար նորմալ էր։ Ի վերջո, մրցավազքը տեխնիկապես չէր պահանջում Stanley-ին մնալ երթուղու վրա, և քանի դեռ դասակարգիչը հաղորդում էր, որ տվյալ տեղանքը երթևեկելի է, ուրեմն, ըստ էության, երթևեկելն անվտանգ էր, այնպես չէ՞։ Սակայն, Stanford Racing թիմը գիտակցում էր, որ ճանապարհից դուրս գալը հղի էր վտանգաներով։ Ինչպես նրանք գրել էին մրցավազքից հետո․
«Խոչընդոտները՝ ժայռեր, թփեր, պարսպի սյուներ և այլն, հիմնականում գտնվում են ճամփեզրերին, այսինքն` ճանապարհի կենտրոնով ընթանալիս կարելի է խուսափել այս անապատային խոչընդոտներից՝ առանց նույնիսկ դրանք հայտնաբերելու»։
Թերևս պատահական չէ, որ նրանց կողմից ցուցակագրված օբյեկտներից որոշներին էլ հենց բախվել էր Կարմիր թիմի Humvee-ն։ Այնուհանդերձ, նրանց տեսակետը պարզ էր։ Ուստի, նրանք Stanley-ի տեսողական համակարգի համար մեկ այլ ալգորիթմ մշակեցին, այս մեկը պետք է օգներ մեքենային գտնել ճամփեզրերը։
Stanford Racing թիմը հիմնվեց այն փաստի վրա, որ ճամփեզրերը, ըստ էության, պետք է զուգահեռ լինեն իրենց կողմից նախանշված ուղուն։ Նրանք Stanley-ին կցեցին լրացուցիչ լազերային սկաներներ, որոնք պետք է սկանավորեին մեքենայի շուրջ գտնվող գետնի հատվածը և նախորոշված ուղուն զուգահեռ գծեր անցկացնելով՝ գտնեին ճամփեզրը։
Ճամփեզրի հայտնաբերման այս մոդուլը հետո էվրիստիկորեն (մեթոդական գյուտարարություն) ստուգում էր, թե արդյոք լազերի կողմից սկանավորված գծերում չկային արգելքներ։ Յուրաքանչյուր կողմի ծայրամասային վերջին գիծը «վճռում էր», թե որտեղ էին տեղակայված ճանապարհի սահմանները, այսպիսով մինչ Stanley-ն երթևեկում էր, մոդուլը հավաքագրում էր այս զննումները։ Նախնական տարբերակում սա պարզապես նման էր կետերի հաջորդականության՝ կարծես կողային ճյուղավորումներ մեքենայի երկու կողմերում։ Սակայն, երբ Stanley-ն անցկացրեց այն մեկ այլ Kalman filter-ով, այն արդեն անխափան և ճշգրիտ տվյալներ ուներ ճամփեզրի մասին, որոնց շնորհիվ էլ կարող էր շարունակաբար հաղորդել, թե որն էր ճանապարհի կենտրոնական հատվածը։ Stanley-ի երթուղու պլանավորման ալգորիթմն այնպես էր ծրագրավորված, որ մեքենան պետք է մշտապես ուղղվեր դեպի ճանապարհի կենտրոնական մասը, եթե իր ուղու վրա այլ արգելքներ չլինեին (ռոբոտների մրցավազքն իրականացնելու նպատակով ճանապարհը փակ էր այլ երթևեկությունների համար, ուստի հանդիպակաց մեքենաներ չէին կարող ի հայտ գալ):
Ճանապարհի դիտում
Այնուամենայնիվ, Stanley-ի տեսողական համակարգը մնում էր խնդրահարույց։ Չնայած այս մոդուլները կարող էին մեքենային պահել ճանապարհի վրա, բայց նրա լազերային սկաներները ունակ էին «տեսնել» միայն մոտ 30 մետր։
Դա բավական չէր Stanley-ի համար, որպեսզի վերջինս կարողանար անվտանգ երթևեկել ավելի քան 25 մղոն/ժամ արագությամբ, քանի որ անապատային այս ճանապարհները հաճախ հետադարձեր էին ունենում, որոնցից մեկն էլ հենց կանգնեցրել էր Humvee-ին առաջին մրցավազքի ժամանակ։ Sebastian-ը և իր թիմը հաշվարկել էին, որ 25 մղոն/ժամ արագությունը չափազանց դանդաղ էր մրցունակ լինելու համար, ուստի նրանք փնտրում էին մեկ այլ տարբերակ, որով Stanley-ն կկարողանար տեսնել ավելի հեռուն, քան լազերային սկաներներն էին տեսնում։ Նրանց լուծումը ռոբոտի դիմային հատվածին գունային տեսախցիկ կցելն էր։ Տեսախցիկը կարող էր տեսնել ավելի հեռուն, քան լազերային սկաներները։ Եթե նրանք կարողանային հստակ սահմանել Stanley-ի առջև ձգվող ճանապարհը, Stanley-ն կարող էր ենթադրել, որ իրեն սպասվող ճանապարհն անվտանգ է և արագությունն ավելացնել 25 մղոն/ժամից 45 մղոն/ժամ։
Երբ մենք՝ մարդիկ, նայում ենք որևէ ճանապարհի նկարի, մենք անմիջապես կարող ենք ասել, թե նկարի որ մասն է ճանապարհը, որը՝ ճամփեզրը և որը՝ երկինքը։ Այս մանրամասներից և ոչ մեկը առաջին հայացքից ակնհայտ չէ համակարգչային ծրագրի համար։ Stanley-ին կրկին անհրաժեշտ էին քայլ առ քայլ հրահանգներ`իր տեսախցիկի պատկերների միջից ճանապարհը գտնելու համար։ Այս նպատակով Stanley-ն կիրառելու էր մեքենայական ուսուցման մեկ այլ մոտեցում, որը կոչվում է կլաստերային դասակարգում (clustering
)։ Այս մեթոդով հնարավոր էր խմբավորել միևնույն գույնի պիքսելները։ Դրա միջոցով Stanley-ի համար ավելի հեշտ կլիներ իմանալ՝ արդյոք տվյալ պիքսելը ճանապարհին է պատկանում, թե ճամփեզրի մի հատվածի։
Հասկանալու համար, թե ինչպես էր Stanley-ն դա անում, արի պատկերացնենք, որ դու վամպիր ես և հենց նոր լվացք ես արել։ Քանի որ դու վամպիր ես, քո սիրելի գույներն են կարմիրն ու սևը, և քո գուլպաները կարմիրի ու սևի տարբեր երանգների են։
Լվացքատնից վերադառնալով՝ դու սկսում ես դասավորել քո գուլպաները այնպես, որ նման երանգներ ունեցողներն իրար կողքի լինեն։ Որոշ ժամանակ անց դու կունենաս մի կույտ կարմիր և մի կույտ սև գուլպաներ, և նրանք որոշ չափով կհամընկնեն երբ ամենամուգ կարմիր գուլպաները գտնվեն ամենամուգ մոխրագույն գուլպաների կողքին։ Բայց հիմա պատկերացրու, որ դու պատահաբար գտնում ես բաց կանաչ գույնի գուլպա քո լվացքում։ Այս մեկն, անշուշտ, չի պատկանում կույտերից ոչ մեկին, ուրեմն դու ենթադրում ես, որ այն քո հագուստի հետ է խառնվել լվացքատանը։ Ուստի, դու մի կողմ ես դնում կանաչ գուլպան։
Հենց այսպես էլ Stanley-ն պետք է դատողություններ աներ տեսախցիկի պիքսելների մասին։ Այն ստեղծել էր ճանապարհային պիքսելների խմբեր՝ նայելով իր առջև գտնվող ճանապարհը ներկայացնող պիքսելներին։ Կարելի է ենթադրել, որ անապատում ճանապարհի պիքսելները մոխրագույն և շագանակագույն են, ուստի, Stanley-ն պետք է տարբերակեր մի խումբ մոխրագույնին մոտ և մի խումբ շագանակագույնին մոտ պիքսելներ։ Հետո Stanley-ն պետք է ստուգեր՝ արդյոք պատկերի մնացած պիքսելները համապատասխանում էին այս երկու խմբերից որևէ մեկին։ Եթե համապատասխանում էին, ապա ճանապարհի այդ հատվածը երթուղու մի մասն էր, հակառակ դեպքում Stanley-ն հրաժարվում էր ճանապարհից, հենց այնպես ինչպես դու կհրաժարվեիր կանաչ գուլպայից։ Հենց որ Stanley-ն գլուխ բերեր, թե որ պիքսելներն էին «պատկանում» ճանապարհին, այն կարող էր, պարզագույն երկրաչափություն օգտագործելով, հաշվարկել, թե որքան էր ձգվում իր առջև ընկած երթուղին։ Եթե իր առջև երկար տարածություն էր, մեքենան կարող էր մեծացնել արագությունը։ Ճանապարհի դիտման այս մոդուլը մշտապես աշխատում էր՝ կրկնվելով կանոնավոր կերպով և շարունակաբար ճշգրտելով ճանապարհի գույնի գնահատումը։
Կարո՞ղ էր Stanley-ն համոզված լինել, որ ճանապարհի գույնի գնահատման համար ճիշտ պիքսելներ է ընտրում։ Հնարավոր չէ՞ր, որ դասակարգում կատարելու համար մեքենան պատահմամբ ճամփեզրից ընտրեր պիքսելներ, այլ ոչ թե բուն ճանապարհից։ Իհարկե հնարավոր էր, որ ալգորիթմը սխալվեր ճանապարհային պիքսելների հարցում, ինչպես և ցանկացած այլ ալգորիթմ կարող էր սխալվել։ Այս դեպքում երկու մեղմացուցիչ հանգամանք կար, նախ այն, որ Stanley-ն այլ մոդուլներ նույնպես ուներ, օրինակ՝ այն մոդուլը, որ հայտնաբերում էր երթևեկելի տեղանքը, և այն, որ ալգորիթմն օգտագործվում էր միայն արագությունը վերահսկելու համար, ոչ թե ղեկը։
Նույնիսկ եթե Stanley-ն մի փոքր դուրս գար ճանապարհից, այն, միևնույն է, դիմացկուն էր բախումների նկատմամբ։ Եվ հենց որ Stanley-ն վերադառնար ճանապարհի վրա, նրա ճանապարհի դիտարկման մոդուլը նորից արագորեն կհարմարեցվեր ճանապարհային ճիշտ գույնին։
Ուղու պլանավորում (Path planning)
Stanley-ի ճանապարհն ու արգելքները հայտնաբերող մոդուլները տեղադրված էին մեքենայի կառուցվածքի մեջտեղի հատվածում՝ ընկալման շերտում, ինչպես պատկերված է գծապատկեր 1-ում։ Stanley-ի արագությունն ընտրող ծրագրակազմը աջ կողմում էր՝ ծրագրման շերտում։ Աջ կողմը կարիք չուներ ստուգելու սենսորի նախնական տվյալները, այն որոշումներ էր կայացնում՝ օգտագործելով ընկալման շերտի տեղեկությունը։ Stanley-ի ծրագրման շերտի (planning layer
) մեկ այլ ալգորիթմ պլանավորում էր արգելքների շուրջ գտնվող ուղին։ Սակայն, մինչ Stanley-ն կարողանար գիտակցված խուսափել արգելքներից, այն պետք է ունենար ամբողջական երթուղի, որպեսզի հետևեր վերջինիս։
Այնպես, ինչպես Կարմիր թիմն էր արել Humvee-ի համար, Stanley-ն մրցավազքից առաջ նախապես պլանավորեց իր ամբողջ երթուղին։ Stanley-ի երթուղին չէր ներառում տեղանքի մասին արտաքին տեղեկություններ, ինչպես Կարմիր թիմինը։ Մենք կտեսնենք, որ Stanford Racing թիմի ընկալման ալգորիթմները բավականին լավն էին և թույլ էին տալիս մեքենային պարզապես հայտնաբերել արգելքները և խուսափել դրանցից հենց շարժման ընթացքում։
Փոխարենը, Stanley-ի երթուղու պլանավորման ալգորիթիմի հիմնական նպատակն էր ապահովել այնպիսի երթուղի, որը մոտ կլիներ մրցավազքի կազմակերպիչների կողմից տրված GPS կոորդինատներին։ Ալգորիթմը նաև պետք է հարթեր բոլոր այն խորդուբորդերը, որոնք կլինեին երթուղում, եթե իրենք պարզապես ուղիղ գծեր պատկերեին GPS կորդինատների միջև։ Stanley-ից ընդամենը 20 վայրկյան պահանջվեց աշխատեցնելու այս ալգորիթմը մրցավազքի հենց սկզբում։
Երբ Stanley-ի անխափան ճանապարհը պլանավորված էր, այն միայն պետք է հետևեր երթուղուն՝ խուսափելով արգելքներից, որոնց հայտնաբերում էր իր ընկալման ալգորիթմի շնորհիվ։ Ինչպես արդեն գիտենք, Stanley-ն հետևում էր արգելքներին՝ գտնելով, թե իրեն շրջապատող տեղանքից որն է երթևեկելի։ Արգելքները այն քառակուսի վանդակներն էին, որոնք նշված էին որպես ոչ երթևեկելի։
Այս արգելքների շուրջ ուղորոշվելու համար Stanley-ն, որտեղ մի փոքր ժամանակ էր ունենում, վերահաշվարկում էր, թե իր ընթացիկ դիրքից որն է լավագույն երթուղին իր նախորոշված ճանապարհով մի փոքր էլ առաջ գնալու համար (ենթադրենք 10 վայրկյան)։ Ճանապարհը պլանավորելիս Stanley-ին միայն պետք էր առանց որևէ օբյեկտի հարվածելու իր ընթացիկ դիրքից հասնել նպատակակետին և նա հաջողությամբ կարող էր անել դա, քանի դեռ ստացվում էր պլանավորել և օգտագործել այս ուղիները։
Humvee-ի՝ երթուղու որոնման ալգորիթմն օգտագործում էր արժեքների ֆունկցիան, որը համապատասխանաբար ցույց էր տալիս, թե որքան ժամանակ կպահանջվի մեքենայից քարտեզի յուրաքանչյուր փոքրիկ քառակուսին անցնելու համար։ Stanley-ին նմանատիպ արժեքների ֆունկցիա էր անհրաժեշտ խոչընդոտներից խուսափելու համար։ Տարբերակներից մեկը հատուկ տուգանք սահմանելն էր ցանցի վանդակների համար՝ կախված, թե որքան է նրանց հեռավորությունը մոտակա արգելքից։ Այսպիսի ֆունկցիա կիրառելով՝ Stanley-ն կարող էր գտնել այն երթուղին, որն իրեն հնարավորինս հեռու կպահեր արգելքներից։ Իրականում սա հենց այն էր, ինչ Stanford Racing թիմն ի սկզբանե փորձում էր։ Ալգորիթմն օգնում էր Stanley-ին խուսափել արգելքներից, բայց այն նաև ստիպում էր մեքենային անկանոն շրջանցումներ կատարել։ Թիմն այս ալգորիթմն անվանում էր «արբած սկյուռիկ (drunken squirrel
)»։
Այս խնդիրը լուծելու համար նրանք այնպես ծրագրավորեցին Stanley-ին, որ վերջինս հետևի նախօրոք հաշվարկած անխափան երթուղուն զուգահեռ մի վիրտուալ միջանցքի։ Նրանց նպատակն էր, որ Stanley-ն այս միջանցքով ընթանա այնքան արագ, որքան հնարավոր է՝ արգելքներից խուսափելու համար միայն աջ և ձախ շրջադարձեր կատարելով։ Կարծես թե, Stanley-ն խաղում էր դասական արկադային երթևեկության խաղ, որում միայն հնարավոր է արագություն վերցնել, արգելակել և ֆիքսված երթուղում աջ ու ձախ շրջվել։ Արգելքների բացակայության դեպքում Stanley-ն նաև ծրագրավորված էր ընթանալ ճանապարհի՝ ճամփեզրային ինդիկատորով որոշված կենտրոնական մասով։ Հասկանալու համար թեքվել աջ, թե ձախ և որքան արագ ընթանալ (այսինքն թեթև առաջ մղվել, թե արագ շրջադարձել) Stanley-ն շարունակում էր օգգտագործել որոնման ալգորիթմը, բայց այն միայն հաշվի էր առնում հարթ կածանները՝ համաձայն մեքենայի ընթացիկ դիրքի, և թե որտեղ այն կլիներ մի քանի րոպեից։ Նրա արժեքների ֆունկցիան տուգանքներ էր սահմանել որոշ բաների համար, օրինակ՝ հեռանալ նախորոշված երթուղուց, ընթանալ դեպի արգելքները կամ հեռու գտնվել ճանապարհի կենտրոնական մասից։ Ուղու պլանավորման ալգորիթմն այնուհետև վերլուծում էր այս բոլոր ուղիները և ընտրում լավագույնը։ Մինչ մեքենան սլանում էր երթուղով, ալգորիթմը շարունակաբար աշխատում էր՝ կրկնվելով վայրկյանում 10 անգամ, այնքան արագ, որ Stanley-ն կարողանար նկատել արգելքները և խուսափել դրանցից մոտովարապես իր առջև տարածվող 15–25 մետրում։
Ինչպես էին հաղորդակցվում Stanley-ի ուղեղի մասերը
Երբ Stanford Racing թիմը նախագծում էր Stanley-ին՝ նրանց անհրաժեշտ էր հասկանալ, թե ինչպես պետք է այս բոլոր ալգորիթմները համագործակցեն։ Նրանք գիտեին, թե ինչպես իրար կապել ալգորիթմները, բայց դա բավարար չէր, պետք էր հատուկ կանոնակարգ մշակել, որին հետևելով ալգորիթմները կկարողանային հաղորդակցվել։ Արդյո՞ք պետք էր կենտրոնական «տնօրինող գործընթաց (master process
)», որը կղեկավարեր ամեն ինչ։ Արդյո՞ք արժեր այս ամենը կազմակերպել հիերարխիայի սկզբունքով։ Stanford Racing թիմը որոշեց լրիվ հակառակն անել։ Նրանք միավորեցին այս տարբեր ծրագրակազմային մոդուլները (software modules
)՝ պարզապես թողնելով նրանց զուգահեռաբար աշխատել մեկը մյուսից անկախ։
Կարող ես պատկերացնել, որ այս մոդուլները նպարեղենի խանութի աշխատողներ են, որոնցից յուրաքանչյուրն ունի իր առանձին գործը։ «Բեռնափոխադրողները» բեռնաթափում են ապրանքները առաքող բեռնատարից և դասավորում խանութի համապատասխան դարակներում։ «Գանձապահները» սպասարկում են հաճախորդներին, իսկ «մենեջերները» պարբերաբար դրամարկղից բանկ են տեղափոխում կանխիկ գումարը և խանութի համար նոր նպարեղեն են պատվիրում։ Յուրաքանչյուր աշխատող շարունակաբար կատարում է իր աշխատանքը՝ մյուս աշխատողներից անկախ։
Քանի որ դարակները մշտապես համալրվում են, գանձապահները դրամարկղերում ստանում են վճարումները, հաճախորդները կարող են հեշտությամբ մտնել խանութ, արագ գնումներ կատարել և դուրս գալ։ Կարող ենք ասել, որ խանութի սպասարկումը չի ձգձգվում։ Սպասարկումն արագ է, քանի որ գանձապահները միայն մեկ աշխատանք ունեն անելու՝ իրականացնել վճարման գործընթացը, նրանք ոչ ներդրումներ են կատարում բանկում, ոչ էլ դասավորում են դարակները։
Հենց այս նույն պատճառով էլ Stanley-ն կարողանում էր իրադարձություններին արագ արձագանքել։ Նրա մոդուլներից յուրաքանչյուրը՝ հատկապես նրանք, որոնք պետք է արձագանքեին շրջակա միջավայրին, կարողանում էին դա անել բավականին արագ, քանի որ յուրաքանչյուր մոդուլ կատարում էր միայն իր աշխատանքը։ Stanley-ի մոդուլները կարողանում էին արագ արձագանքել իրենց շրջապատող միջավայրին, քանի որ նրանք երբեք ամբողջական հաղորդակցություն չէին ունենում մեկը մյուսի հետ։ Նմանատիպ հաղորդակցությունն իրենից վտանգ էր ներկայացնում, քանի որ մոդուլները կարող էին արգելակվել դրա ընթացքում. այս խնդիրը հայտնի է որպես համակարգչային փակուղի։ Եթե բաղադրիչներից երկուսը այսպիսի փակուղու առաջ կանգնեն, ապա ամբողջ համակարգը կանգ կառնի՝ չկարողանալով վերականգնվել, մինչև բաղադրիչներից մեկը չթարմացվի։ Սա չի նշանակում, թե մոդուլները չէին հաղորդակցվում։ Նրանք մշտապես կապի մեջ էին՝ միմյանց ուղարկելով միակողմանի, նշված հստակ ժամանակով հաղորդագրություններ։ Սա նման է նպարեղենի խանութում ընդհանուր հայտարարությունների համակարգ կիրառելուն, օրինակ՝ մենեջերները պետք է զգուշացնեին գանձապահներին, որ 1 դոլարանոցների պակաս կա, և առաջարկեին դրանք օգտագործել միայն խիստ անհրաժեշտության դեպքում։ Բայց դրա հետ մեկտեղ չպետք է մոռանալ, որ գանձապահները հաճախորդներին ավելի լավ կսպասարկեն, եթե երբեք չտարվեն իրենց մենեջերների հետ երկար խոսակցություններով։
Ինքնավար մեքենայում GPS-ը և աքսելերոմետրերը հաշվարկում էին մեքենայի դիրքն ու կողմնորոշումը (orientation
), «հայտնում էին (published
)» դրանք՝ նշելով տվյալ ժամը և շարունակում էին մեքենայի դիրքի մասին թարմացվող տեղեկությունն ստանալ ու հայտնել ամբողջ մրցավազքի ընթացքում․ դա նրանց միակ գործն էր։ Պիքսելների կլաստերային դասակարգման և երթուղու որոնման մոդուլները վերցնում էին տեսախցիկի և լազերային սկաների տվյալները, գտնում էին ճանապարհներ և հայտնում էին այս տեղեկությունները, որպեսզի արագության կարգավորիչը և երթուղու պլանավորման ալգորիթմը կարողանային օգտագործել դրանք։ Միաժամանակ երթուղու որոնման մոդուլը, տեղյակ լինելով ռոբոտի ընթացիկ դիրքից և առկա արգելքներից, գնահատում էր լավագույն ճանապարհը՝ կրկնվելով վայրկյանում տասն անգամ, և այսպես շարունակ, միասին մոտ 30 մոդուլ։ Այս մոդուլների շնորհիվ Stanford Racing թիմը հաղթեց 2 միլիոն դոլար և իր տեղը գրավեց ռոբոտաշինության պատմության մեջ։
Թիմն արժանի էր այս հաղթանակին, բայց ժամանակակից ինքնավար մեքենաների ստանդարտներով անգամ Stanley-ն շատ պարզունակ էր։ Բավական է նշել, որ Երկորդ Մեծ մարտահրավերը հաղթահարած մեքենաներից և ոչ մեկը չէր կարող երթևեկել քաղաքի փողոցներով։
Նրանք չէին կարող վարել հանդիկապաց երթևեկության ընթացքում, չէին կարող գլուխ հանել կայանման կետերից, երթևեկության գոտիները փոխելուց և կանգառներից։
Այնուամենայնիվ, սրանք նախագծային թերություններ չէին, քանի որ այս մեքենաները ստեղծված էին միայն մրցավազքին երթևեկելու համար, որը նրանցից չէր պահանջում անել վերը նշվածներից որևէ մեկը։ Սակայն, պատկերը փոխելու եկավ DARPA-ի հաջորդ մրցույթը՝ DARPA քաղաքային մարտահրավերը, որը ռոբոտ մեքենաներից պահանջում էր հանդիպակաց երթևեկության ժամանակ ուղղորոշվել քաղաքային փողոցներում՝ ենթարկվելով Կալիֆորնիայի երթևեկության կանոններին։ Այս նոր մարտահրավերը նաև առաջին տեղը գրավելու մի նոր հնարավորություն կտար Humvee-ն ստեղծած Chris-ին և Carnegie Mellon-ի թիմին, իհարկե եթե նրանց հաջողվեր նախագծել մի մեքենա, որը գլուխ կբերեր այս ամենը։
Code Republic-ը ծրագրավորման գիտահետազոտական կենտրոն է, որն ունի նաև ուսումնական բաժին։ Ուսումնական բաժնում խմբավորում ենք խորացված ծրագրավորումը մաթեմատիկայի, ֆիզիկայի և ինժեներության հետ։
Մենք ջանք ու ժամանակ չենք խնայում և ստեղծում ենք այնպիսի որակյալ նյութեր, որոնք ցույց են տալիս ծրագրավորման իրական կողմը` արվեստը: Առայժմ դա ստացվում է, իսկ պատճառը պարզ է.
մենք սիրում ենք այն, ինչ անում ենք։
Ձգտում ենք ունենալ ծրագրավորման, մաթեմատիկայի, ֆիզիկայի և ինժեներության խորացված լավագույն դասընթացները և վարձավճարը սահմանել ամսական հնարավոր նվազագույնը` 42 000 դրամ։ Խոստանում ենք երբեք չթանկացնել, իսկ շատ ու շատ անվճար դասընթացներ էլ տեղադրել YouTube-յան մեր ալիքում, այստեղ՝
Բոլոր ցանկացողները կարող են ստեղծել և տեղադրել նոր դասընթացներ, կամ, ինչու ոչ, գրել հայալեզու հոդվածներ Medium-ում։ Համագործակցության համար գրեք մեզ contact@coderepublic.am հասցեով։ Եվ, իհարկե, հետևեք մեզ այլ սոց. ցանցերում. Facebook, Instagram, Telegram, և որ ավելի կարևոր է՝ LinkedIn, տեղադրում ենք միայն օգտակար նյութեր։
Ջանք ու եռանդ չենք խնայում լուծելու երկրում գլխավոր խնդիրներից մեկը՝ որակյալ ծրագրավորող-ինժեներների կրթումը։ Ժամանակատար է, դժվար է, բայց կանգ չենք առնում։
Ընտրել ենք բա՛րդ ճանապարհը