Мазмуну:

Жөнөкөй гармоникалык кыймылды эксперименталдык изилдөө: 5 кадам
Жөнөкөй гармоникалык кыймылды эксперименталдык изилдөө: 5 кадам

Video: Жөнөкөй гармоникалык кыймылды эксперименталдык изилдөө: 5 кадам

Video: Жөнөкөй гармоникалык кыймылды эксперименталдык изилдөө: 5 кадам
Video: Uniwersalne prawo kreacji kontra WIELKI WYBUCH - część 2 dr Danuta Adamska-Rutkowska 2024, Июль
Anonim

By arrowlikeFollow More by Author:

Walking Strandbeest, Java/Python жана App Control
Walking Strandbeest, Java/Python жана App Control
Walking Strandbeest, Java/Python жана App Control
Walking Strandbeest, Java/Python жана App Control

Класста маятник экспериментин же жөнөкөй гармоникалык кыймыл экспериментин жүргүзүү үчүн биз секундомерди колдонобуз. Бул жерде кыйынчылык бар, биз анын кыймылынын чыныгы графигин түзө алабызбы жана бир заматта кандай бурчтук абалды жана ылдамдыкты көрө алабыз, бул дагы көп маалымат жана кызыктуу.

Биринчи суроо, биз маятниктин денеси салмагы жок шнур же катуу бирдиктүү таяк экенин чечишибиз керек. Жип менен мамиле кылуу жеңилирээк окшойт. Бирөөнү куруу практикасынан менде төмөндөгүдөй айырмачылыктар бар: Маятник системасын илүүнүн эң оңой жолу, аны эшигиңиздин жогорку четине илип коюңуз. Бул эч кандай структуралык курулуш иштерин жасабастан маятниктин узундугун ~ 2м берет. Бирок селкинчек эшиктин бетине тийбеши керек, бул жөн эле бүт экспериментти бузат. Ошентип, ал учкан учак дубалдын/эшиктин бетине так параллель болушу керек. Салмагы жок шнур ичке болот, ал оңой айланат жана бурулуш бурчун өлчөөнү татаалдаштырат. Биз өзгөрүлмө абалды көрсөтүү үчүн бир өлчөөнү колдонууну каалайбыз. Балык линиясы сыяктуу ичке жип ийкемдүү жана чоюлма болушу мүмкүн, бул биз өлчөгөн жана маятниктин узундугу болгон теңдемеде колдонулган эң маанилүү константаларыбыздын бирине таасир этет. Кээ бирлери температурага да таасир этиши мүмкүн. Шнурдун аягында илинип турган салмагы жетишерлик оор болушу керек, андыктан жиптин салмагы анча байкалбайт. Сураныч, эгер сиз алар менен макул болсоңуз же каршы болсоңуз, же сизде дизайнды алмаштыруунун башка идеялары бар болсо, комментарийге жазыңыз. Бул көйгөйдү изилдөө үчүн бизге салмагы көз жаздымда калгыдай жеңил түзүлүш керек жана биз дагы эле маятник системасын катуу бирдиктүү таяк катары карайбыз. Мен COTS кийилүүчү электрондук контроллерди колдонуп жатам, ал гиро, акселерометр жана бурч жөнүндө маалыматты бизге Bluetooth аркылуу жеткирет. Бул өлчөөлөр мобилдик телефон колдонмосунун маалымат файлында сакталат. Андан кийин, биз жөнөкөй гармоникалык кыймыл эксперименти үчүн маалыматтарды талдайбыз. Сандык анализ төмөнкү темаларга багытталган: 1) Маятниктин термелүү мезгилин алдын ала айтуу 2) Маятникти гармоникалык кыймылдын экспериментинин маалыматтарын программалап чогултуу 3) Кмеанды колдонуп, маалыматтарды топтоо жана анализ процессинде четтөөлөрдү алып салуу 4) Баалоо үчүн кыска мөөнөттүү ФФТны колдонуу. маятник термелүү жыштыгы

Жабдуулар

Bluetooth өлчөөчү аппарат

Android телефону үчүн колдонмо: Google Play дүкөнүнө барыңыз, M2ROBOTS издеп, көзөмөлдөөчү колдонмону орнотуңуз. Google Play дүкөнүнө кирүү кыйын болсо, колдонмону жүктөөнүн альтернативдүү методу үчүн менин жеке башкы баракчама баш багыңыз

жыгач таяк

3D басылган бир нече бөлүктөр

араа бычактары же ушул сыяктуу металл материал

1 -кадам: Маятник деген эмне? Аны кантип моделдөө керек?

Маятник теңдемесин чыгаруучу көптөгөн макалалар жана китептер бар, анын ичинде сиздин окуу физика китебиңиз. Мындай мазмун бул жерде кайра кайталанбашы мүмкүн. Бул жерде "жөнөкөй гармоникалык кыймыл" темасына байланыштуу акыркы жыйынтык гана келтирилген. Маятниктин периодун билүү үчүн, биз билишибиз керек болгон нерсе, маятниктин узундугу, "l" менен белгиленген, метр менен.

Эгерде биз салмагы бурчка илинген салмаксыз шнурдун учунда дээрлик толугу менен жайгашканына ишенсек жана маятник кичине бурчтарда θ, 15 ° тан азыраак термелип жатса, мындай маятниктин T1 мезгили төмөнкүчө берилет:

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

g = тартылуу ылдамдашы, болжол менен 9.8 м/с^2

Эгерде салмаксыз жип узундугу l болгон катуу бирдиктүү таяк менен алмаштырылса, анын жөнөкөй гармоникалык кыймыл мезгили T2 T1 = 2*pi*(2l/3g)^0,5 менен берилет

Натыйжалуу түрдө, бирдиктүү таяктын узундугунун үчтөн эки бөлүгүн түзгөн, салмагы жок шнур маятниги сыяктуу эле мезгил бар.

Бул фон, биз экспериментти даярдоону баштасак болот.

2 -кадам: Аппараттык курулуш үчүн тетиктерди даярдаңыз

Бөлүктөрдү аппараттык курулушка даярдоо
Бөлүктөрдү аппараттык курулушка даярдоо
Бөлүктөрдү аппараттык курулушка даярдоо
Бөлүктөрдү аппараттык курулушка даярдоо
Бөлүктөрдү аппараттык курулушка даярдоо
Бөлүктөрдү аппараттык курулушка даярдоо

Маятниктин структурасын куруу үчүн, биз кээ бир бөлүктөрүн 3D кылып басып чыгарабыз жана бизде бар нерсени кайра иштетебиз. Жалпы маятник структурасы Fig.1де көрсөтүлгөн. Бул 3D басып чыгаруу бөлүктөрүнүн аралашмасынан жана кол менен жасалган айрым бөлүктөрдөн жана Лоунун жыгач таякчасынан.

2 -сүрөттөгү 3D басылган бөлүк эшиктин үстүңкү четине илинип турат, анткени биздин эшик бир нерсени илип коюу үчүн оңой тегиз жер. STL файлын жүктөө шилтемеси:

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

Fig.3 жашыл бөлүгү жыгач таягын бычак менен байланыштырат, ал эми бычак мурунку 3D басып чыгарылган эшик илгичке орнотулган темир жолдун эки бөлүгүнүн үстүнө отурат. STL файлын жүктөө шилтемеси:

Темир жолдун эки бөлүгү эски араа тилкесин экиге бөлүү менен жасалат, 4 -сүрөттү караңыз. 2 -сүрөттөгү бөлүк алар үчүн туура оюктун өлчөмүн даярдап койгон. Идеалында, биз файлды колдонуп, ошол эки араа тилкесинде "V" формасындагы оюк жасай алабыз. "В" формасындагы оюктардын ичине бир кырдуу устара, же кол менен жасалган ар кандай металл кесим сыяктуу акылга сыярлык кырдуу металл отурушу мүмкүн. Кичирээк контакт аймагына муктаж болуунун себеби, селкинчек учурунда жоголгон кинетикалык энергияны азайтуу.

5 -сүрөттөгү акыркы 3D басылган бөлүгү - бул электрондук өлчөө аппаратын кармоочу кичинекей лоток.

Жүктөө шилтемеси:

Bluetooth өлчөө аппараты бурчтук сметаны, гиро өлчөөнү жана акселерометрди өлчөөнү жаратат. Бул маалыматтардын баары бизге Bluetooth зымсыз шилтемеси аркылуу жеткиликтүү.

Биз бул аппаратты маятниктин ар кандай абалына жайгаштыруу менен бир нече эксперименттерди жүргүзөбүз жана айырмачылыктарды көрөбүз.

3 -кадам: Эксперимент маалыматтарды чогултуу

Эксперимент маалыматтарын чогултуу
Эксперимент маалыматтарын чогултуу
Эксперимент маалыматтарын чогултуу
Эксперимент маалыматтарын чогултуу
Эксперимент маалыматтарын чогултуу
Эксперимент маалыматтарын чогултуу

Алынган маалымат топтомун талдоодон мурун эксперименталдык маалыматтарды чогултуунун эки жолу бар:

1) Аппарат тарабынан өндүрүлгөн бардык өлчөөлөрдү телефонуңуздун SD картасында сакталган маалымат файлына киргизүү үчүн талаптар бөлүмүндө көрсөтүлгөн Android Phone тиркемесин колдонуңуз. Биз файлды көчүрүп, маалыматты иштете алабыз.

2) Bluetooth менен иштеген компьютерди, компьютерди, ноутбукту же RaspberryPi мини-компьютерин колдонуп, аппаратка bluetooth байланышын түзүңүз жана маалыматтарды реалдуу убакытта же оффлайн талдоо үчүн окуңуз.

Ар бир ыкманын оң жана терс жактары бар, биз экөөнү тең сынап көрүүгө жана бул үйрөткүчтүн айырмасын айтууга ниеттенип жатабыз.

Андроид колдонмосун колдонуу үчүн (1), биз андроид Колдонмону башкаруу интерфейсине киргенден кийин, bluetooth өлчөө аппаратынан андроид телефонго жөнөтүлгөн телеметрия маалыматы m2flightDatayyyymmdd_hhmmss.txt деп аталган дайындар файлына жазылат. Аны Android телефонуңуздун Download/m2LogFiles папкасынан тапса болот. "Жүктөө" папкасы-бул телефонуңуздун андроид системасында мурдатан бар болгон папка жана "m2LogFiles"-бул колдонмо түзгөн папка. Файлдын аты yyyymmdd_hhmmss - бул эксперименттин башталыш убактысын (жыл, ай, күн, саат, мүнөт жана сек) файлдын атына коддоо жолу.

Журнал файлындагы ар бир сап бир жазуу. Бул иш -чаранын убактысынын белгиси, "eam:" преамбула сабы менен башталат, андан кийин 4 триплет маалыматы, алар:

Акселерометр XYZ огу чийки сенсор жабдууларында кайра окуу маанилерин окуйт

Гироскоп XYZ огу чийки сенсор жабдууларында кайра окуу маанилерин окуйт

Magnetometer XYZ огунун чийки сенсорунун аппараттык окуу көрсөткүчтөрү кайра баалуулуктарды каттайт

бортто болжол менен Roll/Pitch/Raw

Компьютердик питон программасы менен түзүлгөн маалыматтык файл бирдей маалымат файлынын форматын колдонот, андыктан биз маалыматтарды талдоо баскычында колдонгон программа биздин python программасы же андроид колдонмосу тарабынан даярдалган маалымат булагы менен убара болбойт.

(2) ыкмасын колдонуп коддоону баштайлы.

Bluetooth өлчөөчү аппарат менен иштөө үчүн SDKтин эки даамы берилет:

1) "pip3 install m2controller" тарабынан орнотула турган Python SDK, python3 колдонулган тил. Колдонуучунун колдонмо кодунун мисалдары https://github.com/xiapeiqing/m2robots/tree/maste… сакталат Бул эксперимент үчүн pendon1 pendulum1.py скриптин колдонобуз.

2) Java SDK, бул көрсөтмөдө колдонулбайт, анткени биз кийинчерээк маятниктин маалыматтарын визуалдаштырууну жана анализдөөнү каалайбыз, бул үчүн Javaда программалоо үчүн бир аз көбүрөөк күч талап кылынышы мүмкүн.

Python3 маалымат чогултуу программасынын баштапкы коду коддун функционалдык чоо -жайы үчүн көптөгөн комментарийлерди камтыйт. Булак кодунун сүрөтү бул жерде берилген.

№!

requestExit = False

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

#биз ошол эле журнал файлын атоо конвенциясын колдонууну каалайбыз, андыктан маалыматтарды талдоо модулу pendulum2.py, биз журнал маалыматынын файлын кантип аларыбызды билбей калышы мүмкүн ################## ############################################################## logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = open (logfilename," w ")

def signal_handler (сиг, кадр):

глобалдык requestExit басып чыгаруу ('программанын аткарылышынан чыгуу үчүн 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_fm] 'm_fMagHwUnit'] [1], телеметрия ['m_fMagHwUnit'] [2], телеметрия ['m_fRPYdeg'] [0], телеметрия ['m_fRPYdeg'] [1], телеметрия ['m_fRPYdeg'] [2]) # #################################################### #############биз маалымат сабын экранга басып чыгарабыз жана аларды журналдын файлына сактайбыз ####################### ############################################## басып чыгаруу (dataStr) dataLogfile.writelines (dataStr)

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

#контроллерди баштоо, BleMACaddress талаасын түзмөгүңүздүн MAC дареги деп коюуну унутпаңыз ################################# #################################ТОДО: колдонуучу тарабынан коюлбаса, BleMACaddressти баштайлы. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ########################### ###########################################маятниктин өлчөөсүнөн түзүлгөн жана жөнөтүлгөн өлчөө маалыматтарын күтө туруңуз. аппарат ##################################################### ################## контроллер.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ######################## ######################################## # биз маалымат кыюуларга бүткөндөн кийин үй жүргүзүү бул жерде иштейт #################################################### ############### controller.stop () dataLogfile.close () тыныгуу

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

#маалыматтарды чогултуу аяктады, эми журналдын маалыматтарын талдайлы ######################################## ########################### pendulum2.parseDataLogFile (logfilename)

Узак мөөнөттүү жаңыртуу үчүн, https://github.com/xiapeiqing/m2robots/blob/maste… текшериңиз

Эми анын иштөө ыкмасын түшүндүрөлү. Бул питон программасы m2controller аттуу пип орнотула турган пакеттин үстүнө жазылган. Төмөнкү деңгээл пакети кайра чалуу механизмин сунуштайт, андыктан ар бир алынган өлчөө жаңыртуусу биз жазган кайра чалуу функциясын иштетет жана маалыматтарды жергиликтүү журналга сактайт. Журнал файлынын мазмунунун форматы андроид шериги колдонмосу менен бирдей, андыктан python программасы же andriod шериги колдонмосу тарабынан түзүлгөн маалымат журналынын файлы алмашылат.

Колдонуучу ctrl-C сигналы, иштетүү тутуму тарабынан, программага өткөрүлүп берилет жана өлчөө маалыматтарынын жаңы келишин күткөн чексиз циклди токтотот.

Азырынча, журнал файлы ийгиликтүү түзүлдү жана бул программа эксперименттин жыйынтыктарын изилдөө үчүн анализ программасын чакырат.

Бул жерде эки эксперимент бар жана салыштыруу ар кайсы жерлерде 7 граммдык түзмөктү тиркөө менен абдан байкалуучу айырмачылыкты көрсөтөт.

2 -сүрөттө биз бул Bluetooth өлчөөчү аппараттын чыныгы салмагын аныктоо үчүн шкаланы колдонобуз.

Fig.3 маятниктин орнотулушун сүрөттөйт, анда 7gram түзмөгү маятниктин ылдыйкы учуна бекитилет. Fig.4төгү Орнотуу конфигурациясы 7gram массасына ээ.

Fig.5 - маятниктин түзүлүшүнүн жакынкы көрүнүшү.

4 -кадам: маалыматтарды талдоо

Маалыматтарды талдоо
Маалыматтарды талдоо
Маалыматтарды талдоо
Маалыматтарды талдоо
Маалыматтарды талдоо
Маалыматтарды талдоо

Bluetooth өлчөөчү аппараттын салмагы ~ 7 грамм, салмагы ~ 1.6 метр узундуктагы жыгач таякчадан алда канча аз. "Катуу бирдиктүү таяк" деген божомолду колдонуңуз, бизде маятниктин мезгил теңдемеси бар, T1 = 2*pi*(2l/3g)^0.5

Тартылуу күчүн алуу үчүн биз 9.8м/с^2 колдоно алабыз. Бирок бул веб -кызматтан кандайдыр бир гео -жайгашууда тактык тартылуу туруктуусун алууга болот:

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

Сан -Франциско үчүн бул 9.81278m/s^2

Маятниктин узундугу 64,5 деп өлчөнөт

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) 2.0962 (сек) күтүлгөн маятник мезгилин берет.

Келгиле, бул биздин эксперименттерге туура келеби же келбесин карап көрөлү.

1 -экспериментте маятникти орнотууда маятниктин ылдыйкы учуна 7 граммдык аппарат орнотулган. Менин журнал файлымды төмөнкү жерден жүктөп алса болот:

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

Аны "PendulumTestData.txt" деп өзгөртүп, python анализдөө программасынын ошол эле папкасына салыңыз. Булак кодунун сүрөтү бул жерде берилген.

№! skedarn.cluster импорттоо KMeans импорттоо Counter ################################### ############################### бул функция маалымат файлдарын талдоо ишин аткарат ############# ###################################################### ## def parseDataLogFile (datafilename): ############################################# ########################маалыматтарды үтүр менен бөлүнгөн маалымат журналынын файлынан (CSV) чыгарып, ар бир мамычанын мазмунун бир калкып жүрүүчү типтеги өзгөрмөгө сактап коюңуз ## #################################################### ############ csvfile катары ачык (datafilename) менен: readCSV = csv.reader (csvfile, delimiter = ',') timestampS = 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деги катар үчүн: аракет кылыңыз: x = datetime.strptime (катар [0]. сплит (',') [0], '%H:%M:%S.%f ') убактысы [1] [4:])) fAccelHwUnit_y.append (float (row [2])) fAccelHwUnit_z.append (float (row [3])) fGyroHwUnit_x.append (float (row [4])) fGyroHwUnit_y.append (катар [5])) fGyroHwUnit_z.append (калкып чыгуу (катар [6])) fMagHwUnit_x.append (калкып жүрүү (катар [7])) fMagHwUnit_y.append (калкып чыгуу (катар [8])) fMagHwUnit_z.append (калкуу (катар) [9])) fRPYdeg_r.append (калкып жүрүү (катар [10])) fRPYdeg_p.append (калкып чыгуу (катар [11])) fRPYdeg_y.append (калкып чыгуу (катар [12])) тышкары: pass 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) ################ ##################################################### колдонуу# маятниктин мезгил анализи үчүн мамиленин аталыш системасынын чыгарылышындагы кадам компоненти ##################################### ############################# анализ_ убактысы (убакыт белгисиS, fRPYdeg_p, FsHz, 'pitch') ############ #################################################### ####маятник мезгил анализи үчүн акселеромтер чийки өлчөөлөрүн колдонуңуз ###################################### ############################# анализ_ убактысы (убакыт белгисиS, fAccelHwUnit_x, FsHz, 'accel') ########### #################################################### ####маятник мезгил анализи үчүн гиро чийки өлчөө өндүрүшүн колдонуңуз ###################################### ############################# талдоо_ убактысы (убакыт белгисиS, fGyroHwUnit_y, FsHz, ' гиро ') басып чыгаруу (' аткарылды, куттуктоолор:-) ') plt.show () ############################### ###################################bluetooth байланыш процессинде, маалымат коммутетинин сейрек мүмкүнчүлүгү бар жоголуп кетүү#биз 20 Гц ченөө маалыматын сырткы көрсөткүчтөрдөн обочолонтуу үчүн K-Mean колдонобуз, алар пакеттин#чумкуусунун "деталдары үчүн системага" түшүп кетишинен келип чыгат ################ ####################################################### def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('өлчөө аралыгы (с)') clusterCnt = 5 км = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter (km.labels_) пайдаCCnt = ii диапазонунда (clusterCnt): пайда болуш]) FsHz = 1/centroids [oluşumCnt.index (макс (пайда болууCnt))] кайтуу FsHz

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

#спектрометрди колдонуңуз, башкача айтканда, жыштык компонентин алуу үчүн кыска убакыт FFT, пик бин - маятник термелүүсүнүн эң мыкты баасы ########################## ####################################### def analy_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, freqs, bins, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title ("Спектрограмма") ax2.set_xlabel ("үлгүлөр") ax2.set_ylabel ("жыштыгы (Гц)");

# "Specgram" ыкмасы 4 объектини кайтарат. Алар:

# - Pxx: периодограмма # - freqs: жыштык вектору # - контейнерлер: убакыт коробкаларынын борборлору # - im: matplotlib.image. AxesImage экземпляры сюжетте маалыматтарды чагылдырат pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] басып чыгаруу ('маятник термелүүсү Freq (Гц) =%f, Период (сек) =%f, баалоо маалымат булагы:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) 1/oscFreqHz кайтаруу

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

#биз бул программаны өз алдынча иштетишибиз керек, башкача айтканда, pendulum1.py тарабынан чакырылган жок,#анализделүүчү демейки журнал маалымат файлынын атын аныктайбыз ##################### ############################################### эгерде _name_ == "_main_ ": defaultFilename = './PendulumTestData.

Узак мөөнөттүү жаңыртуу үчүн, https://github.com/xiapeiqing/m2robots/blob/maste… текшериңиз

Булак коду деталдуу комментарийлерди камтыйт, бул жерде математикалык баалоонун жогорку деңгээлдеги кыскача маалыматын берели.

1) Биз адегенде CSV файлынын мазмунун компьютерге "csv" деп аталган python пакетин колдонуу менен окуйбуз. Бизде мезгилдүү өлчөө бар.

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) Өлчөө ылдамдыгы өтө маанилүү болгондуктан жана маятниктин мезгилин баалоо катасын түздөн -түз киргизгендиктен, биз аларды баалагыбыз келет. Биздин номиналдык өлчөө аралыгы 50ms, б.а., 20Гц. Бардык ченөөлөр боюнча орточо жакшы көрүнөт, бирок биз кээде маалыматтарды берүү пакетин жоготуп алабыз, жаңыртуу аралыгы 100ms же 150ms болуп калат,…

Эгерде биз бул маалыматтардын пайда болушун пландаштырсак, 1 -сүрөттү караңыз, адам катары биз көздүн жоосун 0,05 сек. Бирок, биз мындан жакшыраак кыла алабызбы?

Орточо эсептөө үчүн жакшысын тандоо үчүн классификация ыкмасын колдонушубуз керек. Pythonдо KMeans аттуу куралдар кутусу бар, алар бизге кластерлөө же классификациялоо боюнча жардам берет. Бул түшүнүктөр көптөгөн чоң маалыматтарда жана AI аймактарында колдонулат.

3) 2 -сүрөт эки сүрөттү камтыйт. Жогорку сюжет-бул биздин бурчтук бурчубузду градус менен өлчөөнүн убакыт-домен ырааттуулугу. Экинчиден x огунун убакыт белгисине кайрылуу менен, 50 секундада болжол менен 22.5 циклди окуй алабыз, бул 2.22 сек маятник мезгилине которулат. Бул процессти автоматташтыруунун жана тагыраак баалоонун жолу барбы? Ооба, биз спектрограмм деп аталган математикалык куралды колдоно алабыз, ал анча чоң эмес өлчөө маалыматын колдонот жана бизге анын жыштыгын айтып берет, төмөндөгү сүрөттү караңыз. Эң караңгы сызык үчүн ок огу-маятниктин термелүү жыштыгы. Горизонталдык сызык болуу маятниктин термелүүсү эксперимент учурунда такыр өзгөрбөгөнүн тастыктайт. Термелүүнүн жыштыгынын тескери мааниси - маятниктин термелүү мезгили.

Программа тарабынан жасалган акыркы отчет кыскача текст:

маятник термелүүсү Freq (Hz) = 0.449224, Период (Sec) = 2.226059, баалоо маалымат булагы: кадам

Биз колубуздун мурунку эсептөө жыйынтыгын, 2.22сек, программанын эсептелген маанисине ылайыктуу экенин таба алабыз.

2.0962 (сек) теориялык жактан эсептелген баага салыштырмалуу, бизде ~ 5% калган ката бар. Кантип алардан арылуу керек? "Катуу бирдиктүү таяк" деген божомол эсиңиздеби? Ал тургай, 7 грамм кошумча салмак анча маанилүү эмес көрүнөт, бул калган катанын эң чоң себеби.

Биз азыр түзмөктү пивотко жакын жылдырабыз. Жакынкы сүрөт үчүн мурунку кадамды караңыз. Мен түзгөн журнал файлын бул жерден жүктөп алсаңыз болот:

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

Ошол эле талдоо кадамдарын аткарыңыз, биз 2.089867 (Sec) мезгилин алабыз, 3 -сүрөттү караңыз, бул теориялык болжолдоого дээрлик окшош. Абдан жакшы!

Бизде бурчту өлчөө гана эмес, гироскопиялык өлчөө жана акселерометрди бирдей ылдамдыкта өлчөө бар. Башка эки өлчөө үчүн ошол эле анализди жүргүзүңүз, биз 4 жана 5 -жыйынтыктарды алабыз. Бардык үч өлчөө булактарынын баалары макул, бул биздин эксперименттин ийгилигине ишенимдүү кылат.

Бул жерде иштеп жаткан python программанын акыркы натыйжасы:

маятник термелүүсү Freq (Hz) = 0.478499, Период (Sec) = 2.089867, баалоо маалымат булагы: кадам

маятник термелүүсү Freq (Hz) = 0.478499, Период (Sec) = 2.089867, баалоо маалымат булагы: accel

маятник термелүүсү Freq (Hz) = 0.478499, Период (Sec) = 2.089867, баалоо маалымат булагы: гиро

Бул этапта акыркы жолу ойлонгонумда, кандайча ар кандай кириш маалымат булактарын колдонуу менен баалоонун жыйынтыктары бирдей болушу мүмкүн? Бул каршы интуиция. Бул суроону окурмандарга калтырам. Бул жерде кыйытма бар: биз термелүүнүн жыштыгын баалоо үчүн кыска мөөнөттүү ФФТны колдонуп жатканыбызды унутпаңыз? Санариптик доменде, жыштык сметасы сүзүлүүчү сандын ордуна дискреттик жыштык контейнерлеринде берилет.

5 -кадам: Келечектеги жумуш сунуштары

Келечектеги жумуш сунуштарынын категориялары аз.

Мурунку кадамда, биз эксперимент катабызды ~ 5% дан 1% га чейин азайта алабыз, мындан жакшыраак кыла алабызбы? Термелүүнүн чоңдугу экспоненциалдуу түрдө азайып баратканын байкап, маятникти термелткенде аба түрткү болушу мүмкүн. Маятниктин кесилишин аэродинамикалык сүйрөөнү азайтуу үчүн оңой формада өзгөртүү керек болушу мүмкүн.

Биз туруктуу чокунун чоңдугундагы сигналды чыгаруу үчүн адаптивдүү чыпкалоо ыкмаларын колдонуп үйрөнгөн убакыттын өзгөрүшүн колдоно алабызбы. Ошол эле учурда, тышкы күчтөрдүн күчүнүн азайышын салыштырып көрүңүз.

Биз "жөнөкөй гармоникалык кыймылдан" жөнөкөй нерсени таба албайбыз. Биз маятникти анализдей турган каражаттарды татаалыраак нерсени, спорттук ишти, суу ракетасын учуруу ырааттуулугун ж.б. колдоно алабызбы?

Бактылуу хакерлик

Сунушталууда: