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

מאדים רומבה: 6 שלבים
מאדים רומבה: 6 שלבים

וִידֵאוֹ: מאדים רומבה: 6 שלבים

וִידֵאוֹ: מאדים רומבה: 6 שלבים
וִידֵאוֹ: אל תיגע לבחורה באיפור בחייםםם !!!! don't do that !!! 2024, יולי
Anonim
מאדים רומבה
מאדים רומבה

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

שלב 1: אספקה

מה תצטרך לאסוף כדי לבצע פרויקט זה:

  • בוט שואב האבק של iRobot Create2 Roomba
  • פאי פטל
  • מצלמת פטל פי
  • הגרסה האחרונה של MATLAB
  • ארגז הכלים להתקנת Roomba עבור MATLAB
  • יישום MATLAB למכשיר סלולרי

שלב 2: הצהרת הבעיה

הצהרת הבעיה
הצהרת הבעיה

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

שלב 3: שלט Bluetooth

שלט Bluetooth
שלט Bluetooth

שקף זה יעבור בקוד כדי לשלוט בתנועת החדר באמצעות יכולות Bluetooth של מכשיר הטלפון החכם שלך. כדי להתחיל, הורד את אפליקציית MATLAB לסמארטפון שלך והיכנס לחשבון Mathworks שלך. לאחר הכניסה, עבור אל "עוד", "הגדרות", והתחבר למחשב שלך באמצעות כתובת ה- IP שלו. לאחר החיבור, חזור אל "עוד" ובחר "חיישנים". הקש על החיישן השלישי בסרגל הכלים העליון של המסך והקש על התחל. כעת, הסמארטפון שלכם הוא שלט רחוק!

הקוד הוא כדלקמן:

ואילו 0 == 0

השהה (.5)

PhoneData = M. Orientation;

Azi = PhoneData (1);

Pitch = PhoneData (2);

צד = PhoneData (3);

בליטות = r.getBumpers;

אם צד> 80 || צד <-80

r.stop

r.bep ('C, E, G, C^, G, E, C')

לשבור

צד אחר> 20 && צד <40

r.turnAngle (-5);

צד אחר> 40

r.turnAngle (-25);

elseif Side-40

r.turnAngle (5);

צד אחר <-40

r.turnAngle (25);

סוֹף

אם Pitch> 10 && Pitch <35

r.moveDistance (.03)

elseif Pitch> -35 && Pitch <-10

r.moveDistance (-. 03)

סוֹף

סוֹף

שלב 4: זיהוי השפעה

זיהוי השפעה
זיהוי השפעה

פונקציה נוספת שהטמענו הייתה לזהות את ההשפעה של הרומבה לאובייקט ולאחר מכן לתקן את הנתיב הנוכחי שלו. לשם כך, היינו צריכים להשתמש בתנאים עם הקריאות מחיישני הפגוש כדי לקבוע אם חפץ נפגע. אם הרובוט פוגע באובייקט, הוא יגבה.2 מטר ויסתובב בזווית שנקבעה על ידי איזו פגוש נפגע. לאחר שנפגע פריט, צץ תפריט המציג את המילה "אוף".

הקוד מוצג להלן:

ואילו 0 == 0

בליטות = r.getBumpers;

r.setDriveVelocity (.1)

אם bumps.left == 1

msgbox ('אוף!');

r.moveDistance (-0.2)

r.setTurnVelocity (.2)

r.turnAngle (-35)

r.setDriveVelocity (.2)

elseif bumps.front == 1

msgbox ('אוף!');

r.moveDistance (-0.2)

r.setTurnVelocity (.2)

r.turnAngle (90)

r.setDriveVelocity (.2)

elseif bumps.right == 1

msgbox ('אוף!');

r.moveDistance (-0.2)

r.setTurnVelocity (.2)

r.turnAngle (35)

r.setDriveVelocity (.2)

elseif bumps.leftWheelDrop == 1

msgbox ('אוף!');

r.moveDistance (-0.2)

r.setTurnVelocity (.2)

r.turnAngle (-35)

r.setDriveVelocity (.2)

elseif bumps.rightWheelDrop == 1

msgbox ('אוף!');

r.moveDistance (-0.2)

r.setTurnVelocity (.2)

r.turnAngle (35)

r.setDriveVelocity (.2)

סוֹף

סוֹף

שלב 5: זיהוי חיים

זיהוי חיים
זיהוי חיים

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

הקוד הוא כדלקמן:

t = 10;

i = 0;

בעוד t == 10

img = r.getImage; imshow (img)

השהה (0.167)

i = i + 1;

red_mean = ממוצע (ממוצע (img (:,:, 1)));

blue_mean = ממוצע (ממוצע (img (:,:, 3)));

green_mean = ממוצע (ממוצע (img (:,:, 2)));

white_mean = (blue_mean + green_mean + red_mean) / 3; %רוצים ערך זה בערך 100

nine_plus_ten = 21;

green_threshold = 125;

blue_threshold = 130;

white_threshold = 124;

red_threshold = 115;

בעוד nine_plus_ten == 21 %ירוק - חיים

אם green_mean> green_threshold && blue_mean <blue_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox ('נמצא מקור חיים אפשרי, מיקום מפותל');

הפסקה (2)

מחק (א)

[y2, Fs2] = קריאת שמע ('z_speak2.wav');

צליל (y2, Fs2)

הפסקה (2)

%plant = r.getImage; %imshow (צמח);

%שמור ('plant_img.mat', plant ');

%מיקום החלקה בירוק

i = 5;

לשבור

אַחֵר

nine_plus_ten = 19;

סוֹף

סוֹף

nine_plus_ten = 21;

בעוד nine_plus_ten == 21 %כחול - woder

אם blue_mean> blue_threshold && green_mean <green_threshold && white_mean <white_threshold && red_mean <red_threshold

r.moveDistance (-. 1)

a = msgbox ('נמצא מקור מים, מיקום משרטט');

הפסקה (2)

מחק (א)

[y3, Fs3] = קריאת שמע ('z_speak3.wav');

צליל (y3, Fs3);

%woder = r.getImage; %imshow (woder)

%שמור ('water_img.mat', woder)

מיקום החלקה בכחול

i = 5;

לשבור

אַחֵר

nine_plus_ten = 19;

סוֹף

סוֹף

nine_plus_ten = 21;

בעוד nine_plus_ten == 21 %לבנים - חייזרים monkaS

אם white_mean> white_threshold && blue_mean <blue_threshold && green_mean <green_threshold

[y5, Fs5] = קריאת שמע ('z_speak5.wav');

צליל (y5, Fs5);

הפסקה (3)

r.setDriveVelocity (0,.5)

[ys, Fss] = קריאת שמע ('z_scream.mp3');

צליל (ys, Fss);

הפסקה (3)

r.stop

% alien = r.getImage; %imshow (חייזרים);

% שמור ('alien_img.mat', alien);

i = 5;

לשבור

אַחֵר

nine_plus_ten = 19;

סוֹף

סוֹף

אם i == 5

a = 1; %מסובב את הזווית

t = 9; %מסיימים לולאה גדולה

i = 0;

סוֹף

סוֹף

שלב 6: הפעל אותו

אחרי שכל הקוד נכתב, שלבו את הכל לקובץ אחד וואלה! בוט Roomba שלך כעת יפעל באופן מלא ויפעל כפי שפורסם! עם זאת, פקד ה- Bluetooth צריך להיות בקובץ נפרד או להפריד משאר הקוד עם %%.

תהנה מהשימוש ברובוט שלך !!

מוּמלָץ: