Mundarija:

Oddiy garmonik harakatni eksperimental o'rganish: 5 qadam
Oddiy garmonik harakatni eksperimental o'rganish: 5 qadam

Video: Oddiy garmonik harakatni eksperimental o'rganish: 5 qadam

Video: Oddiy garmonik harakatni eksperimental o'rganish: 5 qadam
Video: Eng oddiy garmonik tebranma harakatlar | Tebranishlar va mexanik toʻlqinlar | Fizika 2024, Iyul
Anonim

Muallif tomonidan batafsil:

Yurish Strandbeest, Java/Python va ilovalar tomonidan boshqariladi
Yurish Strandbeest, Java/Python va ilovalar tomonidan boshqariladi
Yurish Strandbeest, Java/Python va ilovalar tomonidan boshqariladi
Yurish Strandbeest, Java/Python va ilovalar tomonidan boshqariladi

Sinfda biz mayatnik yoki oddiy harmonik harakat tajribasini o'tkazish uchun sekundomerdan foydalanamiz. Mana, qiyinchilik, biz uning harakatining haqiqiy grafigini ishlab chiqa olamizmi va bir zumda qanday burchakli pozitsiya va tezlik borligini ko'ramiz, bu ko'proq ma'lumot va qiziqarli.

Birinchi savol, biz sarkac korpusining vaznsiz shnur yoki qattiq bir xil tayoq ekanligini aniqlashimiz kerak. Kordonli yondashuv osonroq ko'rinadi. Qurilish amaliyotidan kelib chiqib, men quyidagi fikrlarni o'ylayman: mayatnik tizimini osib qo'yishning eng oson usuli - uni eshikning yuqori chetiga osib qo'yish. Bu hech qanday qurilish ishlarini bajarmasdan mayatnikning ~ 2 m uzunligini beradi. Biroq, burilish eshik yuzasiga tegmasligi kerak, bu butun tajribani buzadi. Shunday qilib, u aylanayotgan tekislik devor/eshik yuzasiga to'g'ri parallel bo'lishi kerak. Og'irligi bo'lmagan sim ingichka bo'lib qoladi, u oson aylana oladi va burilish burchagini o'lchashni murakkablashtiradi. Biz o'zgaruvchan holatni ifodalash uchun bitta o'lchovdan foydalanmoqchimiz. Baliq chizig'i kabi ingichka shnur elastik va cho'ziladigan bo'lishi mumkin, bu biz o'lchagan va mayatnik uzunligi tenglamasida ishlatiladigan eng muhim konstantalarimizga ta'sir qiladi. Ba'zilarga harorat ham ta'sir qilishi mumkin. Kabelning uchiga osilgan og'irlik etarlicha og'ir bo'lishi kerak, shunda simning og'irligi ahamiyatsiz bo'lib qoladi. Agar siz ular bilan rozi bo'lsangiz yoki rozi bo'lmasangiz, yoki sizda dizaynni o'zgartirish bo'yicha boshqa g'oyalar bo'lsa, izoh bering. Ushbu muammoni o'rganish uchun bizga og'irligi e'tiborga olinmaydigan juda engil qurilma kerak va biz hali ham sarkac tizimini qattiq bir xil tayoq sifatida ko'rib chiqamiz. Men COTS kiyiladigan elektron boshqaruvchisidan foydalanmoqdaman, u bizga gyro, akselerometr va burchak ma'lumotlarini bluetooth aloqasi orqali etkazib beradi. Bu o'lchovlar mobil telefon ilovasi ma'lumot faylida saqlanadi. Shundan so'ng, biz oddiy harmonik harakat tajribamiz uchun ma'lumotlarni tahlil qilamiz. Raqamli tahlil quyidagi mavzularga qaratiladi: 1) mayatnik tebranish davrini bashorat qilish 2) mayatnikning oddiy harmonik harakati eksperiment ma'lumotlarini dasturiy ravishda yig'ish 3) tahlil jarayonida kmean-dan ma'lumotlarni guruhlash va chetdan olib tashlashni ishlatish 4) baholash uchun qisqa muddatli FFT-dan foydalanish. mayatnik tebranish chastotasi

Ta'minotlar

Bluetooth o'lchash apparati

Android telefon ilovasi: Google play do'koniga o'ting, M2ROBOTS -ni qidiring va boshqaruv ilovasini o'rnating. Agar Google play do'koniga kirish qiyin bo'lsa, ilova yuklab olishning muqobil usuli uchun shaxsiy bosh sahifamga tashrif buyuring

yog'och tayoq

3D bosilgan qismlar

arra pichoqlar yoki shunga o'xshash metall materiallar

1 -qadam: Sarkac nima? Buni qanday modellashtirish mumkin?

Mayatnik tenglamasini chiqaruvchi ko'plab maqolalar va kitoblar, shu jumladan sizning o'quv fizika kitobingiz. Bunday kontent bu erda takrorlanmasligi yaxshiroqdir. Bu erda "oddiy harmonik harakat" mavzusiga oid yakuniy xulosa keltirilgan. Mayatnikning davrini bilish uchun biz bilishimiz kerak bo'lgan narsa - mayatnikning uzunligi "l", metr bilan belgilanadi.

Agar biz og'irlik aylanada osilib turgan vaznsiz simning uchida deyarli joylashganligiga va mayatnik 15 ° dan kichik burchak ostida tebranayotganiga amin bo'lsak, bunday mayatnikning T1 davri quyidagicha ifodalanadi:

T1 = 2*pi*(l/g)^0,5

g = tortishish tezlanishi, taxminan 9,8 m/s^2

Agar vaznsiz shnur yana l uzunlikdagi qattiq tayoq bilan almashtirilsa, uning oddiy harmonik harakat davri T2 T1 = 2*pi*(2l/3g)^0,5 bilan belgilanadi.

Samarali, u bir xil tayoq uzunligining uchdan ikki qismini tashkil etuvchi vaznsiz simli mayatnik bilan bir xil vaqtga ega.

Bu fon, va biz tajribamizni tayyorlashni boshlashimiz mumkin.

2 -qadam: Uskuna qurilishi uchun qismlarni tayyorlang

Uskunani qurish uchun qismlarni tayyorlang
Uskunani qurish uchun qismlarni tayyorlang
Uskunani qurish uchun qismlarni tayyorlang
Uskunani qurish uchun qismlarni tayyorlang
Uskunani qurish uchun qismlarni tayyorlang
Uskunani qurish uchun qismlarni tayyorlang

Mayatnik konstruktsiyasini yaratish uchun biz ba'zi qismlarni 3D bosib chiqaramiz va bizda mavjud bo'lgan narsalarni qayta ishlatamiz. Mayatnikning umumiy tuzilishi 1 -rasmda ko'rsatilgan. Bu 3D bosma qismlar, qo'lda ishlangan qismlar va Lowe -dan yasalgan uzun yog'och novda aralashmasi.

2 -rasmdagi 3D bosilgan qism eshikning yuqori chetiga osilgan, chunki bizning eshigimiz biror narsani osib qo'yishimiz uchun oson tekis sirtdir. STL faylini yuklab olish havolasi:

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

3 -rasmdagi yashil qism yog'och tayoqni pichoq bilan bog'laydi va pichoq ilgari 3D bosilgan eshik ilgichiga o'rnatilgan ikkita temir yo'lning tepasida joylashgan. STL faylini yuklab olish havolasi:

Ikki bo'lak temir yo'l eski arra pichog'ini yarmini sindirish yo'li bilan tayyorlanadi, 4 -rasmga qarang. 2 -rasmdagi qism ular uchun to'g'ri uyaning o'lchamini tayyorlab qo'ydi. Ideal holda, biz ikkita arra pichog'ida "V" shaklidagi chuqurchani fayl yordamida yasashimiz mumkin. O'tkir qirrali metall, masalan, bir qirrali pichoq yoki qo'l bilan yasalgan har qanday metall buyum, "V" shaklidagi chuqurchalar ichida o'tirishi mumkin. Bizga kichikroq aloqa maydoni kerak bo'lgan sabab, tebranish paytida yo'qolgan kinetik energiyani kamaytirishdir.

5 -rasmdagi oxirgi 3D bosilgan qism - bu elektron o'lchash moslamasini ushlab turadigan kichik laganda.

Yuklab olish havolasi:

Bluetooth o'lchash apparati burchakni baholash, girro o'lchash va akselerometr o'lchovini yaratadi. Bu ma'lumotlarning barchasi bizga bluetooth simsiz havolasi orqali mavjud.

Biz ushbu qurilmani mayatnik qo'lining boshqa joyiga joylashtirish orqali bir nechta tajribalar o'tkazamiz va farqlarni ko'ramiz.

3 -qadam: tajriba ma'lumotlarini yig'ish

Tajriba ma'lumotlarini yig'ish
Tajriba ma'lumotlarini yig'ish
Tajriba ma'lumotlarini yig'ish
Tajriba ma'lumotlarini yig'ish
Tajriba ma'lumotlarini yig'ish
Tajriba ma'lumotlarini yig'ish

Ma'lumotlar to'plamini tahlil qilishdan oldin eksperimental ma'lumotlarni yig'ishning ikkita mumkin bo'lgan usuli mavjud:

1) Apparat tomonidan ishlab chiqarilgan barcha o'lchovlarni telefoningizning SD -kartasida saqlangan ma'lumot fayliga yozish uchun talablar bo'limida ko'rsatilgan Android telefon ilovasidan foydalaning. Biz faylni nusxalashimiz va ma'lumotlarni qayta ishlashimiz mumkin.

2) Bluetooth-ga ulangan kompyuter, shaxsiy kompyuter, noutbuk yoki RaspberryPi mini-kompyuteridan foydalanib, bluetooth-ga ulanib, ma'lumotlarni real vaqtda yoki oflayn tahlil qilish uchun o'qing.

Har bir usulning ijobiy va salbiy tomonlari bor, biz ikkalasini ham sinab ko'ramiz va bu ko'rsatmadagi farqni aytib beramiz.

Android ilovasini ishlatadigan (1) usul uchun, biz android ilovasini boshqarish interfeysiga kirganimizda, bluetooth o'lchash apparatlaridan android telefoniga yuborilgan telemetriya ma'lumotlari m2flightDatayyyymmdd_hhmmss.txt nomli ma'lumotlar fayliga yoziladi. Buni android telefoningizning Download/m2LogFiles papkasida topish mumkin. "Yuklab olish" papkasi-bu telefoningizning android operatsion tizimida oldindan mavjud bo'lgan papka va "m2LogFiles"-bu ilova yaratgan papka. Fayl nomining mazmuni yyyymmdd_hhmmss - bu tajribaning boshlanish vaqtini (yil, oy, kun, soat, daqiqa va soniya) fayl nomiga kodlash usuli.

Jurnal faylidagi har bir satr bitta yozuvdir. Bu voqea vaqt tamg'asi, "eam:" kirish qatoridan boshlanadi, so'ngra 4 ta uchlik ma'lumoti, ular:

XYZ o'qi akselerometrining xom -ashyo sensori apparatidagi o'qish registrlarining qayta o'qish qiymatlari

XYZ o'qi gyroskopi xom -ashyo uskunasida o'qish o'qish registri qayta o'qish qiymatlari

XYZ magnitometrining o'qi xom -ashyo sensori apparatida o'qish qayta o'qish qiymatlari

bortdagi Roll/Pitch/Raw darajasida

Kompyuter python dasturi yordamida yaratilgan ma'lumotlar fayli bir xil ma'lumotlar fayl formatidan foydalanadi, shuning uchun biz ma'lumotlarni tahlil qilish bosqichida ishlatadigan dastur bizning python dasturi yoki android ilovasi tomonidan ishlab chiqarilayotgan ma'lumotlar manbasini bezovta qilmaydi.

(2) usuli yordamida kodlashni boshlaylik.

Bluetooth o'lchash apparati bilan o'zaro ishlash uchun ikkita SDK ta'mi taqdim etiladi:

1) "pip3 install m2controller" orqali o'rnatilishi mumkin bo'lgan Python SDK, python3 - bu ishlatiladigan til. Foydalanuvchi dastur kodlari misollari https://github.com/xiapeiqing/m2robots/tree/maste… da saqlanadi. Ushbu tajriba uchun biz pendulum1.py python skriptidan foydalanamiz.

2) Java SDK, bu qo'llanmada qo'llanilmaydi, chunki biz keyinchalik mayatnik ma'lumotlarini vizualizatsiya qilishni va tahlil qilishni xohlaymiz, bu esa bizni Java -da dasturlash uchun biroz ko'proq kuch talab qilishi mumkin.

Python3 ma'lumotlar yig'ish dasturining manba kodi kod funktsional tafsilotlari uchun ko'plab izohlarni o'z ichiga oladi. Bu erda manba kodining surati berilgan.

#!/usr/bin/env python#-*-kodlash: UTF-8-*-m2controller import m2controller dan m2controller import m2Const import signal import vaqti import datetime import usrCfg import pendulum2

requestExit = noto'g'ri

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

#biz xuddi shu jurnal fayllarini nomlash konventsiyasidan foydalanmoqchimiz, shunda pendulum2.py ma'lumotni tahlil qilish moduli ################ ma'lumot ma'lumotlarini qanday olishimizni bilmaydi. ######################################################### logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = ochiq (logfilename," w ")

def signal_handler (sig, ramka):

global requestExit print ('dastur bajarilishidan chiqish uchun foydalanuvchi Ctrl-C') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#har bir o'lchov ma'lumoti 20 Gts tezlikda mavjud bo'lganda, "qayta qo'ng'iroq qilish" funktsiyasi chaqiriladi ############################# ################################# def callbackfunc (telemetriya): 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, telemetriya ['m_fAccelHwUnit'] [0], telemetriya '' m_fAccelHwUnit '] [1], telemetriya ['m_fAccelHwUnit'] [2], telemetriya ['m_fGyroHwUnit'] [0], telemetriya ['m_fGyroHwUnit'] [1], telemetriya '' m_fGyroHwUnit '] [2], telemetr [' m_fm] 'm_fMagHwUnit'] [1], telemetriya ['m_fMagHwUnit'] [2], telemetriya ['m_fRPYdeg'] [0], telemetriya '' m_fRPYdeg '] [1], telemetriya [' m_fRPYdeg '] [2]) # ########################################################################################### ############# biz ma'lumotlar satrini ekranga bosib chiqaramiz va ularni jurnalga saqlaymiz ####################### ########################################### bosib chiqarish (dataStr) dataLogfile.writelines (dataStr)

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

#tekshirgichni ishga tushiring, BleMACaddress maydonini qurilmangizning MAC manzili qilib belgilashni unutmang ################################# ################################ TODO: agar foydalanuvchi o'rnatmagan bo'lsa, BleMACaddress -ni ishga tushiramiz. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ############################# #######################################mayatnik o'lchovidan yaratilgan va yuborilgan o'lchov ma'lumotlarini kuting. apparat ############################################################################################################################## #################### controller.m_CommsTunnel.waitForNotifications (1.0) agar requestExit: ######################## ########################################################################## ############################################ housel housez maílumotlar jurnali tugallangach shu erda ishlaydi. ########################################################################################### ################ controller.stop () dataLogfile.close () tanaffus

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

#ma'lumotlarni yig'ish tugallandi, endi jurnal ma'lumotlarini tahlil qilaylik ####################################### ######################### pendulum2.parseDataLogFile (logfilename)

Uzoq muddatli yangilanishlar uchun https://github.com/xiapeiqing/m2robots/blob/maste… hisobini tekshiring.

Endi uning ishlash usulini tushuntirib beramiz. Bu python dasturi m2controller deb nomlangan quvurga o'rnatiladigan paketning tepasida yozilgan. Pastki darajali paket qayta qo'ng'iroq qilish mexanizmini taklif qiladi, shuning uchun har bir qabul qilingan o'lchov yangilanishi biz yozgan qayta qo'ng'iroq qilish funktsiyasini ishga tushiradi va ma'lumotlarni mahalliy jurnal fayliga saqlaydi. Kundalik fayllar ma'lumotlarining mazmuni Android sherigi ilovasi bilan bir xil, shuning uchun python dasturi yoki andriod sherigi ilovasi tomonidan yaratilgan ma'lumotlar jurnali faylini almashish mumkin.

Operatsion tizim tomonidan olingan foydalanuvchi ctrl-C signali dasturga uzatiladi va o'lchov ma'lumotlarining yangi kelishini kutayotgan cheksiz tsiklni to'xtatadi.

Hozircha jurnal fayli muvaffaqiyatli tuzildi va bu dastur bizning tajriba natijalarini o'rganish uchun tahlil dasturini chaqiradi.

Bu erda ikkita tajriba va taqqoslash 7 grammli qurilmani turli joylarga ulash orqali juda sezilarli farqni ko'rsatadi.

2 -rasmda biz bluetooth o'lchash moslamasining haqiqiy og'irligini aniqlash uchun shkala ishlatamiz.

3 -rasmda sarkacın pastki uchiga 7 grammlik qurilma ulangan mayatnik o'rnatilishi tasvirlangan. 4 -rasmdagi sozlash konfiguratsiyasi 7 grammli massaga ega, burilish burchagiga ancha yaqinroq.

5 -rasm - mayatnik strukturasining yaqin ko'rinishi.

4 -qadam: ma'lumotlarni tahlil qilish

Ma'lumotlar tahlili
Ma'lumotlar tahlili
Ma'lumotlar tahlili
Ma'lumotlar tahlili
Ma'lumotlar tahlili
Ma'lumotlar tahlili

Bluetooth o'lchash moslamasining og'irligi ~ 7 gramm, og'irligi ~ 1,6 metr uzunlikdagi yog'och tayoqchadan ancha past. "Qattiq bir xil tayoq" farazidan foydalaning va bizda sarkacli davr tenglamasi bor, T1 = 2*pi*(2l/3g)^0,5

Gravitatsiya doimiyligini olish uchun biz 9,8 m/s^2 dan foydalanishimiz mumkin. Ammo har qanday geolokatsiyada aniqroq tortishish konstantasini ushbu veb -xizmatdan olish mumkin:

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

San -Frantsisko uchun bu 9.81278m/s^2

Mayatnik uzunligi 64,5 dyuymga teng

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) 2.0962 (sek) kutilgan mayatnik davrini beradi.

Keling, bu bizning tajribalarimizga mos keladimi yoki yo'qligini bilib olaylik.

Birinchi tajribada mayatnikni sozlashda sarkacning pastki uchiga 7 grammli qurilma o'rnatilgan. Mening jurnal faylimni quyidagicha yuklab olish mumkin:

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

Uni "PendulumTestData.txt" deb o'zgartiring va python tahlil dasturining o'sha papkasiga qo'ying. Bu erda manba kodining surati berilgan.

#!/usr/bin/env python#-*-kodlash: UTF-8-*-ctv import matplotlib.pyplot plt plt.style.use ('seaborn-whitegrid') sifatida import raqami datetime import datetime dan np sifatida, timedelta import seaborn sklearn.cluster dan sns sifatida import KMeans to'plamlardan import Counter ################################### ############################## bu funktsiya ma'lumotlar fayllarini tahlil qilish ishini bajaradi ############## ###################################################################################### ## def parseDataLogFile (datafilename): ############################################################# ####################### ma'lumotlarni vergul bilan ajratilgan jurnali faylidan (CSV) chiqarib oling va har bir ustundagi tarkibni float tipidagi bitta o'zgaruvchiga saqlang ## ###################################################################################### ############ csvfile sifatida ochiq (datafilename) bilan: readCSV = csv.reader (csvfile, delimiter = ',') vaqt tamg'asiS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnn fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = readCSV -dagi satr uchun: harakat qilib ko'ring: x = datetime.strptime (qator [0]. split (',') [0], '%H:%M:%S.%f ') vaqt tamg'asi [1] [4:])) fAccelHwUnit_y.append (float (qator [2])) fAccelHwUnit_z.append (float (qator [3])) fGyroHwUnit_x.append (float (qator [4])) fGyroHwUnit_y.append (float (2 -qator)) (5 -qator)) [9])) fRPYdeg_r.append (float (qator [10])) fRPYdeg_p.append (float (qator [11])) fRPYdeg_y.append (suzuvchi (satr [12])) bundan mustasno: o'tish vaqti tamg'asiS = np.asarray (Vaqt belgilari) Vaqt belgilari = Vaqt belgilari - vaqt oraliqlarini [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)

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

#bizga aniq tebranish davrini hisoblash uchun namuna olish chastotasining aniq bahosi kerak ################################################ ############################## FsHz = getSamplingIntervalS (vaqt tamg'asiS) ################ ############################################### foydalanish# mayatnik davrini tahlil qilish uchun munosabat sarlavhasi tizimidagi chiqish komponenti #################################### ############################ tahlil_ vaqtSeksiyasi (vaqt tamg'asiS, fRPYdeg_p, FsHz, 'pitch') ############ ########################################################################################### ####mayatnik davrini tahlil qilish uchun tezlatgich xomashyo o'lchovidan foydalanish #################################### ############################ tahlil_ vaqtSeksiyasi (vaqt tamg'asi, fAccelHwUnit_x, FsHz, "tezlik") ########### ########################################################################################### ####mayatnik davrini tahlil qilish uchun gyro xomashyo o'lchovidan foydalaning ##################################### ############################ tahlil_ vaqtiSekans (vaqt tamg'asiS, fGyroHwUnit_y, FsHz, ' gyro ') chop etish (' bajarildi, tabriklar:-) ') plt.show () ############################## ###################################bluetooth aloqa jarayonida, ma'lumotlar almashish paketining imkoniyatlari kam uchraydi. yo'qolish#biz 20-gigagertsli o'lchov ma'lumotlarini tashqi signallardan ajratish uchun K-degan ma'noni ishlatamiz, chunki ular "batafsil ma'lumot olish uchun signal va tizim" paketiga#sho'ng'ish natijasida kelib chiqadi ################## ################################################# def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('o'lchov oralig'i (lar)') klasterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elementCnt = Counter (km.labels_) yuzaga kelishiCnt = ii diapazonida (clusterCnt): yuzaga kelishiCnt.append (elementCnt [ii]) FsHz = 1/centroids [yuzaga kelishiCnt.index (max (yuzaga kelishCnt))] FsHzni qaytaradi

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

#spektrometrdan foydalaning, ya'ni chastota komponentini olish uchun qisqa vaqtli FFT, tepalik bin - mayatnik tebranishining eng yaxshi bahosi ########################## ###################################### analy analyz_timeSequence (vaqt tamg'alari, timeSeqData, FsHz, strComment): fig, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("sarkaç vaqtini domen o'lchami - %s" %strComment) ax1.set_xlabel ("namuna olish vaqti (soniya)") ax1.set_ylabel (strComment); NFFT = 2048 # oyna segmentlarining uzunligi

Pxx, chastotalar, qutilar, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title ("Spektrogram") ax2.set_xlabel ("namunalar") ax2.set_ylabel ("chastota (Hz)");

# "Specgram" usuli 4 ta ob'ektni qaytaradi. Ular:

# - Pxx: davrogramma # - chastotalar: chastota vektori # - bo'laklar: vaqt bo'laklari markazlari # - im: matplotlib.image. AxesImage namunasi pkresult = np.tasviridagi ma'lumotlarni aks ettiradi (Pxx == np).amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] chop etish ('mayatnik tebranishi Freq (Hz) =%f, Davr (Sek) =%f, taxminiy ma'lumot manbasi:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) 1/oscFreqHz ni qaytaring

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

#biz bu dasturni mustaqil ishga tushirishimiz kerak, ya'ni pendulum1.py tomonidan chaqirilmasa,#tahlil qilinadigan jurnal ma'lumotlari faylining nomini aniqlaymiz ##################### ############################################ agar _name_ == "_main_" ": defaultFilename = './PendulumTestData.

Uzoq muddatli yangilanishlar uchun https://github.com/xiapeiqing/m2robots/blob/maste… hisobini tekshiring.

Manba kodi batafsil izohlarni o'z ichiga oladi, keling, bu erda matematik baholashning yuqori darajadagi xulosasini beraylik.

1) Biz CSV faylining mazmunini kompyuterda "csv" deb nomlangan python paketidan foydalanib o'qiymiz. Bizda davriy o'lchovlar mavjud.

21: 34: 26.362, eam: 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, eam: 448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0.5, -8.0, 40.5

2) O'lchov tezligi juda muhim va mayatnik davrini hisoblash xatosini to'g'ridan -to'g'ri kiritganligi sababli, biz ularni taxmin qilmoqchimiz. Bizning nominal o'lchov oralig'i 50ms, ya'ni 20Hz. O'lchovlar bo'yicha o'rtacha hamma narsa yaxshi ko'rinadi, lekin biz vaqti -vaqti bilan ma'lumotlarni uzatish paketini yo'qotamiz, yangilanish oralig'i 100ms yoki 150ms bo'ladi …

Agar biz bu ma'lumotlarning paydo bo'lishini rejalashtirmoqchi bo'lsak, 1 -rasmga qarang, inson sifatida biz ko'zni 0,05 sekundga osongina olishimiz mumkin. Biroq, biz bundan yaxshiroq qila olamizmi?

O'rtacha hisoblash uchun faqat yaxshi usullarni tanlash uchun biz tasniflash usulidan foydalanishimiz kerak. Python -da KMeans nomli asboblar qutisi mavjud bo'lib, ular bizga klasterlashtirish yoki tasniflashda yordam beradi. Bu tushunchalar ko'plab katta ma'lumotlar va AI sohalarida qo'llaniladi.

3) 2 -rasmda ikkita tasvir mavjud. Yuqori uchastka deganda burchakni o'lchashning vaqt sohasidagi ketma-ketligi. Ikkinchisidagi x o'qi vaqt tamg'asiga tayanib, biz 50 sekundda taxminan 22,5 tsiklni o'qiy olamiz, bu esa 2,22 soniyali sarkacli davrga aylanadi. Bu jarayonni avtomatlashtirish va aniqroq baho berishning yo'li bormi? Ha, biz spektrogram deb nomlangan matematik asbobdan foydalanishimiz mumkin, u kichik o'lchov ma'lumotlarini ishlatadi va bizga uning chastotasini aytib beradi, quyidagi rasmga qarang. Eng qorong'i chiziq uchun o'qi o'qi-mayatnik tebranish chastotasi. Gorizontal chiziqning mavjudligi mayatnik tebranishi tajriba davomida umuman o'zgarmaganligini tasdiqlaydi. Tebranish chastotasining teskari qiymati - mayatnik tebranish davri.

Dasturning yakuniy hisoboti matnning qisqacha mazmuni:

mayatnik tebranishi Frek (Hz) = 0.449224, Davr (sek) = 2.226059, taxminiy ma'lumot manbasi: qadam

Qo'llarni hisoblashning oldingi natijasi 2.22 soniya, biz dasturning hisoblangan qiymatiga juda mos keladi.

Nazariy jihatdan hisoblangan 2.0962 (sek) qiymat bilan solishtirganda, bizda ~ 5% qolgan xato bor. Ulardan qanday qutulish mumkin? "Qattiq bir xil tayoq" degan taxminni eslaysizmi? Hatto 7 gramm ortiqcha vazn ham ahamiyatsiz ko'rinadi, bu qolgan xatoning eng katta sababidir.

Endi biz qurilmani aylanaga yaqin harakatlantiramiz. Yaqinroq rasm uchun oldingi qadamni ko'ring. Men yaratgan jurnal faylini bu erdan yuklab olish mumkin:

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

Xuddi shu tahlil bosqichlarini bajaring va biz 2.089867 (sek) davrini olamiz, 3 -rasmga qarang, bu nazariy bashorat bilan deyarli bir xil. Ajoyib!

Chunki bizda nafaqat burilish burchagi o'lchami, balki giroskopik va akselerometr o'lchovlari ham bir xil tezlikda. Boshqa ikkita o'lchov uchun ham xuddi shunday tahlilni o'tkazing, biz 4 va 5 -rasmda natijalarni olamiz. Uch o'lchov manbasining baholari bir -biriga mos keladi, bu bizni tajribamiz muvaffaqiyatiga ishonchimizni oshiradi.

Bu erda ishlaydigan python dasturining yakuniy natijasi:

mayatnik tebranishi chastotasi (Hz) = 0.478499, davr (sek) = 2.089867, taxminiy ma'lumot manbai: qadam

mayatnik tebranishi Frek (Hz) = 0.478499, Davr (sek) = 2.089867, taxminiy ma'lumot manbasi: accel

mayatnik tebranishi Frek (Hz) = 0.478499, Davr (sek) = 2.089867, taxminiy ma'lumot manbai: girro

Bu qadamda oxirgi fikr, qanday qilib turli xil kirish ma'lumotlari manbalari yordamida baholash natijalari bir xil bo'lishi mumkin? Bu qarshi sezgi. Men bu savolni o'quvchilarga qoldiraman. Bu erda maslahat: eslaylikmi, biz tebranish chastotasini baholash uchun qisqa muddatli FFTdan foydalanayapmizmi? Raqamli domenda chastotalar bahosi suzuvchi sonlar o'rniga diskret chastota qutilarida beriladi.

5 -qadam: Kelgusi ish bo'yicha tavsiyalar

Kelgusi ish bo'yicha tavsiyalar toifalari kam.

Oldingi bosqichda biz tajribamizdagi xatoni ~ 5% dan 1% gacha kamaytirishga muvaffaq bo'ldik, bundan yaxshiroq qila olamizmi? Tebranish kattaligi eksponent ravishda kamayib borayotganini sezgan holda, mayatnikni siljitish paytida havo tortilishi sabab bo'lishi mumkin. Aerodinamik harakatlanishni kamaytirish uchun mayatnikning kesimini tekis shaklga o'zgartirish kerak bo'lishi mumkin.

Doimiy maksimal signal signalini chiqarish uchun moslashuvchan filtrlash texnikasi yordamida o'rganilgan vaqt o'zgaruvchan daromadni qo'llay olamizmi? Shu bilan birga, tashqi kuchlar kuchining pasayishi bilan bog'liq.

Biz "oddiy harmonik harakat" dan ko'ra oddiyroq narsani topa olmaymiz. Biz mayatnikni tahlil qiladigan vositalardan murakkabroq narsani, sport mashg'ulotlarini, suv raketalarini uchirish ketma -ketligini va boshqalarni tahlil qilish uchun ishlata olamizmi?

Baxtli xakerlik

Tavsiya: