فهرست مطالب:
تصویری: پروژه Mars Roomba UTK: 4 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
سلب مسئولیت: در صورتی که اتاق در یک قسمت تنظیم شود ، این فقط کار خواهد کرد
به روشی بسیار ویژه ، این دستورالعمل ایجاد شده و در نظر گرفته شده است که توسط دانشگاه 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 باید طبق دستورالعمل اجرا شود.
توصیه شده:
نحوه ایجاد رادار با استفاده از آردوینو برای پروژه علمی - بهترین پروژه های آردوینو: 5 مرحله
نحوه ایجاد رادار با استفاده از آردوینو برای پروژه علمی | بهترین پروژه های آردوینو: سلام دوستان ، در این مقاله آموزشی به شما نشان خواهم داد که چگونه یک سیستم راداری شگفت انگیز ایجاد کنید که با استفاده از آردوینو نانو ساخته شده است. این پروژه برای پروژه های علمی ایده آل است و اگر برنده شدن جایزه عالی باشد ، می توانید به راحتی با سرمایه گذاری و شانس بسیار کمتری این کار را انجام دهید
10 پروژه اصلی آردوینو برای مبتدیان! حداقل با یک تخته حداقل 15 پروژه بسازید!: 6 مرحله
10 پروژه اصلی آردوینو برای مبتدیان! حداقل با یک تخته حداقل 15 پروژه بسازید!: پروژه آردوینو & amp؛ هیئت آموزشی ؛ شامل 10 پروژه اصلی آردوینو است. همه کد منبع ، فایل Gerber و موارد دیگر. بدون SMD! لحیم کاری آسان برای همه. اجزای قابل جابجایی و تعویض آسان. شما می توانید حداقل 15 پروژه را با یک برنامه
پروژه Roomba MATLAB: 5 مرحله
پروژه Roomba MATLAB: برنامه فعلی ناسا برای مریخ نورد این است که آن را جمع آوری داده و در اطراف مریخ پرسه بزند ، نمونه هایی از خاک را جمع آوری کرده تا به زمین بازگرداند تا دانشمندان ببینند آیا اشکال دیگری از حیات در آن وجود داشته است. سیاره. اضافی
پروژه Roomba: 5 مرحله (همراه با تصاویر)
پروژه Roomba: این دستورالعمل برای برآوردن الزامات پروژه Makecourse در دانشگاه فلوریدا جنوبی (www.makecourse.com) ایجاد شده است. این دستورالعمل تمام مراحل و اجزای لازم برای جمع آوری پروژه Roomba من را پوشش می دهد
مشعل مجهز به USB! این پروژه می تواند از طریق پلاستیک / چوب / کاغذ بسوزد (پروژه سرگرم کننده همچنین باید چوبی بسیار ظریف باشد): 3 مرحله
مشعل مجهز به USB! این پروژه می تواند از طریق پلاستیک / چوب / کاغذ بسوزد (پروژه سرگرم کننده همچنین باید چوب بسیار ظریفی باشد): این USB را به کار نبرید !!!! از همه نظرات متوجه شدم که می تواند به رایانه شما آسیب برساند. کامپیوتر من خوب است از شارژر تلفن 600 ولت 5 ولت استفاده کنید. من از این استفاده کردم و خوب کار می کند و اگر از یک دوشاخه ایمنی برای قطع برق استفاده کنید ، هیچ چیزی آسیب نمی بیند