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

IRobot Create-Mars Expedition Rover Mark I: 4 خطوات
IRobot Create-Mars Expedition Rover Mark I: 4 خطوات

فيديو: IRobot Create-Mars Expedition Rover Mark I: 4 خطوات

فيديو: IRobot Create-Mars Expedition Rover Mark I: 4 خطوات
فيديو: How Robots Will Take Over Mars! 2024, يوليو
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

سيعلمك هذا الدليل كيفية إعداد iRobot Create باستخدام ترميز MatLab. سيكون لدى الروبوت الخاص بك القدرة على البحث عن المعادن من خلال تمييز الأشكال ، والمناورة في التضاريس الوعرة من خلال استخدام مستشعرات الجرف ، ولديه القدرة على التحكم يدويًا عبر البث المباشر.

الخطوة 1: المستلزمات

اللوازم
اللوازم

بالنسبة لهذا المشروع ، ستحتاج إلى iRobot Create ، وهو إصدار قابل للبرمجة من مكنسة روبوت Roomba. يأتي الروبوت مجهزًا بجميع المستشعرات اللازمة لهذا المشروع ، وتحديداً مستشعرات الصدمات وأجهزة استشعار الجرف وأجهزة استشعار "Light Bump". ستحتاج أيضًا إلى Raspberry Pi وكاميرا فيديو تستخدمان للاتصال اللاسلكي والبرمجة الحية وتغذية الفيديو الحية. أخيرًا ، ستحتاج إلى حامل مطبوع ثلاثي الأبعاد لجهاز Raspberry Pi والكاميرا.

الخطوة الثانية: تطوير البرمجة لإرضاء النتيجة المرغوبة

تطوير البرمجة لإرضاء النتيجة المرغوبة
تطوير البرمجة لإرضاء النتيجة المرغوبة

بمجرد توصيل جهاز Roomba الخاص بك ، ستحتاج إلى إنشاء كود Matlab الذي سيعطيك المخرجات المرغوبة بعد المدخلات المرغوبة.

يمكن رؤية الرمز هنا:

مشروع Roomba٪ Brenten Arnold (barnol15) ؛ جوليان كورن (qdp218) ؛ Mike Heal (mheal)٪ 4/11/19٪ وصف المشكلة: قم بإنشاء مركبة جوالة لمساعدة البشر أثناء٪ استكشاف / استيطان المريخ. ٪ طريقة الحل: ابحث عن مادة عضوية (خضراء) من خلال استخدام مصدات الضوء ، وأجهزة استشعار المنحدرات والكاميرا للتحقق من المواد العضوية. اسمح لـ٪ العربة الجوالة بالتنقل في التضاريس الوعرة من خلال استخدام المصدات وأجهزة استشعار ارتفاع العجلة. تمكين البشر من التحكم في العربة الجوالة من٪ مسافة آمنة بعيدًا والبحث يدويًا عن المعادن. الاختيارات = {'LIFE'، 'ROUGH TERRAIN'، 'USER CONTROL'} ؛ ٪ ثلاثة خيارات في قائمة الحوار الإعداد = القائمة ('' ، الاختيارات) إذا كان الإعداد> 0٪ إذا تم اختيار الخيار اسأل عن اختيارات تأكيد المستخدم 2 = {'نعم' ، 'لا'}٪ إنشاء مجموعة خلايا لـ "نعم" أو "لا" "اختيار تأكيد = القائمة (['اخترت" "اختيارات {الإعداد}" "الوضع.'] ، الاختيارات 2)٪ تأكيد اختيار إعداد المستخدم إذا كان التأكيد == 1 إذا كان الإعداد == 1٪ تحقق مما إذا كان الإعداد" LIFE "قد تم اختياره أم لا = 0 بينما i == 0 r.setLEDDigits (num2str ('LIFE'))٪ عرض "LIFE" على مؤشر LED لـ i = 1: 100 r.setDriveVelocity (0.05)٪ حرك roomba للأمام بسرعة 0.05 م / سي = r.getCliffSensors ٪ استرداد قيم مستشعر المنحدرات وتخزينها في بنية الخلية "y" l = r.getLightBumpers٪ استرداد قيم ارتطام الضوء وتخزينها في الهيكل "f" في حالة اليسار> 100٪ تحقق مما إذا كان مصد الضوء الأيسر مغطى r.moveDistance (-0.05)٪ تحريك roomba للخلف 0.05 متر r.turnAngle (20)٪ تدوير roomba 20 درجة CCW img = r.getImage٪ الحصول على صورة من كاميرا فطيرة التوت على roomba rect = [100 0150 150] ؛ img = imcrop (img، rect)٪ اقتصاص الصورة للتركيز على أحمر المركز = متوسط (يعني (img (: ،: ، 1)))٪ متوسط كثافة اللون الأحمر أخضر = متوسط (يعني (img (: ،: ، 2)))٪ متوسط كثافة اللون الأخضر = متوسط (متوسط (img (: ،: ، 3)))٪ متوسط كثافة اللون الأزرق إذا كان أخضر> أحمر وأخضر> أزرق٪ تحقق مما إذا كان النبات في الصورة d = msgbox (['تم العثور على الحياة! ']) ؛ ٪ عرض مربع رسالة يقول "وجدت الحياة!" waitfor (د) ؛ end elseif l.leftFront> 100٪ تحقق من اليسار / المصد الأمامي مغطى r.moveDistance (-0.05)٪ انقل roomba للخلف 0.05 متر img = r.getImage٪ احصل على صورة من كاميرا فطيرة التوت على roomba وقم بتخزينها في متغير 'img 'rect = [100 0150 150] ؛ img = imcrop (img، rect)٪ اقتصاص الصورة للتركيز على أحمر المركز = متوسط (يعني (img (: ،: ، 1)))٪ متوسط كثافة اللون الأحمر أخضر = متوسط (يعني (img (: ،: ، 2)))٪ متوسط كثافة اللون الأخضر أزرق = متوسط (متوسط (img (: ،: ، 3))))٪ متوسط كثافة اللون الأزرق إذا كان أخضر> أحمر وأخضر> أزرق٪ تحقق مما إذا كان النبات في الصورة d = msgbox (['تم العثور على الحياة! ']) ؛ ٪ عرض مربع رسالة يقول "وجدت الحياة!" waitfor (د) ؛ end elseif l.leftCenter> 100٪ تحقق مما إذا كان مصد الضوء الأيسر / الأوسط مغطى r.moveDistance (-0.05)٪ انقل roomba للخلف 0.05 متر img = r.getImage٪ احصل على صورة من كاميرا فطيرة التوت على roomba وقم بتخزينها في متغير 'img 'rect = [100 0150 150] ؛ img = imcrop (img، rect)٪ اقتصاص الصورة للتركيز على أحمر المركز = يعني (يعني (img (: ،: ، 1)))٪ متوسط كثافة الأحمر أخضر = متوسط (يعني (img (: ،: ، 2)))٪ متوسط كثافة اللون الأخضر = متوسط (متوسط (img (: ،: ، 3)))٪ متوسط كثافة اللون الأزرق إذا كان أخضر> أحمر وأخضر> أزرق٪ تحقق مما إذا كان النبات في الصورة d = msgbox (['تم العثور على الحياة! ']) ؛ ٪ عرض مربع رسالة يقول "وجدت الحياة!" waitfor (د) ؛ end elseif l.rightCenter> 100٪ تحقق مما إذا كان مصد الضوء الأيمن / الأوسط مغطى r. تحريك المسافة (-0.05)٪ تحريك roomba للخلف 0.05 متر img = r.getImage٪ الحصول على صورة من كاميرا فطيرة التوت على roomba وتخزينها في متغير 'img 'rect = [100 0150 150] ؛ img = imcrop (img، rect)٪ اقتصاص الصورة للتركيز على أحمر المركز = متوسط (يعني (img (: ،: ، 1)))٪ متوسط كثافة اللون الأحمر أخضر = متوسط (يعني (img (: ،: ، 2)))٪ متوسط كثافة اللون الأخضر = متوسط (متوسط (img (: ،: ، 3)))٪ متوسط كثافة اللون الأزرق إذا كان أخضر> أحمر وأخضر> أزرق٪ تحقق مما إذا كان النبات في الصورة d = msgbox (['تم العثور على الحياة! ']) ؛ ٪ عرض مربع رسالة يقول "وجدت الحياة!" waitfor (د) ؛ end elseif l.rightFront> 100٪ تحقق مما إذا كان مصد الضوء الأيمن / الأمامي مغطى r.moveDistance (-0.05)٪ انقل roomba للخلف 0.05 متر img = r.getImage٪ احصل على صورة من كاميرا فطيرة التوت على roomba وقم بتخزينها في متغير 'img 'rect = [100 0150 150] ؛ img = imcrop (img، rect)٪ اقتصاص الصورة للتركيز على أحمر المركز = متوسط (يعني (img (: ،: ، 1)))٪ متوسط كثافة اللون الأحمر أخضر = متوسط (يعني (img (: ،: ، 2)))٪ متوسط كثافة اللون الأخضر = متوسط (متوسط (img (: ،: ، 3)))٪ متوسط كثافة اللون الأزرق إذا كان أخضر> أحمر وأخضر> أزرق٪ تحقق مما إذا كان النبات في الصورة d = msgbox (['تم العثور على الحياة! ']) ؛ ٪ عرض مربع رسالة يقول "وجدت الحياة!" waitfor (د) ؛ end elseif l.right> 100٪ تحقق من تغطية مصد الضوء الأيمن r. التحرك المسافة (-0.05)٪ تحريك roomba للخلف 0.05 متر r.turnAngle (-20)٪ تدوير roomba 20 درجة CW img = r.getImage٪ الحصول على صورة من كاميرا فطيرة التوت في roomba وتخزينها في متغير 'img' rect = [100 0 150 150] ؛ img = imcrop (img، rect)٪ اقتصاص الصورة للتركيز على أحمر المركز = متوسط (يعني (img (: ،: ، 1)))٪ متوسط كثافة اللون الأحمر أخضر = متوسط (يعني (img (: ،: ، 2)))٪ متوسط كثافة اللون الأخضر = متوسط (متوسط (img (: ،: ، 3)))٪ متوسط كثافة اللون الأزرق إذا كان أخضر> أحمر وأخضر> أزرق٪ تحقق مما إذا كان النبات في الصورة d = msgbox (['تم العثور على الحياة! ']) ؛ ٪ عرض مربع رسالة يقول "وجدت الحياة!" waitfor (د) ؛ end elseif y.leftFront <1500٪ تحقق مما إذا كان الجزء الأيسر / الأمامي من roomba بعيدًا عن الجرف r أم لا المسافة (-0.1، 0.05)٪ انقل roomba للخلف 0.1 متر عند 0.05 م / ث ص استدارة الزاوية (-5)٪ تدوير roomba 5 درجة CW آخر إذا ص يمينًا المقدمة <1500٪ تحقق مما إذا كان الجزء الأيمن / الأمامي من roomba بعيدًا عن الجرف r أم لا المسافة (-0.1، 0.05)٪ حرك roomba للخلف 0.1 متر عند 0.05 م / ث ص استدارة الزاوية (5)٪ تدوير roomba 5 درجات CCW else إذا كان y يسارًا <1000٪ تحقق مما إذا كان الجانب الأيسر من roomba بعيدًا عن الجرف r أم لا المسافة (-0.05، 0.05)٪ حرك roomba للخلف 0.05 متر عند 0.05 م / ث ص استدارة الزاوية (-10)٪ تدوير roomba 10 درجات CW elseif y.right0٪ تشغيل إذا تم الضغط على الزر إذا تم متابعة == 1 i = 0٪ استمر في البحث عن الحياة else i = 1٪ End LIFE mode end end elseif Setting == 2٪ تحقق من اختيار إعداد "ROUGH TERRAIN" i = 0 بينما i == 0 r.setLEDDigits (num2str ('RGH'))٪ عرض "Rough" على شاشة LED لـ i = 1: 1000 r.setDriveVelocity (0.05)٪ تعيين سرعة محرك roomba إلى 0.05 m / sx = r.getBumpers٪ استرداد قيم مستشعر المصد وتخزينها في بنية "x" y = r.get CliffSensors٪ استرداد قيم مستشعر الجرف وتخزينها في الهيكل "y" إذا كانت x.right == 1٪ تحقق مما إذا كان المصد الأيمن مضغوطًا r.turnAngle (10)٪ استدارة roomba 10 درجات CCW elseif x.left == 1٪ تحقق مما إذا كان اليسار تم الضغط على ممتص الصدمات r. TurnAngle (-10)٪ استدارة roomba 10 درجات CW elseif x.front == 1٪ تحقق مما إذا كان المصد الأمامي مضغوطًا r. TurnAngle (20) ٪ تدوير roomba 20 درجة CCW elseif x.rightWheelDrop == 1٪ تحقق مما إذا كانت العجلة اليمنى قد انخفضت r. TurnAngle (-20)٪ تدوير roomba 20 درجة CW elseif x.leftWheelDrop == 1٪ تحقق من سقوط العجلة اليسرى r الانعطاف (20)٪ تدوير roomba 20 درجة CCW وإلا إذا y.leftFront < 1500٪ تحقق مما إذا كان الجزء الأيسر الأمامي من roomba بعيدًا عن الجرف r. تحرك المسافة (-0.05، 0.05)٪ انقل roomba للخلف 0.05 متر عند 0.05 م / ث ص. 1500٪ تحقق مما إذا كان الجزء الأمامي الأيمن من roomba بعيدًا عن الجرف r. تحرك المسافة (-0.05، 0.05)٪ حرك roomba للخلف 0.05 متر عند 0.05 م / ث ص الانعطاف (5)٪ قم بتدوير roomba 5 درجات CCW وإلا إذا كان اليسار أقل من 1000 ٪ تحقق مما إذا كان الجزء المتبقي س f roomba بعيدًا عن الجرف r. التحرك المسافة (-0.05، 0.05)٪ حرك roomba للخلف 0.05 متر عند 0.05 m / s r الانعطاف (-10)٪ قم بتدوير roomba 10 درجات CW وإلا إذا y. right0 إذا استمر == 1 i = 0 ٪ متابعة التضاريس الوعرة وإلا i = 1٪ إنهاء نهاية نهاية التضاريس الوعرة ،٪ الوضع اليدوي i = 0 r.setLEDDigits (num2str ('USER'))٪ عرض 'USER' على شاشة LED d = msgbox (['مفاتيح الأسهم - نقل؛ S - ستوب روفر ؛ ESC - تحكم المستخدم النهائي ؛ أ - تحديد موقع ']) ؛ waitfor (د) ؛ بينما i == 0 r.showCamera٪ فتح تغذية حية لكاميرا فطيرة التوت في نافذة منفصلة D = getkey (1)٪ استرداد مفتاح الضغط من قبل المستخدم ، قم بتخزين قيمة ASCII كمتغير D إذا كانت D == 30٪ تحقق مما إذا كان السهم "لأعلى" تم الضغط عليه r.setDriveVelocity (0.1)٪ أرسل roomba للأمام بسرعة 0.2 m / s elseif D == 28٪ تحقق مما إذا كان السهم "الأيسر" مضغوطًا r.setDriveVelocity (0)٪ إيقاف roomba من التحرك للأمام أو للخلف r. TurnAngle (15 ، 0.05)٪ تدوير roomba 45 درجة CCW عند 0.05 م / ثانية elseif D == 31٪ تحقق مما إذا كان السهم "لأسفل" مضغوطًا r.setDriveVelocity (-0.1)٪ انقل roomba للخلف بسرعة 0.2 م / ث elseif D == 29٪ تحقق مما إذا كان السهم "الأيمن" مضغوطًا على r.setDriveVelocity (0)٪ إيقاف roomba من التحرك للأمام أو للخلف r. TurnAngle (-15، 0.05)٪ استدارة roomba 45 درجة CW عند 0.05 م / ث elseif D == 27٪ تحقق مما إذا كان تم الضغط على مفتاح "esc" (escape) i = 1٪ تغيير قيمة المتغير "i" للخروج من الحلقة d = msgbox ('Exiting "User Control"')٪ دع المستخدم يعرف أن الوضع اليدوي يتم الخروج منه elseif D == 115٪ تحقق من الضغط على مفتاح "s" r.setDriveVelocity (0)٪ إيقاف roomba من الذهاب للأمام أو للخلف elseif D == 97٪ تحقق مما إذا كان قد تم الضغط على "a" image = r.getImage؛ imwrite (image، 'image.png') W = تصنيف (صورة) K = الوضع (W) إذا كان K == 3 d = msgbox ('تم العثور على المورد')٪ عرض إذا تم اكتشاف مورد مستطيل waitfor (d) ؛ ٪ انتظر حتى يغلق المستخدم مربع الرسالة "d" elseif K == 0 d = msgbox ('Not Resource:(')٪ عرض إذا لم يتم اكتشاف المورد المستطيل waitfor (d) ؛٪ انتظر حتى يغلق المستخدم مربع الرسالة "d" end else d = msgbox ('ليس إدخال مفتاح صالحًا.')٪ عرض إذا أغلق المستخدم قائمة الانتظار "اختر الإعداد" waitfor (d) ؛٪ انتظر حتى يغلق المستخدم مربع الرسالة "d" end waitfor (d) ؛٪ انتظر حتى يغلق المستخدم مربع الرسالة "d" end end else d = msgbox ('Goodbye')٪ يقول وداعًا إذا كانت الخيارات مغلقة تنتهي waitfor (d) ؛

الخطوة الثالثة: الاختبار

اختبارات
اختبارات

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

الخطوة 4: مراقبة المخرجات المرئية

مراقبة المخرجات المرئية
مراقبة المخرجات المرئية
مراقبة المخرجات المرئية
مراقبة المخرجات المرئية

سيكون واضحًا جدًا ما إذا كنت قد قمت ببرمجة جهاز Roomba الخاص بك بنجاح أم لا بناءً على مخرجاته المرئية.

المخرجات تشمل:

  • اكتشاف الشكل: قدرة جهاز Roomba على تمييز الأشكال بشكل صحيح من أجل العثور على المعادن الصحيحة
  • مناورات التضاريس الوعرة: لتجنب المنحدرات أو المناطق المظلمة
  • الوضع اليدوي: التغذية الحية والقدرة على التحكم في جهاز Roomba
  • بالصور: صور للمعادن
  • وجدت الحياة!: مربع نص MatLab يشير إلى أن نباتك قد حدد الحياة العضوية.

هذه نهاية البرنامج التعليمي الخاص بنا ، استمتع بمركب استكشاف المريخ الجديد الخاص بك!

موصى به: