תוכן עניינים:

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 שלבים
וִידֵאוֹ: Посадка Марсохода Perseverance- История Изнутри 2024, יולי
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

מדריך זה ילמד אותך כיצד להגדיר את iRobot Create באמצעות קידוד MatLab. לרובוט שלך תהיה אפשרות לחפש מינרלים על ידי הבחנה בצורות, לתמרן שטח מחוספס באמצעות חיישני מצוק, ויש לו יכולת שליטה ידנית באמצעות הזנה חיה.

שלב 1: חומרים מתכלים

אספקה
אספקה

לפרויקט זה תזדקק ל- iRobot Create, שהוא גרסה לתכנות של שואב האבק הרובוט Roomba. הרובוט מגיע מצויד בכל החיישנים הדרושים לפרויקט זה, במיוחד חיישני בליטות, חיישני צוק וחיישני "מכה קלה". תזדקק גם למצלמת Raspberry Pi ומצלמת וידיאו, המשמשת לתקשורת אלחוטית, תכנות חי והזנת וידאו בשידור חי. לבסוף, תזדקק לתושבת מודפסת תלת מימד עבור ה- Raspberry Pi והמצלמה.

שלב 2: פיתוח קידוד כדי לספק את התוצאה הרצויה

פיתוח קידוד כדי לספק את התוצאה הרצויה
פיתוח קידוד כדי לספק את התוצאה הרצויה

לאחר שחיברת את Roomba שלך, יהיה עליך ליצור קוד Matlab שייתן לך את הפלט הרצוי לאחר הכניסות הרצויות.

את הקוד ניתן לראות כאן:

%פרויקט רומבה%ברנטן ארנולד (barnol15); ג'וליאן קורן (qdp218); מייק היאל (mheal) %4/11/19 %תיאור הבעיה: צור רובר שיסייע לבני אדם במהלך %חקר/מגורים של מאדים. %שיטת פתרון: חפש חומר אורגני (ירוק) באמצעות %פגושים אור, חיישני צוק ומצלמה כדי לבדוק אם יש חומר אורגני. אפשר ל %הרובר לנווט בשטח מחוספס באמצעות פגושים, חיישני %צוק וחיישני גובה גלגלים. אפשר לבני אדם לשלוט ברובר מ- %במרחק בטוח ולחפש ידנית מינרלים. בחירות = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %שלוש אפשרויות בתפריט הדו -שיח הגדרה = תפריט ('', אפשרויות) אם הגדרה> 0 %אם בחרה באפשרות בקש אפשרויות אישור משתמש 2 = {'כן', 'לא'} %צור מערך תאים עבור "כן" או "לא" "choice Confirm = תפריט (['' בחרת" 'בחירות {Setting}' "mode. '], options2) %אשר את בחירת הגדרת המשתמש אם Confirm == 1 אם Setting == 1 %בדוק אם הוגדרה" LIFE "i = 0 בעוד i == 0 r.setLEDDigits (num2str ('LIFE')) הצג 'LIFE' על LED עבור i = 1: 100 r.setDriveVelocity (0.05) %העבר את roomba קדימה ב- 0.05 m/sy = r.getCliffSensors %אחזר ושמור ערכי חיישן מצוק במבנה התא "y" l = r.getLightBumpers %אחזר ושמור ערכי בליטות אור במבנה "f" אם l. left> 100 %בדוק אם פגוש האור השמאלי מכוסה r.moveDistance (-0.05) %הזז roomba לאחור 0.05 מטר r.turnAngle (20) %סובב roomba 20 מעלות CCW img = r.getImage %קבל תמונה ממצלמת פשטידת הפטל על roomba rect = [100 0 150 150]; img = imcrop (img, rect) %חיתוך תמונה להתמקד במרכז אדום = ממוצע (ממוצע (img (:,:, 1))) %ממוצע עוצמת אדום ירוק = ממוצע (ממוצע (img (:,:, 2))) %עוצמת ירוק ממוצעת כחולה = ממוצע (ממוצע (img (:,:, 3))) %עוצמת כחול ממוצעת אם ירוק> אדום && ירוק> כחול %בדוק אם הצמח נמצא בתמונה d = msgbox (['חיים נמצאו! ']); %הצג תיבת הודעות שאומרת "חיים נמצאו!" ממתין (ד); סוף אחר אם l.leftFront> 100 %הבדיקה נשארת שמאלה/פגוש האור הקדמי מכוסה r.moveDistance (-0.05) %הזז roomba אחורה 0.05 מטר img = r.getImage %קבל תמונה ממצלמת פשטידת הפטל על roomba ושמור ב- img משתנה 'rect = [100 0 150 150]; img = imcrop (img, rect) %חיתוך תמונה להתמקד במרכז אדום = ממוצע (ממוצע (img (:,:, 1))) %ממוצע עוצמת אדום ירוק = ממוצע (ממוצע (img (:,:, 2))) %עוצמת ירוק ממוצעת כחולה = ממוצע (ממוצע (img (:,:, 3))) %עוצמת כחול ממוצעת אם ירוק> אדום && ירוק> כחול %בדוק אם הצמח נמצא בתמונה d = msgbox (['חיים נמצאו! ']); %הצג תיבת הודעות שאומרת "חיים נמצאו!" ממתין (ד); סוף אחר אם l.leftCenter> 100 %בדוק אם פגוש האור השמאלי/מרכזי מכוסה r.moveDistance (-0.05) %הזז roomba אחורה 0.05 מטר img = r.getImage %קבל תמונה ממצלמת פשטידת הפטל על roomba ושמור במשתנה 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %חיתוך תמונה כדי להתמקד במרכז אדום = ממוצע (ממוצע (img (:,:, 1))) %ממוצע עוצמת אדום ירוק = ממוצע (ממוצע (img (:,:, 2))) %עוצמת ירוק ממוצעת כחולה = ממוצע (ממוצע (img (:,:, 3))) %עוצמת כחול ממוצעת אם ירוק> אדום && ירוק> כחול %בדוק אם הצמח נמצא בתמונה d = msgbox (['חיים נמצאו! ']); %הצג תיבת הודעות שאומרת "חיים נמצאו!" ממתין (ד); סוף אחר אם l.rightCenter> 100 %בדוק אם פגוש האור הימני/מרכזי מכוסה r.moveDistance (-0.05) %הזז roomba לאחור 0.05 מטר img = r.getImage %קבל תמונה ממצלמת פשטידת הפטל על roomba ושמור במשתנה img 'rect = [100 0 150 150]; img = imcrop (img, rect) %חיתוך תמונה להתמקד במרכז אדום = ממוצע (ממוצע (img (:,:, 1))) %ממוצע עוצמת אדום ירוק = ממוצע (ממוצע (img (:,:, 2))) %עוצמת ירוק ממוצעת כחולה = ממוצע (ממוצע (img (:,:, 3))) %עוצמת כחול ממוצעת אם ירוק> אדום && ירוק> כחול %בדוק אם הצמח נמצא בתמונה d = msgbox (['חיים נמצאו! ']); %הצג תיבת הודעות שאומרת "חיים נמצאו!" ממתין (ד); סוף אחר אם l.rightFront> 100 %בדוק אם פגוש האור הימני/הקדמי מכוסה r.moveDistance (-0.05) %הזז את roomba לאחור 0.05 מטר img = r.getImage %קבל תמונה ממצלמת פשטידת הפטל על roomba ושמור ב- img משתנה 'rect = [100 0 150 150]; img = imcrop (img, rect) %חיתוך תמונה להתמקד במרכז אדום = ממוצע (ממוצע (img (:,:, 1))) %ממוצע עוצמת אדום ירוק = ממוצע (ממוצע (img (:,:, 2))) %עוצמת ירוק ממוצעת כחולה = ממוצע (ממוצע (img (:,:, 3))) %עוצמת כחול ממוצעת אם ירוק> אדום && ירוק> כחול %בדוק אם הצמח נמצא בתמונה d = msgbox (['חיים נמצאו! ']); %הצג תיבת הודעות שאומרת "חיים נמצאו!" ממתין (ד); סוף אחר אם l.right> 100 %בדוק אם פגוש האור הימני מכוסה r.moveDistance (-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 (['חיים נמצאו! ']); %הצג תיבת הודעות שאומרת "חיים נמצאו!" ממתין (ד); סוף אחר אם y. left קדמי <1500 %בדוק אם החלק השמאלי/הקדמי של roomba נמצא מחוץ לצוק r.moveDistance (-0.1, 0.05) %הזז את roomba לאחור 0.1 מטר ב 0.05 m/s r.turnAngle (-5) %סובב roomba 5 מעלות CW אחרת אם y.right הקדמי <1500 %בדוק אם החלק הימני/קדמי של הרומבה נמצא מחוץ לצוק r.moveDistance (-0.1, 0.05) %הזז את roomba לאחור 0.1 מטר ב 0.05 m/s r.turnAngle (5) %סובב roomba 5 מעלות CCW אחר אם y. left <1000 %בדוק אם הצד השמאלי של roomba נמצא מחוץ לצוק r.moveDistance (-0.05, 0.05) %הזז roomba לאחור 0.05 מטר ב 0.05 m/s r.turnAngle (-10) %סובב roomba 10 מעלות CW elseif y.right0 %הפעלה אם לוחצים על הלחצן אם המשך == 1 i = 0 %המשך בחיפוש אחר חיים i = 1 %סיום מצב LIFE סוף סוף סוף אחר הגדרה == 2 %בדוק אם נבחרה ההגדרה "ROUGH TERRAIN" i = 0 בעוד i == 0 r.setLEDDigits (num2str ('RGH')) %תצוגה 'מחוספסת' בתצוגת 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 אחר אם x.front == 1 %בדוק אם הפגוש הקדמי נלחץ r.turnAngle (20) %סובב roomba 20 מעלות CCW elseif x.rightWheelDrop == 1 % בדוק אם הגלגל הימני ירד r.turnAngle (-20) %סובב roomba 20 מעלות CW elseif x.leftWheelDrop == 1 %בדיקה האם הגלגל השמאלי ירד r.turnAngle (20) %סובב roomba 20 מעלות CCW elseif y.leftFront < 1500 %בדוק אם החלק השמאלי הקדמי של roomba נמצא מחוץ לצוק r.moveDistance (-0.05, 0.05) %הזז roomba אחורה 0.05 מטר ב 0.05 m/s r.turnAngle (-5) %סובב roomba 5 מעלות CW elseif y.rightFront < 1500 %בדוק אם החלק הקדמי הימני של הרומבה נמצא מחוץ לצוק r.moveDistance (-0.05, 0.05) %הזז את roomba לאחור 0.05 מטר ב 0.05 m/s r.turnAngle (5) %סובב roomba 5 מעלות CCW elseif y. left <1000 בדוק אם החלק השמאלי o f roomba נמצא מחוץ לצוק r.moveDistance (-0.05, 0.05)%הזז roomba לאחור 0.05 מטר ב 0.05 m/s r.turnAngle (-10)%סובב roomba 10 מעלות CW ifif y.right0 אם המשך == 1 i = 0 %המשך שטח מחוספס אחר i = 1 %סיום שטח מחוספס סוף קצה סוף אחר %מצב ידני i = 0 r.setLEDDigits (num2str ('USER')) %הצגת 'USER' בתצוגת LED d = msgbox (['מקשי החצים - מהלך / לזוז / לעבור; S - סטופר רובר; ESC - בקרת משתמשי קצה; א - אתר משאב ']); ממתין (ד); בעוד i == 0 r.showCamera %פתח את המצלמה של פטל פטל הזנה חיה בחלון נפרד D = getkey (1) %אחזור מקש המשתמש נלחץ, אחסן את ערך ASCII כמשתנה D אם D == 30 %בדוק אם יש בחץ "למעלה" נלחץ r.setDriveVelocity (0.1) %שלח roomba קדימה ב 0.2 מ/ש אחר if D == 28 %בדוק אם לחץ "שמאל" r.setDriveVelocity (0) %עצור את roomba מלנוע קדימה או אחורה r.turnAngle (15, 0.05) %סובב roomba 45 מעלות CCW ב 0.05 m/s elseif D == 31 %בדוק אם לחץ "למטה" r.setDriveVelocity (-0.1) %הזז roomba לאחור ב 0.2 m/s elseif D == 29 % בדוק אם נלחץ על החץ "ימינה" r.setDriveVelocity (0) %עצור את roomba מלנוע קדימה או אחורה r.turnAngle (-15, 0.05) %סובב roomba 45 מעלות CW ב 0.05 m/s אחר D == 27 %בדוק אם לחצו על מקש "esc" (בריחה) i = 1 %שינוי ערך של משתנה "i" ליציאה מלולאה d = msgbox ('יציאה מ'בקרת משתמש' ') %הודע למשתמש כי מצב ידני יוצא אחר אם D == 115 %בדוק אם מקש "s" נלחץ r.setDriveVelocity (0) %עצור roomba מ קדימה או אחורה אחרת D == 97 %בדוק אם "a" נלחץ image = r.getImage; imwrite (image, 'image.png') W = סיווג (תמונה) K = mode (W) אם K == 3 d = msgbox ('נמצא משאב') %הצג אם מזוהה משאב מלבני waitfor (d); %המתן עד שהמשתמש יסגור את תיבת ההודעות "d" elseif K == 0 d = msgbox ('Not Resource:(') %הצג אם משאב מלבני לא זוהה waitfor (d); %המתן עד שהמשתמש יסגור את תיבת ההודעות "d" סוף אחר d = msgbox ('לא קלט מפתח חוקי.') %הצג אם המשתמש סוגר את תפריט "בחר הגדרה" waitfor (d); %המתן עד שהמשתמש יסגור את תיבת ההודעות "d" סוף waitfor (d); %המתן עד משתמש לסגור את תיבת ההודעות "d" סוף סוף סוף אחר d = msgbox ('להתראות') %נפרד לשלום אם האפשרויות נסגרות סוף waitfor (d);

שלב 3: בדיקה

בדיקה
בדיקה

לאחר שנכתב הקוד שלך, יהיה עליך לבדוק את Roomba שלך. למרות שהקוד שלך נראה נכון, הרבה מהערכים שלך, במיוחד מבחינת צבע או צורה, יהיה צורך לשנות כדי לזהות כראוי את האובייקטים שהיית רוצה שהרומבה שלך יזהה.

שלב 4: צפה ביציאות ויזואליות

צפה ביציאות ויזואליות
צפה ביציאות ויזואליות
צפה ביציאות ויזואליות
צפה ביציאות ויזואליות

יהיה ברור מאוד אם תיכנת את Roomba שלך בהצלחה על סמך התפוקות החזותיות שלו.

התפוקות כוללות:

  • זיהוי צורה: יכולתו של הרומבה להבחין בצורה נכונה בצורות על מנת למצוא את המינרלים הנכונים
  • תמרוני שטח מחוספס: נמנע מצוקים או אזורים חשוכים
  • מצב ידני: הזנה חיה והיכולת לשלוט ברומבה
  • תמונות: תמונות של מינרלים
  • חיים נמצאו !: תיבת טקסט של MatLab המציינת כי הצמח שלך זיהה חיים אורגניים.

זה הסוף של ההדרכה שלנו, תהנה מהאנדר החדש שלך של Expedition Rover!

מוּמלָץ: