جدول المحتويات:
- الخطوة 1: المستلزمات
- الخطوة الثانية: تطوير البرمجة لإرضاء النتيجة المرغوبة
- الخطوة الثالثة: الاختبار
- الخطوة 4: مراقبة المخرجات المرئية
فيديو: IRobot Create-Mars Expedition Rover Mark I: 4 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
سيعلمك هذا الدليل كيفية إعداد 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 يشير إلى أن نباتك قد حدد الحياة العضوية.
هذه نهاية البرنامج التعليمي الخاص بنا ، استمتع بمركب استكشاف المريخ الجديد الخاص بك!
موصى به:
Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 خطوات (بالصور)
Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: مقدمة إن PongMate CyberCannon Mark III هو أحدث قطعة من تكنولوجيا بيرة البيرة وأكثرها تقدمًا ليتم بيعها للجمهور على الإطلاق. مع CyberCannon الجديد ، يمكن لأي شخص أن يصبح اللاعب الأكثر رعبا على طاولة بيرة بونغ. كيف هذا ص
Slave Trigger Flash Mark II: 6 خطوات (بالصور)
Slave Trigger Flash Mark II: في هذا الدليل سأشرح كيفية عمل فلاش مشغل حقيقي (بصري) مع الحد الأدنى من المكونات. هناك العديد من التصميمات المعقدة التي يمكنك العثور عليها على الإنترنت ، هذا التصميم بسيط للغاية ويعمل حسنًا في بيئة مضاءة وخافتة
استخدام وحدة الأوامر الخاصة بـ IRobot Create مع Linux: 4 خطوات
استخدام وحدة الأوامر الخاصة بـ IRobot Create مع Linux: نظرًا لأن iRobot لم يوفر لمستخدمي نظام التشغيل Linux طريقة لاستخدام وحدة الأوامر ، كان علي أن أكتشف ذلك بنفسي ، لا تخف ، فهذا ليس بالأمر الصعب على الإطلاق. كل ما عليك فعله هو تشغيل بعض البرامج النصية ، فلنبدأ ، أليس كذلك؟
تعديل IRobot Create to Paint: 6 خطوات (بالصور)
تعديل IRobot Create to Paint: هذا مشروع روبوتات من المحتمل أن يكمله شخص ليس لديه خبرة في الروبوتات على الإطلاق. أقول هذا لأنه ، قبل أن أبدأ ، لم يكن لدي أي خبرة مع الروبوتات. أو كتابة البرامج. في الواقع ، كنت أعرف كيف أرسم وكان ذلك
مكبرات الصوت Mark I Super Psyllium Passivia: 6 خطوات (بالصور)
مكبرات الصوت Mark I Super Psyllium Passivia: مستوحاة من العديد من تصميمات السماعات على التعليمات ، ما هي أفضل طريقة لدخول فن الصوت من جعل YAS (متحدث آخر)! نحن أشخاص عاديون هنا في مختبرات الصوت العادية ، وكان لدينا هذه الحاويات الفارغة الرائعة