فهرست مطالب:

UTK EF 230 MarsRoomba Project Fall 2018: 5 Step
UTK EF 230 MarsRoomba Project Fall 2018: 5 Step

تصویری: UTK EF 230 MarsRoomba Project Fall 2018: 5 Step

تصویری: UTK EF 230 MarsRoomba Project Fall 2018: 5 Step
تصویری: UTK - EF 230 Autonomous Vehicle Project 2024, جولای
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

در حال حاضر ، مریخ نوردهای مریخ برای جمع آوری داده ها در سطح مریخ از طریق روش های مختلف مورد استفاده قرار می گیرند تا در نهایت اطلاعات بیشتری در مورد پتانسیل این سیاره برای زندگی میکروبی بدست آورند. مریخ نوردها عمدتا از ابزارهای عکاسی و تجزیه و تحلیل خاک برای جمع آوری داده ها استفاده می کنند ، اما مریخ نوردها همچنین شامل ابزارهای ناوبری ، آشکارسازهای تابش ، سنسورهای جوی و لیزر برای تبخیر نمونه سنگ هستند. به گفته ناسا ، هدف برنامه ریزی شده مأموریت مریخ نورد 2020 یکسان است ، اما وظیفه ویژه این است که "نمونه های خاک و سنگ را جمع آوری کرده و آنها را روی سطح ذخیره کنید تا در ماموریت آینده به زمین بازگردند."

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

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

مرحله 1: مواد مورد نیاز

مواد مورد نیاز
مواد مورد نیاز

1) رایانه/لپ تاپ قابل دسترسی به اینترنت

2) MATLAB_R2018a

3) دانلود Roomba و Roomba

مرحله 2: راه اندازی/بارگیری

راه اندازی/بارگیری
راه اندازی/بارگیری

برای بارگیری نرم افزار مورد نیاز برای دسترسی به Roomba (ذخیره شده در پرونده خود در پوشه پروژه) ، این اسکریپت را در MATLAB اجرا کنید

راهنمای اضافی:

٪ برنامه نصب پروژه EF 230 Roomba٪ آخرین به روز رسانی: 13 سپتامبر 2017 (مشکلات امنیتی مرتبط با سرور https برطرف شده و در صورت بروز خطا هشدار حذف پرونده حذف شده است) roombaInstall clc؛ ٪ لیست فایل ها برای نصب فایل ها = {'roomba.m'، 'roombaSim.m'، 'roombaSimGUI.m'، 'roombaSimGUI.fig'}؛ ٪ محل نصب از گزینه = weboptions ('CertificateFilename'، '')؛ ٪ به آن می گویند که الزامات گواهی سرور را نادیده بگیرد = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'؛ dlgTitle = 'نصب/بروزرسانی Roomba'؛ ٪ نمایش هدف و دریافت پیام تأیید = {'این برنامه این فایل های EF 230 Roomba را بارگیری می کند:' '' strjoin (files، '') '' '' به این پوشه: '' 'cd' '' آیا می خواهید ادامه دهید؟ '}؛ بوق ؛ yn = questdlg (سریع ،… dlgTitle ،… "بله" ، "نه" ، "بله") ؛

if ~ strcmp (yn ، 'Yes') ، return؛ پایان

٪ دریافت لیست فایلهایی که وجود دارند_files = files (cellfun (exist، files)> 0)؛ if ~ isempty (فایلهای موجود)٪ مطمئن شوید که جایگزینی آنها واقعاً درست است = {'شما این فایلها را جایگزین می کنید:' '' strjoin (فایلهای موجود ، '') '' 'خوب است جایگزین شود؟' }؛ بوق ؛ yn = questdlg (سریع ،… dlgTitle ،… "بله" ، "نه" ، "بله") ؛ if ~ strcmp (yn، 'Yes')، return؛ پایان پایان

٪ بارگیری فایل ها cnt = 0؛ برای i = 1: length (files) f = files {i}؛ disp (['' بارگیری 'f])؛ url = [server f] را امتحان کنید؛ websave (f، url، options)؛ ٪ گزینه های اضافه شده برای جلوگیری از خطاهای امنیتی cnt = cnt + 1؛ catch disp (['خطا در بارگیری' f])؛ ساختگی = [f '.html']؛ در صورت وجود (ساختگی ، 'فایل') == 2 حذف پایان نهایی (ساختگی)

if cnt == length (files) msg = 'Installation Successful'؛ waitfor (msgbox (msg، dlgTitle))؛ else msg = 'خطای نصب - برای جزئیات به پنجره فرمان مراجعه کنید'؛ waitfor (errordlg (msg، dlgTitle))؛ پایان

پایان٪ roombaInstall

مرحله 3: کد قسمت 1: عملکرد ردیابی

کد قسمت 1: عملکرد ردیابی
کد قسمت 1: عملکرد ردیابی

این تابع متغیر Roomba و تصویر را از دوربین روی Roomba می گیرد و مختصات xy مرکز شی ردیابی شده را پیدا می کند

این کد را در یک فایل دیگر در همان پوشه ذخیره کنید.

تابع [xm ، ym] = trackingblue (r)٪ ورودی ها: متغیر roomba خروجی ها: مقدار x و y مرکز شیء زیر٪ هدف: مرکز یک شیء آبی را با توجه به یک تصویر پیدا می کند٪ استفاده [مقدار x ، y value] = trackingblue (متغیر roomba) img = r.getImage؛ ٪ دوربین را از زیر تصویر ربات (1 ، 2 ، 2) زیر تصویر (img) خاموش می کند. ٪ تصویر را در همان پنجره عنوان مسیر نشان می دهد ('Tracking Image') red = img (:،:، 1)؛ سبز = img (:،: ، 2) ؛ آبی = img (:،: ، 3) ؛ justBlue = آبی - سبز/2 - قرمز/2 ؛ bw = justBlue> 40 ؛ subplot (1 ، 2 ، 2) subimage (bw) را نگه دارید ؛ [x ، y] = پیدا کردن (bw) ؛ if ~ isempty (x) && ~ isempty (y) xm = دور (میانگین (x)) ؛ ym = گرد (میانگین (y)) ؛ xx = حداکثر (1 ، xm-5): دقیقه (xm+5 ، اندازه (bw ، 1)) ؛ yy = حداکثر (1 ، ym-5): دقیقه (ym+5 ، اندازه (bw، 2)) ؛ bwbw = صفر (اندازه (bw) ، 'uint8') ؛ bwbw (xx ، yy) = 255 ؛ subplot (1 ، 2 ، 2) subimage (justBlue + bwbw) را نگه دارید ؛ پایان

مرحله 4: کد قسمت 2: while loop

این کد Roomba را بر اساس موقعیت x و y شیء از عملکرد ردیابی خارج می کند. این باعث می شود Roomba مراقب دیوارها و صخره ها باشد ، در حالی که به دنبال آبی است. این امر همچنین مختصات x و y مسیر Roomba را گرفته و نمودار مربوطه را با تصویر ردیابی ایجاد می کند. در صورت فعال شدن حسگر ضربه ، به بخش ایمیل منتقل می شود

٪ پروژه روور

٪ Jonah Zahn، Wade Price، Noah Sloan٪ jzahn2، wprice15، nsloan1٪ ورودی ها: مقدار roomba ، داده های دوربین ، برخورد ، سنسورهای نور و دیوار٪ هدف: از فضانورد پیروی می کند و از موانع جلوگیری می کند. در صورت هشدار ، roomba یک ایمیل با جزئیات نقشه و محل آن با توجه به موقعیت شروع خود ارسال می کند. ٪ استفاده: فقط برنامه را با اعلام متغیر roomba اجرا کنید ، همچنین٪ دارای یک جسم سبز متحرک هستند٪ خروجی ها: تصویر ردیابی تصویر ، نقشه ایمیل و متن را به کاربر نشان می دهد ٪٪ زیر بخش b = 0 ؛ ٪ شروع متغیرها c = 0؛ x = 0 ؛ y = 0 ؛ تتا = 0 ؛ در حالی که c == 0٪ حلقه برای تشخیص شی آبی و موانع t = r.timeGet ؛ d = r.getDistance؛ [xval، yval] = trackingblue (r)؛ cliff = getCliffSensors (r)؛ ٪ مقداردهی اولیه ساختارها برای مقادیر سنسور light = getLightBumpers (r)؛ bump = getBumpers (r)؛ if light.leftCenter> = 10 || light.rightCenter> = 10٪ حس می کند که در نزدیکی دیوار دیواری وجود دارد. r.setLEDDigits ('help') c = 1٪ در حالی که b == 0٪ در صورت bump.right == 1 || bump.left == 1 || bump.front == 1٪ حس می کند اگر بعد از حس دیوار به چیزی برخورد کرده باشد٪ c = 1٪ b = 1٪ disp ('bump')٪ end٪ end elseif bump.right == 1 || bump.left == 1 || bump.front == 1٪ احساس می کند اگر چیزی با هم برخورد کرده باشد ، اگر چنین باشد ، یک ایمیل r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || ارسال می کند cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100٪ حس می کند اگر صخره ای در نزدیکی r وجود داشته باشد. توقف c = 1 r.setLEDDigits ('help') else٪ سرعت درایو را تنظیم می کند تا آبی را دنبال کند اگر yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle؛ x = d.*cosd (theta) + x؛ ٪ x مختصات roomba y = d.*sind (theta).*d + y؛ ٪ y مختصات فرعی roomba (1 ، 2 ، 1) نمودار (x ، y ، 'bd')٪ مسیر را ترسیم می کند و عنوان عنوان ('Roomba Path') را نگه می دارد. پایان

مرحله 5: کد قسمت 3: بخش ایمیل

با این کار مسیر و تصویر ترسیم شده در اختیار شما قرار می گیرد و به آدرس ایمیل مشخص ارسال می شود

(در اینجا با مثال ایمیل نشان داده شده است)

٪٪ بخش ایمیل

اگر b == 1 saveas (gcf ، 'rovermap.png')٪ setpref شکل ('اینترنت' ، 'SMTP_Server' ، 'smtp.gmail.com') را ذخیره می کند ؛ setpref ("اینترنت" ، "E_mail" ، "[email protected]") ؛ ٪ ایمیل برای ارسال از setpref ("اینترنت" ، "SMTP_Username" ، "[email protected]") ؛ ٪ فرستنده نام کاربری setpref ('اینترنت' ، 'SMTP_Password' ، 'gssegsse') ؛ ٪ senders password props = java.lang. System.getProperties؛ props.setProperty ('mail.smtp.auth' ، 'true') ؛ props.setProperty ('mail.smtp.socketFactory.class' ، 'javax.net.ssl. SSLSocketFactory') ؛ props.setProperty ('mail.smtp.socketFactory.port' ، '465') ؛ sendmail ('ایمیل نمونه' ، 'RoverBeacon' ، 'فضانورد حرکت خود را متوقف کرده است. برای بازیابی ، دستورالعمل های فایل پیوست را دنبال کنید.'، 'rovermap.png') disp ('email sent') end

توصیه شده: