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

Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps
Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps

Video: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps

Video: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps
Video: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, Նոյեմբեր
Anonim
Image
Image

Nvidia Jetson Nano- ն մշակողի հավաքածու է, որը բաղկացած է SoM- ից (System on Module) և տեղեկատու կրիչի տախտակից: Այն հիմնականում ուղղված է ներկառուցված համակարգերի ստեղծմանը, որոնք պահանջում են բարձր վերամշակման հզորություն մեքենայական ուսուցման, մեքենայական տեսողության և տեսամշակման ծրագրերի համար: Դրա մանրամասն ակնարկը կարող եք դիտել իմ YouTube ալիքում:

Nvidia- ն փորձում է Jetson Nano- ն դարձնել հնարավորինս օգտագործողի համար հարմարավետ և հեշտ նախագծեր: Նրանք նույնիսկ սկսեցին մի փոքրիկ դասընթաց այն մասին, թե ինչպես կարելի է կառուցել ձեր ռոբոտը etsեթսոն Նանոյի հետ, տախտակի գործարկումից օրեր անց: Այդ նախագծի մանրամասներին կարող եք ծանոթանալ այստեղ:

Այնուամենայնիվ, ես ինքս մի քանի խնդիր ունեի Jetbot- ի հետ որպես նախագիծ.

1) Դա ինձ համար բավական էր EPIC- ը: Jetson Nano- ն շատ հետաքրքիր տախտակ է ՝ մշակման մեծ հնարավորություններով և դրանով պատրաստելով պարզ անիվային ռոբոտ, այն կարծես շատ… ճնշող անելիք էր:

2) Սարքավորման ընտրություն: Jetbot- ը պահանջում է որոշ սարքավորումներ, որոնք թանկ են/կարող են փոխարինվել այլընտրանքներով, օրինակ ՝ նրանք հեռահաղորդակցության համար օգտագործում են ջոյստիկ: Կարծես զվարճալի է, բայց արդյո՞ք ինձ իսկապես անհրաժեշտ է «ռոքոտ» կառավարելու համար «ջոյսթիկ»:

Այսպիսով, Jetson Nano- ի ձեռքից անմիջապես հետո ես սկսեցի աշխատել իմ սեփական նախագծի վրա `Jetspider: Գաղափարն էր կրկնել Jetbot- ի ունեցած հիմնական ցուցադրումները, բայց ավելի սովորական սարքավորումներով և կիրառելի ավելի մեծ բազմազան նախագծերի համար:

Քայլ 1: Պատրաստեք ձեր սարքավորումները

Պատրաստեք ձեր սարքավորումները
Պատրաստեք ձեր սարքավորումները

Այս նախագծի համար ես օգտագործեցի uriուրի չորքոտանի ռոբոտի նախատիպը, որը պատրաստել էր Zoobotics- ը: Այն երկար ժամանակ պառկած էր մեր ընկերության լաբորատորիայում: Ես այն հագեցրեցի Jetson Nano- ի համար լազերային կտրված փայտե հենարանով և տեսախցիկի ամրացմամբ: Նրանց դիզայնը սեփականություն է, այնպես որ, եթե ձեր Jetson Nano ռոբոտի համար ցանկանում եք նման բան ստեղծել, կարող եք դիտել Meped նախագիծը, որը բաց կոդով նման քառապատիկ է: Իրականում, քանի որ մեր լաբորատորիայում ոչ ոք չուներ uriուրիի միկրոկառավարիչի (Arduino Mega) աղբյուրի կոդը, ես օգտագործեցի Meped- ի ծածկագիրը ՝ ոտքերի/ոտքերի օֆսեթում աննշան ճշգրտումներով:

Ես օգտագործեցի սովորական USB Raspberry Pi համատեղելի վեբ-տեսախցիկ և Wifi USB դոնգ:

Հիմնական բանը այն է, որ քանի որ մենք պատրաստվում ենք օգտագործել Pyserial- ը միկրոկոնտրոլերի և Jetson Nano- ի միջև սերիական հաղորդակցության համար, ձեր համակարգն, ըստ էության, կարող է օգտագործել ցանկացած տեսակի միկրոկոնտրոլեր, քանի դեռ այն կարող է միացվել Jetson Nano- ի հետ USB սերիալային մալուխի հետ: Եթե ձեր ռոբոտը օգտագործում է DC շարժիչներ և շարժիչի վարորդ (օրինակ ՝ L298P- ի վրա հիմնված), ապա հնարավոր է անմիջականորեն միացնել շարժիչի վարորդին Jetson Nano GPIO- ի հետ: Բայց, ցավոք, սերվերը վերահսկելու համար կարող եք օգտագործել միայն մեկ այլ միկրոկոնտրոլեր կամ նվիրված I2C սերվո վարորդ, քանի որ etsեթսոն Նանոն չունի ապարատային GPIO PWM:

Ամփոփելու համար կարող եք օգտագործել ռոբոտի տեսակը ցանկացած միկրոկառավարիչի հետ, որը կարող է կապված լինել Jetson Nano- ի հետ ՝ օգտագործելով USB տվյալների մալուխ: Այս ձեռնարկի համար ես վերբեռնեցի Arduino Mega- ի ծածկագիրը github պահոցում, և Jetson Nano- ին Arduino- ի հետ ինտերֆեյսին վերաբերող հատվածը այստեղ է.

if (Serial.available ()) {switch (Serial.read ()) {

{

դեպք '1':

առաջ ();

ընդմիջում;

դեպք '2':

ետ ();

ընդմիջում;

դեպք '3':

turn_right ();

ընդմիջում;

դեպք '4':

turn_left ();

ընդմիջում;

Մենք ստուգում ենք, արդյոք առկա են տվյալներ, և եթե դրանք կան, դրանք փոխանցում ենք անջատիչ-գործի կառավարման կառուցվածքին: Ուշադրություն դարձրեք, որ սերիալի տվյալները գալիս են որպես կերպարներ, նկատեք 1, 2, 3, 4 թվերի շուրջ մեկ չակերտ:

Քայլ 2: Տեղադրեք անհրաժեշտ փաթեթները

Ի ուրախություն մեզ, Jetson Nano համակարգի կանխադրված պատկերն ունի բազմաթիվ նախապես տեղադրված իրեր (օրինակ ՝ OpenCV, TensorRT և այլն), ուստի մեզ անհրաժեշտ է տեղադրել ընդամենը մի քանի այլ փաթեթ ՝ ծածկագիրը գործարկելու և SSH- ն միացնելու համար:

Սկսենք ՝ SSH- ին միացնելով, եթե ցանկանում եք մնացած բոլոր աշխատանքները կատարել հեռակա կարգով:

sudo apt թարմացում

sudo apt տեղադրել opensh-server

SSH սերվերը կսկսվի ինքնաբերաբար:

Ձեր Ubuntu մեքենային LAN- ով միանալու համար անհրաժեշտ է միայն մուտքագրել հետևյալ հրամանը.

ssh օգտվողի անունը@ip_address

Եթե ունեք Windows սարք, ապա ձեզ հարկավոր է տեղադրել SSH հաճախորդ, օրինակ ՝ Putty:

Սկսենք ՝ տեղադրելով Python Package Manager (pip) և Pillow պատկերների մանիպուլյացիայի համար:

sudo apt տեղադրեք python3-pip python3-pil

Այնուհետև մենք կտեղադրենք Jetbot պահոցը, քանի որ մենք ապավինում ենք դրա շրջանակի որոշ հատվածներին ՝ օբյեկտների հայտնաբերում կատարելու համար:

sudo apt տեղադրեք python3-smbus python-pyserial

git կլոն

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py տեղադրել

Վերջապես, այս նախագծի իմ Github պահեստը կլոնավորեք ձեր տնային թղթապանակում և տեղադրեք Flask և որոշ այլ փաթեթներ ռոբոտի հեռակառավարման վեբ սերվերի միջոցով:

git կլոն

CD

sudo pip3 install -r պահանջներ -opencv

Ներբեռնեք նախապես պատրաստված SSD (Single Shot Detector) մոդելը այս հղումից և տեղադրեք այն jetspider_demos պանակում:

Հիմա մենք լավ ենք գնում:

Քայլ 3: Գործարկեք ծածկագիրը

Գործարկեք ծածկագիրը
Գործարկեք ծածկագիրը

Ես երկու ցուցադրում արեցի Jetspider- ի համար, առաջինը պարզ հեռուստատեսություն է, որը շատ նման է նախկինում Banana Pi արբանյակի համար արվածին, իսկ երկրորդը ՝ TensorRT- ն օբյեկտների հայտնաբերման համար և շարժական հրամաններ է ուղարկում միկրոկառավարիչին սերիական միացման միջոցով:.

Քանի որ հեռաօգտագործման կոդի մեծ մասը նկարագրված է իմ մյուս ձեռնարկում (ես ընդամենը մի քանի փոքր փոփոխություններ եմ կատարել, որոնք վերաբերում են տեսանյութերի փոխանցմանը), այստեղ ես կկենտրոնանամ օբյեկտի հայտնաբերման մասի վրա:

Հետևյալ օբյեկտի հիմնական սցենարը object_following.py է jetspider_object_following- ում, հեռագործության համար spider_teleop.py է jetspider_teleoperation- ում:

Սցենարի հաջորդ օբյեկտը սկսվում է անհրաժեշտ մոդուլների ներմուծմամբ և փոփոխականների և դասի օրինակների հայտարարմամբ: Այնուհետեւ մենք սկսում ենք Flask վեբ սերվերը այս տողով

app.run (host = '0.0.0.0', threaded = True)

Հենց որ մենք բացենք 0.0.0.0 (localhost) հասցեն մեր վեբ դիտարկիչում կամ Jetson Nano հասցեն ցանցում (կարելի է ստուգել ifconfig հրամանով), այս գործառույթը կկատարվի

def ինդեքս ():

Այն մեր տրամադրած վեբ էջի ձևանմուշը ներկայացնում է կաղապարների պանակում: Կաղապարի մեջ տեղադրված է վիդեո աղբյուր, այնպես որ բեռնումն ավարտելուց հետո def_feed ():

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

Def gen (): գործառույթում մենք գեներատորի գործառույթն իրականացնում ենք անսահմանափակ հանգույցում, որը գրավում է պատկերը, ուղարկում այն def execute (img):

def execute (img). ֆունկցիան այնտեղ է, որտեղ տեղի է ունենում ողջ կախարդանքը, այն վերցնում է մի պատկեր, չափափոխում այն OpenCV- ով և փոխանցում այն Jetbot ObjectDetector դասի «մոդել» օրինակին: Վերադառնում է վերադարձնում հայտնաբերումների ցուցակը, և մենք օգտագործում ենք OpenCV ՝ դրանց շուրջը կապույտ ուղղանկյուններ գծելու և օբյեկտների հայտնաբերված դասի հետ ծանոթագրություններ գրելու համար: Դրանից հետո մենք ստուգում ենք, թե կա՞ արդյոք մեզ հետաքրքրող օբյեկտ հայտնաբերված համապատասխանող_դետեկցիաներ = [d համար հայտնաբերումների համար d [0], եթե d ['label'] == 53]

Եթե ցանկանում եք, որ ձեր ռոբոտը հետևի այլ օբյեկտների, 53 -ը խնձոր է, կարող եք այդ թիվը (53) փոխել այլ համարի: Ամբողջ ցանկը գտնվում է categories.py ֆայլում:

Վերջապես, եթե 5 վայրկյան օբյեկտ չբացահայտվի, մենք ռոբոտին փոխանցում ենք «5» նշանը սերիայի վրայով կանգ առնելու համար: Եթե օբյեկտը գտնվի, մենք հաշվարկում ենք, թե որքան հեռու է այն պատկերի կենտրոնից և գործում ենք համապատասխանաբար (եթե կենտրոնին մոտ է, ուղիղ գնա (սերիայի «1»), եթե ձախ կողմում, ձախ և այլն): Դուք կարող եք խաղալ այդ արժեքների հետ ՝ որոշելու համար լավագույնը ձեր կոնկրետ կազմաձևի համար:

Քայլ 4: Վերջնական մտքեր

Վերջնական մտքեր
Վերջնական մտքեր

Սա ObjectFollowing դեմո ցուցադրման էությունն է, եթե ցանկանում եք ավելին իմանալ Flask webserver Video հոսքի մասին, կարող եք դիտել Միգել Գրինբերգի այս հիանալի ձեռնարկը:

Կարող եք նաև դիտել Nvidia Jetbot օբյեկտների հայտնաբերման տետրը այստեղ:

Հուսով եմ, Jetbot- ի դեմո ցուցադրումների իմ իրականացումը կօգնի կառուցել ձեր ռոբոտը `օգտագործելով Jetbot շրջանակը: Խոչընդոտներից խուսափելու դեմո չեմ իրականացրել, քանի որ կարծում եմ, որ մոդելի ընտրությունը խոչընդոտներից խուսափելու լավ արդյունքներ չի տա:

Եթե ունեք որևէ հարց, ավելացրեք ինձ LinkedId- ում և բաժանորդագրվեք իմ YouTube ալիքին ՝ մեքենայական ուսուցման և ռոբոտաշինության հետ կապված ավելի հետաքրքիր նախագծերի մասին տեղեկանալու համար:

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