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

רומבה אקספלורר: 4 שלבים
רומבה אקספלורר: 4 שלבים

וִידֵאוֹ: רומבה אקספלורר: 4 שלבים

וִידֵאוֹ: רומבה אקספלורר: 4 שלבים
וִידֵאוֹ: iRobot Roomba i3+/i4+ - More HASSLE than it's WORTH?! 2024, יולי
Anonim
רומבה אקספלורר
רומבה אקספלורר

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

חלקים וחומרים

לפרויקט זה, תזדקק

-מחשב

-גרסה מערבית של MATLAB (MATLAB R2018b שימשה לפרויקט זה)

- roomba התקן ארגז כלים

רובוט Create2 של iRobot

-פטל פטל עם מצלמה

שלב 1: אתחול וחיישנים

אתחול וחיישנים
אתחול וחיישנים

לפני שהתחלנו כל תכנות, הורדנו את ארגז הכלים roombaInstall, שאפשר גישה לרכיבים שונים של הרובוט.

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

להלן הקוד (מתוך MATLAB R2018b)

%% אתחול

dlgPrompts = {'מספר רומבה'};

dlgTitle = 'בחר את החדר שלך';

dlgDefaults = {''};

opts. Resize = 'on';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % חלון יצירה המבקש מהמשתמש להזין את מספר החדר שלו

n = str2double (dlgout {1});

r = roomba (n); % מאתחל את המשתמש שצוין Roomba %% קביעת מהירות מחיישני בליטות אור בעוד s = r.getLightBumpers; % מקבלים חיישני בליטה קלה

lbumpout_1 = שדה מיצוי (ים, 'שמאל'); % לוקח את הערכים המספריים של החיישנים והופך אותם לשמישים יותר lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = extractfield (s, 'leftCenter');

lbumpout_4 = extractfield (s, 'rightCenter');

lbumpout_5 = extractfield (s, 'rightFront');

lbumpout_6 = extractfield (s, 'right');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % ממיר ערכים למטריצה

sLbump = sort (lbout); ניתן לחלץ את המטריצה %לערך הנמוך ביותר

lowLbump = sLbump (1); מהירות =.05+(lowLbump)*.005 %באמצעות הערך הנמוך ביותר, המייצג מכשולים קרובים, כדי לקבוע מהירות, מהירות גבוהה יותר כאשר שום דבר לא זוהה

r.setDriveVelocity (מהירות, מהירות)

סוֹף

% פגושים פיזיים

b = r.getBumpers; %פלט נכון, שקר

bsen_1 = שדה מיצוי (ב, 'שמאל')

bsen_2 = שדה מיצוי (ב, 'ימין')

bsen_3 = extractfield (b, 'front')

bsen_4 = extractfield (b, 'leftWheelDrop')

bsen_5 = extractfield (b, 'rightWheelDrop')

bumps = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = sum (bums)

אם tbump> 0 r.setDriveVelocity (0, 0)

סוֹף

% חיישני מדרגה

c = r.getCliffSensors %% 2800 בטוח, אחרת מים

csen_1 = extractfield (c, 'left')

csen_2 = extractfield (c, 'right')

csen_3 = extractfield (c, 'leftFront')

csen_4 = extractfield (c, 'rightFront')

צוקים = [csen_1, csen_2, csen_3, csen_4]

ordcliff = מיין (צוקים)

אם ordcliff (1) <2750

r.setDriveVelocity (0, 0)

אם צוק <800

דיס 'צוק'

אַחֵר

לפזר 'מים'

סוֹף

r. TurnAngle (45)

סוֹף

שלב 2: קבלת נתונים

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

img = r.getImage; imshow (img);

imwrite (img, 'imgfromcamera.jpg')

photo = imread ('imgfromcamera.jpg')

ocrResults = ocr (תמונה)

מזההטקסט = ocrResults. Text;

דמות;

imshow (תמונה) טקסט (220, 0, מזהה טקסט, 'רקע צבע', [1 1 1]);

שלב 3: משימת סיום

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

% שליחת דואר אלקטרוני

setpref ('אינטרנט', 'SMTP_Server', 'smtp.gmail.com');

setpref ('אינטרנט', 'דואר אלקטרוני', '[email protected]'); % חשבון דואר לשלוח מ setpref ('אינטרנט', 'SMTP_Username', 'הזן דוא ל שולח'); % שולחים שם משתמש setpref ('אינטרנט', 'SMTP_Password', 'הזן סיסמת שולח'); % סיסמת שולחים

props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('הזן קבלת דוא ל', 'Roomba', 'Roomba חזר הביתה !!', 'imgfromcamera.jpg') חשבון דואר % לשלוח אליו

לאחר מכן הרובוט סיים.

שלב 4: מסקנה

סיכום
סיכום

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

*תזכורת: אל תשכח שארגז הכלים roombaInstall נחוצה כדי ש- MATLAB תתקשר עם הרובוט ועם ה- Raspberry Pi המשולב.

מוּמלָץ: