Სარჩევი:

მარტივი ჰარმონიული მოძრაობის ექსპერიმენტული შესწავლა: 5 ნაბიჯი
მარტივი ჰარმონიული მოძრაობის ექსპერიმენტული შესწავლა: 5 ნაბიჯი

ვიდეო: მარტივი ჰარმონიული მოძრაობის ექსპერიმენტული შესწავლა: 5 ნაბიჯი

ვიდეო: მარტივი ჰარმონიული მოძრაობის ექსპერიმენტული შესწავლა: 5 ნაბიჯი
ვიდეო: ეკჰარტ ტოლე - "აწმყოს ძალა" - აუდიო წიგნი - Audible Read Along 2024, ივლისი
Anonim

ავტორის მსგავსი

Walking Strandbeest, Java/Python და App Controlled
Walking Strandbeest, Java/Python და App Controlled
Walking Strandbeest, Java/Python და App Controlled
Walking Strandbeest, Java/Python და App Controlled

საკლასო ოთახში ჩვენ ხშირად ვიყენებთ წამზდომს ქანქარის ექსპერიმენტის ჩასატარებლად, ან მარტივი ჰარმონიული მოძრაობის ექსპერიმენტისთვის. აქ არის გამოწვევა, შეგვიძლია შევქმნათ მისი მოძრაობის რეალური გრაფიკი და ვნახოთ რა არის მყისიერი კუთხის პოზიცია და სიჩქარე, ეს გაცილებით მეტი ინფორმაცია და სახალისოა.

პირველი კითხვა, ჩვენ უნდა განვსაზღვროთ, რომ ქანქარის სხეული არის უმძიმესი კაბელი ან ხისტი ერთიანი ღერო. როგორც ჩანს, კაბელის მიდგომა უფრო ადვილია. ერთის შექმნის პრაქტიკიდან მაქვს შემდეგი სავაჭრო მოსაზრებები: ქანქარის სისტემის დაკიდების უმარტივესი გზა შეიძლება მისი კარის ზედა კიდეზე დაკიდება. ეს იძლევა თქვენს ქანქარას 2 მილიონ ფუნტს, ყოველგვარი სამშენებლო სამუშაოების შესრულების გარეშე. მაგრამ მას სჭირდება, რომ საქანელა არ შეეხოთ კარის ზედაპირს, რაც უბრალოდ ანგრევს მთელ ექსპერიმენტს. ასე რომ, მისი გადატრიალების სიბრტყე ზუსტად უნდა იყოს თქვენი კედლის/კარის ზედაპირის პარალელურად. უმძიმესი ტვინი, როგორც წესი, თხელია, ის ადვილად ტრიალებს და ართულებს საქანელის კუთხის გაზომვას. ჩვენ გვინდა გამოვიყენოთ ერთი გაზომვა საქანელის მდგომარეობის გამოსახატავად. თხელი ტვინი, როგორიცაა თევზის ხაზი, შეიძლება იყოს ელასტიური და გაჭიმული, რაც გავლენას ახდენს ჩვენს მიერ გაზომილ და განტოლებაში გამოყენებული ერთ – ერთ ყველაზე მნიშვნელოვან მუდმივობაზე, რაც არის ქანქარის სიგრძე. ზოგიერთს ასევე შეუძლია გავლენა იქონიოს ტემპერატურაზე. ტვინის ბოლოს ჩამოკიდებული წონის მასა უნდა იყოს საკმარისად მძიმე ისე, რომ ტვინის წონა უმნიშვნელო გახდეს. გთხოვთ, კომენტარი გააკეთოთ, თუ ეთანხმებით ან არ ეთანხმებით მათ, ან გაქვთ დიზაინის კომპრომისის სხვა იდეები. ამ პრობლემის შესასწავლად, ჩვენ გვჭირდება მოწყობილობა, რომელიც იმდენად მსუბუქია, რომ მისი წონის იგნორირება შესაძლებელია და ჩვენ კვლავ განვიხილავთ ქანქარის სისტემას, როგორც ხისტი ერთიანი ჯოხი. მე ვიყენებ COTS ტარებად ელექტრონულ კონტროლერს, რომელიც გვაწვდის გიროსკოპის, ამაჩქარებლისა და კუთხის ინფორმაციას Bluetooth– ის საშუალებით. ეს გაზომვები შეინახება მობილური ტელეფონის აპლიკაციის მონაცემთა ფაილში. ამის შემდეგ, ჩვენ გავაანალიზებთ მონაცემებს ჩვენი მარტივი ჰარმონიული მოძრაობის ექსპერიმენტისთვის. რიცხვითი ანალიზი ყურადღებას ამახვილებს შემდეგ თემებზე: 1) პროგნოზირება ქანქარის რხევის პერიოდზე 2) პროგრამულად შეგროვებული ქანქარის მარტივი ჰარმონიული მოძრაობის ექსპერიმენტის მონაცემები 3) გამოიყენეთ kmean მონაცემთა დასაჯგუფებლად და ანალიზების პროცესში მოხსნის 4) გამოიყენეთ მოკლევადიანი FFT შესაფასებლად ქანქარის რხევის სიხშირე

მარაგები

Bluetooth გაზომვის აპარატი

Android ტელეფონის აპლიკაცია: გადადით Google Playstore– ში, მოძებნეთ M2ROBOTS და დააინსტალირეთ საკონტროლო აპლიკაცია. თუ Google Playstore– ზე წვდომა ძნელია, ეწვიეთ ჩემს პირად ვებ გვერდს პროგრამის ჩამოტვირთვის ალტერნატიული მეთოდისთვის

ხის ჯოხი

რამდენიმე 3D ნაბეჭდი ნაწილი

ხერხის პირები ან მსგავსი ლითონის მასალა

ნაბიჯი 1: რა არის ქანქარა? როგორ მოდელირება?

არსებობს მრავალი სტატია და წიგნი, რომელიც ასახავს ქანქარის განტოლების წარმოებას, მათ შორის თქვენი სასწავლო გეგმის ფიზიკის წიგნს. შეიძლება უკეთესი იყოს, რომ მსგავსი შინაარსი აქ აღარ განმეორდეს. აქ მოცემულია მხოლოდ საბოლოო დასკვნა "მარტივი ჰარმონიული მოძრაობის" თემასთან დაკავშირებით. იმისათვის, რომ ვიცოდეთ ქანქარის პერიოდი, ყველაფერი რაც უნდა ვიცოდეთ არის ქანქარის სიგრძე, რომელიც აღინიშნება როგორც "l", მეტრებში.

თუ ჩვენ გონივრულად ვართ დარწმუნებული, რომ წონა თითქმის მთლიანად მდებარეობს მობრუნებულ უსიმონტო კაბელის ბოლოს და ქანქარა ტრიალებს მცირე კუთხეებში θ, ვთქვათ 15 ° -ზე ნაკლები, ასეთი ქანქარის პერიოდი T1 მოცემულია:

T1 = 2*pi*(ლ/გ)^0.5

g = გრავიტაციის აჩქარება, დაახლოებით 9.8 მ/წ^2

თუ უმძიმესი კაბელი შეიცვალა ხისტი ერთიანი ჯოხით, კვლავ l სიგრძით, მისი მარტივი ჰარმონიული მოძრაობის პერიოდი T2 მოცემულია T1 = 2*pi*(2l/3g)^0.5

ფაქტობრივად, მას აქვს იგივე პერიოდი, რაც უწონიანი კაბელის ქანქარა არის მყარი ერთიანი ღეროს სიგრძის ორი მესამედი.

ეს არის ფონი და ჩვენ შეგვიძლია დავიწყოთ ჩვენი ექსპერიმენტის მომზადება.

ნაბიჯი 2: მოამზადეთ ნაწილები ტექნიკის შესაქმნელად

მოამზადეთ ნაწილები აპარატურის მშენებლობისთვის
მოამზადეთ ნაწილები აპარატურის მშენებლობისთვის
მოამზადეთ ნაწილები აპარატურის მშენებლობისთვის
მოამზადეთ ნაწილები აპარატურის მშენებლობისთვის
მოამზადეთ ნაწილები აპარატურის მშენებლობისთვის
მოამზადეთ ნაწილები აპარატურის მშენებლობისთვის

ქანქარის სტრუქტურის ასაშენებლად, ჩვენ ვბეჭდავთ ზოგიერთ ნაწილს და ვამუშავებთ იმას, რაც უკვე გვაქვს. ქანქარის საერთო სტრუქტურა ნაჩვენებია ნახ.1 -ში. ეს არის 3D ბეჭდვის ნაწილების ნაზავი, ხელით დამზადებული ნაწილებითა და ლოუს გრძელი ხის ჯოხით.

სურათზე გამოსახული 3D დაბეჭდილი ნაწილი კარის ზედა კიდეზეა ჩამოკიდებული, რადგან ჩვენი კარი არის ადვილი ბრტყელი ზედაპირი ჩვენთვის რაღაცის დასაკიდებლად. STL ფაილის გადმოსაწერი ბმული:

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

ნახ. 3 -ში მწვანე ნაწილი ხის ღეროს აკავშირებს დანაზე და დანა ზის რკინიგზის თავზე, რომელიც დამონტაჟებულია ადრინდელ 3D ბეჭდვით კარის საკიდზე. STL ფაილის გადმოსაწერი ბმული:

რკინიგზის ორი ნაჭერი მზადდება ძველი ხერხის ნაწილის გატეხვით, იხ. სურათი 4. ნახ. 2 -ის ნაწილმა მოამზადა მათთვის სწორი სლოტის ზომა. იდეალურ შემთხვევაში, ჩვენ შეგვიძლია გავაკეთოთ "V" ფორმის ხვრელი იმ ორ ხერხის ფირფიტაში ფაილის გამოყენებით. გონივრულად მკვეთრი ნაჭერი ლითონი, როგორიცაა ერთი პირას საპარსის დანა, ან ნებისმიერი ხელით დამზადებული ლითონის ნაჭერი, შეიძლება იჯდეს "V" ფორმის ნაპრალებში. მიზეზი, რის გამოც ჩვენ გვჭირდება პატარა კონტაქტური არე, არის შემცირდეს მოძრაობისას დაკარგული კინეტიკური ენერგია.

ნახ.5 -ში ბოლო 3D დაბეჭდილი ნაწილი არის პატარა უჯრა ელექტრონული საზომი აპარატის შესანახად.

გადმოსაწერი ბმული:

Bluetooth გაზომვის აპარატი ქმნის კუთხის შეფასებას, გირო გაზომვას და ამაჩქარებლის გაზომვას. ყველა ეს მონაცემი ჩვენთვის ხელმისაწვდომია bluetooth უკაბელო კავშირის საშუალებით.

ჩვენ ვაპირებთ მრავალი ექსპერიმენტის ჩატარებას ამ აპარატის განლაგებით ქანქარას მკლავის სხვადასხვა პოზიციაზე და დავინახავთ განსხვავებებს.

ნაბიჯი 3: ექსპერიმენტის მონაცემთა შეგროვება

ექსპერიმენტის მონაცემთა შეგროვება
ექსპერიმენტის მონაცემთა შეგროვება
ექსპერიმენტის მონაცემთა შეგროვება
ექსპერიმენტის მონაცემთა შეგროვება
ექსპერიმენტის მონაცემთა შეგროვება
ექსპერიმენტის მონაცემთა შეგროვება

არსებობს ექსპერიმენტული მონაცემების შეგროვების ორი შესაძლო მეთოდი, სანამ არ გავაანალიზებთ შეძენილ მონაცემთა ნაკრებს:

1) გამოიყენეთ Android ტელეფონის აპლიკაცია, რომელიც მითითებულია მოთხოვნების განყოფილებაში, რათა ჩაწეროთ აპარატის მიერ წარმოებული ყველა გაზომვა თქვენი ტელეფონის SD ბარათში შენახულ მონაცემთა ფაილში. ჩვენ შეგვიძლია დავაკოპიროთ ფაილი და გამოვაქვეყნოთ ინფორმაცია.

2) გამოიყენეთ bluetooth ჩართული კომპიუტერი, კომპიუტერი, ლეპტოპი ან RaspberryPi მინი კომპიუტერი, რომ დაამყაროთ bluetooth კავშირი აპარატთან და წაიკითხოთ მონაცემები რეალურ დროში ან ხაზგარეშე ანალიზისთვის.

თითოეული მეთოდისთვის არსებობს როგორც დადებითი, ასევე უარყოფითი მხარეები, ჩვენ ვცდილობთ ორივე და ვთქვათ განსხვავება ამ სასწავლო ინსტრუქციაში.

ანდროიდის აპლიკაციის (1) მეთოდისთვის, როდესაც ჩვენ ვართ ანდროიდის აპლიკაციის კონტროლის ინტერფეისში, bluetooth გაზომვის აპარატიდან ანდროიდის ტელეფონში გაგზავნილი ტელემეტრიული მონაცემები ჩაიწერება დათალოგურ ფაილში, სახელად m2flightDatayyyymmdd_hhmmss.txt. ის შეიძლება მოიძებნოს თქვენი Android ტელეფონის Download/m2LogFiles საქაღალდეში. საქაღალდე "გადმოტვირთვა" არის თქვენი ტელეფონის Android OS- ში არსებული საქაღალდე და "m2LogFiles" არის საქაღალდე, რომელიც შეიქმნა აპლიკაციაში. ფაილის შინაარსი yyyymmdd_hhmmss არის გზა დაშიფროთ ექსპერიმენტი დაწყებული დრო (წელი, თვე, დღე, საათი, წუთი და წამი) ფაილის სახელში.

ჟურნალის ფაილის თითოეული სტრიქონი არის ერთი ჩანაწერი. ის იწყება ღონისძიების დროის ნიშნულით, პრეამბულის სტრიქონით "eam:", რასაც მოყვება 4 სამმაგი მონაცემი, რომლებიც არის:

აქსელერომეტრი XYZ ღერძი კითხულობს ნედლეულ სენსორულ აპარატურაში დაარეგისტრირეთ წაკითხვის მნიშვნელობები

გიროსკოპი XYZ ღერძი კითხულობს ნედლ სენსორულ აპარატურაში დაარეგისტრირეთ კითხვის მნიშვნელობები

მაგნიტომეტრი XYZ ღერძი კითხულობს ნედლეულ სენსორულ აპარატურაში დაარეგისტრირეთ კითხვის მნიშვნელობები

ბორტზე სავარაუდო Roll/Pitch/Raw ხარისხით

კომპიუტერული პითონის პროგრამის გამოყენებით შექმნილი მონაცემთა ფაილი გამოიყენებს მონაცემთა ფაილების იდენტურ ფორმატს, ასე რომ პროგრამას, რომელსაც ჩვენ ვიყენებთ მონაცემთა ანალიზის ეტაპზე, არ შეაწუხებს მონაცემთა წყარო, რომელსაც ქმნის ჩვენი პითონის პროგრამა ან Android აპლიკაცია.

დავიწყოთ კოდირება მეთოდის გამოყენებით (2).

Bluetooth გაზომვის აპარატთან ურთიერთობისთვის გათვალისწინებულია SDK- ს ორი არომატი:

1) პითონის SDK, რომლის დაყენება შესაძლებელია "pip3 install m2controller" - ით, პითონი 3 არის გამოყენებული ენა. მომხმარებლის განაცხადის კოდის მაგალითები ინახება https://github.com/xiapeiqing/m2robots/tree/maste… ამ ექსპერიმენტისთვის ჩვენ გამოვიყენებთ პითონის სკრიპტის pendulum1.py

2) Java SDK, რომელიც არ გამოიყენება ამ ინსტრუქციაში, რადგან ჩვენ გვსურს შეძენილი ქანქარის მონაცემების ვიზუალიზაცია და ანალიზი, რასაც შესაძლოა ცოტა მეტი ძალისხმევა დასჭირდეს ჩვენთვის ჯავაში პროგრამირებისთვის.

Python3 მონაცემთა შეგროვების პროგრამის წყაროს კოდი შეიცავს ბევრ კომენტარს კოდის ფუნქციონალური დეტალებისთვის. აქ მოცემულია წყაროს კოდის სურათი.

#!/usr/bin/env პითონი#-*-კოდირება: UTF-8-*-m2controller იმპორტი m2controller m2controller იმპორტი m2Construct იმპორტის სიგნალის იმპორტის დრო იმპორტი თარიღი დრო იმპორტი usrCfg იმპორტი ქანქარა 2

requestExit = მცდარი

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

#ჩვენ გვსურს გამოვიყენოთ ერთი და იგივე ფაილის ფაილის დასახელების კონვენცია ისე, რომ მონაცემთა ანალიზის მოდული, pendulum2.py, იყოს აგნოსტიკური, თუ როგორ მივიღოთ ჟურნალის მონაცემთა ფაილი ################## ################################################ logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = ღია (logfilename," w ")

def signal_handler (sig, frame):

გლობალური მოთხოვნა გასვლა ბეჭდვა ('მომხმარებელი Ctrl-C პროგრამის შესრულებიდან გასასვლელად') requestExit = ჭეშმარიტი სიგნალი. სიგნალი (სიგნალი. სიგნალი, სიგნალის_მმართველი)

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

#ყოველი გაზომვის მონაცემები ხელმისაწვდომი გახდება 20 ჰც სიხშირით, ეს "გამოძახების" ფუნქცია გამოიძახება ################################ ################################ def callbackfunc (telemetry): 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_fMagHwU 'm_fMagHwUnit'] [1], ტელემეტრია ['m_fMagHwUnit'] [2], ტელემეტრია ['m_fRPYdeg'] [0], ტელემეტრია ['m_fRPYdeg'] [1], ტელემეტრია ['m_fRPYdeg'] [2]) ## #################################################### #############ჩვენ ვბეჭდავთ მონაცემთა სტრიქონს ეკრანზე და ვინახავთ მათ ჟურნალის ფაილში ######################## ########################################## print (dataStr) dataLogfile.writelines (dataStr)

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

#ინიციალიზეთ კონტროლერი, გახსოვდეთ რომ დააყენოთ ველი BleMACaddress თქვენი მოწყობილობის MAC მისამართი #################################### ################################TODO: მოდით ინიციალიზაცია BleMACaddress თუ არ არის მითითებული მომხმარებლის მიერ. კონტროლერი = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ########################## #######################################დაელოდეთ გაზომვის მონაცემების შექმნას და გაგზავნას ქანქარის გაზომვიდან აპარატი ################################################## ############### კონტროლერი.m_CommsTunnel.waitForNotifications (1.0) მოთხოვნის შემთხვევაში გასვლა: ######################## #########################################სახლის შენახვა მუშაობს აქ, როდესაც ჩვენ დავამთავრებთ მონაცემთა აღრიცხვას #################################################### ############### controller.stop () dataLogfile.close () შესვენება

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

#მონაცემთა შეგროვება დასრულებულია, ახლა მოდით გავაანალიზოთ ჟურნალის მონაცემები ######################################## ######################### pendulum2.parseDataLogFile (logfilename)

გრძელვადიანი განახლებისთვის, გთხოვთ შეამოწმოთ

ახლა მოდით განვმარტოთ მისი მუშაობის მეთოდი. ეს პითონის პროგრამა დაწერილია პიპ ინსტალაციის პაკეტის თავზე, სახელწოდებით m2controller. ქვედა დონის პაკეტი გთავაზობთ გამოძახების მექანიზმს, ასე რომ ყოველი მიღებული გაზომვის განახლება გამოიწვევს ჩვენს მიერ დაწერილი გამოძახების ფუნქციას და შეინახავს მონაცემებს ადგილობრივ ლოგის ფაილში. ჟურნალის ფაილის მონაცემთა შინაარსის ფორმატი იდენტურია ანდროიდის თანმხლები აპლიკაციის მიერ, ასე რომ მონაცემთა ჟურნალის ფაილი შექმნილია როგორც პითონის პროგრამის, ასევე ანდროიდის თანმხლები პროგრამის მიერ.

მომხმარებლის ctrl-C სიგნალი, გადაღებული ოპერაციული სისტემით, გადაეცემა პროგრამას და წყვეტს უსასრულო მარყუჟს ელოდება გაზომვის მონაცემების ახალ მოსვლას.

აქამდე, ლოგის ფაილი წარმატებით შეიქმნა და ეს პროგრამა გამოიძახებს ანალიზის პროგრამას ჩვენი ექსპერიმენტის შედეგების შესასწავლად.

აქ არის ორი ექსპერიმენტი და შედარება გვიჩვენებს ძალიან შესამჩნევ განსხვავებას 7 გრამიანი მოწყობილობის სხვადასხვა ადგილას მიმაგრებით.

ნახ.2 -ში ჩვენ ვიყენებთ სასწორს ამ bluetooth გაზომვის აპარატის რეალური წონის დასადგენად.

სურათი 3 ასახავს ქანქარის მოწყობას, სადაც 7 გრამიანი მოწყობილობა მიმაგრებულია ქანქარის ქვედა ბოლოში. კონფიგურაციის კონფიგურაცია ფიგურაში 4 აქვს 7 გრამი მასა, რომელიც მდებარეობს მჭიდროდ მჭიდროდ უფრო ახლოს.

სურათი 5 არის ქანქარის სტრუქტურის ახლო ხედი.

ნაბიჯი 4: მონაცემთა ანალიზი

Მონაცემთა ანალიზი
Მონაცემთა ანალიზი
Მონაცემთა ანალიზი
Მონაცემთა ანალიზი
Მონაცემთა ანალიზი
Მონაცემთა ანალიზი

Bluetooth– ის გაზომვის აპარატი იწონის g 7 გრამს, რომელიც იწონის ბევრად ნაკლები ვიდრე 1.6 მეტრი სიგრძის ხის ჯოხი. გამოიყენეთ ვარაუდი "ხისტი ერთგვაროვანი ღერო" და ჩვენ გვაქვს ამ ქანქარის პერიოდის განტოლება, T1 = 2*pi*(2l/3g)^0.5

გრავიტაციის მუდმივის მისაღებად შეგვიძლია გამოვიყენოთ 9.8 მ/წმ^2. მაგრამ უფრო ზუსტი სიმძიმის მუდმივი ნებისმიერ გეოლოკაციაზე შესაძლებელია ამ ვებ სერვისიდან:

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

სან ფრანცისკოსთვის ეს არის 9.81278 მ/წ^2

ქანქარის სიგრძე იზომება 64.5"

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) იძლევა მოსალოდნელ ქანქარის პერიოდს 2.0962 (წმ).

ვნახოთ ეთანხმება თუ არა ის ჩვენს ექსპერიმენტებს.

პირველ ექსპერიმენტში, ქანქარის დაყენებას აქვს 7 გრამი მოწყობილობა, რომელიც მიმაგრებულია ქანქარის ქვედა ბოლოში. ჩემი ჟურნალის ფაილის გადმოწერა შესაძლებელია:

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

გადაარქვით მას სახელი "PendulumTestData.txt" და ჩადეთ პითონის ანალიზის პროგრამის იმავე საქაღალდეში. აქ მოცემულია წყაროს კოდის სურათი.

#!/usr/bin/env პითონი#-*-კოდირება: UTF-8-*-csv იმპორტი matplotlib.pyplot როგორც plt plt.style.use ('seaborn-whitegrid') იმპორტირებული numpy როგორც np საწყისი datetime იმპორტი datetime, timedelta იმპორტი seaborn როგორც sns sklearn.cluster იმპორტი KM ნიშნავს კოლექციებიდან იმპორტი მთვლელი ###################################### ###############################ეს ფუნქცია აწარმოებს მონაცემთა ფაილის ანალიზს ############ #################################################### ## def parseDataLogFile (datafilename): ############################################ #######################ამოიღეთ მონაცემები მძიმით გამოყოფილი მონაცემების ჟურნალის ფაილში (CSV) და შეინახეთ შინაარსი თითოეულ სვეტში ერთ float ტიპის ცვლადში ## #################################################### ############ ღია (datafilename) როგორც csvfile: readCSV = csv.reader (csvfile, delimiter = ',') timestampSS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = რიგისათვის წაკითხული CSV: ცადეთ: x = datetime.strptime (მწკრივი [0]. გაყოფა (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (hours = x.hour, minutes = x.minute, seconds = x.second, microseconds = x.microsecond). Total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (row [2])) fAccelHwUnit_z.append (float (row [3])) fGyroHwUnit_x.append (float (row [4]))) fGyroHwUnit_y.append (float (row [4])) (მწკრივი [5])) fGyroHwUnit_z.append (float (row [6])) fMagHwUnit_x.append (float (row [7])) fMagHwUnit_y.append (float (row [8])) fMagHwUnit_z.append (float (row [9])) fRPYdeg_r.append (float (row [10])) fRPYdeg_p.append (float (row [11])) fRPYdeg_y.append (float (row [12]))) გარდა: დროის გავლის დრო დროის ანაბეჭდი) 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) ################# ##################################################გამოყენება ხმის კომპონენტი დამოკიდებულების სათაურის საცნობარო სისტემის გამომუშავებაში ქანქარის პერიოდის ანალიზისთვის ###################################### ############################# ანალიზი_დროინდელი თანმიმდევრობა (დროის ნიშნული #################################################### ####გამოიყენოს ამაჩქარებელი გაზომვის გამომუშავება ქანქარის პერიოდის ანალიზისთვის ###################################### ############################# analize_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### #################################################### ####გამოიყენეთ გირო ნედლი გაზომვის გამომუშავება ქანქარის პერიოდის ანალიზისთვის ##################################### ############################## analize_timeSequence (დროის ნიშნული, fGyroHwUnit_y, FsHz, ' გირო ') ბეჭდვა (' გაკეთებულია, გილოცავთ:-) ') plt.show () ################################# #################################bluetooth კომუნიკაციის პროცესში, იშვიათია შანსი, რომ მონაცემთა კომის პაკეტმა შეძლოს დაიკარგება#ჩვენ ვიყენებთ K-mean- ს, რათა გამოვყოთ 20 ჰც-იანი გაზომვის მონაცემები გარედან, რაც გამოწვეულია პაკეტის#ჩაძირვით "სიგნალში და სისტემაში დამატებითი ინფორმაციისთვის" ################# ################################################## def getSamplingIntervalS: n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = მრიცხველი (km.labels_) შემთხვევა]) FsHz = 1/centroids [occasionCnt.index (max (occrenceCnt))] დაბრუნება FsHz

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

#გამოიყენეთ სპექტრომეტრი, ანუ მოკლე დროში FFT სიხშირის კომპონენტის მისაღებად, მწვერვალი არის ჩვენი საუკეთესო შეფასება ქანქარის რხევის შესახებ ########################### #################################################### تحلیل ლეღვი, (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 ("Spectrogram") ax2.set_xlabel ("ნიმუშები") ax2.set_ylabel ("სიხშირე (Hz)");

# Specgram` მეთოდი აბრუნებს 4 ობიექტს. Ისინი არიან:

# - პქსი.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('pendulum oscillation Freq (Hz) =%f, Period (Sec) =%f, data data source:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) დააბრუნეთ 1/oscFreqHz

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

#ჩვენ უნდა გამოვიყენოთ ეს პროგრამა დამოუკიდებლად, ანუ, როდესაც არ გვეძახება pendulum1.py,#ჩვენ განვსაზღვრავთ ნაგულისხმევი ჟურნალის ფაილის სახელს გასაანალიზებლად ##################### ############################################ თუ _name_ == "_ მთავარი_ ": defaultFilename = './PendulumTestData.txt' იმპორტი os.path თუ os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) სხვა: ბეჭდვა (" ნაგულისხმევი ჟურნალი %s არ არსებობს " %defaultFilename)

გრძელვადიანი განახლებისთვის, გთხოვთ შეამოწმოთ

წყაროს კოდი შეიცავს დეტალურ კომენტარებს, მოდით მათემატიკური შეფასების მაღალი დონის შეჯამება აქ.

1) ჩვენ პირველად ვკითხულობთ CSV ფაილის შინაარსს კომპიუტერში, პითონის პაკეტის გამოყენებით, სახელწოდებით "csv". ჩვენ გვაქვს პერიოდული გაზომვები.

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) ვინაიდან გაზომვის სიჩქარე იმდენად კრიტიკულია და პირდაპირ შემოაქვს ქანქარის პერიოდის შეფასების შეცდომას, ჩვენ გვინდა მათი შეფასება. ჩვენი ნომინალური გაზომვის ინტერვალია 50 ms, ანუ 20 Hz. საშუალო ყველა გაზომვაზე ნორმალურია, მაგრამ ჩვენ ზოგჯერ ვკარგავთ მონაცემთა გადაცემის პაკეტს, განახლების ინტერვალი ხდება 100ms ან 150ms,…

თუ ჩვენ დავხატავთ ამ მონაცემების წარმოქმნას, იხ. სურათი 1, როგორც ადამიანი, ჩვენ შეგვიძლია ადვილად გვქონდეს თვალის მბრუნავი მნიშვნელობა 0.05 წმ. თუმცა, ჩვენ შეგვიძლია ამაზე უკეთესი?

ჩვენ უნდა გამოვიყენოთ კლასიფიკაციის მეთოდი, რომ გამოვთვალოთ მხოლოდ კარგი გამოთვლების საშუალო მაჩვენებლები. პითონს აქვს ინსტრუმენტთა კოლოფი სახელწოდებით KMeans, რომელიც დაგვეხმარება კლასტერში, ან ვთქვათ კლასიფიკაციაში. ეს კონცეფციები გამოიყენება ბევრ დიდ მონაცემსა და AI სფეროში.

3) სურათი 2 შეიცავს ორ სურათს. ზედა ნაკვეთი არის დროული დომენის თანმიმდევრობა ჩვენი მოძრავი კუთხის გაზომვის დეგ. მეორეში x ღერძის დროის ნიშნულზე მითითებით, ჩვენ შეგვიძლია წავიკითხოთ დაახლოებით 22.5 ციკლი 50 წამში, რაც ითარგმნება როგორც 2.22 წმ ქანქარის პერიოდი. არის თუ არა გზა ამ პროცესის ავტომატიზირებისა და უფრო ზუსტი შეფასების? დიახ, ჩვენ შეგვიძლია გამოვიყენოთ მათემატიკური ინსტრუმენტი, სახელად სპექტროგრამა, რომელიც იყენებს გაზომვის მონაცემების მცირე ნაწილს და გვეტყვის მის სიხშირეს, იხილეთ ქვემოთ მოყვანილი ფიგურა. ყველაზე ბნელი ხაზისთვის y ღერძი არის ქანქარის რხევის სიხშირე. ჰორიზონტალური ხაზის არსებობა ადასტურებს, რომ ქანქარის რხევა საერთოდ არ შეცვლილა ექსპერიმენტის განმავლობაში. რხევის სიხშირის შებრუნებული მნიშვნელობა არის ქანქარის რხევის პერიოდი.

პროგრამის მიერ გაკეთებული საბოლოო ანგარიში არის ტექსტის შეჯამება:

ქანქარის რხევა Freq (Hz) = 0.449224, პერიოდი (წმ) = 2.226059, შეფასების მონაცემთა წყარო: მოედანი

ჩვენ შეგვიძლია ვიპოვოთ ჩვენი ადრეული თვალბუდის ხელის გამოთვლის შედეგი, 2.22 წმ, საკმაოდ შეესაბამება პროგრამის გამოთვლილ ღირებულებას.

2.0962 (წმ) თეორიულად გამოთვლილ ღირებულებასთან შედარებით, ჩვენ გვაქვს ~ 5% დარჩენილი შეცდომა. როგორ მოვიშოროთ ისინი? გახსოვთ ვარაუდი არის "ხისტი ერთგვაროვანი ღერო"? 7 გრამი ზედმეტი წონაც კი უმნიშვნელო ჩანს, ეს არის დარჩენილი შეცდომის ყველაზე დიდი მიზეზი.

ჩვენ ახლა გადავიტანთ მოწყობილობას, მჭიდროდ ახლოს. იხილეთ წინა ნაბიჯი ახლო ფოტოდან. ჩემ მიერ შექმნილი ჟურნალის ფაილი შეგიძლიათ გადმოწეროთ აქ:

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

გაუშვით იგივე ანალიზის საფეხურები და მივიღებთ პერიოდს 2.089867 (წმ), იხ. სურათი 3, რომელიც თითქმის იდენტურია თეორიული პროგნოზის. დიდი!

მას შემდეგ, რაც ჩვენ გვაქვს არა მხოლოდ მოძრავი კუთხის გაზომვა, არამედ გიროსკოპული და ამაჩქარებელი გაზომვა ერთი და იგივე სიჩქარით. ჩაატარეთ იგივე ანალიზი დანარჩენი ორი გაზომვისთვის, ჩვენ ვიღებთ შედეგებს ნახაზში 4 და 5. შეფასებები სამივე წყაროდან თანხმდება, რაც უფრო მეტად დაგვაჯერებს ჩვენი ექსპერიმენტის წარმატებაში.

აქ არის შედეგი, როგორც პითონის პროგრამის საბოლოო გამომავალი:

ქანქარის რხევა Freq (Hz) = 0.478499, პერიოდი (წმ) = 2.089867, შეფასების მონაცემთა წყარო: მოედანზე

ქანქარის რხევა Freq (Hz) = 0.478499, პერიოდი (წმ) = 2.089867, შეფასების მონაცემთა წყარო: accel

ქანქარის რხევა Freq (Hz) = 0.478499, პერიოდი (წმ) = 2.089867, შეფასების მონაცემთა წყარო: გირო

ბოლო ნაბიჯი ამ ეტაპზე, როგორ შეიძლება შეფასების შედეგები იყოს ზუსტად იდენტური სხვადასხვა შეყვანის მონაცემთა წყაროს გამოყენებით? ეს არის კონტრ-ინტუიცია. ამ კითხვას მკითხველს დავტოვებ. აქ არის მინიშნება: გახსოვდეთ, რომ ჩვენ ვიყენებთ მოკლევადიან FFT– ს რხევების სიხშირის შესაფასებლად? ციფრულ დომენში სიხშირის შეფასება მოცემულია დისკრეტული სიხშირის ურნებში, მცურავი რიცხვის შეფასების ნაცვლად.

ნაბიჯი 5: სამომავლო სამუშაოების რეკომენდაციები

სამომავლო სამუშაოების რეკომენდაციების რამდენიმე კატეგორიაა.

წინა ეტაპზე ჩვენ ვახერხებთ ჩვენი ექსპერიმენტის შეცდომის შემცირებას ~ 5% -დან 1% -ზე ნაკლებზე, შეგვიძლია ამაზე უკეთესი? რხევის სიდიდის შემცირება ექსპონენციალურად მცირდება, ერთ -ერთი ხელშემწყობი ფაქტორი შეიძლება იყოს ჰაერის ჩამორთმევა, რომელიც გამოწვეულია ქანქარის მოქნევისას. ქანქარის განივი მონაკვეთი შეიძლება საჭირო გახდეს მოდიფიცირებული ფორმისა, რათა შემცირდეს აეროდინამიკური ჩათრევა.

შეგვიძლია გამოვიყენოთ ადაპტაციური ფილტრის ტექნიკის გამოყენებით შესწავლილი დროის მონაცვლეობა, რათა გამოვიტანოთ მუდმივი პიკური სიდიდის სიგნალი. იმავდროულად, დააკავშიროთ გარე ძალების სიდიდის შესუსტება.

ჩვენ ძნელად ვიპოვით რაიმე უფრო მარტივს, ვიდრე "უბრალო ჰარმონიული მოძრაობა". შეგვიძლია გამოვიყენოთ ქანქარის ანალიზი, რომ გავაანალიზოთ რაიმე უფრო რთული, სპორტული აქტივობა, წყლის რაკეტების გაშვების თანმიმდევრობა და სხვა?

ბედნიერი გატეხვა

გირჩევთ: