Sisällysluettelo:

Yksinkertaisen harmonisen liikkeen kokeellinen tutkimus: 5 vaihetta
Yksinkertaisen harmonisen liikkeen kokeellinen tutkimus: 5 vaihetta

Video: Yksinkertaisen harmonisen liikkeen kokeellinen tutkimus: 5 vaihetta

Video: Yksinkertaisen harmonisen liikkeen kokeellinen tutkimus: 5 vaihetta
Video: mestarikurssi "Kuinka tasapainottaa 7 tunnetta, jotka tuhoavat selkärangan" 2024, Heinäkuu
Anonim

Seuraa lisää tekijältä:

Walking Strandbeest, Java/Python ja sovellusohjattu
Walking Strandbeest, Java/Python ja sovellusohjattu
Walking Strandbeest, Java/Python ja sovellusohjattu
Walking Strandbeest, Java/Python ja sovellusohjattu

Luokkahuoneessa käytämme usein sekuntikelloa heilurikokeeseen tai yksinkertaiseen harmoniseen liikekokeeseen. Tässä on haaste. Voimmeko tuottaa todellisen kaavion sen liikkeestä ja nähdä, mikä on hetkellinen kulma -asema ja nopeus, se on paljon enemmän tietoa ja hauskaa.

Ensimmäinen kysymys, meidän on päätettävä, että heilurirunko on painoton johto tai jäykkä yhtenäinen sauva. Johto lähestymistapa näyttää olevan helpompaa. Sen rakentamisen käytännössä minulla on seuraavat kompromissit: Helpoin tapa ripustaa heilurijärjestelmä voi olla ripustaa se oven yläreunaan. Tämä antaa ~ 2 m heilurin pituuden tekemättä rakenteellisia rakennustöitä. Mutta se tarvitsee, että keinu ei kosketa oven pintaa, mikä yksinkertaisesti pilaa koko kokeen. Joten sen heiluttaman tason tulisi olla tarkasti yhdensuuntainen seinän/oven pinnan kanssa. Painoton johto on yleensä ohut, se voi pyöriä helposti ja vaikeuttaa kääntökulman mittaamista. Haluamme käyttää yhtä mittausta heilahdustilan kuvaamiseen. Ohut naru, kuten siima, voi olla joustava ja venytettävä, mikä vaikuttaa yhteen tärkeimmistä vakioistamme, jotka mittaamme ja joita käytetään yhtälössä, joka on heilurin pituus. Jotkut voivat myös vaikuttaa lämpötilaan. Johdon päässä roikkuvan painomassan on oltava riittävän painava, jotta narun paino muuttuu vähäiseksi. Kommentoi, jos olet samaa mieltä tai eri mieltä heidän kanssaan tai sinulla on muita muotoilun kompromisseja. Tämän ongelman tutkimiseksi tarvitsemme laitteen, joka on niin kevyt, että sen paino voidaan jättää huomiotta, ja pidämme heilurijärjestelmää edelleen jäykänä yhtenäisenä sauvana. Käytän puettavaa COTS -elektronista ohjainta, joka toimittaa gyro-, kiihtyvyysmittari- ja kulmatiedot meille Bluetooth -yhteyden kautta. Nämä mittaukset tallennetaan matkapuhelinsovelluksen datatiedostoon. Sen jälkeen analysoimme yksinkertaisen harmonisen liikekokeilumme tiedot. Numeerinen analyysi keskittyy seuraaviin aiheisiin: 1) Ennakoi heilurin värähtelyjakso 2) Kerää ohjelmoitavasti heilurin yksinkertaisen harmonisen liikkeen kokeilutiedot 3) Käytä kmeania tietojen ryhmittämiseen ja poikkeamien poistamiseen analyysiprosessista 4) Käytä lyhyen ajan FFT: tä arvioidaksesi heilurin värähtelytaajuus

Tarvikkeet

Bluetooth -mittauslaite

Android -puhelinsovellus: Siirry Google Playstoreen, etsi M2ROBOTS ja asenna ohjaussovellus. Jos Google Playstoreen on vaikea päästä, käy henkilökohtaisella kotisivullani vaihtoehtoista sovellusten lataustapaa varten

puinen sauva

muutama 3D -tulostettu osa

sahanterät tai vastaava metallimateriaali

Vaihe 1: Mitä heiluri on? Kuinka mallintaa se?

On olemassa monia artikkeleita ja kirjoja, jotka esittävät heiluriyhtälöjohdannuksen, mukaan lukien fysiikan oppikirjasi. Tällaista sisältöä saattaa olla parempi olla toistamatta täällä uudelleen. Tässä on lueteltu vain lopullinen johtopäätös aiheesta "yksinkertainen harmoninen liike". Heilurin ajan tuntemiseksi meidän tarvitsee vain tietää heilurin pituus, joka on merkitty "l": ksi metreinä.

Jos olemme kohtuullisen varmoja, että paino sijaitsee lähes kokonaan saranassa roikkuvan painottoman narun päässä ja heiluri heiluu pienissä kulmissa θ, esimerkiksi alle 15 °, tällaisen heilurin ajanjakso T1 on:

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

g = painovoiman kiihtyvyys, noin 9,8 m/s^2

Jos painoton johto korvataan jäykällä yhtenäisellä tangolla, jonka pituus on jälleen l, sen yksinkertaisen harmonisen liikejakson T2 antaa T1 = 2*pi*(2l/3g)^0,5

Käytännössä sillä on sama aika kuin painottomalla narun heilurilla, joka on kaksi kolmasosaa jäykästä yhtenäisestä tangon pituudesta.

Tämä on tausta, ja voimme aloittaa kokeilun valmistelun.

Vaihe 2: Valmistele osat laitteiston rakentamista varten

Valmistele osat laitteiston rakentamista varten
Valmistele osat laitteiston rakentamista varten
Valmistele osat laitteiston rakentamista varten
Valmistele osat laitteiston rakentamista varten
Valmistele osat laitteiston rakentamista varten
Valmistele osat laitteiston rakentamista varten

Heilurirakenteen rakentamiseksi tulostamme 3D -osia joitakin osia ja kierrätämme jotain, mikä meillä on jo. Heilurin kokonaisrakenne on esitetty kuvassa 1. Se on sekoitus 3D -tulostusosia yhdessä joidenkin käsintehtyjen osien ja Lowen puukappaleen kanssa.

Kuvan 2 3D -painettu osa on ripustettu oven yläreunaan, koska ovemme on helppo tasainen pinta, johon voimme ripustaa jotain. STL -tiedoston latauslinkki:

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

Kuvan 3 vihreä osa yhdistää puun sauvan terään ja terä istuu kahden kiskon päällä, jotka on asennettu aikaisempaan 3D -painettuun oven ripustimeen. STL -tiedoston latauslinkki:

Kaksi kappaletta kiskoa tehdään rikkomalla vanha sahanterä puoliksi, katso kuva 4. Kuvan 2 osa on valmistanut heille oikean raon koon. Ihannetapauksessa voimme tehdä "V" -muotoisen loven näihin kahteen sahanterään viilalla. Kohtuullisen teräväreunainen metalli, kuten yhden reunan partaterä tai mikä tahansa käsintehty metalliosa, voi istua V -muotoisten lovien sisään. Syy siihen, että tarvitsemme pienemmän kosketuspinnan, on vähentää heilumisen aikana menetettyä liike -energiaa.

Kuvan 5 viimeinen 3D -tulostettu osa on pieni lokero elektronisen mittauslaitteen pitämiseksi.

Latauslinkki:

Bluetooth -mittauslaite tuottaa kulma -estimaatin, gyro -mittauksen ja kiihtyvyysmittarin mittauksen. Kaikki nämä tiedot ovat saatavilla langattoman Bluetooth -yhteyden kautta.

Aiomme tehdä useita kokeita sijoittamalla tämän laitteen heilurivarren eri asentoon ja näkemään erot.

Vaihe 3: Kokeilutietojen kerääminen

Kokeilutietojen keruu
Kokeilutietojen keruu
Kokeilutietojen keruu
Kokeilutietojen keruu
Kokeilutietojen keruu
Kokeilutietojen keruu

Kokeelliseen tiedonkeruuseen on kaksi mahdollista menetelmää ennen kuin analysoimme hankitun tietojoukon:

1) Käytä vaatimusten osassa määritettyä Android -puhelinsovellusta kirjataksesi kaikki laitteen tuottamat mittaukset puhelimen SD -kortille tallennettuun datatiedostoon. Voimme kopioida tiedoston ja lähettää prosessin tiedot.

2) Käytä bluetooth-yhteensopivaa tietokonetta, tietokonetta, kannettavaa tietokonetta tai RaspberryPi-minitietokonetta muodostaaksesi Bluetooth-yhteyden laitteeseen ja lukeaksesi tiedot joko reaaliaikaista tai offline-analyysiä varten.

Jokaisella menetelmällä on sekä hyviä että huonoja puolia, yritämme molempia ja kerromme eron tässä ohjeessa.

Menetelmässä (1), jossa käytetään android -sovellusta, kun olemme Android -sovelluksen ohjausliittymässä, Bluetooth -mittauslaitteesta Android -puhelimeen lähetetyt telemetriadatat tallennetaan datalog -tiedostoon nimeltä m2flightDatayyyymmdd_hhmmss.txt. Se löytyy Android -puhelimesi Download/m2LogFiles -kansiosta. Lataa-kansio on aiemmin luotu kansio puhelimesi Android-käyttöjärjestelmässä ja "m2LogFiles" on sovellus luoma kansio. Tiedostonimen sisältö yyyymmdd_hhmmss on tapa koodata kokeilun alkamisaika (vuosi, kuukausi, päivä, tunti, minuutti ja sekunti) tiedostonimeen.

Lokitiedoston jokainen rivi on yksi tietue. Se alkaa tapahtuman aikaleimalla, johdannon merkkijonolla "eam:", jota seuraa 4 triplettidataa, jotka ovat:

Kiihtyvyysmittarin XYZ -akselin lukema raaka -anturilaitteiston rekisterin lukuarvoissa

Gyroskoopin XYZ -akselin lukeminen raa'an anturin laitteistorekisterin lukuarvoissa

Magnetometrin XYZ -akselin lukema raaka -anturilaitteiston rekisterin lukuarvoissa

laivalla arvioitu Roll/Pitch/Raw asteessa

Tietokonepython -ohjelmalla luotu datatiedosto käyttää identtistä datatiedostomuotoa, joten tietojen analysointivaiheessa käyttämäämme ohjelmaa ei häiritse python -ohjelmamme tai Android -sovelluksemme tuottama tietolähde.

Aloitetaan koodaus menetelmällä (2).

Jotta voit käyttää Bluetooth -mittauslaitetta, saat kaksi SDK -makua:

1) Python SDK, joka voidaan asentaa "pip3 install m2controller" -ohjelmalla, python3 on käytetty kieli. Esimerkkejä käyttäjän sovelluskoodista on tallennettu osoitteeseen https://github.com/xiapeiqing/m2robots/tree/maste… Tässä kokeessa käytämme python -skriptiä pendulum1.py

2) Java SDK, jota ei käytetä tässä ohjeessa, koska haluamme visualisoida ja analysoida hankittuja heiluritietoja myöhemmin, mikä saattaa viedä hieman enemmän vaivaa, jotta voimme ohjelmoida Java -ohjelmaan.

Python3 -tiedonkeruuohjelman lähdekoodi sisältää monia kommentteja koodin toiminnallisuudesta. Tässä on tilannekuva lähdekoodista.

#!/usr/bin/env python#-*-koodaus: UTF-8-*-m2-ohjaimesta tuoda m2-ohjain m2-ohjaimesta tuonnista m2

requestExit = Väärä

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

#Haluamme käyttää samaa lokitiedoston nimeämiskäytäntöä, jotta tietojen analysointimoduuli, pendulum2.py, voi olla agnostinen siitä, miten saamme lokitiedoston ################# ##############################################tiedostonimi = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = auki (lokitiedoston nimi," w ")

def signal_handler (sig, frame):

global requestExit print ('käyttäjän Ctrl-C poistuakseen ohjelman suorittamisesta') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#kun jokainen mittaustieto tulee saataville 20 Hz: n taajuudella, tämä "takaisinsoittotoiminto" kutsutaan ############################### ################################## def callbackfunc (telemetria): 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, telemetry ['m_fAccelHwUnit'] [0], telemetria ['m_fAccelHwUnit'] [1], telemetria ['m_fAccelHwUnit'] [2], telemetria ['m_fGyroHwUnit'] [0], telemetria ['m_fGyroHwUnit'] [1], telemetria ['m_fGyroHwUnit'] [2], telemetria

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

#alustaa ohjain, muista asettaa BleMACaddress -kenttä laitteesi MAC -osoitteeksi ################################# ################################TODO: alustetaan BleMAC -osoite, jos käyttäjä ei määritä sitä. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () kun True: ########################## ########################################odota heilurin mittauksesta luotuja ja lähetettyjä mittaustietoja laite ################################################## ############### controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ###################### #########################################talonpito toimii täällä, kun lopetamme tietojen kirjaamisen ################################################## ############## controller.stop () dataLogfile.close () tauko

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

#tiedonkeruu valmis, nyt analysoidaan lokitiedot ######################################### ######################### pendulum2.parseDataLogFile (lokitiedoston nimi)

Jos haluat päivittää pitkän aikavälin, tutustu

Selitetään nyt sen toimintatapa. Tämä python -ohjelma on kirjoitettu pip -asennettavan paketin päälle, jonka nimi on m2controller. Alemman tason paketti tarjoaa takaisinsoittomekanismin, joten jokainen vastaanotettu mittauspäivitys käynnistää kirjoittamamme soittotoiminnon ja tallentaa tiedot paikalliseen lokitiedostoon. Lokitiedoston tietosisällön muoto on sama kuin Android -kumppanisovelluksen tuottama, joten joko python -ohjelman tai andriod -kumppanisovelluksen luoma datalokitiedosto on vaihdettavissa.

Käyttöjärjestelmän kaappaama käyttäjän ctrl-C-signaali välitetään ohjelmalle ja pysäytetään ääretön silmukka odottamaan uutta mittaustietoa.

Toistaiseksi lokitiedosto on luotu onnistuneesti, ja tämä ohjelma kutsuu analyysiohjelman tutkimaan kokeilun tuloksia.

Tässä on kaksi kokeilua, ja vertailu osoittaa huomattavan eron liittämällä 7 gramman laitteen eri paikkoihin.

Kuvassa 2 käytämme vaakaa tämän bluetooth -mittauslaitteen todellisen painon määrittämiseksi.

Kuva 3 esittää heilurin kokoonpanoa, jossa 7 gramman laite on kiinnitetty heilurin alapäähän. Kuvan 4 kokoonpanokokoonpanossa 7 gramman massa sijaitsee paljon lähempänä kääntyvää niveltä.

Kuvio 5 on lähikuva heilurirakenteesta.

Vaihe 4: Tietojen analyysi

Tietojen analysointi
Tietojen analysointi
Tietojen analysointi
Tietojen analysointi
Tietojen analysointi
Tietojen analysointi

Bluetooth -mittauslaite painaa ~ 7 grammaa, mikä painaa paljon vähemmän kuin ~ 1,6 metriä pitkä puutikku. Käytä oletusta "jäykkä yhtenäinen sauva", ja meillä on tämä heilurijakson yhtälö, T1 = 2*pi*(2l/3g)^0,5

Painovoiman saamiseksi voimme käyttää 9,8 m/s^2. Tästä verkkopalvelusta voidaan kuitenkin noutaa tarkempi vakavuusvakio millä tahansa maantieteellisellä sijainnilla:

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

San franciscon osalta se on 9,81278m/s^2

Heilurin pituuden mitataan olevan 64,5 ''

2*pi*neliömetriä (2*64,5*0,0254/(3*9,81278)) antaa odotetun heilurijakson 2,0962 (sekuntia).

Katsotaan, sopiiko se kokeilumme kanssa.

Ensimmäisessä kokeessa heiluriasetuksessa on 7 gramman laite kiinnitetty heilurin alapäähän. Lokitiedostoni voi ladata osoitteesta:

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

Nimeä se uudelleen nimellä "PendulumTestData.txt" ja aseta se samaan python -analysointiohjelman kansioon. Tässä on tilannekuva lähdekoodista.

#!/usr/bin/env python#-*-koodaus: UTF-8-*-tuoda csv-tuonti matplotlib.pyplot muodossa plt plt.style.use ('seaborn-whitegrid') timedelta tuonti merimies sns: nä sklearnista. klusterin tuonti ############################# Tämä toiminto suorittaa datatiedoston analyysityön ############ ################################################## ## def parseDataLogFile (datatiedoston nimi): ######################################### #######################poimi tiedot pilkuilla erotetussa datalokitiedostossa (CSV) ja tallenna kunkin sarakkeen sisältö yhdeksi float-tyyppiseksi muuttujaksi ## ################################################## ############ ja avoin (datatiedostonimi) csv -tiedostona: 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 = rivillä readCSV: try: x = datetime.strptime (rivi [0].jako (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (tuntia = x.tunti, minuutit = x.minute, sekuntia = x.sekunti, mikrosekuntia = x.mikrosekunti).total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (rivi [2])) fAccelHwUnit_z.append (float (rivi [3])) fGyroHwUnit_x.append (float (rivi [4])) fGyroHwUnit_y.append (float (rivi [5])) fGyroHwUnit_z.append (float (rivi [6])) fMagHwUnit_x.append (float (rivi [7])) fMagHwUnit_y.append (float (rivi [8])) fMagHwUnit_z.append (float (row [9])) fRPYdeg_r.append (float (rivi [10])) fRPYdeg_p.append (float (rivi [11])) fRPYdeg_y.append (float (rivi [12])) paitsi: pass timestampS = np.asarray (aikaleimat) aikaleimat = aikaleimat - aikaleimat [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)

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

#tarvitsemme tarkan arvion näytteenottotaajuudesta täsmälle värähtelyjakson estimaatille ##################################### ############################## FsHz = getSamplingIntervalS (timestampS) ############### ########################################## piki -komponentti asenneotsikon viitejärjestelmän tuotoksessa heilurijakson analyysiin ###################################### ############################################# analysointiaika (aikaleimaS, fRPYdeg_p, FsHz, 'piki') ################################################## ####käytä kiihtyvyysmittarin raakamittaustulosta heilurijakson analyysiin ##################################### ####################################################################################################################################################################################################################################################################. ################################################## ####käytä gyro -raaka -mittaustulosta heilurijakson analyysiin ##################################### ############################ analyysiaika_sekvenssi (aikaleimaS, fGyroHwUnit_y, FsHz, '' gyro ') tulosta (' tehty, onnittelut:-) ') plt.show () ############################### ##################################Bluetooth -viestintäprosessissa, on harvinainen mahdollisuus, että datapaketti voisi kadota#käytämme K-keskiarvoa 20 Hz: n mittaustiedon eristämiseen poikkeamista, jotka johtuvat pudotetun paketin#sukelluksesta "signaaliin ja järjestelmään saadaksesi lisätietoja" ################ ################################################ def getSamplingIntervalS (aikaleimaS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogrammi') plt.xlabel ('mittausväli (t))) clusterCnt = 5 km = KMeans (n_klusterit = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Laskuri (km.labels_) esiintyminenCnt = alueella II (clusterCnt): esiintyminenCnt.append (elemCnt [ii]) FsHz = 1/keskustat [esiintyminenCnt.index (max (esiintyminenCnt))] palauttaa FsHz

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

#käytä spektrometriä, eli lyhytaikaista FFT: tä taajuuskomponentin saamiseksi, huippusäiliö on paras arvio heilurivärähtelystä ########################## ##!! kuva, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("heilurin aika -alueen mittaus - %s" %strComment) ax1.set_xlabel ("näytteenottoaika (toinen)") ax1.set_ylabel (strComment); NFFT = 2048 # ikkunasegmenttien pituus

Pxx, taajuudet, säiliöt, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title ("Spectrogram") ax2.set_xlabel ("näytteet") ax2.set_ylabel ("taajuus (Hz)");

# "Specgram" -menetelmä palauttaa 4 kohdetta. He ovat:

# - Pxx: periodogrammi # - taajuudet: taajuusvektori # - bins: aikavyöhykkeiden keskipisteet # - im: matplotlib.image. AxesImage -ilmentymä, joka edustaa kaavion tietoja pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = taajuudet [pkresult [0] [0] print ('heilurin värähtelytaajuus (Hz) =%f, jakso (sek) =%f, arviointitietolähde:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) palauttaa 1/oscFreqHz

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

#jos suoritamme tämän ohjelman itsenäisesti, eli pendulum1.py ei kutsu meitä,#määritämme analysoitavan lokitiedoston oletusnimen ##################### ############################################ jos _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' tuo os.path jos os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" oletuslokitiedosto %s ei ole olemassa " %defaultFilename)

Jos haluat päivittää pitkän aikavälin, tutustu

Lähdekoodissa on yksityiskohtaisia kommentteja. Annetaan täällä korkeatasoinen yhteenveto matemaattisesta arvioinnista.

1) Luimme ensin CSV -tiedoston sisällön tietokoneeseen python -paketilla nimeltä "csv". Meillä on määräaikaisia mittauksia.

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) Koska mittausnopeus on niin kriittinen ja tuo suoraan heilurijakson arviointivirheen, haluamme arvioida ne. Nimellinen mittausväli on 50 ms eli 20 Hz. Kaikkien mittausten keskiarvo näyttää OK, mutta joskus menetämme tiedonsiirtopaketin, päivitysvälistä tulee 100 ms tai 150 ms,…

Jos piirtämme näiden tietojen esiintymisen, katso kuva 1, ihmisenä, voimme helposti saada silmämunan arvon 0,05 sek. Voimmeko kuitenkaan tehdä sen paremmin?

Meidän on käytettävä luokittelumenetelmää valitaksemme vain hyvät laskennan keskiarvoistamiseen. Pythonissa on työkalupakki nimeltä KMeans, joka auttaa meitä ryhmittelemisessä tai sanomaan luokittelun. Näitä käsitteitä käytetään monilla big data- ja AI -alueilla.

3) Kuva 2 sisältää kaksi kuvaa. Ylin käyrä on aikavyöhykkeen sekvenssi kääntökulmamittauksestamme asteina. Viitaten x-akselin aikaleimaan toisessa, voimme lukea noin 22,5 sykliä 50 sekunnissa, mikä tarkoittaa 2,22 sekuntin heilurijaksoa. Onko mitään keinoa automatisoida tämä prosessi ja saada tarkempi arvio? Kyllä, voimme käyttää matemaattista työkalua nimeltä spektrogrammi, joka käyttää pientä osaa mittaustiedoista ja kertoo sen taajuuden, katso alla oleva kuva. Pimeimmän viivan y-akselin lukema on heilurin värähtelytaajuus. Vaakasuora viiva vahvistaa, että heilurin värähtely ei muuttunut lainkaan kokeen aikana. Värähtelytaajuuden käänteinen arvo on heilurin värähtelyjakso.

Ohjelman loppuraportti on tekstiyhteenveto:

heilurin värähtelytaajuus (Hz) = 0,449224, jakso (sek) = 2,226059, estimointilähde: piki

Voimme havaita, että aiempi silmämunan käden laskentatuloksemme, 2,22 sek, on melko yhdenmukainen ohjelman lasketun arvon kanssa.

Verrattuna 2,0962 (sek) teoreettisesti laskettuun arvoon, meillä on ~ 5% jäljellä oleva virhe. Kuinka päästä eroon niistä? Muistatko oletuksen "jäykkä yhtenäinen sauva"? Jopa 7 gramman ylimääräinen paino tuntuu triviaalilta, se on suurin syy jäljellä olevaan virheeseen.

Siirrämme laitetta nyt lähelle niveltä. Katso lähikuvasta edellinen vaihe. Luomani lokitiedosto voidaan ladata täältä:

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

Suorita samat analyysivaiheet ja saamme ajanjakson 2,089867 (sek), katso kuva 3, joka on lähes identtinen teoreettisen ennusteen kanssa. Loistava!

Koska meillä ei ole vain kääntökulman mittaus, vaan myös gyroskooppinen mittaus ja kiihtyvyysmittari samalla nopeudella. Suorita sama analyysi kahdelle muulle mittaukselle, saamme tuloksia kuvissa 4 ja 5. Arviot kaikista kolmesta mittauslähteestä ovat yhtä mieltä, mikä tekee meistä varmempia kokeilumme onnistumisesta.

Tässä on tulos käynnissä olevan python -ohjelman lopputuloksena:

heilurin värähtelytaajuus (Hz) = 0,478499, jakso (sek) = 2,089867, estimointilähde: piki

heilurin värähtelytaajuus (Hz) = 0,478499, jakso (sek) = 2,089867, estimaattitietolähde: accel

heilurin värähtelytaajuus (Hz) = 0,478499, jakso (sek) = 2,089867, estimointilähde: gyro

Viimeinen ajatus tässä vaiheessa, kuinka arviointitulokset voivat olla täsmälleen identtisiä käyttämällä eri syöttötietolähdettä? Tämä on vasta-intuitiota. Jätän tämän kysymyksen lukijoille. Tässä on vinkki: muista, että arvioimme värähtelytaajuutta lyhytaikaisella FFT: llä? Digitaalisella alueella taajuusarvio annetaan erillisissä taajuusalustoissa kelluvan luvun estimaatin sijasta.

Vaihe 5: Tulevan työn suositukset

Tulevia työsuosituksia on muutamia luokkia.

Aikaisemmassa vaiheessa onnistumme vähentämään kokeiluvirheemme ~ 5%: sta alle 1%: iin. Voimmeko tehdä sen paremmin? Huomattaessa, että värähtelyn suuruus laskee eksponentiaalisesti, yksi vaikuttava tekijä voi olla heilurin heiluttaessa aiheutuva ilmanvastus. Heilurin poikkileikkausta on ehkä muutettava virtaviivaiseksi, jotta se vähentää aerodynaamista vastusta.

Voimmeko soveltaa adaptiivisia suodatintekniikoita käyttäen oppimaan aikamuuttuvaa vahvistusta jatkuvan huippusignaalin lähettämiseen. Sillä välin korreloi vaimennuksen suuruuden ulkoiset voimat.

Tuskin löydämme mitään yksinkertaisempaa kuin "yksinkertainen harmoninen liike". Voimmeko käyttää heilurin analysoimia tiloja analysoidaksemme jotain monimutkaisempaa, urheilutoimintaa, vesiraketin laukaisujärjestystä jne.?

Hyvää hakkerointia

Suositeltava: