İçindekiler:

Basit Harmonik Hareketin Deneysel Çalışması: 5 Adım
Basit Harmonik Hareketin Deneysel Çalışması: 5 Adım

Video: Basit Harmonik Hareketin Deneysel Çalışması: 5 Adım

Video: Basit Harmonik Hareketin Deneysel Çalışması: 5 Adım
Video: Basit Harmonik Hareket -1 | Temel Kavramlar | PDF | AYT Fizik #2022 2024, Temmuz
Anonim

Tarafından arrowlikeTakip Yazar tarafından daha fazla:

Yürüyüş Strandbeest, Java/Python ve Uygulama Kontrollü
Yürüyüş Strandbeest, Java/Python ve Uygulama Kontrollü
Yürüyüş Strandbeest, Java/Python ve Uygulama Kontrollü
Yürüyüş Strandbeest, Java/Python ve Uygulama Kontrollü

Sınıfta, sarkaç deneyini veya basit harmonik hareket deneyini yürütmek için genellikle bir kronometre kullanırız. İşte bir meydan okuma, hareketinin gerçek bir grafiğini üretebilir ve anlık açısal konum ve hızın ne olduğunu görebilir miyiz, bu çok daha fazla bilgi ve eğlenceli.

İlk soru, sarkaç gövdesinin ağırlıksız bir ip mi yoksa rijit bir düzgün çubuk mu olduğuna karar vermemiz gerekiyor. Kordon yaklaşımı daha kolay görünüyor. Bir tane inşa etme pratiğinden, aşağıdaki ödün verme düşüncelerim var: Bir sarkaç sistemini asmanın en kolay yolu, onu kapınızın üst kenarına asmak olabilir. Bu, herhangi bir yapısal inşaat işi yapmadan ~ 2m sarkaç uzunluğunu verir. Ancak, tüm deneyi mahveden, kapı yüzeyine dokunmayacak salıncak gerekiyor. Bu yüzden salladığı düzlem, duvar/kapı yüzeyinize tam olarak paralel olmalıdır. Ağırlıksız bir kordon ince olma eğilimindedir, kolayca dönebilir ve dönüş açısının ölçümünü zorlaştırabilir. Salınım durumunu temsil etmek için bir ölçüm kullanmak istiyoruz. Olta gibi ince ip, elastik ve gerilebilir olabilir, bu da bizim tarafımızdan ölçülen ve denklemde kullanılan en önemli sabitlerimizden birini, yani sarkacın uzunluğunu etkiler. Bazıları da sıcaklıktan etkilenebilir. İpin ucunda asılı olan ağırlık kütlesi, ipin ağırlığı ihmal edilebilecek kadar ağır olmalıdır. Lütfen bunlara katılıyorsanız veya katılmıyorsanız veya başka tasarım değiş tokuş fikirleriniz varsa yorum yapın. Bu problemi incelemek için, ağırlığı göz ardı edilebilecek kadar hafif bir cihaza ihtiyacımız var ve sarkaç sistemini hala rijit bir üniform çubuk olarak ele alıyoruz. Gyro, ivmeölçer ve açı bilgilerini bluetooth bağlantısı üzerinden bize ileten bir COTS giyilebilir elektronik kontrol cihazı kullanıyorum. Bu ölçümler bir cep telefonu uygulaması veri dosyasında saklanacaktır. Bundan sonra, basit harmonik hareket deneyimizin verilerini analiz edeceğiz. Sayısal analiz aşağıdaki konulara odaklanır: 1) Sarkaç salınım periyodunu tahmin edin 2) Sarkaç basit harmonik hareket deney verilerini programlanabilir bir şekilde toplayın 3) Verileri gruplamak ve analiz sürecinde aykırı değerleri kaldırmak için kmean kullanın 4) Tahmin için kısa süreli FFT kullanın sarkaç salınım frekansı

Gereçler

Bluetooth ölçüm cihazı

Android telefon Uygulaması: Google Play Store'a gidin, M2ROBOTS'u arayın ve kontrol Uygulamasını yükleyin. Google Play Store'a erişmenin zor olması durumunda, alternatif uygulama indirme yöntemi için kişisel ana sayfamı ziyaret edin

tahta çubuk

birkaç 3D baskılı parça

testere bıçakları veya benzeri metal malzeme

Adım 1: Sarkaç Nedir? Nasıl Modellenir?

Müfredat fizik kitabınız da dahil olmak üzere sarkaç denklemi türetmesini tanıtan birçok makale ve kitap vardır. Bu tür içeriklerin burada bir daha tekrarlanmaması daha iyi olabilir. Burada "basit harmonik hareket" konusuyla ilgili yalnızca nihai sonuç listelenmiştir. Bir sarkacın periyodunu bilmek için, "l" ile gösterilen sarkacın metre cinsinden uzunluğunu bilmemiz yeterlidir.

Ağırlığın neredeyse tamamen bir pivotta asılı olan ağırlıksız bir ipin ucunda olduğundan ve sarkacın küçük açılarla θ, diyelim 15°'den az sallandığından eminsek, bu sarkacın periyodu T1 şu şekilde verilir:

T1 = 2*pi*(l/g)^0.5

g = yerçekimi ivmesi, yaklaşık 9,8 m/s^2

Ağırlıksız ip, yine l uzunluğunda rijit, düzgün bir çubukla değiştirilirse, basit harmonik hareket periyodu T2, T1 = 2*pi*(2l/3g)^0.5 ile verilir.

Etkili bir şekilde, rijit üniform çubuk uzunluğunun üçte ikisi olan ağırlıksız bir kord sarkacıyla aynı periyoda sahiptir.

Bu arka plan ve deneyimizi hazırlamaya başlayabiliriz.

Adım 2: Parçaları Donanım İnşası için Hazırlayın

Donanım İnşası için Parçaları Hazırlayın
Donanım İnşası için Parçaları Hazırlayın
Parçaları Donanım İnşası için Hazırlayın
Parçaları Donanım İnşası için Hazırlayın
Donanım İnşası için Parçaları Hazırlayın
Donanım İnşası için Parçaları Hazırlayın

Sarkaç yapısını oluşturmak için bazı parçaları 3D olarak yazdırır ve zaten sahip olduğumuz bir şeyi geri dönüştürürüz. Genel sarkaç yapısı Şekil 1'de gösterilmektedir. El yapımı bazı parçalar ve Lowe's'den uzun bir tahta çubuk parçası ile birlikte 3D baskı parçalarının bir karışımı.

Şekil 2'deki 3D baskılı kısım bir kapının üst kenarına asılmıştır, çünkü kapımız bizim için bir şeyler asmak için kolay düz bir yüzeydir. STL dosyası indirme bağlantısı:

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

Şekil 3'teki yeşil kısım, ahşap çubuğu bir bıçağa bağlar ve bıçak, daha önceki 3D baskılı kapı askısına monte edilmiş iki parça rayın üzerine oturur. STL dosyası indirme bağlantısı:

Eski bir testere bıçağının ortadan ikiye kırılması ile iki parça ray yapılır, bakınız Şekil 4. Şekil 2'deki parça onlar için doğru yuva boyutunu hazırlamıştır. İdeal olarak, bir eğe kullanarak bu iki testere bıçağında "V" şeklinde bir çentik yapabiliriz. Tek kenarlı tıraş bıçağı veya herhangi bir el yapımı metal parça gibi oldukça keskin kenarlı bir metal "V" şeklindeki çentiklerin içine oturabilir. Daha küçük bir temas alanına ihtiyaç duymamızın nedeni, sallanırken kaybedilen kinetik enerjiyi azaltmaktır.

Şekil 5'teki son 3D baskılı kısım, elektronik ölçüm aparatını tutan küçük bir tepsidir.

İndirme bağlantısı:

Bluetooth ölçüm aparatı, açı tahmini, gyro ölçümü ve ivmeölçer ölçümü üretir. Tüm bu veriler bluetooth kablosuz bağlantı aracılığıyla bize sunulmaktadır.

Bu aparatı sarkaç kolunun farklı pozisyonuna yerleştirerek çoklu deneyler yapacağız ve farklılıkları göreceğiz.

3. Adım: Deney Verisi Toplama

Deney Verisi Toplama
Deney Verisi Toplama
Deney Verisi Toplama
Deney Verisi Toplama
Deney Verisi Toplama
Deney Verisi Toplama

Elde edilen veri kümesini analiz etmeden önce deneysel veri toplama için iki yapılabilir yöntem vardır:

1) Cihaz tarafından üretilen tüm ölçümleri telefonunuzun SD kartında saklanan bir veri dosyasına kaydetmek için gereksinimler bölümünde belirtilen Android telefon Uygulamasını kullanın. Dosyayı kopyalayabilir ve bilgileri işleme koyabiliriz.

2) Cihaza bluetooth bağlantısı kurmak için bluetooth özellikli bir bilgisayar, bir PC, bir dizüstü bilgisayar veya bir RaspberryPi mini bilgisayar kullanın ve verileri gerçek zamanlı veya çevrimdışı analiz için okuyun.

Her yöntem için hem artıları hem de eksileri vardır, her ikisini de deneyeceğiz ve bu talimatta farkı anlatacağız.

Yöntem (1) için android uygulamasını kullanarak, android App kontrol arayüzüne girdikten sonra bluetooth ölçüm cihazından android telefona gönderilen telemetri verileri m2flightDatayyyymmdd_hhmmss.txt adlı bir datalog dosyasına kaydedilecektir. Android telefonunuzun Download/m2LogFiles klasöründe bulunabilir. "İndir" klasörü, telefonunuzun android işletim sisteminde önceden var olan bir klasördür ve "m2LogFiles", Uygulamanın oluşturduğu bir klasördür. Dosya adı içeriği yyyymmdd_hhmmss, dosya adında deneme başlangıç zamanını (yıl, ay, gün, saat, dakika ve saniye) kodlamanın yoludur.

Günlük dosyasındaki her satır bir kayıttır. Olay zaman damgası, giriş dizesi "eam:" ile başlar, ardından 4 üçlü veri gelir, bunlar:

Ham sensör donanım kayıt okuma değerlerinde ivmeölçer XYZ ekseni okuması

Jiroskop XYZ ekseni ham sensör donanımı kayıt okuma değerlerinde okuma

Manyetometre XYZ ekseni ham sensör donanım kayıt okuma değerlerinde okuma

derece olarak teknede tahmini Yuvarlanma/Adım/Ham

Bilgisayar python programı kullanılarak oluşturulan veri dosyası aynı veri dosyası formatını kullanacak, böylece veri analizi adımında kullandığımız program, python programımız veya android uygulamamız tarafından üretilen veri kaynağı ile uğraşmayacaktır.

(2) yöntemini kullanarak kodlamaya başlayalım.

Bluetooth ölçüm aparatı ile etkileşim kurmak için iki çeşit SDK sağlanmıştır:

1) "pip3 install m2controller" ile kurulabilen Python SDK, kullanılan dil python3'tür. Kullanıcı uygulama kodu örnekleri https://github.com/xiapeiqing/m2robots/tree/maste adresinde saklanır… Bu deney için python betiği pendulum1.py kullanacağız.

2) Elde edilen sarkaç verilerinin daha sonra görselleştirilmesini ve analizini istediğimiz için bu talimatta kullanılmayan Java SDK'sı, Java'da programlamak bizim için biraz daha fazla çaba gerektirebilir.

python3 veri toplama programı kaynak kodu, kod işlevsellik ayrıntıları için birçok yorum içerir. Kaynak kodun bir anlık görüntüsü burada sağlanır.

#!/usr/bin/env python# -*- kodlama: UTF-8 -*- m2controller'dan içe aktar m2controller'ı m2controller'dan içe aktar m2Const içe aktar sinyali içe aktar zaman içe aktar tarihsaat içe aktar usrCfg içe aktar pendulum2

requestExit = Yanlış

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

# veri analiz modülü pendulum2.py'nin günlük veri dosyasını nasıl aldığımız konusunda agnostik olabilmesi için aynı günlük dosyası adlandırma kuralını kullanmak istiyoruz ################# ############################################# logfilename = " m2flightData%s.txt"%(datetime.datetime.fromtimestamp(time.time()).strftime('%Y%m%d_%H%M%S')) dataLogfile = open(logfilename, "w")

def sinyal_işleyici(sig, çerçeve):

global requestExit print('program yürütmesinden çıkmak için kullanıcı Ctrl-C'si') requestExit = True signal.signal(signal. SIGINT, signal_handler)

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

# 20Hz hızında her ölçüm verisi kullanılabilir olduğunda, bu "geri arama" işlevi çağrılır ############################## ################################# def callbackfunc(telemetri): 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, telemetri['m_fAccelHwUnit'][0], telemetri['m_fAccelHwUnit'][1], telemetri['m_fAccelHwUnit'][2], telemetri['m_fGyroHwUnit'][0], telemetri['m_fGyroHwUnit'][1], telemetri['m_fGyroHwUnit'][2], telemetri['m_fMagHwUnit'][0], telemetri[0] 'm_fMagHwUnit'][1], telemetri['m_fMagHwUnit'][2], telemetri['m_fRPYdeg'][0], telemetri['m_fRPYdeg'][1], telemetri['m_fRPYdeg'][2]) ## ################################################# ############ # veri dizisini ekrana yazdırıyoruz ve günlük dosyasına kaydediyoruz ###################### ######################################### print(dataStr) dataLogfile.writelines(veriStr)

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

# denetleyiciyi başlatın, BleMACaddress alanını cihazınızın MAC adresi olarak ayarlamayı unutmayın ################################# ################################# # YAPILACAKLAR: Kullanıcı tarafından ayarlanmıyorsa, BleMACaddress'i başlatalım. controller = m2controller. BleCtrller(m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect() while True: ######################### ##################################### # sarkaç ölçümünden oluşturulan ve gönderilen ölçüm verilerini bekleyin aparat ################################################ ################ controller.m_CommsTunnel.waitForNotifications(1.0) eğer requestExit: ######################## ######################################## # ev işleri burada veri kaydını bitirdiğimizde çalışır ################################################# ############## controller.stop() dataLogfile.close() kesme

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

# veri toplama tamamlandı, şimdi günlük verilerini analiz edelim ##################################### ######################## pendulum2.parseDataLogFile(logfilename)

Uzun vadeli güncelleme için lütfen https://github.com/xiapeiqing/m2robots/blob/maste… adresini ziyaret edin.

Şimdi çalışma yöntemini açıklayalım. Bu python programı, m2controller adlı pip kurulabilir bir paketin üzerine yazılmıştır. Alt düzey paket, geri arama mekanizması sunar, böylece alınan her ölçüm güncellemesi, yazdığımız geri arama işlevini tetikler ve verileri yerel bir günlük dosyasına kaydeder. Günlük dosyası veri içeriğinin biçimi, android tamamlayıcı uygulaması tarafından üretilenle aynıdır, böylece python programı veya andriod yardımcı uygulaması tarafından oluşturulan veri günlük dosyası değiştirilebilir.

İşletim sistemi tarafından yakalanan kullanıcı ctrl-C sinyali programa iletilir ve yeni ölçüm verilerinin gelmesini bekleyen sonsuz döngüyü durdurur.

Şimdiye kadar, günlük dosyası başarıyla oluşturuldu ve bu program, deney sonuçlarımızı incelemek için analiz programını arayacaktır.

İşte iki deney ve karşılaştırma, 7 gramlık bir cihazı farklı yerlere takarak çok belirgin farkı gösteriyor.

Şekil 2'de bu bluetooth ölçüm cihazının gerçek ağırlığını belirlemek için bir terazi kullanıyoruz.

Şekil 3, sarkacın alt ucuna 7 gramlık cihazın takıldığı sarkaç kurulumunu göstermektedir. Şekil 4'teki kurulum konfigürasyonu, sallanan pivota çok daha yakın yerleştirilmiş 7 gram kütleye sahiptir.

Şekil 5, sarkaç yapısının yakından görünüşüdür.

Adım 4: Veri Analizi

Veri analizi
Veri analizi
Veri analizi
Veri analizi
Veri analizi
Veri analizi

Bluetooth ölçüm cihazı ~ 1,6 metre uzunluğundaki bir tahta çubuktan çok daha hafif olan ~ 7 gram ağırlığındadır. "Sert üniform çubuk" varsayımını kullanın ve şu sarkaç periyodu denklemine sahibiz, T1 = 2*pi*(2l/3g)^0.5

Yerçekimi sabitini elde etmek için 9.8m/s^2 kullanabiliriz. Ancak herhangi bir coğrafi konumdaki daha doğru bir yerçekimi sabiti bu web hizmetinden alınabilir:

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

San Francisco için 9.81278m/s^2

Sarkaç uzunluğu 64.5'' olarak ölçülmüştür.

2*pi*sqrt(2*64.5*0.0254/(3*9.81278)) beklenen sarkaç periyodunu 2.0962(sn) verir.

Deneylerimizle uyuşup uyuşmadığını görelim.

1. deneyde, sarkaç düzeneği, sarkacın alt ucuna bağlı 7 gramlık bir cihaza sahiptir. Günlük dosyam şurada indirilebilir:

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

"PendulumTestData.txt" olarak yeniden adlandırın ve python analiz programının aynı klasörüne koyun. Kaynak kodun bir anlık görüntüsü burada sağlanır.

#!/usr/bin/env python# -*- kodlama: UTF-8 -*- csv import matplotlib.pyplot as plt plt.style.use('seaborn-whitegrid') import numpy'yi datetime import datetime'dan np olarak içe aktar, timedelta sklearn.cluster'dan sns olarak seaborn içe aktarma Koleksiyonlardan KMeans içe aktarma Sayaç ################################## ############################# # bu fonksiyon veri dosyası analiz çalışmasını çalıştırır ############ ################################################# ## def parseDataLogFile(veri dosyasıadı): ######################################## ###################### # virgülle ayrılmış veri günlük dosyasındaki (CSV) verileri çıkarın ve her sütundaki içeriği bir kayan noktalı değişkene kaydedin ## ################################################# ############ ile open(datafilename) as csvfile: readCSV = csv.reader(csvfile, delimiter=', ') timestampS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit_z = fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = readCSV'deki satır için: deneyin: x = datetime.strptime(row[0].split(', ')[0], '%H:%M:%S.%f') timestampS.append(timedelta(saat=x.saat, dakika=x.dakika, saniye=x.saniye, mikrosaniye=x.mikrosaniye).total_saniye()) fAccelHwUnit_x.append(float(satır) [1][4:])) fAccelHwUnit_y.append(kayan(satır[2])) fAccelHwUnit_z.append(kayan(satır[3])) fGyroHwUnit_x.append(kayan(satır[4])) fGyroHwUnit_y.append(kayan (satır[5])) fGyroHwUnit_z.append(kayan(satır[6])) fMagHwUnit_x.append(kayan(satır[7])) fMagHwUnit_y.append(kayan(satır[8])) fMagHwUnit_z.append(kayan(satır) [9])) fRPYdeg_r.append(float(satır[10])) fRPYdeg_p.append(float(satır[11])) fRPYdeg_y.append(float(satır[12])) hariç: pass zaman damgasıS = np.asarray(zaman damgaları) zaman damgalarını = zaman damgalarını - zaman damgaları [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)

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

# hassas salınım süresi tahmini için örnekleme frekansının doğru tahminine ihtiyacımız var ################################### ############################# FsHz = getSamplingIntervalS(timestampS) ################ ################################################ # kullanmak sarkaç periyodu analizi için tutum başlığı referans sistemi çıktısındaki adım bileşeni #################################### ########################### analiz_timeSequence(timestampS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ### # sarkaç periyodu analizi için ivmeölçer ham ölçüm çıktısını kullanın #################################### ########################### analiz_timeSequence(timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ### # sarkaç periyodu analizi için gyro ham ölçüm çıktısını kullanın #################################### ########################### analiz_timeSequence(timestampS, fGyroHwUnit_y, FsHz, ' gyro') print('bitti, tebrikler:-)') plt.show() ############################## ################################## # Bluetooth iletişim sürecinde, veri iletişim paketinin kaybolun # 20Hz ölçüm verilerini, bırakılan paketin neden olduğu aykırı değerlerden izole etmek için K-ortalama kullanıyoruz # "daha fazla ayrıntı için sinyal ve sisteme" dalın ################ ################################################ def getSamplingIntervalS (zaman damgası): plt.figure() sampleIntervalS = np.diff(timestampS) sns.distplot(sampleIntervalS) plt.ylabel('histogram') plt.xlabel('ölçüm aralık(lar)ı') clusterCnt = 5 km = KMeans(n_clusters = clusterCnt) km.fit(sampleIntervalS.reshape(-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter(km.labels_) entityCnt = for ii in range(clusterCnt): entityCnt.append(elemCnt[ii]) FsHz = 1/centroids[occurrenceCnt.index(max(occurrenceCnt))] FsHz döndürür

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

# spektrometre kullanın, yani frekans bileşenini elde etmek için kısa süreli FFT, tepe kutusu sarkaç salınımına ilişkin en iyi tahminimizdir ########################## ###################################### def analiz_timeSequence(timestampS, timeSeqData, FsHz, strYorum): 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ç zaman alanı ölçümü -- %s"%strComment) ax1.set_xlabel("örnekleme zamanı(saniye)") ax1.set_ylabel(strComment); NFFT = 2048 # pencereleme bölümlerinin uzunluğu

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

ax2.set_title("Spektrogram") ax2.set_xlabel("örnekler") ax2.set_ylabel("frekans(Hz)");

# 'Specgram' yöntemi 4 nesne döndürür. Onlar:

# - Pxx: periodogram # - frekanslar: frekans vektörü # - kutular: zaman kutularının merkezleri # - im: arsadaki verileri temsil eden matplotlib.image. AxesImage örneği pkresult = np.where(Pxx == np.amax(Pxx)) oscFreqHz = freqs[pkresult[0][0] print('sarkaç salınımı Frek(Hz)=%f, Period(Sec)=%f, tahmin veri kaynağı: %s'%(oscFreqHz, 1/oscFreqHz, strComment)) dönüş 1/oscFreqHz

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

# bu programı bağımsız olarak mı çalıştırmalıyız, yani pendulum1.py tarafından çağrılmadan, # analiz edilecek varsayılan bir günlük veri dosyası adı tanımlarız ################### ########################################### if _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile(defaultFilename): parseDataLogFile(defaultFilename) else: print ("varsayılan günlük dosyası %s mevcut değil"%defaultFilename)

Uzun vadeli güncelleme için lütfen https://github.com/xiapeiqing/m2robots/blob/maste… adresini ziyaret edin.

Kaynak kod detaylı yorumlar içeriyor, burada matematiksel tahminin üst düzey bir özetini verelim.

1) Önce "csv" adlı bir python paketi kullanarak CSV dosya içeriğini bilgisayara okuyoruz. Periyodik ölçümlerimiz vardır.

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) Ölçüm hızı çok kritik olduğundan ve doğrudan sarkaç periyodu tahmin hatasını ortaya çıkardığından, onları tahmin etmek istiyoruz. Nominal ölçüm aralığımız 50ms, yani 20Hz'dir. Tüm ölçümlerin ortalaması iyi görünüyor, ancak bazen veri iletim paketini kaybediyoruz, güncelleme aralığı 100ms veya 150ms oluyor,…

Bu verilerin oluşumunu çizersek, Şekil 1'e bakın, bir insan olarak kolayca 0,05 saniyelik bir göz küresi değerine sahip olabiliriz. Ancak, bundan daha iyisini yapabilir miyiz?

Ortalama hesaplama için sadece iyi olanları seçmek için sınıflandırma yöntemini kullanmamız gerekiyor. Python, kümeleme veya sınıflandırma konusunda bize yardımcı olacak KMeans adlı bir araç kutusuna sahiptir. Bu kavramlar birçok büyük veri ve yapay zeka alanında kullanılmaktadır.

3) Fig.2 iki resim içermektedir. En üstteki çizim, derece cinsinden salınım açısı ölçümümüzün zaman alan dizisidir. Saniyedeki x ekseni zaman damgasına başvurarak, 50 saniyede yaklaşık 22,5 devir okuyabilir, bu da 2.22 Saniyelik sarkaç periyodu anlamına gelir. Bu süreci otomatikleştirmenin ve daha doğru tahminde bulunmanın bir yolu var mı? Evet, küçük bir ölçüm verisi yığını kullanan ve bize sıklığını söyleyen spektrogram adlı matematiksel aracı kullanabiliriz, aşağıdaki şekle bakın. En koyu çizgi için y ekseni okuması sarkaç salınım frekansıdır. Yatay bir çizgi olması, sarkaç salınımının deney boyunca hiç değişmediğini doğrular. Salınım frekansının ters değeri, sarkaç salınım periyodudur.

Program tarafından yapılan nihai rapor bir metin özetidir:

sarkaç salınımı Freq(Hz)=0.449224, Period(Sec)=2.226059, tahmin veri kaynağı: pitch

Daha önceki göz küresi el hesaplama sonucumuz olan 2.22sn'nin programın hesaplanan değeriyle oldukça tutarlı olduğunu görebiliriz.

2.0962(sn) teorik olarak hesaplanan değerle karşılaştırıldığında, ~%5 kalan hatamız var. Onlardan nasıl kurtulur? Varsayımın "sert tek tip çubuk" olduğunu hatırlıyor musunuz? 7 gram ekstra ağırlık bile önemsiz gibi görünse de kalan hatanın en büyük sebebidir.

Şimdi cihazı pivota yaklaştırıyoruz. Yakın plan fotoğraf için önceki adıma bakın. Oluşturduğum günlük dosyası buradan indirilebilir:

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

Aynı analiz adımlarını çalıştırın ve 2.089867(Saniye) Periyodu elde ederiz, teorik tahminle neredeyse aynı olan Şekil 3'e bakın. Harika!

Çünkü sadece salınım açısı ölçümü değil, jiroskopik ölçüm ve ivmeölçer ölçümü de aynı orandadır. Diğer iki ölçüm için aynı analizi yapın, Şekil 4 ve 5'te sonuçları alıyoruz. Her üç ölçüm kaynağından gelen tahminler aynı fikirde, bu da deneyimizin başarısı konusunda bize daha fazla güvenmemizi sağlıyor.

İşte çalışan python programının son çıktısı olarak sonuç:

sarkaç salınımı Freq(Hz)=0.478499, Period(Sec)=2.089867, tahmin veri kaynağı: pitch

sarkaç salınımı Freq(Hz)=0.478499, Period(Sec)=2.089867, tahmin veri kaynağı: accel

sarkaç salınımı Freq(Hz)=0.478499, Period(Sec)=2.089867, tahmin veri kaynağı: gyro

Bu adımdaki son düşünce, farklı girdi veri kaynağı kullanılarak tahmin sonuçları nasıl tam olarak aynı olabilir? Bu karşı sezgidir. Bu soruyu okuyuculara bırakacağım. İşte bir ipucu: salınım frekansını tahmin etmek için kısa süreli FFT kullandığımızı hatırlıyor musunuz? Dijital alanda, frekans tahmini, kayan sayı tahmini yerine ayrı frekans kutularında verilir.

Adım 5: Gelecekteki Çalışma Önerileri

Gelecekteki çalışma önerilerinin birkaç kategorisi vardır.

Önceki adımda, deney hatamızı ~%5'ten %1'in altına düşürmeyi başardık, bundan daha iyisini yapabilir miyiz? Salınım büyüklüğünün katlanarak azaldığı fark edildiğinde, sarkacı sallarken neden olan hava sürtünmesi katkıda bulunan bir faktör olabilir. Sarkacın enine kesitinin, aerodinamik sürtünmeyi azaltmak için akış çizgisi şeklinde olacak şekilde değiştirilmesi gerekebilir.

Sabit bir tepe-büyüklük sinyali vermek için uyarlanabilir filtre teknikleri kullanılarak öğrenilen zamanla değişen bir kazancı uygulayabilir miyiz? Bu arada, dış kuvvetler ile büyüklük zayıflamasını ilişkilendirin.

"Basit harmonik hareket"ten daha basit bir şey bulamıyoruz. Sarkacı analiz ettiğimiz imkanları daha karmaşık bir şeyi, bir spor etkinliğini, bir su roketi fırlatma dizisini vb. analiz etmek için kullanabilir miyiz?

mutlu hack

Önerilen: