جدول المحتويات:

مشروع Mars Roomba UTK: 4 خطوات
مشروع Mars Roomba UTK: 4 خطوات

فيديو: مشروع Mars Roomba UTK: 4 خطوات

فيديو: مشروع Mars Roomba UTK: 4 خطوات
فيديو: How To Buy Mars Metaverse Land - Mars4 Ecosystem Review 2024, يوليو
Anonim
مشروع Mars Roomba UTK
مشروع Mars Roomba UTK
مشروع Mars Roomba UTK
مشروع Mars Roomba UTK

إخلاء المسؤولية: لن يعمل هذا إلا إذا تم إعداد الغرفة في A.

طريقة محددة للغاية ، تم إنشاء هذا التعليمات وتهدف لاستخدامه من قبل جامعة طلاب وكلية التنس

يستخدم هذا الرمز لإعداد Roomba لتشغيل التعليمات البرمجية المكتوبة والمحفوظة محليًا في MATLAB. لن يعمل هذا إذا كنت غير قادر على الحصول على المكتبات اللازمة من موقع جامعة تينيسي. إذا كانت لديك مكتبات ، فيمكنك استخدامها لبرمجة Roomba الخاصة بك باستخدام الوظائف الموجودة في المكتبة. يعلمك هذا Instructable كيفية تثبيت المكتبات ، وإنشاء مجلد لكل التعليمات البرمجية ، وكيفية ترميز واستخدام البرنامج الذي قدمناه أدناه.

المواد المطلوبة:

· رومبا

· ماتلاب

· كاميرا Raspberry Pi و Pi

الخطوة 1: الحصول على المكتبات

يوجد على موقع الويب الهندسي صندوق أدوات / مكتبة متوفرة ، قم بتنزيله ووضعه في مجلد جديد. يجب أن يحتوي هذا المجلد على جميع ملفات عمل المشروع ، حيث إن أي وظيفة مستخدمة في برنامج تقوم بإنشائه ستحتاج إلى الرجوع إلى المكتبة. بعد القيام بذلك ، يمكنك البدء في العمل على برامجك

الخطوة الثانية: كتابة البرامج

هناك عدد غير قليل من الوظائف التي يمكن استخدامها في البرنامج ، ويمكن الوصول إلى هذه الوظائف باستخدام الأمر "doc roomba". باستخدام هذه الوظائف ، يمكنك التحكم في جهاز Roomba الخاص بك بعدة طرق مختلفة. يستخدم الكود الموضح أدناه مستشعرات الاهتزازات ، وأجهزة استشعار شريط الضوء ، والكاميرا ، ومستشعرات الجرف بطرق مختلفة لإنشاء روفر المريخ. استخدمنا مستشعرات الصدمات لاكتشاف متى يصطدم جهاز Roomba بجسم ما ، وعندما يحدث هذا ، فإن الروبوت سوف ينعكس ويستدير ويستمر في الحركة. قبل أن يصطدم جهاز Roomba بجسم ما ، سيكتشف شريط الضوء الكائن ويبطئ جهاز Roomba بحيث عندما يصطدم بالجسم لتنشيط مستشعر الارتطام ، يكون جهاز Roomba أقل ضررًا / يتأثر بالتأثير. تبحث الكاميرا عن الماء أو الحمم البركانية على السطح ، إذا لم يتم العثور على سائل ، فسيواصل الروبوت البحث ، إذا كان هناك بعض الماء ، فسيقوم الروبوت بإرسال رسالة إلى المشغلين. تم تصميم مستشعرات الجرف لإيقاف الروبوت إذا اقترب من جرف. إذا شعر الروبوت بوجود جرف ، فسوف ينعكس ويستدير لتجنب السقوط.

الخطوة 3: الكود

انسخ هذا والصقه في ملف MATLAB الموجود في نفس المجلد مثل المكتبات

functionMainRoombaFile (r)

r.setDriveVelocity (0.1 ، 0.1)

بينما صحيح٪ Infinte أثناء التكرار للحفاظ على تشغيل الكود

dontFall = cliffCheck (r)٪ يعين المتغير 'dontFall' للدالة 'cliffCheck'

if dontFall٪ if العبارة للمتابعة في الكود بعد اكتمال "cliffCheck"

r.setDriveVelocity (0.1، 0.1)٪ يحافظ على جهاز Roomba متحركًا بعد اكتمال 'cliffCheck'

ينتهي٪ end٪ عبارة "dontFall" if

bumper = bumpcheck (r)٪ يعين متغير 'bumper' للوظيفة 'bumpcheck'

إذا كانت العبارة bumper٪ if للمتابعة في التعليمات البرمجية بعد اكتمال "bumpcheck"

r.setDriveVelocity (0.1، 0.1)٪ يحافظ على Roomba في حالة تحرك بعد اكتمال "bumpcheck"

تنتهي٪ end٪ عبارة if 'bumper'

السوائل = LiquidCheck (r)٪ يعين "سوائل" متغيرة للوظيفة "LiquidCheck"

إذا كانت عبارة سوائل٪ if للمتابعة في التعليمات البرمجية بعد اكتمال "LiquidCheck"

r.setDriveVelocity (0.1، 0.1)٪ يحافظ على Roomba في الحركة بعد اكتمال "LiquidCheck"

end٪ تنتهي بعبارة if "سوائل"

lightbumper = lightcheck (r)٪ يعين متغير "lightbumper" للوظيفة "lightcheck"

pause (0.1)٪ توقف مؤقتًا لفترة وجيزة لتجنب تكرار الحلقة المستمرة

ينتهي٪ end لانهائي أثناء التكرار

تنتهي٪ end

function bumper = bumpcheck (r)٪ ينشئ وظيفة "bumpcheck"

bumpdata = r.getBumpers٪ يعين كل البيانات من الوفير إلى "bumpdata" المتغير

bumper = bumpdata.right || bumpdata.left || bumpdata.front٪ لإنشاء متغير مخزن ، "bumper" ، للمصدات المختلفة

if bumpdata.right> 0٪ إذا كانت العبارة تتسبب في حدوث وظائف مختلفة لـ roomba في حالة اصطدام Bumper

r.stop٪ يوقف جهاز Roomba

r.moveDistance (-0.3، 0.2)٪ عكس Roomba 0.3m

r. TurnAngle (90، 0.5)٪ يقوم بتدوير Roomba 90 درجة بأسرع ما يمكن

نهاية

إذا bumpdata.front> 0

r.stop

المسافة (-0.3، 0.2)

r.turnAngle (randi (270)، 0.5)٪ يدور Roomba في فاصل عشوائي بين 0 و 270 درجة بأسرع ما يمكن

نهاية

إذا bumpdata.left> 0

r.stop

المسافة (-0.3، 0.2)

r.turnAngle (-90، 0.5)٪ يقوم بتدوير Roomba -90 درجة بأسرع ما يمكن

نهاية

نهاية

الدالة lightbumper = lightcheck (r)٪ تنشئ وظيفة "lightcheck"

lightdata = r.getLightBumpers٪ يعين جميع البيانات من مستشعر الضوء إلى "بيانات الضوء" المتغيرة

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter٪ يقوم بإنشاء متغير مخزن ، "lightbumper" ، لمصدات الإضاءة المختلفة

إذا عبارة lightbumper٪ If لاستدعاء بيانات lightbumper من أعلى

إذا كان lightdata.left> 10٪ إذا كانت العبارة تتسبب في حدوث وظائف مختلفة في roomba إذا كان مصد الضوء يستشعر أكبر من 10 قيم

r.setDriveVelocity (0.05، 0.05)٪ يبطئ جهاز Roomba للتحضير للنتوء

تنتهي٪ end الأولي عبارة if

إذا lightdata.rightCenter> 10

r.setDriveVelocity (0.05، 0.05)

نهاية

إذا كانت lightdata.right> 10

r.setDriveVelocity (0.05، 0.05)

نهاية

إذا كان lightdata.leftCenter> 10

r.setDriveVelocity (0.05، 0.05)

نهاية

تنتهي٪ end٪ عبارة if "lightbumper"

ينتهي end٪ من وظيفة فحص الضوء

function dontFall = cliffCheck (r)٪ تنشئ وظيفة 'cliffCheck'

البيانات = r.getCliffSensors ؛ ٪ يعين جميع البيانات من مستشعر الجرف إلى "بيانات" متغيرة

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020٪ لإنشاء متغير مخزن ، "dontFall" ، لأجهزة استشعار المنحدرات المختلفة

if dontFall٪ If عبارة لاستدعاء بيانات مستشعر الجرف من أعلى

إذا كانت data.left <1010٪ إذا كانت العبارة تتسبب في حدوث وظائف مختلفة في roomba إذا كان مستشعر الجرف يستشعر أقل من 1010 قيم

r.stop

r.moveDistance (-0.2، 0.2)٪ عكس Roomba 0.2m

r.turnAngle (-90، 0.5)٪ يقوم بتدوير Roomba -90 درجة بأسرع ما يمكن

elseif data.leftFront <1010

r.stop

المسافة (-0.3، 0.2)

r. TurnAngle (90، 0.5)٪ يقوم بتدوير Roomba 90 درجة بأسرع ما يمكن

بيانات elseif. rightFront <1010

r.stop

المسافة (-0.3، 0.2)

r. TurnAngle (90، 0.5)٪ يقوم بتدوير Roomba 90 درجة بأسرع ما يمكن

بيانات elseif.right <1010

r.stop

المسافة (-0.3، 0.2)

r. TurnAngle (90، 0.5)٪ يقوم بتدوير Roomba 90 درجة بأسرع ما يمكن

نهاية

نهاية

نهاية

سوائل الوظيفة = LiquidCheck (r)٪ لإنشاء وظيفة "LiquidCheck"

بينما صحيح ٪ تبدأ حلقة لا نهائية للمعايرة

img = r.getImage ؛ ٪ يقرأ الكاميرا من الروبوت

تظهر الصورة (img)٪ الصورة في نافذة الشكل

red_mean = متوسط (متوسط (img (200 ، 150 ، 1)))٪ يقرأ متوسط كمية وحدات البكسل الحمراء

blue_mean = متوسط (متوسط (img (200 ، 150 ، 3)))٪ يقرأ متوسط كمية البكسل الزرقاء

السوائل = red_mean || blue_mean٪ لإنشاء متغير مخزن ، "سوائل" ، لمتغيرات اللون المختلفة

إذا كانت السوائل عبارة عن بيان لاستدعاء بيانات الصورة من أعلى

إذا كان red_mean> 170٪ إذا كانت العبارة تتسبب في حدوث وظائف مختلفة في roomba إذا رأت الكاميرا متوسط لون أحمر أكبر من 170

r.stop٪ توقف غرفة Roomba

r.setLEDCenterColor (255)٪ يعين الدائرة على اللون الأحمر

r.setLEDDigits () ، ٪ مسح الشاشة

f = شريط الانتظار (0، '* رسالة واردة *') ؛ ٪ ينشئ شريط انتظار لرسالة تحميل

r.setLEDDigits ('HOT') ؛ ٪ يعين شاشة LED لإخراج "HOT"

وقفة (0.5)٪ وقفة وجيزة لقراءة المعلومات تبدد

r.setLEDDigits ("LAVA") ؛ ٪ يحدد شاشة LED لإخراج "LAVA"

وقفة (0.5)

waitbar (.33، f، '* INCOMING MESSAGE *')؛ ٪ يخلق زيادة في شريط الانتظار

r.setLEDDigits ('HOT') ؛

وقفة (0.5)

r.setLEDDigits ("LAVA") ؛

وقفة (0.5)

waitbar (.67، f، '* INCOMING MESSAGE *')؛ ٪ يخلق زيادة في شريط الانتظار

r.setLEDDigits ('HOT') ؛

وقفة (0.5)

r.setLEDDigits ("LAVA") ؛

waitbar (1، f، '* INCOMING MESSAGE *')؛ ٪ يكمل شريط الانتظار

بوز (1)

إغلاق (f)٪ يغلق شريط الانتظار

r.setLEDDigits () ، ٪ يمسح شاشة LED

إغلاق الكل٪ لإغلاق كافة النوافذ السابقة

المحاور ('Color'، 'none'، 'XColor'، 'none'، 'YColor'، 'none')٪ يمسح نافذة الرسم للمحاور والمخطط

ص = 0.5 ؛ يقوم٪ بتعيين موضع y للنص في نافذة الرسم

س = 0.06 ؛ يعيّن٪ الموضع x للنص في نافذة الرسم

العنوان ('FROM MARS ROOMBA'، 'Fontize'، 32)٪ يضيف عنوانًا لنافذة الرسم

quadeqtxt = "خطر لافا" ؛ ٪ يعين المتغير "quadeqtxt" للإخراج 0

text (x، y، quadeqtxt، 'interpreter'، 'latex'، 'Fontize'، 36) ؛ ٪ يعرض نص quadeq في نافذة الرسم

r.moveDistance (-0.2، 0.2)٪ يعكس roomba 0.2m

r. TurnAngle (180 ، 0.5)٪ يدير roomba 180 درجة بأسرع ما يمكن

r.setLEDCenterColor (128 ، 128) ؛ ٪ يضبط إضاءة مركز Roomba على اللون البرتقالي

أغلق جميع٪ يغلق النوافذ المفتوحة المتبقية

elseif blue_mean> 175٪ إذا كانت العبارة تتسبب في حدوث وظائف مختلفة في roomba إذا رأت الكاميرا لونًا أزرق متوسطًا أكبر من 175

r.stop٪ توقف غرفة Roomba

r.setLEDCenterColor (255)٪ يعين الدائرة على اللون الأحمر

r.setLEDDigits () ، ٪ مسح الشاشة

f = شريط الانتظار (0، '* رسالة واردة *') ؛ ٪ ينشئ شريط انتظار لرسالة تحميل

r.setLEDDigits ('LOOK') ؛ ٪ تعيين شاشة LED لإخراج "نظرة"

وقفة (0.5)٪ وقفة وجيزة لقراءة المعلومات تبدد

r.setLEDDigits ('WATR') ؛ ٪ يعين شاشة LED لإخراج "WATR"

وقفة (0.5)

waitbar (.33، f، '* INCOMING MESSAGE *')؛ ٪ يخلق زيادة في شريط الانتظار

r.setLEDDigits ('LOOK') ؛

وقفة (0.5)

r.setLEDDigits ('WATR') ؛

وقفة (0.5)

waitbar (.67، f، '* INCOMING MESSAGE *')؛ ٪ يخلق زيادة في شريط الانتظار

r.setLEDDigits ('LOOK') ؛

وقفة (0.5)

r.setLEDDigits ('WATR') ؛

waitbar (1، f، '* INCOMING MESSAGE *')؛ ٪ يكمل شريط الانتظار

بوز (1)

إغلاق (f)٪ يغلق شريط الانتظار

r.setLEDDigits () ، ٪ يمسح شاشة LED

إغلاق الكل٪ لإغلاق كافة النوافذ السابقة

المحاور ('Color'، 'none'، 'XColor'، 'none'، 'YColor'، 'none')٪ يمسح نافذة الرسم للمحاور والمخطط

ص = 0.5 ؛ يقوم٪ بتعيين موضع y للنص في نافذة الرسم

س = 0.06 ؛ يعيّن٪ الموضع x للنص في نافذة الرسم

العنوان ('FROM MARS ROOMBA'، 'Fontize'، 32)٪ يضيف عنوانًا لنافذة الرسم

quadeqtxt = 'العثور على المياه' ؛ ٪ يعين المتغير "quadeqtxt" للإخراج 0

text (x، y، quadeqtxt، 'interpreter'، 'latex'، 'Fontize'، 36) ؛ ٪ يعرض نص quadeq في نافذة الرسم

r.moveDistance (-0.2، 0.2)٪ يعكس roomba 0.2m

r. TurnAngle (180 ، 0.5)٪ يدير roomba 180 درجة بأسرع ما يمكن

r.setLEDCenterColor (128 ، 128) ؛ ٪ يضبط إضاءة مركز Roomba على اللون البرتقالي

أغلق جميع٪ يغلق النوافذ المفتوحة المتبقية

تنتهي٪ end٪ "red_mean" جملة if

end٪ تنتهي بعبارة if "سوائل"

٪ end يغلق اللانهائية أثناء التكرار

تنتهي٪ end وظيفة "LiquidCheck"

الخطوة 4: تشغيل الكود

بعد نسخ الرمز ولصقه في MATLAB ، يجب عليك الاتصال بـ Roomba. بمجرد توصيل Roomba ، يجب عليك تسمية المتغير r. تستخدم الوظائف المتغير r عند الإشارة إلى Roomba ، لذلك يجب تعريف Roomba على أنه المتغير r. بعد تشغيل الكود ، يجب تشغيل جهاز Roomba وفقًا للتعليمات.

موصى به: