فهرست مطالب:

پروژه Mars Roomba UTK: 4 مرحله
پروژه Mars Roomba UTK: 4 مرحله

تصویری: پروژه Mars Roomba UTK: 4 مرحله

تصویری: پروژه Mars Roomba UTK: 4 مرحله
تصویری: Prüfungsvorbereitung B2 🚀 Deutsch lernen 2024, جولای
Anonim
پروژه Mars Roomba UTK
پروژه Mars Roomba UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

سلب مسئولیت: در صورتی که اتاق در یک قسمت تنظیم شود ، این فقط کار خواهد کرد

به روشی بسیار ویژه ، این دستورالعمل ایجاد شده و در نظر گرفته شده است که توسط دانشگاه TENNESSEE STUDENS و FACULTY استفاده شود.

این کد برای راه اندازی Roomba برای اجرای کد نوشته شده و ذخیره شده محلی در MATLAB استفاده می شود. اگر نتوانید کتابخانه های لازم را از وب سایت دانشگاه تنسی تهیه کنید ، این کار نمی کند. اگر کتابخانه ها را دارید ، می توانید از آنها برای برنامه ریزی Roomba خود با استفاده از توابع موجود در کتابخانه استفاده کنید. این دستورالعمل به شما آموزش می دهد که چگونه کتابخانه ها را نصب کنید ، یک پوشه برای همه کد ایجاد کنید ، و نحوه برنامه نویسی و استفاده از برنامه ای که در زیر ارائه کرده ایم.

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

· رومبا

· متلب

· دوربین رزبری پای و پی

مرحله 1: دریافت کتابخانه ها

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

مرحله 2: نوشتن برنامه ها

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

مرحله 3: کد

این را کپی کرده و در یک فایل MATLAB قرار دهید که در همان پوشه کتابخانه ها قرار دارد

functionMainRoombaFile (r)

r.setDriveVelocity (0.1 ، 0.1)

در حالی که true٪ Infinte while loop برای نگه داشتن کد در حال اجرا است

dontFall = cliffCheck (r)٪ متغیر "dontFall" را به تابع "cliffCheck" اختصاص می دهد

if dontFall٪ if دستور ادامه در کد پس از 'cliffCheck' کامل است

r.setDriveVelocity (0.1 ، 0.1)٪ باعث می شود Roomba بعد از کامل شدن "cliffCheck" در حال حرکت باشد

end٪ پایان می دهد 'dontFall' if statement

bumper = bumpcheck (r)٪ متغیر "bumper" را به تابع "bumpcheck" اختصاص می دهد

if bumper٪ if عبارت بعد از تکمیل 'bumpcheck' در کد ادامه یابد

r.setDriveVelocity (0.1 ، 0.1)٪ باعث می شود Roomba بعد از تکمیل 'bumpcheck' در حال حرکت باشد

end٪ پایان "bumper" if statement

liquids = LiquidCheck (r) variable متغیر "liquids" را به تابع "LiquidCheck" اختصاص می دهد

if liquidids٪ if دستور بعد از تکمیل 'LiquidCheck' در کد ادامه یابد

r.setDriveVelocity (0.1 ، 0.1)٪ باعث می شود Roomba بعد از کامل شدن "LiquidCheck" در حال حرکت باشد

end٪ پایان می دهد "مایعات" اگر عبارت

lightbumper = lightcheck (r)٪ متغیر 'lightbumper' را به تابع 'lightcheck' اختصاص می دهد

مکث (0.1) B برای جلوگیری از تکرار مداوم حلقه ، به طور مختصر مکث کنید

end٪ حلقه نامحدود به پایان می رسد

end٪ end تابع

تابع bumper = bumpcheck (r)٪ تابع 'bumpcheck' را ایجاد می کند

bumpdata = r.getBumpers٪ همه داده ها را از سپر به متغیر "bumpdata" اختصاص می دهد

سپر = bumpdata.right || bumpdata.left || bumpdata.front٪ یک متغیر ذخیره شده ، "bumper" ، برای ضربه گیرهای مختلف ایجاد می کند

if bumpdata.right> 0٪ اگر عبارت B باعث ایجاد عملکردهای مختلف roomba در صورت برخورد ضربه گیر شود

r.stop٪ Roomba را متوقف می کند

r.moveDistance (-0.3 ، 0.2) Room معکوس Roomba 0.3m

r.turnAngle (90 ، 0.5)٪ Roomba را تا 90 درجه که امکان دارد می چرخاند

پایان

اگر bumpdata.front> 0 باشد

r. توقف

r.moveDistance (-0.3 ، 0.2)

r.turnAngle (رندی (270) ، 0.5) Room Roomba را در فاصله تصادفی بین 0 تا 270 درجه در سریعترین زمان ممکن می چرخاند

پایان

اگر bumpdata.left> 0 باشد

r. توقف

r.moveDistance (-0.3 ، 0.2)

r.turnAngle (-90 ، 0.5) Room Roomba -90 درجه را تا آنجا که ممکن است می چرخاند

پایان

پایان

تابع lightbumper = lightcheck (r)٪ تابع 'lightcheck' را ایجاد می کند

lightdata = r.getLightBumpers٪ همه داده ها را از حسگر نوردهی به متغیر "lightdata" اختصاص می دهد

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter٪ یک متغیر ذخیره شده به نام "lightbumper" برای سپرهای مختلف نور ایجاد می کند

if lightbumper٪ If دستور فراخوانی داده های lightbumper از بالا

اگر lightdata.left> 10٪ اگر باعث ایجاد عملکردهای مختلف roomba شود اگر سپر نور بیشتر از 10 مقدار را حس کند

r.setDriveVelocity (0.05 ، 0.05) room برای آماده شدن برای دست انداز ، اتاق را کند می کند

end٪ عبارت اولیه if را تمام می کند

if lightdata.rightCenter> 10

r.setDriveVelocity (0.05 ، 0.05)

پایان

if lightdata.right> 10

r.setDriveVelocity (0.05 ، 0.05)

پایان

if lightdata.leftCenter> 10

r.setDriveVelocity (0.05 ، 0.05)

پایان

end٪ پایان می دهد 'lightbumper' if

end٪ end تابع lightcheck

تابع dontFall = cliffCheck (r)٪ تابع 'cliffCheck' را ایجاد می کند

data = r.getCliffSensors؛ ٪ همه داده ها را از حسگر صخره به متغیر "داده" اختصاص می دهد

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020٪ یک متغیر ذخیره شده به نام "dontFall" برای حسگرهای مختلف صخره ایجاد می کند

if dontFall٪ If برای فراخوانی داده های سنسور صخره از بالا

if data.left <1010٪ if اگر باعث ایجاد عملکردهای مختلف roomba شود اگر سنسور صخره ای کمتر از 1010 مقدار را حس کند

r. توقف

r.moveDistance (-0.2 ، 0.2)٪ معکوس Roomba 0.2 متر

r.turnAngle (-90 ، 0.5) Room Roomba -90 درجه را تا آنجا که ممکن است می چرخاند

elseif data.leftFront <1010

r. توقف

r.moveDistance (-0.3 ، 0.2)

r.turnAngle (90 ، 0.5)٪ Roomba را تا 90 درجه که امکان دارد می چرخاند

elseif data.rightFront <1010

r. توقف

r.moveDistance (-0.3 ، 0.2)

r.turnAngle (90 ، 0.5) Room Roomba را تا 90 درجه که امکان دارد می چرخاند

elseif data.right <1010

r. توقف

r.moveDistance (-0.3 ، 0.2)

r.turnAngle (90 ، 0.5)٪ Roomba را تا 90 درجه که امکان دارد می چرخاند

پایان

پایان

پایان

function liquids = LiquidCheck (r)٪ تابع 'LiquidCheck' را ایجاد می کند

در حالی که٪ واقعی حلقه بی نهایت را برای کالیبراسیون شروع می کند

img = r.getImage؛ ٪ دوربین روبات را خاموش می خواند

image (img)٪ تصویر را در یک پنجره شکل نشان می دهد

red_mean = میانگین (میانگین (img (200 ، 150 ، 1)))٪ میانگین مقدار پیکسل های قرمز را می خواند

blue_mean = میانگین (میانگین (img (200 ، 150 ، 3)))٪ مقدار متوسط پیکسل های آبی را می خواند

مایعات = معنی_قرمز || blue_mean٪ یک متغیر ذخیره شده به نام "مایعات" برای متغیرهای مختلف رنگ ایجاد می کند

اگر مایعات٪ If عبارت برای فراخوانی داده های تصویر از بالا

if red_mean> 170 If اگر عبارت باعث ایجاد عملکردهای مختلف اتاق شود در صورتی که دوربین رنگ قرمز متوسط بیش از 170 را مشاهده کند

r.stop٪ roomba را متوقف می کند

r.setLEDCenterColor (255)٪ دایره را به رنگ قرمز تنظیم می کند

r.setLEDDigits ()؛ ٪ نمایشگر را پاک کنید

f = نوار منتظر (0 ، '*پیام دریافتی*') ؛ ٪ یک نوار انتظار برای بارگذاری پیام ایجاد می کند

r.setLEDDigits ('داغ') ؛ ٪ نمایشگر LED را روی خروجی "HOT" تنظیم می کند

مکث (0.5)٪ مکث مختصر برای خواندن اطلاعات رد شده

r.setLEDDigits ('LAVA') ؛ ٪ نمایشگر LED را روی خروجی "LAVA" تنظیم می کند

مکث (0.5)

نوار انتظار (.33 ، f ، '*پیام ورودی*') ؛ ٪ باعث افزایش نوار انتظار می شود

r.setLEDDigits ('داغ')؛

مکث (0.5)

r.setLEDDigits ('LAVA') ؛

مکث (0.5)

نوار انتظار (.67 ، f ، '*پیام ورودی*') ؛ ٪ باعث افزایش نوار انتظار می شود

r.setLEDDigits ('داغ') ؛

مکث (0.5)

r.setLEDDigits ('LAVA') ؛

waitbar (1، f، '*پیام ورودی*')؛ ٪ نوار انتظار را تکمیل می کند

مکث (1)

close (f)٪ نوار انتظار را می بندد

r.setLEDDigits ()؛ ٪ نمایشگر LED را پاک می کند

بستن همه٪ همه پنجره های قبلی را می بندد

axes ('Color'، 'none'، 'XColor'، 'none'، 'YColor'، 'none')٪ پنجره نمودار محورها و نمودار را پاک می کند

y = 0.5 ؛ ٪ موقعیت y متن را در پنجره رسم تنظیم می کند

x = 0.06 ؛ ٪ موقعیت x متن را در پنجره رسم تنظیم می کند

عنوان ('FROM MARS ROOMBA' ، 'fontsize'، 32)٪ عنوان را به پنجره ترسیم اضافه می کند

quadeqtxt = 'LAVA خطرناک'؛ ٪ متغیر 'quadeqtxt' را روی خروجی 0 تنظیم می کند

متن (x، y، quadeqtxt، 'interpreter'، 'latex'، 'fontsize'، 36)؛ ٪ متن quadeq را در پنجره رسم نمایش می دهد

r.moveDistance (-0.2 ، 0.2)٪ roomba را 0.2 متر معکوس می کند

r.turnAngle (180 ، 0.5)٪ اتاق را تا آنجا که ممکن است 180 درجه می چرخاند

r.setLEDCenterColor (128 ، 128) ؛ ٪ LED مرکز اتاق را روی نارنجی تنظیم می کند

بستن همه٪ پنجره های باز باقی مانده را می بندد

elseif blue_mean> 175٪ اگر عبارت باعث ایجاد عملکردهای مختلف roomba شود در صورتی که دوربین رنگ آبی متوسط بیش از 175 را مشاهده کند

r.stop٪ roomba را متوقف می کند

r.setLEDCenterColor (255)٪ دایره را به رنگ قرمز تنظیم می کند

r.setLEDDigits ()؛ ٪ نمایشگر را پاک کنید

f = نوار منتظر (0 ، '*پیام دریافتی*') ؛ ٪ یک نوار انتظار برای بارگذاری پیام ایجاد می کند

r.setLEDDigits ('LOOK') ؛ ٪ نمایشگر LED را روی خروجی "LOOK" تنظیم می کند

مکث (0.5)٪ مکث مختصر برای خواندن اطلاعات رد شده

r.setLEDDigits ('WATR') ؛ ٪ نمایشگر LED را روی خروجی "WATR" تنظیم می کند

مکث (0.5)

نوار انتظار (.33 ، f ، '*پیام ورودی*') ؛ ٪ باعث افزایش نوار انتظار می شود

r.setLEDDigits ('LOOK') ؛

مکث (0.5)

r.setLEDDigits ('WATR') ؛

مکث (0.5)

نوار انتظار (.67 ، f ، '*پیام ورودی*') ؛ ٪ باعث افزایش نوار انتظار می شود

r.setLEDDigits ('LOOK') ؛

مکث (0.5)

r.setLEDDigits ('WATR') ؛

waitbar (1، f، '*پیام ورودی*')؛ ٪ نوار انتظار را تکمیل می کند

مکث (1)

close (f)٪ نوار انتظار را می بندد

r.setLEDDigits ()؛ ٪ نمایشگر LED را پاک می کند

بستن همه٪ همه پنجره های قبلی را می بندد

axes ('Color'، 'none'، 'XColor'، 'none'، 'YColor'، 'none')٪ پنجره نمودار محورها و نمودار را پاک می کند

y = 0.5 ؛ ٪ موقعیت y متن را در پنجره رسم تنظیم می کند

x = 0.06 ؛ ٪ موقعیت x متن را در پنجره رسم تنظیم می کند

عنوان ('FROM MARS ROOMBA' ، 'fontsize'، 32)٪ عنوان را به پنجره ترسیم اضافه می کند

quadeqtxt = 'آب پیدا شده' ؛ ٪ متغیر 'quadeqtxt' را روی خروجی 0 تنظیم می کند

متن (x، y، quadeqtxt، 'interpreter'، 'latex'، 'fontsize'، 36)؛ ٪ متن quadeq را در پنجره رسم نمایش می دهد

r.moveDistance (-0.2 ، 0.2)٪ اتاق را 0.2 متر معکوس می کند

r.turnAngle (180 ، 0.5)٪ اتاق را تا آنجا که ممکن است 180 درجه می چرخاند

r.setLEDCenterColor (128 ، 128) ؛ ٪ LED مرکز اتاق را روی نارنجی تنظیم می کند

بستن همه٪ پنجره های باز باقی مانده را می بندد

end٪ پایان می دهد 'red_mean' if

end٪ پایان می دهد "مایعات" اگر عبارت

end٪ حلقه را بی نهایت می بندد

end٪ پایان عملکرد "LiquidCheck"

مرحله 4: اجرای کد

پس از کپی و چسباندن کد در MATLAB ، باید به Roomba متصل شوید. پس از اتصال Roomba باید متغیر r را نامگذاری کنید. توابع هنگام اشاره به Roomba از متغیر r استفاده می کنند ، بنابراین Roomba باید به عنوان متغیر r تعریف شود. پس از اجرای کد ، Roomba باید طبق دستورالعمل اجرا شود.

توصیه شده: