Агуулгын хүснэгт:

Энгийн гармоник хөдөлгөөний туршилтын судалгаа: 5 алхам
Энгийн гармоник хөдөлгөөний туршилтын судалгаа: 5 алхам

Видео: Энгийн гармоник хөдөлгөөний туршилтын судалгаа: 5 алхам

Видео: Энгийн гармоник хөдөлгөөний туршилтын судалгаа: 5 алхам
Видео: 🎶 ДИМАШ "ОПЕРА 2". История выступления и анализ успеха | Dimash "Opera 2" 2024, Арваннэгдүгээр
Anonim

Зохиогчийн бусад зүйлийг дагах:

Walking Strandbeest, Java/Python болон Апп хяналттай
Walking Strandbeest, Java/Python болон Апп хяналттай
Walking Strandbeest, Java/Python болон Апп хяналттай
Walking Strandbeest, Java/Python болон Апп хяналттай

Ангидаа бид ихэвчлэн дүүжлүүр эсвэл энгийн гармоник хөдөлгөөний туршилтыг хийхдээ секундомер ашигладаг. Энд нэг бэрхшээл байна, бид түүний хөдөлгөөний бодит графикийг гаргаж, агшин зуурын өнцгийн байрлал, хурд гэж юу болохыг олж мэдэх үү, энэ нь илүү их мэдээлэл, хөгжилтэй байдаг.

Эхний асуулт бол дүүжин биеийн жингүй утас эсвэл хатуу жигд саваа болохыг шийдэх хэрэгтэй. Утасны хандлага илүү хялбар байх шиг байна. Барилга барих практик дээр би дараахь зүйлийг анхаарч үзэх хэрэгтэй: Дүүжин системийг өлгөх хамгийн хялбар арга бол хаалганыхаа дээд ирмэг дээр өлгөх явдал юм. Энэ нь бүтцийн барилгын ажил хийхгүйгээр ~ 2м дүүжин уртыг өгдөг. Гэхдээ дүүжин нь хаалганы гадаргуу дээр хүрэхгүй байх ёстой бөгөөд энэ нь туршилтыг бүхэлд нь сүйтгэдэг. Тиймээс дүүжин онгоц нь таны хана/хаалганы гадаргуутай яг зэрэгцсэн байх ёстой. Жингүй утас нь нимгэн байх хандлагатай тул амархан эргэдэг бөгөөд дүүжин өнцгийн хэмжилтийг хүндрүүлдэг. Бид дүүжин төлөвийг илэрхийлэхийн тулд нэг хэмжилтийг ашиглахыг хүсч байна. Загасны шугам гэх мэт нимгэн утас нь уян хатан, уян хатан байж болох бөгөөд энэ нь бидний хэмжиж, дүүжингийн урт болох тэгшитгэлд ашигладаг хамгийн чухал тогтмолуудын нэгэнд нөлөөлдөг. Зарим хүмүүс температурын нөлөөнд автдаг. Утасны төгсгөлд өлгөгдсөн жин нь хангалттай хүнд байх ёстой бөгөөд ингэснээр утасны жин нь ач холбогдолгүй болно. Хэрэв та тэдэнтэй санал нийлэхгүй эсвэл санал нийлэхгүй байгаа эсвэл дизайны талаар өөр санаа бодолтой байгаа бол саналаа хэлнэ үү. Энэ асуудлыг судлахын тулд бидэнд жинг нь үл тоомсорлож болох хөнгөн төхөөрөмж хэрэгтэй бөгөөд бид дүүжин системийг хатуу жигд саваа гэж үздэг хэвээр байна. Би COTS өмсдөг электрон хянагч ашиглаж байгаа бөгөөд энэ нь гиро, акселерометр, өнцгийн мэдээллийг bluetooth холболтоор бидэнд хүргэдэг. Эдгээр хэмжилтийг гар утасны програмын өгөгдлийн файлд хадгалах болно. Үүний дараа бид өөрсдийн гармоник хөдөлгөөний энгийн туршилтын өгөгдлийг шинжлэх болно. Тоон дүн шинжилгээ нь дараахь сэдвүүд дээр төвлөрдөг: 1) Дүүжингийн хэлбэлзлийн хугацааг урьдчилан таамаглах 2) Дүүжингийн энгийн гармоник хөдөлгөөний туршилтын өгөгдлийг програмчлах байдлаар цуглуулах 3) Kmean-ийг ашиглан дүн шинжилгээ хийх явцад өгөгдлийг бүлэглэж, гадуур зүйлсийг арилгах 4) Богино хугацааны FFT ашиглан тооцоолох. савлуурын хэлбэлзлийн давтамж

Хангамж

Bluetooth хэмжих төхөөрөмж

Андройд утасны апп: Google playstore руу орж M2ROBOTS хайлт хийж хяналтын аппыг суулгаарай. Хэрэв Google playstore -д нэвтрэхэд хэцүү байвал програмыг татаж авах өөр аргыг https://xiapeiqing.github.io/doc/intro_androidapp… миний хувийн нүүр хуудсанд зочилно уу.

модон саваа

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 хэвлэж, өөрт байгаа зүйлээ дахин боловсруулдаг. Дүүжингийн ерөнхий бүтцийг Зураг 1 -д үзүүлэв. Энэ бол 3D хэвлэмэл хэсгүүдийн холимог бөгөөд гараар хийсэн зарим эд анги, Lowe -ийн модон саваа юм.

2 -р зураг дээрх 3D хэвлэсэн хэсэг нь хаалганы дээд ирмэг дээр өлгөгдсөн байдаг, учир нь бидний хаалга нь ямар нэгэн зүйлийг өлгөхөд хялбар хавтгай гадаргуу юм. STL файл татаж авах линк:

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

3 -р зураг дээрх ногоон хэсэг нь модон саваа иртэй холбодог бөгөөд ир нь 3D хэвлэсэн хаалганы өлгүүр дээр суурилуулсан хоёр төмөр замын орой дээр байрладаг. STL файл татаж авах линк:

Төмөр замын хоёр хэсэг нь хуучин хөрөөний ирийг хоёр хувааж хийжээ. Зураг 4 -ийг үзнэ үү. Хамгийн тохиромжтой нь бид эдгээр хоёр хөрөө ирэнд "V" хэлбэртэй ховилыг файл ашиглан хийж болно. Ханцуйвчтай иртэй металл, жишээлбэл нэг ирмэгийн сахлын хутга эсвэл гараар хийсэн аливаа металл хэсэг нь "V" хэлбэртэй ховил дотор сууж болно. Бидэнд жижиг холбоо барих газар хэрэгтэй байгаа шалтгаан нь дүүжин хөдөлгөөний явцад алдагдсан кинетик энергийг багасгах явдал юм.

5 -р зураг дээрх хамгийн сүүлийн 3D хэвлэсэн хэсэг нь электрон хэмжих хэрэгслийг байрлуулах жижиг тавиур юм.

Татаж авах линк:

Bluetooth хэмжих төхөөрөмж нь өнцгийн тооцоолол, гиро хэмжилт, акселерометр хэмжилтийг бий болгодог. Эдгээр бүх өгөгдлийг bluetooth утасгүй холбоосоор дамжуулан авах боломжтой.

Бид энэ төхөөрөмжийг дүүжин гарны өөр байрлалд байрлуулах замаар олон туршилт хийж, ялгааг олж харах болно.

Алхам 3: Туршилтын мэдээлэл цуглуулах

Туршилтын мэдээлэл цуглуулах
Туршилтын мэдээлэл цуглуулах
Туршилтын мэдээлэл цуглуулах
Туршилтын мэдээлэл цуглуулах
Туршилтын мэдээлэл цуглуулах
Туршилтын мэдээлэл цуглуулах

Бид олж авсан мэдээллийн санг шинжлэхээс өмнө туршилтын өгөгдөл цуглуулах хоёр боломжтой арга байдаг.

1) Шаардлага хэсэгт заасан Андройд утасны аппликейшнийг ашиглан аппаратаар үйлдвэрлэсэн бүх хэмжилтийг утасныхаа SD картанд хадгалагдсан өгөгдлийн файлд бүртгэнэ. Бид файлыг хуулж, мэдээллийг боловсруулах боломжтой.

2) Bluetooth идэвхжүүлсэн компьютер, компьютер, зөөврийн компьютер эсвэл RaspberryPi мини компьютер ашиглан аппаратад bluetooth холболт хийж өгөгдлийг бодит цагийн болон офлайн дүн шинжилгээ хийх зорилгоор уншаарай.

Арга тус бүрийн давуу болон сул талууд байдаг, бид хоёуланг нь туршиж үзээд энэ зааврын ялгааг хэлэх болно.

Андройд програмыг ашиглах (1) аргын хувьд бид Андройд аппликейшны хяналтын интерфейсэд орсны дараа bluetooth хэмжих төхөөрөмжөөс андройд утас руу илгээсэн телеметрийн өгөгдлийг m2flightDatayyyymmdd_hhmmss.txt нэртэй өгөгдлийн файлд бүртгэнэ. Үүнийг Андройд утасныхаа Download/m2LogFiles хавтаснаас олж болно. "Татаж авах" фолдер нь таны утасны Андройд үйлдлийн системд байгаа фолдер бөгөөд "m2LogFiles" нь Апп-ийн үүсгэсэн хавтас юм. Файлын нэрний агуулга yyyymmdd_hhmmss нь туршилтын эхлэх хугацааг (жил, сар, өдөр, цаг, минут, сек) файлын нэрээр кодлох арга юм.

Бүртгэлийн файл дахь мөр бүр нэг бичлэг байна. Энэ нь үйл явдлын цагийн тэмдэг, "eam:" оршил мөр, дараа нь 4 гурвалсан өгөгдлөөс эхэлдэг бөгөөд үүнд:

Түүхий мэдрэгчийн тоног төхөөрөмжийн XYZ тэнхлэгийг унших нь дахин унших утгыг бүртгэдэг

Гироскоп XYZ тэнхлэгийг түүхий мэдрэгчийн тоног төхөөрөмжийн унших утга нь дахин унших утгыг бүртгэдэг

Соронзон хэмжигч XYZ тэнхлэгийг түүхий мэдрэгчийн төхөөрөмжид унших нь дахин унших утгыг бүртгэдэг

онгоцонд Roll/Pitch/Raw зэргийг тооцоолсон

Компьютерийн python програмыг ашиглан үүсгэсэн өгөгдлийн файл нь ижил өгөгдлийн файлын форматыг ашиглах бөгөөд ингэснээр өгөгдөлд дүн шинжилгээ хийх үе шатанд ашигладаг програм нь манай питон програм эсвэл андройд програмын үүсгэсэн мэдээллийн эх сурвалжид саад болохгүй.

(2) аргыг ашиглан код бичиж эхэлье.

Bluetooth хэмжих төхөөрөмжтэй ажиллахын тулд SDK -ийн хоёр амтыг өгдөг.

1) "pip3 install m2controller" -ээр суулгаж болох Python SDK бол Python3 нь хэрэглэгддэг хэл юм. Хэрэглэгчийн програмын кодын жишээг https://github.com/xiapeiqing/m2robots/tree/maste… дээр хадгалсан болно. Энэхүү туршилтанд бид pendulum1.py питон скриптийг ашиглах болно.

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

Python3 өгөгдөл цуглуулах програмын эх код нь кодын үйл ажиллагааны талаархи дэлгэрэнгүй тайлбарыг агуулдаг. Эх кодын агшин зургийг энд оруулав.

#!/usr/bin/env python#-*-кодчилол: UTF-8-*-m2controller-ээс m2controller-ээс m2controller-ээс m2-ийг оруулж ирдэг.

requestExit = Худал

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

#бид ижил бүртгэлийн файлын нэр томъёог ашиглахыг хүсч байгаа бөгөөд ингэснээр өгөгдлийн дүн шинжилгээ хийх модуль pendulum2.py нь бүртгэлийн өгөгдлийн файлыг хэрхэн олж авахад үл тоомсорлож чадна ################# ############################################################## logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = нээлттэй (бүртгэлийн файлын нэр," w ")

def signal_handler (сиг, хүрээ):

global requestExit print ('програмын гүйцэтгэлээс гарахын тулд хэрэглэгч Ctrl-C') requestExit = Үнэн дохио. дохио (signal. SIGINT, signal_handler)

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

#Хэмжилтийн өгөгдөл бүр 20Гц давтамжтай байх үед энэхүү "буцаах" функцийг дуудах болно ############################## #################################### call callfunc (телеметр): 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], телеметрийн [U] телеграф ['m_fm] 'm_fMagHwUnit'] [1], телеметрийн ['m_fMagHwUnit'] [2], телеметрийн ['m_fRPYdeg'] [0], телеметрийн ['m_fRPYdeg'] [1], телеметрийн ['m_fRPYdeg'] [2]) # ###################################################### #############бид өгөгдлийн мөрийг дэлгэцэн дээр хэвлээд бүртгэлийн файлд хадгална ##################### ################################################# хэвлэх (dataStr) dataLogfile.writelines (dataStr)

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

#хянагчийг эхлүүлэх, BleMACaddress талбарыг таны төхөөрөмжийн MAC хаяг болгохыг санаарай ################################### ################################## TODO: хэрэглэгч тохируулаагүй бол BleMACaddress -ийг эхлүүлцгээе. хянагч = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () байхад Үнэн: ############################ ##############################################Дүүжин хэмжээсээс хэмжилтийн өгөгдлийг үүсгэхийг хүлээж авах. аппарат ###################################################### ################### хянагч.m_CommsTunnel.waitForNotifications (1.0) хэрэв хүсвэлExit: ######################### ############################################################### Мэдээллийн бүртгэлийг хийж дуусгахад байшин барих ажил энд ажилладаг. ###################################################### ################ controller.stop () dataLogfile.close () завсарлага

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

#өгөгдөл цуглуулах ажил дууссан, одоо бүртгэлийн өгөгдөлд дүн шинжилгээ хийцгээе ########################################## ############################ pendulum2.parseDataLogFile (лог файлын нэр)

Удаан хугацааны шинэчлэлт авахыг хүсвэл https://github.com/xiapeiqing/m2robots/blob/maste… хаягаар орж үзээрэй.

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

Үйлдлийн системээр авсан ctrl-C хэрэглэгчийн дохиог програмд дамжуулж, хэмжилтийн өгөгдөл шинээр ирэхийг хүлээж буй хязгааргүй хүрдийг зогсооно.

Одоогийн байдлаар бүртгэлийн файлыг амжилттай үүсгэсэн бөгөөд энэ програм нь туршилтын үр дүнг судлахын тулд шинжилгээний програмыг дуудах болно.

Энд хоёр туршилт байгаа бөгөөд харьцуулалт нь 7 грамм төхөөрөмжийг өөр өөр байршилд холбосноор маш мэдэгдэхүйц ялгааг харуулж байна.

2 -р зураг дээр бид bluetooth хэмжих төхөөрөмжийн бодит жинг тодорхойлохын тулд масштабыг ашиглана.

Зураг 3 -т дүүжингийн доод үзүүрт 7 грамм төхөөрөмж бэхлэгдсэн савлуурын тохиргоог дүрсэлсэн болно. 4 -р зураг дээрх тохиргооны тохиргоо нь дүүжин тэнхлэгт ойрхон байрладаг 7 грамм жинтэй.

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 шинжилгээний програмын ижил хавтсанд оруулна уу. Эх кодын агшин зургийг энд оруулав.

#!/usr/bin/env python#-*-кодчилол: UTF-8-*-csv импорт matplotlib.pyplot-ийг plt plt.style.use ('seaborn-whitegrid') гэж импортлох дугаарыг datetime импорт хийх хугацаанаас np болгон импортлох, timedelta далайн төрөлтийг sklearn.cluster импортоос sns хэлбэрээр импортлох KMeans цуглуулгаас импортлох Counter ##################################### ################################ энэ функц нь өгөгдлийн файлын шинжилгээний ажлыг гүйцэтгэдэг ############## ###################################################### ## def parseDataLogFile (өгөгдлийн нэр): ############################################## ######################## өгөгдлийг таслалаар тусгаарлагдсан өгөгдлийн бүртгэлийн файлд (CSV) задалж, багана тус бүрийн агуулгыг нэг хөвөгч хэлбэрийн хувьсагч болгон хадгалах ## ###################################################### ############# (өгөгдлийн файлын нэр) csvfile хэлбэрээр: 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 ') цаг хугацааны тамга S. [1] [4:])) fAccelHwUnit_y.append (хөвөх (мөр [2])) fAccelHwUnit_z.append (хөвөх (мөр [3])) fGyroHwUnit_x.append (хөвөх (мөр [4])) fGyroHwUnit_y.append (float (эгнээ [2])) (мөр [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])) -ээс бусад нь: timestampS = np.asarray (timestampS) timestampS = timestampS - timestampS [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) ################# ##################################################### ашиглах# Дүүжин хугацааны шинжилгээнд зориулсан хандлага гарчгийн лавлах системийн гаралтын давирхай бүрэлдэхүүн хэсэг ###################################### ############################## дүн шинжилгээ хийх_цагийн дараалал (timestampS, fRPYdeg_p, FsHz, 'pitch') ############ ###################################################### ####хурдасгуурын түүхий хэмжилтийн гаралтыг дүүжин үеийн шинжилгээнд ашиглах ###################################### ############################## дүн шинжилгээ хийх_цагийн дараалал (timestampS, fAccelHwUnit_x, FsHz, 'accel') ############ ###################################################### ####дүүжин хугацааны шинжилгээнд гиро түүхий хэмжилтийн гаралтыг ашиглах ###################################### ############################# дүн шинжилгээ хийх_цагийн дараалал (timestampS, fGyroHwUnit_y, FsHz, ' gyro ') хэвлэх (' хийсэн, баяр хүргэе:-) ') plt.show () ############################### #####################################bluetooth харилцааны явцад өгөгдөл дамжуулах пакет хийх магадлал ховор байдаг. алдагдах#бид 20 Гц-ийн хэмжигдэхүүний өгөгдлийг "илүү дэлгэрэнгүй мэдээлэл авахын тулд дохио ба систем" болгон унагаснаас үүдэлтэй 20 Гц-ийн хэмжигдэхүүний өгөгдлийг тусгаарлахын тулд бид K-mean-ийг ашигладаг ################## ###################################################### get getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('хэмжих интервал (ууд)') кластерCnt = 5 км = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elementCnt = Тоолуур (km.labels_) тохиолддогCnt = ii for range (clusterCnt): тохиолддогCnt.append (elemCnt [ii]) FsHz = 1/centroids [давтамжCnt.index (хамгийн их (давтамжCnt))] FsHz -ийг буцаана

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

#Давтамжийн бүрэлдэхүүн хэсгийг авахын тулд богино хугацааны FFT спектрометрийг ашиглана уу. ######################################### def analy_timeSequence (timestampS, 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 ("дүүжин цагийн домэйны хэмжилт - %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: periodogram # - давтамж: давтамжийн вектор # - хогийн сав: цагийн савны төвүүд # - im: matplotlib.image. AxesImage жишээ нь өгөгдлийг харуулсан pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] хэвлэх ('савлуурын хэлбэлзэл Freq (Hz) =%f, Period (Sec) =%f, тооцооллын мэдээллийн эх сурвалж:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) 1/oscFreqHz -ийг буцаана

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

#бид энэ програмыг бие даан ажиллуулах ёстой, өөрөөр хэлбэл pendulum1.py дуудахгүй,#бид дүн шинжилгээ хийх ёстой бүртгэлийн өгөгдлийн файлын нэрийг тодорхойлдог ##################### ################################################## Хэрэв _name_ == "_мэйн_ ": defaultFilename = './PendulumTestData.txt' os.path.isfile бол os.path импортлох

Удаан хугацааны шинэчлэлт авахыг хүсвэл https://github.com/xiapeiqing/m2robots/blob/maste… хаягаар орж үзээрэй.

Эх код нь нарийвчилсан тайлбарыг агуулдаг бөгөөд энд математик тооцооллын өндөр түвшний хураангуйг энд өгье.

1) Бид эхлээд CSV файлын агуулгыг "csv" нэртэй питон багц ашиглан компьютерт уншдаг. Бид үе үе хэмждэг.

21: 34: 26.362, цаг: 0, -128, 14464, -8, 144, -96, 2112, -1280, 1664, -0.5, -5.5, 40.5

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

21: 34: 26.412, цаг: 448, -64, 14208, -8, 136, 24, 2176, -1280, 1664, -0,5, -7,5, 40,5

21: 34: 26.462, цаг: 448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0.5, -8.0, 40.5

2) Хэмжилтийн хурд нь маш чухал бөгөөд дүүжин хугацааны тооцооллын алдааг шууд оруулдаг тул бид тэдгээрийг тооцоолохыг хүсч байна. Бидний нэрлэсэн хэмжих интервал нь 50 мс, өөрөөр хэлбэл 20 Гц юм. Бүх хэмжилтүүдийн дундаж нь зүгээр юм шиг боловч бид өгөгдөл дамжуулах пакетаа хааяа алдаж, шинэчлэлтийн интервал нь 100ms эсвэл 150ms болж хувирдаг.

Хэрэв бид эдгээр өгөгдлүүдийн илрэлийг төлөвлөж байгаа бол Зураг 1 -ийг үзнэ үү, хүний хувьд бид нүдний хараагаа 0.05 сек -ээр амархан олж чадна. Гэсэн хэдий ч бид үүнээс илүү сайн хийж чадах уу?

Тооцооллын дундажийг сонгохын тулд бид ангилах аргыг ашиглах ёстой. Python нь KMeans нэртэй хэрэгслийн хайрцагтай бөгөөд бидэнд бөөгнөрүүлэх, эсвэл ангилал хэлж өгөхөд тусалдаг. Эдгээр ойлголтуудыг олон том өгөгдөл, хиймэл оюун ухааны салбарт ашигладаг.

3) 2 -р зурагт хоёр зураг багтсан болно. Дээд талбар бол градусын өнцөгт хэмжих хэмжигдэхүүний цаг хугацааны дараалал юм. Хоёр дахь дахь x тэнхлэгийн цагийн тэмдгийг дурдсанаар бид 50 секундын дотор ойролцоогоор 22.5 мөчлөгийг уншиж болох бөгөөд энэ нь 2.22 секундын дүүжин үе гэж орчуулагддаг. Энэ үйл явцыг автоматжуулах, илүү нарийвчлалтай тооцоолох арга бий юу? Тийм ээ, бид хэмжих өгөгдлийн багахан хэсгийг ашигладаг спектрограмм хэмээх математик хэрэгслийг ашиглаж, түүний давтамжийг хэлж болно, доорх зургийг үзнэ үү. Хамгийн харанхуй шугамын y тэнхлэгийн уншилт нь дүүжин хэлбэлзлийн давтамж юм. Хэвтээ шугам байх нь туршилтын явцад савлуурын хэлбэлзэл огт өөрчлөгдөөгүй болохыг баталж байна. Чичирхийллийн давтамжийн урвуу утга нь савлуурын хэлбэлзлийн үе юм.

Хөтөлбөрийн хийсэн эцсийн тайлан бол текстийн хураангуй юм.

дүүжин хэлбэлзэл Давтамж (Гц) = 0.449224, Хугацаа (сек) = 2.226059, тооцооллын мэдээллийн эх сурвалж: давирхай

Нүдний нүдний гарны тооцооллын өмнөх үр дүн болох 2.22сек нь програмын тооцоолсон утгатай нэлээд нийцэж байгааг бид олж чадна.

Онолын хувьд тооцоолсон утгатай 2.0962 (сек) -тэй харьцуулахад бидэнд ~ 5% -ийн алдаа үлдсэн байна. Тэднээс яаж салах вэ? "Хатуу жигд саваа" гэсэн таамаглалыг санаж байна уу? 7 грамм нэмэлт жин ч гэсэн өчүүхэн мэт санагдах нь үлдсэн алдааны хамгийн том шалтгаан болдог.

Одоо бид төхөөрөмжийг эргүүлэх цэг рүү ойртуулж байна. Ойрын зураг авахын тулд өмнөх алхамыг үзнэ үү. Миний үүсгэсэн бүртгэлийн файлыг эндээс татаж авах боломжтой.

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

Үүнтэй ижил дүн шинжилгээ хийх алхмуудыг хийснээр бид 2.089867 (Sec) хугацааг авна, 3 -р зургийг үзнэ үү, энэ нь онолын таамаглалтай бараг ижил юм. Агуу их!

Бид зөвхөн дүүжин өнцгийн хэмжүүр төдийгүй гироскопийн болон акселерометрийн хэмжилтийг ижил хурдтай хийдэг. Нөгөө хоёр хэмжилтийн хувьд ижил дүн шинжилгээ хий, бид Зураг 4 ба 5 -т үр дүнг авдаг. Хэмжлийн бүх гурван эх сурвалжаас авсан тооцоо нь бидний туршилтын амжилтанд илүү итгэлтэй болгодог.

Python програмыг ажиллуулж байгаа эцсийн үр дүнг энд харуулав.

дүүжин хэлбэлзэл Давтамж (Гц) = 0.478499, Хугацаа (сек) = 2.089867, тооцооллын мэдээллийн эх сурвалж: давирхай

дүүжин хэлбэлзэл Давтамж (Гц) = 0.478499, Хугацаа (сек) = 2.089867, тооцооллын мэдээллийн эх сурвалж: accel

дүүжин хэлбэлзэл Давтамж (Гц) = 0.478499, Хугацаа (сек) = 2.089867, тооцооллын мэдээллийн эх сурвалж: гиро

Энэ алхам дээр хийсэн хамгийн сүүлийн бодол бол өөр өөр оролтын өгөгдлийн эх сурвалжийг ашиглан тооцооллын үр дүн хэрхэн яг ижил байж болох вэ? Энэ бол эсрэг зөн совин юм. Би энэ асуултыг уншигчдад үлдээх болно. Энд нэг зөвлөгөө байна: бид хэлбэлзлийн давтамжийг тооцоолохын тулд богино хугацааны FFT-ийг ашиглаж байгааг санаж байна уу? Дижитал домэйны хувьд давтамжийн тооцоог хөвөгч тооны тооцооллын оронд салангид давтамжийн саванд өгдөг.

Алхам 5: Ирээдүйн ажлын зөвлөмж

Цаашид хийх ажлын зөвлөмжийн цөөн хэдэн ангилал байдаг.

Өмнөх алхам дээр бид туршилтын алдааг ~ 5% -иас 1% -иас бага болгож бууруулж чадсан, үүнээс илүү сайн хийж чадах уу? Чичирхийллийн хэмжээ огцом буурч байгааг анзаарсан бол нэг нөлөөлөх хүчин зүйл бол дүүжин савлуурыг хөдөлгөхөд үүссэн агаарын чирэгдэл байж болно. Аэродинамик ачааллыг бууруулахын тулд дүүжингийн хөндлөн огтлолыг хялбаршуулсан хэлбэрээр өөрчлөх шаардлагатай байж магадгүй юм.

Бид дасан зохицох шүүлтүүрийн техник ашиглан тогтмол оргил хэмжээний дохиог гаргахын тулд олж авсан мэдлэгээ цаг хугацааны хувьд өөрчилж болох уу? Үүний зэрэгцээ, гадны хүчнүүдийн хүч чадлын бууралтыг харьцуулж үзээрэй.

"Энгийн гармоник хөдөлгөөн" -өөс илүү энгийн зүйлийг бид бараг олохгүй. Савлуурт дүн шинжилгээ хийж буй төхөөрөмжөө ашиглан илүү төвөгтэй зүйл, спортын үйл ажиллагаа, усан пуужин хөөргөх дараалал гэх мэтийг шинжлэх боломжтой юу?

Аз жаргалтай хакердах

Зөвлөмж болгож буй: