جدول المحتويات:
فيديو: مشروع Mars Roomba UTK: 4 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
إخلاء المسؤولية: لن يعمل هذا إلا إذا تم إعداد الغرفة في 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 وفقًا للتعليمات.
موصى به:
تحويل جهاز Roomba الخاص بك إلى مركبة Mars Rover: 5 خطوات
تحويل جهاز Roomba الخاص بك إلى Mars Rover:
مشروع الروبوت UTK 2017: 3 خطوات
مشروع الروبوت UTK 2017: المهمة: تم تعيين فريق المهندسين لدينا من قبل Froogle ، وهي مؤسسة غير ربحية لتطوير التكنولوجيا مفتوحة المصدر ، لتطوير فرق مبتكرة لمساعدة الإنسان في Mars Rover.-Out & quot؛ rover & quot؛ هو جهاز Roomba قمنا بترميزه لتنفيذ سلسلة
مشروع "Ready Maker" - التحكم في مشروع Lego Power Functions: 9 خطوات
"Ready Maker" - التحكم في مشروع "Lego Power Functions": تعلم كيفية التحكم في وظائف Lego & quot؛ Power & quot؛ المكونات مع لوحة Arduino وبناء مشروعك في & quot؛ Ready Maker & quot؛ محرر (لا يوجد كود مطلوب) للتحكم عن بعد في نموذجك
مشروع Roomba MATLAB: 5 خطوات
مشروع Roomba MATLAB: الخطة الحالية التي وضعتها وكالة ناسا لمركبة المريخ هي أن تكون مجمِّعًا للبيانات وتتجول حول المريخ ، وتجمع عينات من التربة لإعادتها إلى الأرض حتى يتمكن العلماء من معرفة ما إذا كان هناك أي أشكال حياة سابقة عليها الكون. إضافي
مشروع Roomba: 5 خطوات (بالصور)
مشروع Roomba: تم إنشاء هذا التوجيه لتلبية متطلبات المشروع الخاصة بـ Makecourse في جامعة جنوب فلوريدا (www.makecourse.com). سيغطي هذا التوجيه جميع الخطوات والمكونات اللازمة المطلوبة لتجميع مشروع Roomba الخاص بي