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

Պարզ ներդաշնակ շարժման փորձնական ուսումնասիրություն. 5 քայլ
Պարզ ներդաշնակ շարժման փորձնական ուսումնասիրություն. 5 քայլ

Video: Պարզ ներդաշնակ շարժման փորձնական ուսումնասիրություն. 5 քայլ

Video: Պարզ ներդաշնակ շարժման փորձնական ուսումնասիրություն. 5 քայլ
Video: ՆՈՅԵՄԲԵՐԻ ՀՈՐՈՍԿՈՊ ԲՈԼՈՐԻ ՀԱՄԱՐ ըստ ծննդյան ամսաթվի | Թվաբան Արտեմ Բլոկ 2024, Հուլիսի
Anonim

Հետևեք հեղինակի ավելին ՝

Walking Strandbeest, Java/Python և App Controlled
Walking Strandbeest, Java/Python և App Controlled
Walking Strandbeest, Java/Python և App Controlled
Walking Strandbeest, Java/Python և App Controlled

Դասարանում մենք հաճախ օգտագործում ենք վայրկյանաչափ ՝ ճոճանակի փորձը կատարելու համար, կամ պարզ ներդաշնակ շարժման փորձ: Ահա մարտահրավեր. Կարո՞ղ ենք արդյոք կազմել դրա շարժման իրական գրաֆիկը և տեսնել, թե որն է ակնթարթային անկյունային դիրքն ու արագությունը, դա շատ ավելի տեղեկատվական և զվարճալի է:

Առաջին հարցը, մենք պետք է որոշենք, որ ճոճանակի մարմինը անկշիռ լար է կամ կոշտ համազգեստի ձող: Լարային մոտեցումը կարծես ավելի հեշտ է: Մեկը կառուցելու պրակտիկայից ես ունեմ հետևյալ փոխզիջման նկատառումները. Aոճանակային համակարգը կախելու ամենահեշտ ձևը կարող է այն կախվել ձեր դռան վերին եզրից: Դա տալիս է ձեր ճոճանակի 2 միլիոն ֆունտ ստեռլինգը ՝ առանց որևէ կառուցվածքային շինարարական աշխատանք կատարելու: Բայց դրա կարիքը կա, որ ճոճանակը չի դիպչի դռան մակերեսին, ինչը պարզապես փչացնում է ամբողջ փորձը: Այսպիսով, այն պտտվող հարթությունը պետք է ճշգրիտ զուգահեռ լինի ձեր պատի/դռան մակերեսին: Անշարժ լարը հակված է բարակ լինել, այն կարող է հեշտությամբ պտտվել և բարդացնել ճոճանակի անկյունի չափումը: Մենք ցանկանում ենք օգտագործել մեկ չափում `ճոճանակի վիճակը ներկայացնելու համար: Բարակ լարը, ինչպիսին է ձկնագիծը, կարող է լինել առաձգական և ձգվող, որն ազդում է մեր կողմից չափված և հավասարման մեջ օգտագործվող մեր ամենակարևոր հաստատուններից մեկի վրա, որը ճոճանակի երկարությունն է: Ոմանք կարող են նաև ազդել ջերմաստիճանի վրա: Լարի վերջում կախված քաշի զանգվածը պետք է բավականաչափ ծանր լինի, որպեսզի լարի քաշը չնչին դառնա: Խնդրում ենք մեկնաբանել, եթե համաձայն եք կամ համաձայն չեք նրանց հետ, կամ դիզայնի փոխանակման այլ գաղափարներ ունեք: Այս խնդիրը ուսումնասիրելու համար մեզ անհրաժեշտ է մի սարք, որն այնքան թեթև է, որ դրա քաշը կարելի է անտեսել, և մենք դեռ ճոճանակային համակարգին վերաբերվում ենք որպես կոշտ միատեսակ ձող: Ես օգտագործում եմ COTS կրելի էլեկտրոնային վերահսկիչ, որը մեզ փոխանցում է գիրո, արագացուցիչ և անկյունային տեղեկատվություն bluetooth կապի միջոցով: Այս չափումները կպահվեն բջջային հեռախոսի հավելվածի տվյալների ֆայլում: Դրանից հետո մենք վերլուծելու ենք մեր պարզ ներդաշնակ շարժման փորձի տվյալները: Թվային վերլուծությունը կենտրոնանում է հետևյալ թեմաների վրա. 1) Կանխատեսել ճոճանակի տատանումների շրջանը 2) Programրագրավորմամբ հավաքել ճոճանակի պարզ ներդաշնակ շարժման փորձի տվյալները 3) Օգտագործել kmean- ը տվյալների խմբավորման և վերլուծության գործընթացում հեռավորությունները հեռացնելու համար 4) Գնահատելու համար օգտագործել կարճաժամկետ FFT: ճոճանակի տատանումների հաճախականությունը

Պարագաներ

Bluetooth չափման սարք

Android հեռախոսի ծրագիր. Գնացեք Google playstore, որոնեք M2ROBOTS և տեղադրեք կառավարման ծրագիրը: Այն դեպքում, երբ դժվար է մուտք գործել Google playstore, այցելեք իմ անձնական սկզբնական էջ ՝ հավելվածի ներլցման այլընտրանքային եղանակի համար ՝

փայտե ձող

մի քանի 3D տպագիր մասեր

սղոցի շեղբեր կամ նմանատիպ մետաղական նյութ

Քայլ 1: Ի՞նչ են ճոճանակները: Ինչպե՞ս մոդելավորել այն:

Կան բազմաթիվ հոդվածներ և գրքեր, որոնք ներկայացնում են ճոճանակի հավասարումների ածանցումը, ներառյալ ձեր ուսումնական ծրագրի ֆիզիկայի գիրքը: Նման բովանդակությունը գուցե ավելի լավ է չկրկնվի այստեղ: Այստեղ նշված է միայն վերջնական եզրակացությունը «պարզ ներդաշնակ շարժում» թեմայի վերաբերյալ: Aոճանակի շրջանը իմանալու համար մեզ անհրաժեշտ է միայն ճոճանակի երկարությունը, որը նշվում է որպես «l», մետրերով:

Եթե մենք ողջամիտ համոզված ենք, որ քաշը գրեթե ամբողջությամբ գտնվում է առանցքում կախված առանց ծանրաբեռնված լարի վերջում, և ճոճանակը պտտվում է փոքր անկյուններում θ, ասենք 15 ° -ից պակաս, նման ճոճանակի T1 ժամանակահատվածը տրվում է.

T1 = 2*պի*(լ/գ)^0.5

g = ինքնահոս արագացում, մոտավորապես 9.8 մ/վ^2

Եթե անշնչալարը փոխարինվում է կոշտ համազգեստով ձողով, կրկին l երկարությամբ, նրա պարզ ներդաշնակ շարժման ժամանակահատվածը T2 տրվում է T1 = 2*pi*(2l/3g)^0.5

Արդյունավետորեն այն ունի նույն ժամանակահատվածը, ինչ առանց քաշի լարային ճոճանակը `կոշտ միասնական ձողի երկարության երկու երրորդը:

Սա նախապատմությունն է, և մենք կարող ենք սկսել պատրաստել մեր փորձը:

Քայլ 2: Պատրաստեք մասեր ապարատային կառուցման համար

Պատրաստեք մասեր ապարատային շինարարության համար
Պատրաստեք մասեր ապարատային շինարարության համար
Պատրաստեք մասեր ապարատային շինարարության համար
Պատրաստեք մասեր ապարատային շինարարության համար
Պատրաստեք մասեր ապարատային շինարարության համար
Պատրաստեք մասեր ապարատային շինարարության համար

Theոճանակի կառուցվածքը կառուցելու համար մենք 3D հատվածներ ենք տպում և վերամշակում այն, ինչ արդեն ունենք: Pendոճանակի ընդհանուր կառուցվածքը ներկայացված է Նկար 1 -ում: Դա 3D տպման մասերի խառնուրդ է ՝ ձեռքով պատրաստված մասերի և Լոուի երկար փայտե ձողի կտորի հետ:

Նկար 2 -ում տեղադրված 3D տպված հատվածը կախված է դռան վերին եզրից, քանի որ մեր դուռը մեզ համար հեշտ հարթ մակերես է `ինչ -որ բան կախելու համար: STL ֆայլի ներբեռնման հղում.

xiapeiqing.github.io/doc/kits/pendulum/pen…

Նկ. 3 -ի կանաչ հատվածը փայտի ձողը միացնում է սայրի հետ, և սայրը նստած է երկաթուղու երկու կտորների վրա, որոնք տեղադրված են ավելի վաղ եռաչափ տպված դռան կախիչի վրա: STL ֆայլի ներբեռնման հղում ՝

Երկաթուղու երկու կտորները պատրաստվում են հին սղոցի կիսով չափ կոտրելով, տես նկ. Իդեալում, մենք կարող ենք «V» ձևի խազ անել այդ երկու սղոցների մեջ ՝ օգտագործելով ֆայլ: Խելամիտ սուր եզրով մետաղը, օրինակ ՝ մեկ եզրով սափրիչը կամ ցանկացած ձեռքով պատրաստված մետաղական կտոր, կարող է նստել «V» ձևի խազերի ներսում: Պատճառն այն է, որ մեզ պետք է ավելի փոքր շփման տարածք `ճոճվելիս կորցրած կինետիկ էներգիան նվազեցնելու համար:

Նկար 5 -ում տեղադրված վերջին 3D տպված հատվածը փոքր սկուտեղ է `էլեկտրոնային չափիչ ապարատը պահելու համար:

Ներբեռնման հղումը ՝

Bluetooth- ի չափիչ ապարատը ստեղծում է անկյունների գնահատում, գիրո չափում և արագացուցիչի չափում: Այս բոլոր տվյալները մեզ հասանելի են bluetooth անլար կապի միջոցով:

Մենք պատրաստվում ենք բազմաթիվ փորձեր կատարել ՝ այս սարքը տեղադրելով ճոճանակի թևի տարբեր դիրքերում և տեսնելով տարբերությունները:

Քայլ 3. Փորձի տվյալների հավաքագրում

Փորձի տվյալների հավաքագրում
Փորձի տվյալների հավաքագրում
Փորձի տվյալների հավաքագրում
Փորձի տվյալների հավաքագրում
Փորձի տվյալների հավաքագրում
Փորձի տվյալների հավաքագրում

Փորձարարական տվյալների հավաքագրման համար կան երկու կատարելի մեթոդներ ՝ նախքան ձեռք բերված տվյալների վերլուծությունը.

1) Օգտագործեք պահանջների բաժնում նշված Android հեռախոսի ծրագիրը `սարքի արտադրած բոլոր չափումները ձեր հեռախոսի SD քարտում պահված տվյալների ֆայլ մուտքագրելու համար: Մենք կարող ենք պատճենել ֆայլը և տեղադրել տեղեկատվությունը:

2) Bluetooth- ով միացված համակարգիչ, համակարգիչ, նոութբուք կամ RaspberryPi մինի համակարգիչ օգտագործեք ՝ սարքի հետ Bluetooth կապ հաստատելու և տվյալները կարդալու համար ՝ իրական կամ անցանց վերլուծության համար:

Յուրաքանչյուր մեթոդի համար կան և՛ դրական, և՛ բացասական կողմեր, մենք երկուսն էլ կփորձենք և կպատմենք այս խրատելիքի տարբերությունը:

Android հավելվածի օգտագործման մեթոդի (1) դեպքում, երբ մենք գտնվում ենք android App կառավարման ինտերֆեյսում, bluetooth չափիչ ապարատից android հեռախոս ուղարկված հեռաչափության տվյալները կարձանագրվեն m2flightDatayyyymmdd_hhmmss.txt անունով տատալոգային ֆայլում: Այն կարելի է գտնել ձեր android հեռախոսի Ներբեռնում/m2LogFiles պանակում: «Ներբեռնում» թղթապանակը ձեր հեռախոսի android OS- ում գոյություն ունեցող պանակ է, իսկ «m2LogFiles»-ը ՝ հավելվածի ստեղծած թղթապանակը: Ֆայլի անվան բովանդակությունը yyyymmdd_hhmmss է փորձի մեկնարկի ժամանակը (տարին, ամիսը, օրը, ժամը, րոպեն և վրկ) ծածկագրելու ձևը ֆայլի անվան մեջ:

Մատյանների ֆայլի յուրաքանչյուր տող մեկ գրառում է: Այն սկսվում է իրադարձության ժամանակային կնիքով, նախաբան «eam:» տողից, որին հաջորդում է 4 եռակի տվյալ, որոնք են.

Արագացուցիչի XYZ առանցքի ընթերցումը հում սենսորային ապարատային գրանցման ընթերցման արժեքների վրա

Gyroscope XYZ առանցքի ընթերցումը հում սենսորների ապարատային գրանցման ընթերցման արժեքների վրա

Magnetometer XYZ առանցքի ընթերցումը հում սենսորային ապարատային գրանցման ընթերցման արժեքներին

ինքնաթիռում գնահատված Roll/Pitch/Raw աստիճանով

Տվյալների ֆայլը, որը ստեղծվել է համակարգչային python ծրագրի միջոցով, կօգտագործի նույնական տվյալների ֆայլի ձևաչափ, այնպես որ տվյալների վերլուծության փուլում մեր օգտագործած ծրագիրը չի անհանգստանա մեր աղբյուրի կամ Android հավելվածի կողմից արտադրվող տվյալների աղբյուրից:

Եկեք սկսենք կոդավորումը `օգտագործելով մեթոդը (2):

Bluetooth չափման ապարատի հետ փոխգործակցության համար տրամադրվում է SDK- ի երկու համ.

1) Python SDK, որը կարող է տեղադրվել «pip3 install m2controller» - ի միջոցով, python3- ը օգտագործվող լեզուն է: Օգտվողի կիրառման կոդի օրինակները պահվում են https://github.com/xiapeiqing/m2robots/tree/maste… Այս փորձի համար մենք կօգտագործենք python script script pendulum1.py

2) Java SDK, որը չի օգտագործվում այս ուսանելի ծրագրում, քանի որ մենք ցանկանում ենք ձեռք բերել ճոճանակի տվյալների ավելի ուշ պատկերացում և վերլուծություն, ինչը կարող է մեզանից մի փոքր ավելի մեծ ջանքեր պահանջել Java- ում ծրագրավորելու համար:

Python3 տվյալների հավաքագրման ծրագրի աղբյուրի ծածկագիրը պարունակում է բազմաթիվ մեկնաբանություններ կոդի ֆունկցիոնալության մանրամասների վերաբերյալ: Աղբյուրի կոդի պատկերը ներկայացված է այստեղ:

#!/usr/bin/env python#-*-կոդավորում ՝ UTF-8-*-m2controller- ից ներմուծում m2controller m2controller ներմուծումից

requestExit = Կեղծ

################################################################

#մենք ցանկանում ենք օգտագործել նույն ֆայլի անվանման պայմանագիրը, որպեսզի տվյալների վերլուծության մոդուլը ՝ pendulum2.py- ն, կարողանա ագնոստիկ լինել, թե ինչպես ենք ստանում տեղեկամատյանների ֆայլը ################## ################################################ logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = բաց (logfilename," w ")

def signal_handler (sig, շրջանակ):

գլոբալ հարցում Ելք տպագրությունից («օգտվողը Ctrl-C ՝ ծրագրի կատարումից դուրս գալու համար») requestExit = True signal.signal (signal. SIGINT, signal_handler)

################################################################

#յուրաքանչյուր չափման տվյալների հասանելի լինելուց 20 Հց արագությամբ, այս «հետադարձ» գործառույթը կհրավիրվի ################################# ################################# def callbackfunc (հեռաչափություն): strTimeStamp = datetime.datetime.fromtimestamp (time.time ()). strftime ('%H:%M:%S.%f') [:-3] dataStr = "%s, eam:%d,%d,%d,%d,%d,%d, %d, %d, %d, %2.1f, %2.1f, %2.1f / n " %(strTimeStamp, հեռաչափություն ['m_fAccelHwUnit'] [0], հեռաչափություն ['m_fAccelHwUnit'] [1], հեռաչափություն ['m_fAccelHwUnit'] [2], հեռաչափություն ['m_fGyroHwUnit'] [0], հեռաչափություն ['m_fGyroHwUnit'] [1], հեռաչափություն ['m_fGyroHwUnit'] [2], հեռաչափություն ['m_fMagHwU 'm_fMagHwUnit'] [1], հեռաչափություն ['m_fMagHwUnit'] [2], հեռաչափություն ['m_fRPYdeg'] [0], հեռաչափություն ['m_fRPYdeg'] [1], հեռաչափություն ['m_fRPYdeg'] [2]) ## ##################################################### #############մենք տպում ենք տվյալների տողը էկրանին և պահում դրանք տեղեկամատյանում ######################## ########################################### տպել (dataStr) dataLogfile.writelines (dataStr)

################################################################

#նախաստորագրեք վերահսկիչը, հիշեք, որ BleMACaddress դաշտը դնեք ձեր սարքի MAC հասցեն ##################################### #################################TODO. Եկեք նախաստորագրենք BleMACaddress- ը, եթե այն չի սահմանվում օգտվողի կողմից: controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ########################## ########################################սպասեք ճոճանակի չափումից ստացված և ուղարկված չափման տվյալների մեքենա ################################################# ############### վերահսկիչ.m_CommsTunnel.waitForNotifications (1.0) եթե պահանջվում է Ելք. ######################## ###########################################տան պահպանումն աշխատում է այստեղ, երբ ավարտենք տվյալների գրանցումը ##################################################### ############### controller.stop () dataLogfile.close () ընդմիջում

################################################################

#տվյալների հավաքագրումն ավարտված է, այժմ եկեք վերլուծենք տեղեկամատյանների տվյալները ######################################## ######################### pendulum2.parseDataLogFile (գրանցման ֆայլ)

Երկարաժամկետ թարմացման համար դիմեք

Հիմա բացատրենք դրա գործունեության եղանակը: Այս Python ծրագիրը գրված է pip տեղադրվող փաթեթի վերևում, որը կոչվում է m2controller: Ածր մակարդակի փաթեթն առաջարկում է հետադարձ կապի մեխանիզմ, այնպես որ չափման յուրաքանչյուր ստացված թարմացում կաշխատի մեր գրած հետադարձ կապի գործառույթին և կպահի տվյալները տեղական գրանցամատյանում: Մատյան ֆայլերի տվյալների բովանդակության ձևաչափը նույնական է Android- ի ուղեկից հավելվածի արտադրածին, այնպես որ տվյալների գրառման ֆայլը, որը ստեղծվել է կամ Python ծրագրով, կամ andriod ուղեկից ծրագրով, փոխանակելի է:

Օպերացիոն համակարգի կողմից գրավված ctrl-C ազդանշանը փոխանցվում է ծրագրին և կանգնեցնում անսահմանափակ հանգույցը, որը սպասում է չափման տվյալների նոր ժամանմանը:

Մինչ օրս գրանցամատյան ֆայլը հաջողությամբ ստեղծվել է, և այս ծրագիրը կանչելու է վերլուծության ծրագիր `ուսումնասիրելու մեր փորձի արդյունքները:

Ահա երկու փորձ, և համեմատությունը ցույց է տալիս շատ նկատելի տարբերությունը ՝ տարբեր վայրերում կցելով 7 գրամ սարք:

Նկ. 2 -ում մենք օգտագործում ենք սանդղակ `որոշելու այս bluetooth չափիչ ապարատի իրական քաշը:

Նկ. 3 -ում պատկերված է ճոճանակի տեղադրումը, որտեղ 7 գրամ սարքը ամրացված է ճոճանակի ստորին ծայրին: Տեղադրման կոնֆիգուրացիան նկ. 4 -ում 7 գրամ զանգվածը գտնվում է շատ ավելի մոտ պտտվող առանցքին:

Նկար 5 -ը ճոճանակի կառուցվածքի սերտ տեսք է:

Քայլ 4: Տվյալների վերլուծություն

Տվյալների վերլուծություն
Տվյալների վերլուծություն
Տվյալների վերլուծություն
Տվյալների վերլուծություն
Տվյալների վերլուծություն
Տվյալների վերլուծություն

Bluetooth- ի չափման սարքը կշռում է g 7 գրամ, որը կշռում է շատ ավելի քիչ, քան 6 1.6 մետր երկարությամբ փայտե ձողիկ: Օգտագործեք «կոշտ համազգեստի ձող» ենթադրությունը, և մենք ունենք այս ճոճանակի ժամանակաշրջանի հավասարումը ՝ T1 = 2*pi*(2l/3g)^0.5

Theանրության կայունությունը ստանալու համար կարող ենք օգտագործել 9.8 մ/վ^2: Այս վեբ ծառայությունից կարելի է վերցնել ավելի ճշգրիտ ինքնահոս հաստատուն ցանկացած տեղաբաշխման ժամանակ.

www.wolframalpha.com/widgets/view.jsp?id=e…

Սան Ֆրանցիսկոյի համար դա 9.81278 մ/վ^2 է

Theոճանակի երկարությունը չափվում է 64.5"

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) տալիս է սպասվող ճոճանակի ժամանակահատվածը 2.0962 (վրկ):

Տեսնենք, արդյոք դա համաձա՞յն է մեր փորձերի հետ:

Առաջին փորձի ժամանակ ճոճանակի տեղադրման մեջ ճոճանակի ստորին ծայրին ամրացված է 7 գրամ սարք: Իմ տեղեկամատյան ֆայլը կարելի է ներբեռնել ՝

xiapeiqing.github.io/doc/kits/pendulum/pen…

Անվանափոխեք այն «PendulumTestData.txt» և դրեք այն պիտոնների վերլուծության ծրագրի նույն թղթապանակում: Աղբյուրի կոդի պատկերը ներկայացված է այստեղ:

#!/usr/bin/env python#-*-կոդավորում ՝ UTF-8-*-ներմուծել csv ներմուծում matplotlib.pyplot as plt plt.style.use ('seaborn-whitegrid') ներմուծել numpy որպես np տվյալների ժամից ներմուծման ամսաթվից, timedelta import seaborn as sns from sklearn.cluster import KMeans from collections import Counter ###################################### ###############################այս գործառույթը կատարում է տվյալների ֆայլերի վերլուծության աշխատանքը ############ ##################################################### ## def parseDataLogFile (տվյալների ֆայլ) ՝ ############################################ ########################հանեք տվյալները ստորակետով առանձնացված տվյալների մատյանում (CSV) և պահեք բովանդակությունը յուրաքանչյուր սյունակում մեկ լողացող տիպի փոփոխականի մեջ ## #################################################### ############ բաց (տվյալների ֆայլ) որպես csvfile: readCSV = csv.reader (csvfile, delimiter = ',') timestampS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = տողերի համար readCSV: try: x = datetime.strptime (row [0].split (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (ժամ = x.hour, րոպե = x.minute, վայրկյան = x.scond, microseconds = x.microsecond).total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (row [2])) fAccelHwUnit_z.append (float (row [3])) fGyroHwUnit_x.append (float (row [4]))) fGyroHwUnit_y.append (float (row [4])) (տող [5])) fGyroHwUnit_z.append (float (row [6])) fMagHwUnit_x.append (float (row [7])) fMagHwUnit_y.append (float (row [8]))) fMagHwUnit_z.append (float (row) [9])) fRPYdeg_r.append (float (տող [10])) fRPYdeg_p.append (float (տող [11])) fRPYdeg_y.append (float (row [12]))) բացառությամբ ՝ passest timestampS = np.asarray (ժամադրոշմները) ժամադրոշմները = ժամադրոշմները - ժամադրոշմները [0] fAccelHwUnit_x = np.asarray (fAccelHwUnit_x) fAccelHwUnit_y = np.asarray (fAccelHwUnit_y) fAccelHwUnit_z = np.asarray (fAccelHwUnit_z) fGyroHwUnit_x = np.asarray (fGyroHwUnit_x) fGyroHwUnit_y = np.asarray (fGyroHwUnit_y) fGyroH wUnit_z = np.asarray (fGyroHwUnit_z) fMagHwUnit_x = np.asarray (fMagHwUnit_x) fMagHwUnit_y = np.asarray (fMagHwUnit_y) fMagHwUnit_z = np.asarray (fMagHwUnit_z) fRPYdeg_r = np.asarray (fRPYdeg_r) fRPYdeg_p = np.asarray (fRPYdeg_p) fRPYdeg_p = fRPYdeg_p - np.mean (fRPYdeg_p) fRPYdeg_y = np.asarray (fRPYdeg_y)

################################################################

#մեզ անհրաժեշտ է նմուշառման հաճախականության ճշգրիտ գնահատում `տատանումների ճշգրիտ ժամանակահատվածի համար ###################################### ############################# FsHz = getSamplingIntervalS (timestampS) ################# ###################################################օգտվել սկիպիդար բաղադրիչ վերաբերմունքի վերնագրի տեղեկատու համակարգի ելքի համար ճոճանակի շրջանի վերլուծության համար ###################################### ############################# analize_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ########### #################################################### ####օգտագործել արագացուցիչի հումքի չափման ելքը ճոճանակի շրջանի վերլուծության համար ####################################### ############################# analize_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### #################################################### ####օգտագործել գիրո հումքի չափման ելքը ճոճանակի շրջանի վերլուծության համար ###################################### ############################# analize_timeSequence (timestampS, fGyroHwUnit_y, FsHz, ' gyro ') print (' done, շնորհավորանքներ:-) ') plt.show () ################################# ################################# bluetooth հաղորդակցության գործընթացում, հազվագյուտ հնարավորություն կա, որ տվյալների հաղորդման փաթեթը կարող է կորչում ենք#մենք օգտագործում ենք K-mean- ը ՝ 20 ՀՀ չափման տվյալները հեռավորություններից մեկուսացնելու համար, որոնք առաջանում են#ազդանշանի և ավելի մանրամասն համակարգի մեջ ընկնելու պատճառով ################# ################################################### def getSamplingIntervalS (timestampS). n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Հաշվիչ (km.labels_) հայտնվելըCnt = ii միջակայքում (clusterCnt).]) FsHz = 1/centroids [occrenceCnt.index (max (occrenceCnt))] վերադարձ FsHz

################################################################

#օգտագործել սպեկտրոմետր, այսինքն ՝ կարճաժամկետ FFT ՝ հաճախականության բաղադրիչ ստանալու համար, պիկ աղբարկղը ճոճանակի տատանումների մեր լավագույն գնահատականն է ############################ ###################################### def anal_timeSequence (timestampS, timeSeqData, FsHz, strComment): թուզ, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("ճոճանակի ժամանակի տիրույթի չափում - %s" %strComment) ax1.set_xlabel ("ընտրանքի ժամանակը (երկրորդ)") ax1.set_ylabel (strComment); NFFT = 2048 # պատուհանների հատվածների երկարությունը

Pxx, հաճախականություններ, աղբարկղեր, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title ("Spectrogram") ax2.set_xlabel ("նմուշներ") ax2.set_ylabel ("հաճախականությունը (Հց)");

# `Specgram` մեթոդը վերադարձնում է 4 օբյեկտ: Նրանք են:

# - Pxx: պարբերական # - հաճախականություններ. Հաճախականության վեկտոր # - աղբարկղեր. Ժամանակի աղբարկղերի կենտրոններ # - im: the matplotlib.image. AxesImage օրինակը, որը ներկայացնում է տվյալները հողամասում pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = հաճախականություններ [pkresult [0] [0] տպել ('ճոճանակի տատանում Freq (Hz) =%f, Period (Sec) =%f, գնահատման տվյալների աղբյուր `%s'%(oscFreqHz, 1/oscFreqHz, strComment)) վերադարձնել 1/oscFreqHz

################################################################

#արդյո՞ք մենք պետք է այս ծրագիրը գործարկենք անկախ, այսինքն ՝ չլինելով pendulum1.py,#մենք սահմանում ենք կանխադրված տեղեկամատյանների ֆայլի անուն, որը պետք է վերլուծվի ##################### ############################################# եթե _name_ == "_ հիմնական _ ": defaultFilename = './PendulumTestData.txt' ներմուծել os.path, եթե os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" default log file %s գոյություն չունի " %defaultFilename)

Երկարաժամկետ թարմացման համար դիմեք

Աղբյուրը պարունակում է մանրամասն մեկնաբանություններ, եկեք այստեղ մաթեմատիկական գնահատման բարձր մակարդակի ամփոփում:

1) Մենք նախ կարդում ենք CSV ֆայլի բովանդակությունը համակարգչում ՝ օգտագործելով «csv» անունով պիթոնային փաթեթ: Մենք ունենք պարբերական չափումներ:

21: 34: 26.362, եամ ՝ 0, -128, 14464, -8, 144, -96, 2112, -1280, 1664, -0.5, -5.5, 40.5

21: 34: 26.373, eam: 128, 0, 14272, -8, 136, 40, 2112, -1280, 1664, -0.5, -6.5, 40.0

21: 34: 26.412, eam: 448, -64, 14208, -8, 136, 24, 2176, -1280, 1664, -0.5, -7.5, 40.5

21: 34: 26.462, եամ ՝ 448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0.5, -8.0, 40.5

2) Քանի որ չափման արագությունը այնքան կրիտիկական է և ուղղակիորեն ներկայացնում է ճոճանակի շրջանի գնահատման սխալը, մենք ցանկանում ենք դրանք գնահատել: Մեր չափման անվանական միջակայքը 50ms է, այսինքն ՝ 20Hz: Բոլոր չափումների միջին ցուցանիշը նորմալ է թվում, բայց մենք երբեմն կորցնում ենք տվյալների փոխանցման փաթեթը, թարմացման միջակայքը դառնում է 100 կամ 150 մ,…

Եթե մենք գծագրենք այս տվյալների առաջացումը, տե՛ս նկ. 1, որպես մարդ, մենք կարող ենք հեշտությամբ ունենալ 0.05 վրկ աչքի աչքի արժեք: Այնուամենայնիվ, կարո՞ղ ենք դրանից լավ անել:

Մենք պետք է օգտագործենք դասակարգման մեթոդը `միջին հաշվարկի համար միայն լավերը ընտրելու համար: Python- ն ունի KMeans անունով գործիքների տուփ, որն օգնում է մեզ խմբավորման կամ դասակարգման հարցում: Այս հասկացություններն օգտագործվում են բազմաթիվ խոշոր տվյալների և արհեստական ինտելեկտի ոլորտներում:

3) Նկար 2 -ը պարունակում է երկու պատկեր: Վերին գծապատկերը ժամանակի տիրույթի հաջորդականությունն է, որի ընթացքում մենք պտտվում ենք անկյունների չափման աստիճանով: Անդրադառնալով x- առանցքի ժամանակային նշանին Երկրորդում, մենք կարող ենք կարդալ մոտավորապես 22.5 ցիկլ 50 վայրկյանում, ինչը թարգմանվում է 2.22 վրկ ճոճանակի ժամանակաշրջանի: Կա՞ արդյոք այս գործընթացը ավտոմատացնելու և ավելի ճշգրիտ գնահատական տալու միջոց: Այո, մենք կարող ենք օգտագործել սպեկտրոգրամ կոչվող մաթեմատիկական գործիքը, որն օգտագործում է չափման տվյալների մի փոքր կտոր և մեզ հայտնում դրա հաճախականությունը, տե՛ս ստորև նկարը: Y- առանցքի ընթերցումը ամենամութ գծի համար ճոճանակի տատանումների հաճախականությունն է: Հորիզոնական գիծ լինելը հաստատում է, որ ճոճանակի տատանումն ընդհանրապես չի փոխվել ամբողջ փորձի ընթացքում: Տատանման հաճախության հակադարձ արժեքը ճոճանակի տատանումների շրջանն է:

Byրագրի կողմից կազմված վերջնական զեկույցը տեքստային ամփոփում է.

ճոճանակի տատանում Հաճախություն (Հց) = 0.449224, (ամանակաշրջան (վրկ) = 2.226059, գնահատման տվյալների աղբյուր `սկիպիդար

Մենք կարող ենք գտնել մեր ավելի վաղ ակնաբուժական ձեռքի հաշվարկի արդյունքը ՝ 2.22 վրկ, բավականին համահունչ է ծրագրի հաշվարկված արժեքին:

2.0962 (վրկ) տեսականորեն հաշվարկված արժեքի համեմատ, մեզ մնում է ~ 5% սխալ: Ինչպե՞ս ազատվել դրանցից: Հիշում եք, որ ենթադրությունը «կոշտ համազգեստի ձող» է: Նույնիսկ 7 գրամ լրացուցիչ քաշը չնչին է թվում, դա մնացած սխալի ամենամեծ պատճառն է:

Այժմ մենք սարքը տեղափոխում ենք առանցքի մոտ: Մոտիկից լուսանկարի համար տեսեք նախորդ քայլը: Իմ ստեղծած տեղեկամատյան ֆայլը կարելի է ներբեռնել այստեղ ՝

xiapeiqing.github.io/doc/kits/pendulum/pen…

Կատարեք նույն վերլուծության քայլերը, և մենք ստանում ենք 2.089867 (Վրկ) ժամանակաշրջան, տես նկ. 3, որը գրեթե նույնական է տեսական կանխատեսմանը: Հիանալի!

Քանի որ մենք ունենք ոչ միայն ճոճվող անկյունի չափում, այլև գիրոսկոպիկ չափում և արագացուցիչի չափում նույն արագությամբ: Մյուս երկու չափումների համար կատարեք նույն վերլուծությունը, մենք ստանում ենք արդյունքներ Նկար 4 -ում և 5 -ում: Չափման երեք աղբյուրներից ստացված գնահատականները համաձայն են, ինչը մեզ ավելի վստահ կդարձնի մեր փորձի հաջողության մեջ:

Ահա արդյունքը որպես Python ծրագրի գործարկման վերջնական արդյունք.

ճոճանակի տատանում Հաճախություն (Հց) = 0.478499, (ամանակաշրջան (վրկ) = 2.089867, գնահատման տվյալների աղբյուր `սկիպիդար

ճոճանակի տատանում Հաճախություն (Հց) = 0.478499, eriամանակաշրջան (վրկ) = 2.089867, գնահատման տվյալների աղբյուր ՝ accel

ճոճանակի տատանում Հաճախություն (Հց) = 0.478499, (ամանակաշրջան (վրկ) = 2.089867, գնահատման տվյալների աղբյուր `գիրո

Այս քայլի վերջին միտքն այն է, թե ինչպես կարող են գնահատման արդյունքները ճշգրիտ նույնական լինել `օգտագործելով տարբեր մուտքային տվյալների աղբյուր: Սա հակաինտուիցիա է: Այս հարցը կթողնեմ ընթերցողներին: Ահա մի հուշում. Հիշեք, որ մենք օգտագործում ենք կարճաժամկետ FFT ՝ տատանումների հաճախականությունը գնահատելու համար: Թվային տիրույթում հաճախականությունների գնահատումը տրվում է առանձին հաճախականության աղբարկղերում `լողացող թվերի գնահատման փոխարեն:

Քայլ 5. Ապագա աշխատանքային առաջարկություններ

Կան ապագա աշխատանքային առաջարկությունների մի քանի կատեգորիաներ:

Նախկին փուլում մեզ հաջողվում է մեր փորձարարական սխալը ~ 5% -ից իջեցնել 1% -ից պակաս, կարո՞ղ ենք դրանից ավելի լավ անել: Նկատելով, որ տատանումների մեծությունը նվազում է երկրաչափականորեն, մեկ նպաստող գործոն կարող է լինել ճոճանակը պտտելիս առաջացած օդի ձգումը: Theոճանակի խաչմերուկը կարող է փոփոխության ենթարկվել, որպեսզի ունենա ուղիղ ձև, որպեսզի նվազեցնի աերոդինամիկ ձգումը:

Կարո՞ղ ենք հարմարվողական ֆիլտրի տեխնիկայի միջոցով սովորած ժամանակի տարբերվող ձեռքբերում կիրառել `գագաթնակետին մշտական մեծության ազդանշան տալու համար: Միևնույն ժամանակ, փոխկապակցեք արտաքին ուժերի ուժգնության թուլացման կամքը:

Մենք դժվար թե գտնենք ավելի պարզ բան, քան «պարզ ներդաշնակ շարժումը»: Կարո՞ղ ենք ճոճանակը վերլուծող սարքավորումներն օգտագործել ավելի բարդ բան, սպորտային գործունեություն, ջրային հրթիռների արձակման հաջորդականություն և այլն:

Երջանիկ հաքերություն

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