فهرست مطالب:

مطالعه تجربی حرکت ساده هماهنگ: 5 مرحله
مطالعه تجربی حرکت ساده هماهنگ: 5 مرحله

تصویری: مطالعه تجربی حرکت ساده هماهنگ: 5 مرحله

تصویری: مطالعه تجربی حرکت ساده هماهنگ: 5 مرحله
تصویری: افزایش سرعت مطالعه : چگونه با یک تکنیک ساده ده برابر سریعتر حفظ کنیم؟ 2024, نوامبر
Anonim

توسط arrowlike بیشتر توسط نویسنده دنبال کنید:

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 استفاده می کنم که اطلاعات ژیروسکوپ ، شتاب سنج و زاویه را از طریق اتصال بلوتوث به ما می رساند. این اندازه گیری ها در یک فایل داده برنامه تلفن همراه ذخیره می شود. پس از آن ، ما داده های آزمایش حرکت ساده هارمونیک خود را تجزیه و تحلیل می کنیم. تجزیه و تحلیل عددی بر موضوعات زیر متمرکز است: 1) پیش بینی دوره نوسان پاندول 2) جمع آوری برنامه آزمایش داده های حرکت هارمونیک ساده آونگ 3) استفاده از kmean برای جمع آوری داده ها و حذف موارد دور در فرآیند تجزیه و تحلیل 4) استفاده از FFT کوتاه مدت برای برآورد فرکانس نوسان پاندول

تدارکات

دستگاه اندازه گیری بلوتوث

برنامه تلفن Android: به Playstore Google بروید ، M2ROBOTS را جستجو کنید و برنامه کنترل را نصب کنید. درصورتی که دسترسی به Playstore گوگل مشکل باشد ، برای روش بارگیری برنامه جایگزین به صفحه شخصی من مراجعه کنید

میله چوبی

چند قسمت چاپ سه بعدی

تیغه های اره یا مواد فلزی مشابه

مرحله 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: قطعات را برای ساخت سخت افزار آماده کنید

قطعات را برای ساخت سخت افزار آماده کنید
قطعات را برای ساخت سخت افزار آماده کنید
قطعات را برای ساخت سخت افزار آماده کنید
قطعات را برای ساخت سخت افزار آماده کنید
قطعات را برای ساخت سخت افزار آماده کنید
قطعات را برای ساخت سخت افزار آماده کنید

برای ساختن ساختار پاندول ، برخی از قسمت ها را به صورت سه بعدی چاپ می کنیم و چیزی را که در حال حاضر داریم بازیافت می کنیم. ساختار کلی پاندول در شکل 1 نشان داده شده است. این ترکیبی از قطعات چاپ سه بعدی به همراه برخی قطعات دست ساز و یک قطعه چوبی بلند از لوو است.

قسمت چاپ سه بعدی در شکل 2 در لبه بالای یک در آویزان است ، زیرا درب ما یک سطح مسطح آسان برای آویزان کردن چیزی است. لینک دانلود فایل STL:

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

قسمت سبز شکل 3 میله چوب را به یک تیغه متصل می کند و تیغه روی دو قطعه ریل نصب شده بر روی آویز درب چاپ سه بعدی قبلی قرار دارد. پیوند بارگیری فایل STL:

دو قطعه ریل با شکستن یک تیغ اره قدیمی به نصف ساخته می شود ، شکل 4 را ببینید. قسمت شکل 2 اندازه شکاف مناسب را برای آنها آماده کرده است. در حالت ایده آل ما می توانیم با استفاده از یک فایل در این دو تیغ اره یک شکاف "V" ایجاد کنیم. یک فلز با لبه تیز منطقی ، مانند تیغ تیغه تک لبه یا هر قطعه فلزی دست ساز ، می تواند در داخل شکاف های "V" قرار گیرد. دلیل نیاز ما به یک منطقه تماس کوچکتر ، کاهش انرژی جنبشی از دست رفته در هنگام چرخش است.

آخرین قسمت پرینت سه بعدی در شکل 5 یک سینی کوچک برای نگهداری دستگاه اندازه گیری الکترونیکی است.

لینک دانلود:

دستگاه اندازه گیری بلوتوث برآورد زاویه ، اندازه گیری ژیروسکوپ و اندازه گیری شتاب سنج را تولید می کند. همه این داده ها از طریق لینک بی سیم بلوتوث در دسترس ما است.

ما قصد داریم آزمایش های متعددی را با استقرار این دستگاه در موقعیت های مختلف بازوی پاندول انجام دهیم و تفاوت ها را مشاهده کنیم.

مرحله 3: آزمایش جمع آوری داده ها

مجموعه داده های آزمایش
مجموعه داده های آزمایش
مجموعه داده های آزمایش
مجموعه داده های آزمایش
مجموعه داده های آزمایش
مجموعه داده های آزمایش

قبل از تجزیه و تحلیل مجموعه داده به دست آمده ، دو روش قابل انجام برای جمع آوری داده های تجربی وجود دارد:

1) از برنامه تلفن Android که در قسمت الزامات مشخص شده است استفاده کنید تا تمام اندازه گیری های تولید شده توسط دستگاه را در یک فایل داده ذخیره شده در کارت SD تلفن خود وارد کنید. ما می توانیم فایل را کپی کرده و اطلاعات را ارسال کنیم.

2) برای برقراری اتصال بلوتوث به دستگاه و خواندن داده ها برای تجزیه و تحلیل بلادرنگ یا آفلاین ، از رایانه ای با بلوتوث ، رایانه شخصی ، لپ تاپ یا مینی کامپیوتر RaspberryPi استفاده کنید.

برای هر روشی هر دو جنبه مثبت و منفی وجود دارد ، ما هر دو را امتحان می کنیم و تفاوت این روش آموزشی را بیان می کنیم.

برای روش (1) استفاده از برنامه اندروید ، هنگامی که در رابط کنترل برنامه Android قرار گرفتیم ، داده های تله متری ارسال شده از دستگاه اندازه گیری بلوتوث به تلفن اندروید در یک فایل datalog به نام m2flightDatayyyymmdd_hhmmss.txt ثبت می شود. می توانید آن را در پوشه Download/m2LogFiles تلفن Android خود پیدا کنید. پوشه "بارگیری" یک پوشه از قبل موجود در سیستم عامل اندروید تلفن شما و "m2LogFiles" پوشه ای است که برنامه ایجاد کرده است. محتوای نام فایل yyyymmdd_hhmmss راهی برای کدگذاری زمان شروع آزمایش (سال ، ماه ، روز ، ساعت ، دقیقه و ثانیه) در نام فایل است.

هر خط در فایل log یک رکورد است. شروع می شود با زمان بندی رویداد ، رشته مقدمه "eam:" ، و سپس 4 داده سه گانه ، که عبارتند از:

خواندن محور شتاب سنج XYZ در سخت افزار سنسور خام مقادیر بازخوانی را ثبت می کند

خواندن محور ژیروسکوپ XYZ در سخت افزار سنسور خام مقادیر بازخوانی را ثبت می کند

خواندن محور مغناطیس سنج XYZ در سخت افزار سنسور خام مقادیر بازخوانی را ثبت می کند

روی سطح برآورد Roll/Pitch/Raw در درجه

فایل داده ایجاد شده با استفاده از برنامه پایتون رایانه ای از فرمت فایل داده های یکسان استفاده می کند ، به طوری که برنامه ای که در مرحله تجزیه و تحلیل داده ها استفاده می کنیم ، با تولید منبع داده توسط برنامه پایتون یا برنامه اندروید ما اذیت نمی شود.

بیایید برنامه نویسی را با استفاده از روش (2) شروع کنیم.

برای تعامل با دستگاه اندازه گیری بلوتوث ، دو طعم SDK ارائه شده است:

1) پایتون SDK ، که می تواند توسط "pip3 install m2controller" نصب شود ، زبان مورد استفاده python3 است. نمونه های کد برنامه کاربر در https://github.com/xiapeiqing/m2robots/tree/maste… ذخیره می شود. برای این آزمایش ، ما از پاندول 1.py اسکریپت پایتون استفاده می کنیم.

2) Java SDK ، که در این دستورالعمل استفاده نمی شود ، زیرا ما می خواهیم تجسم و تجزیه و تحلیل بعدی داده های پاندول به دست آمده را انجام دهیم ، که ممکن است برای برنامه نویسی در جاوا کمی بیشتر تلاش کند.

کد منبع برنامه جمع آوری داده python3 شامل بسیاری از نظرات برای جزئیات عملکرد کد است. یک تصویر فوری از کد منبع در اینجا ارائه شده است.

#!/usr/bin/env پایتون#-*-کدنویسی: UTF-8-*-از m2controller import m2controller از m2controller import m2Constant سیگنال واردات زمان واردات زمان زمان واردات usrCfg پاندول واردات 2

requestExit = غلط

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

#ما می خواهیم از همان قرارداد نامگذاری فایل های log استفاده کنیم تا ماژول تجزیه و تحلیل داده ها ، pendulum2.py ، بتواند در مورد نحوه دریافت فایل log log ##################################### استفاده کند. ############################################## logfilename = " m2flightData٪ s.txt "٪ (datetime.datetime.fromtimestamp (time.time ()). strftime ('٪ Y٪ m٪ d_٪ H٪ M٪ S')) dataLogfile = باز (نام logfile ،" w ")

def signal_handler (sig، frame):

درخواست جهانی خروج از چاپ ("کاربر Ctrl-C برای خروج از اجرای برنامه") requestExit = سیگنال واقعی. سیگنال (سیگنال. SIGINT ، signal_handler)

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

#وقتی هر اندازه گیری با نرخ 20 هرتز در دسترس قرار می گیرد ، این تابع "callback" فراخوانی می شود ############################### ################################ 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]) ## ################################################## #############ما رشته داده را روی صفحه چاپ می کنیم و آنها را در فایل log ذخیره می کنیم ####################### ########################################## چاپ (dataStr) dataLogfile.writelines (dataStr)

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

#کنترل کننده را راه اندازی کنید ، به یاد داشته باشید که قسمت BleMACaddress را آدرس MAC دستگاه شما تنظیم کنید ################################### ################################TODO: اگر توسط کاربر تنظیم نشده است ، اجازه دهید BleMACaddress را مقداردهی اولیه کنیم. controller = m2controller. BleCtrller (m2Const.etDebian، callbackfunc، usrCfg. BleMACaddress) controller.connect () while True: ######################### #منتظر بمانید تا داده های اندازه گیری از اندازه گیری پاندول ایجاد و ارسال شوند ، منتظر بمانید دستگاه ################################################# ############### controller.m_CommsTunnel.waitForNotifications (1.0) در صورت درخواست خروج: ####################### ##########################################نگهداری خانه در اینجا هنگام اتمام ثبت اطلاعات کار می کند ################################################## ############## controller.stop () dataLogfile.close () break

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

#جمع آوری داده ها تکمیل شد ، حالا بیایید داده های گزارش را تجزیه و تحلیل کنیم ###################################### ######################### pendulum2.parseDataLogFile (نام فایل logfile)

برای به روز رسانی طولانی مدت ، لطفاً https://github.com/xiapeiqing/m2robots/blob/maste… را بررسی کنید

حال بیایید روش عملکرد آن را توضیح دهیم. این برنامه پایتون بر روی یک بسته قابل نصب pip ، به نام m2controller نوشته شده است. بسته سطح پایین مکانیزم پاسخگویی را ارائه می دهد ، به طوری که هر به روزرسانی اندازه گیری دریافت شده ، عملکرد تماس با ما را ایجاد کرده و داده ها را در یک فایل ثبت محلی ذخیره می کند. قالب محتوای داده های فایل ورود به سیستم مشابه با برنامه همراه اندروید تولید می شود ، بنابراین فایل ورود اطلاعات ایجاد شده توسط برنامه python یا برنامه همراه andriod قابل تبادل است.

سیگنال کاربر ctrl-C ، که توسط سیستم عامل ضبط شده است ، به برنامه منتقل می شود و حلقه بی نهایت را در انتظار ورود جدید داده های اندازه گیری متوقف می کند.

تا کنون ، فایل log با موفقیت ایجاد شده است ، و این برنامه با برنامه تجزیه و تحلیل تماس می گیرد تا نتایج آزمایش ما را مطالعه کند.

در اینجا دو آزمایش وجود دارد و مقایسه تفاوت قابل توجهی را با اتصال دستگاه 7 گرمی در مکان های مختلف نشان می دهد.

در شکل 2 ، ما از مقیاس برای تعیین وزن واقعی این دستگاه اندازه گیری بلوتوث استفاده می کنیم.

شکل 3 تنظیمات پاندول را نشان می دهد که دستگاه 7 گرمی به انتهای پایین پاندول متصل شده است. پیکربندی راه اندازی در شکل 4 دارای جرم 7 گرم بسیار نزدیک به محور چرخان است.

شکل 5 نمایی نمای نزدیک از ساختار پاندول است.

مرحله 4: تجزیه و تحلیل داده ها

تحلیل داده ها
تحلیل داده ها
تحلیل داده ها
تحلیل داده ها
تحلیل داده ها
تحلیل داده ها

وزن دستگاه بلوتوث 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 (ثانیه) را می دهد.

بیایید ببینیم آیا با آزمایشات ما موافق است یا خیر.

در آزمایش اول ، دستگاه آونگ دارای دستگاه 7 گرم است که به انتهای پایین پاندول متصل شده است. فایل log من قابل بارگیری در موارد زیر است:

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

نام آن را به "PendulumTestData.txt" تغییر دهید و آن را در همان پوشه برنامه تجزیه و تحلیل پایتون قرار دهید. یک تصویر فوری از کد منبع در اینجا ارائه شده است.

#!/usr/bin/env پایتون#-*-کد نویسی: UTF-8-*-csv import matplotlib.pyplot as plt plt.style.use ('seaborn-whitegrid') numpy را به عنوان np از زمان وارد کردن زمان datetime وارد کنید ، timedelta import seaborn as sns from sklearn.cluster import KM معنی از مجموعه واردات شمارنده #################################### ###############################این عملکرد کار تجزیه و تحلیل فایل داده را اجرا می کند ############ ################################################## ## def parseDataLogFile (datafilename): ########################################### #######################داده ها را در فایل گزارش داده جدا از کاما (CSV) استخراج کرده و محتویات هر ستون را در یک متغیر نوع شناور ذخیره کنید ## ################################################## ############ با (datafilename) به عنوان csvfile: readCSV = csv.reader (csvfile ، delimiter = '،') timestampS = fAccelHwUnit_x = fAccelHwUnit_y =

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

#برای برآورد دقیق دوره نوسان به تخمین دقیق فراوانی نمونه نیاز داریم ##################################### ############################ FsHz = getSamplingIntervalS (timestampS) ################ ################################################ # استفاده کنید جزء پیچ در خروجی سیستم مرجع سرفصل نگرش برای تجزیه و تحلیل دوره پاندول ##################################### ########################### تجزیه و تحلیل_زمانSequence (timestampS، fRPYdeg_p، FsHz، 'pitch') ########### ################################################## ####استفاده از خروجی اندازه گیری خام acceleromter برای تحلیل دوره پاندول ##################################### ########################### تجزیه و تحلیل_زمانSequence (timestampS، fAccelHwUnit_x، FsHz، 'accel') ########## ################################################## ####استفاده از خروجی اندازه گیری خام ژیروسکوپ برای تجزیه و تحلیل دوره پاندول #################################### ########################### تجزیه و تحلیل_زمانSequence (timestampS، fGyroHwUnit_y، FsHz، ' gyro ') print (' done، تبریک می گویم:-) ') plt.show () ################################ ##################################در فرآیند ارتباطات بلوتوث ، به ندرت امکان دارد که بسته داده comm بتواند از بین برود#ما از K-mean برای جداسازی داده های اندازه گیری 20 هرتز از نقاط دور افتاده استفاده می کنیم ، که ناشی از حذف بسته#شیرجه به "سیگنال و سیستم برای جزئیات بیشتر" است ################ ################################################ def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('interval (s) interval (s)') clusterCnt = 5 km = KM به معنی (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1، 1)) centroids = km.cluster_centers_ elemCnt = شمارنده (km.labels_) وقوعCnt = برای ii در محدوده (clusterCnt): وقوع Cnt.append (elemCnt [ii]) FsHz = 1/centroids [وقوعCnt.index (حداکثر (وقوعCnt))] بازگشت 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 ، سطل ، im = ax2.specgram (timeSeqData ، NFFT = NFFT ، Fs = FsHz ، noverlap = NFFT/2)

ax2.set_title ("Spectrogram") ax2.set_xlabel ("نمونه") ax2.set_ylabel ("فرکانس (هرتز)") ؛

# متد `specgram` 4 شی را برمی گرداند. آن ها هستند:

# - Pxx: پریودوگرام # - فرکانسها: بردار فرکانس # - سطلها: مراکز سطلهای زمان # - im: the matplotlib.image. AxesImage نمایانگر داده ها در نمودار pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('Freku oscillation freq (Hz) =٪ f ، Period (Sec) =٪ f ، منبع تخمین داده ها:٪ s'٪ (oscFreqHz ، 1/oscFreqHz ، strComment)) 1/oscFreqHz را برمی گرداند

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

#آیا باید این برنامه را به طور مستقل اجرا کنیم ، یعنی توسط pendulum1.py فراخوانی نشود ،#یک نام پرونده پیش فرض برای ورود داده تعریف می کنیم که باید تجزیه و تحلیل شود ##################### ########################################### اگر _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' os.path را وارد کنید os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" default log file٪ s not available "٪ defaultFilename)

برای به روز رسانی طولانی مدت ، لطفاً https://github.com/xiapeiqing/m2robots/blob/maste… را بررسی کنید

کد منبع حاوی نظرات مفصل است ، اجازه دهید در اینجا یک خلاصه سطح بالا از برآورد ریاضی ارائه دهیم.

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 میلی ثانیه است ، یعنی 20 هرتز. میانگین در همه اندازه گیری ها خوب به نظر می رسد ، اما ما گاهی اوقات بسته انتقال داده را از دست می دهیم ، فاصله به روز رسانی 100ms یا 150ms می شود ،…

اگر ما وقوع این داده ها را ترسیم کنیم ، شکل 1 را ببینید ، به عنوان یک انسان ، به راحتی می توانیم مقدار چشم چشمی 0.05 ثانیه داشته باشیم. با این حال ، آیا می توانیم بهتر از این عمل کنیم؟

ما باید از روش طبقه بندی فقط برای انتخاب روشهای مناسب برای محاسبه میانگین استفاده کنیم. پایتون دارای جعبه ابزاری با نام KMeans است که به ما در خوشه بندی یا طبقه بندی کمک می کند. این مفاهیم در بسیاری از داده های بزرگ و حوزه AI استفاده می شود.

3) شکل 2 شامل دو تصویر است. نمودار بالا یک توالی حوزه زمانی از اندازه گیری زاویه تاب در درجه است. با ارجاع به زمانبندی محور x در Second ، می توانیم تقریباً 22.5 چرخه را در 50 ثانیه بخوانیم ، که به معنی دوره پاندول 2.22 ثانیه است. آیا راهی برای خودکارسازی این فرآیند و برآورد دقیق تر وجود دارد؟ بله ، ما می توانیم از ابزار ریاضی به نام طیف نگار استفاده کنیم ، که از تکه کوچکی از داده های اندازه گیری استفاده می کند و فرکانس آن را به ما می گوید ، شکل زیر را ببینید. خواندن محور y برای تاریک ترین خط فرکانس نوسان پاندول است. بودن یک خط افقی تأیید می کند که نوسان پاندول در کل آزمایش تغییر نکرده است. مقدار معکوس فرکانس نوسان ، دوره نوسان پاندول است.

گزارش نهایی تهیه شده توسط برنامه ، یک خلاصه متنی است:

فرکانس نوسان پاندول (هرتز) = 0.449224 ، دوره (ثانیه) = 2.226059 ، برآورد منبع داده: زمین

ما می توانیم نتیجه اولیه محاسبه دست چشم ، 2.22 ثانیه را ، با مقدار محاسبه شده برنامه مطابقت دهیم.

در مقایسه با مقدار محاسبه شده تئوریک 2.0962 (ثانیه) ، 5 ~ خطای باقی مانده داریم. چطوری ازشرشون خلاص میشید؟ به یاد دارید فرض "میله یکدست یکدست" است؟ حتی وزن 7 گرم اضافی بی اهمیت به نظر می رسد ، این بزرگترین علت خطای باقی مانده است.

ما اکنون دستگاه را نزدیک به محور حرکت می دهیم. برای عکس نزدیک از مرحله قبل دیدن کنید. فایل log را که ایجاد کردم می توانید در اینجا بارگیری کنید:

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

همان مراحل تجزیه و تحلیل را انجام دهید ، و ما دوره 2.089867 (ثانیه) را دریافت می کنیم ، شکل 3 را ببینید ، که تقریباً مشابه پیش بینی نظری است. عالی!

از آنجا که ما نه تنها اندازه گیری زاویه چرخش ، بلکه اندازه گیری ژیروسکوپی و اندازه گیری شتاب سنج را با همان سرعت داریم. همان تجزیه و تحلیل را برای دو اندازه گیری دیگر انجام دهید ، ما نتایج را در شکل 4 و 5 بدست می آوریم. برآورد هر سه منبع اندازه گیری موافق است ، که باعث می شود ما از موفقیت آزمایش خود اطمینان بیشتری داشته باشیم.

در اینجا نتیجه به عنوان خروجی نهایی برنامه پایتون در حال اجرا است:

فرکانس نوسان پاندول (هرتز) = 0.478499 ، دوره (ثانیه) = 2.089867 ، برآورد منبع داده: زمین

فرکانس نوسان پاندول (هرتز) = 0.478499 ، دوره (ثانیه) = 2.089867 ، برآورد منبع داده: accel

فرکانس نوسان پاندول (هرتز) = 0.478499 ، دوره (ثانیه) = 2.089867 ، برآورد منبع داده: ژیروسکوپ

آخرین فکر در این مرحله ، چگونه می توان نتایج برآورد را با استفاده از منبع داده ورودی متفاوت یکسان دانست؟ این ضد شهود است. این سال را به خوانندگان واگذار می کنم. در اینجا یک نکته وجود دارد: به یاد داشته باشید که ما از FFT کوتاه مدت برای تخمین فرکانس نوسان استفاده می کنیم؟ در حوزه دیجیتال ، برآورد فرکانس به جای برآورد عدد شناور در سطل فرکانس گسسته ارائه می شود.

مرحله 5: توصیه های کاری آینده

چند دسته از توصیه های کاری آینده وجود دارد.

در مرحله قبل ، ما موفق شدیم خطای آزمایش خود را از 5 ~ به کمتر از 1 reduce کاهش دهیم ، آیا می توانیم بهتر از این عمل کنیم؟ با توجه به اینکه میزان نوسان به صورت تصاعدی کاهش می یابد ، یکی از عوامل م dragثر می تواند کشش هوا باشد که هنگام تاب خوردن پاندول ایجاد می شود. سطح مقطع پاندول ممکن است نیاز به اصلاح داشته باشد تا شکل ساده ای داشته باشد تا از کشش آیرودینامیکی کاسته شود.

آیا می توانیم با استفاده از تکنیک های فیلتر تطبیقی ، سود متغیری از زمان را برای خروج یک سیگنال پیک ثابت اندازه گیری کنیم. در عین حال ، کاهش نیروهای خارجی را با هم تضعیف کنید.

ما به سختی می توانیم چیزی ساده تر از "حرکت ساده هارمونیک" پیدا کنیم. آیا می توانیم از امکاناتی که پاندول را تجزیه و تحلیل می کنیم برای تجزیه و تحلیل موارد پیچیده تر ، فعالیت ورزشی ، دنباله پرتاب موشک آب و غیره استفاده کنیم؟

هک مبارک

توصیه شده: