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

UTK EF 230 MarsRoomba Project סתיו 2018: 5 שלבים
UTK EF 230 MarsRoomba Project סתיו 2018: 5 שלבים

וִידֵאוֹ: UTK EF 230 MarsRoomba Project סתיו 2018: 5 שלבים

וִידֵאוֹ: UTK EF 230 MarsRoomba Project סתיו 2018: 5 שלבים
וִידֵאוֹ: Глава 11. Джейн Эйр Шарлотты Бронте 2024, יולי
Anonim
UTK EF 230 MarsRoomba Project סתיו 2018
UTK EF 230 MarsRoomba Project סתיו 2018

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

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

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

שלב 1: חומרים דרושים

חומרים דרושים
חומרים דרושים

1) מחשב/מחשב נייד נגיש לאינטרנט

2) MATLAB_R2018a

3) הורדת רומבה ורומבה

שלב 2: התקנה/הורדה

התקנה/הורדה
התקנה/הורדה

הפעל סקריפט זה ב- MATLAB על מנת להוריד את התוכנה הדרושה לגישה לרומבה (נשמר בקובץ משלה בתיקיית הפרויקט)

עזרה נוספת:

% תוכנית התקנה עבור פרויקט EF 230 Roomba% עדכון אחרון: 13 בספטמבר 2017 (תוקנו בעיות אבטחה הקשורות לשרת https והסרת אזהרת מחיקת קבצים אם אירעו שגיאות) function roombaInstall clc; רשימת קבצים % להתקנת קבצים = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % מיקום להתקנה מתוך options = weboptions ('CertificateFilename', ''); % אמרו לו להתעלם מדרישות אישורים שרת = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'התקנת/עדכון Roomba'; % תכלית תצוגה וקבלת הודעת אישור = {'תוכנית זו תוריד את קבצי EF 230 Roomba האלה:' '' strjoin (files, '') '' 'לתיקייה זו:' '' cd '' 'האם ברצונך להמשיך? '}; ביפ; yn = questdlg (הנחיה, … dlgTitle, … 'כן', 'לא', 'כן');

אם ~ strcmp (yn, 'כן'), חזור; סוֹף

% get רשימת הקבצים הקיימים existent_files = files (cellfun (@exist, files)> 0); אם ~ isempty (eksisterende_קבצים) % ודא שזה באמת בסדר להחליף אותם בקשה = {'אתה מחליף את הקבצים האלה:' '' strjoin (קיים_קבצים, '') '' 'אישור להחליף?' }; ביפ; yn = questdlg (הנחיה, … dlgTitle, … 'כן', 'לא', 'כן'); אם ~ strcmp (yn, 'כן'), חזור; סוף סוף

% הורד את הקבצים cnt = 0; עבור i = 1: אורך (קבצים) f = קבצים {i}; disp (['הורדה' ו]); נסה url = [שרת f]; websave (f, url, אופציות); % הוסיפו אפשרויות למניעת טעויות אבטחה cnt = cnt + 1; catch disp (['שגיאה בהורדה' f]); דמה = [f '.html']; אם קיים (דמה, 'קובץ') == 2 מחק (דמה) סוף סוף

if cnt == length (files) msg = 'ההתקנה הצליחה'; waitfor (msgbox (msg, dlgTitle)); else msg = 'שגיאת התקנה - ראה חלון פקודה לפרטים'; waitfor (errordlg (msg, dlgTitle)); סוֹף

סוף %roombaInstall

שלב 3: קוד חלק 1: פונקציית מעקב

קוד חלק 1: פונקציית מעקב
קוד חלק 1: פונקציית מעקב

פונקציה זו לוקחת את המשתנה Roomba ואת התמונה מהמצלמה ב- Roomba ומוצאת את הקואורדינטות xy המרכזיות של האובייקט במעקב

שמור קוד זה בקובץ אחר באותה תיקייה.

פונקציה [xm, ym] = trackingblue (r) %כניסות: משתנה roomba %פלט: ערך x ו- y של מרכז האובייקט הבא %מטרה: מוצא את מרכז האובייקט הכחול בהתחשב בתמונה %שימוש [ערך x, y value] = trackingblue (משתנה roomba) img = r.getImage; % קורא את המצלמה מתת -חלקת הרובוט (1, 2, 2) (img); %מציג תמונה באותו חלון כמו כותרת הנתיב ('תמונת מעקב') red = img (:,:, 1); ירוק = img (:,:, 2); כחול = img (:,:, 3); justBlue = כחול - ירוק/2 - אדום/2; bw = justBlue> 40; החזק בתת -חלקה (1, 2, 2) תת -תמונה (bw); [x, y] = מצא (bw); אם ~ isempty (x) && ~ isempty (y) xm = עגול (ממוצע (x)); ym = עגול (ממוצע (y)); xx = max (1, xm-5): min (xm+5, גודל (bw, 1)); yy = max (1, ym-5): min (ym+5, גודל (bw, 2)); bwbw = אפסים (גודל (bw), 'uint8'); bwbw (xx, yy) = 255; החזק בתמונת המשנה (1, 2, 2) (justBlue + bwbw); סוֹף

שלב 4: קוד חלק 2: בעוד לולאה

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

פרויקט %רובר

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %קלטים: ערך roomba, נתוני מצלמה, חבטות באמפ, אור וקיר %מטרה: עוקב אחר אסטרונאוט ונמנע מכשולים. אם קיבל התראה, החדר שולח %דוא"ל המפרט מפה והיכן היא נמצאת בהתאם למיקום ההתחלה שלה. %שימוש: פשוט הפעל את התוכנית עם הכרזה על משתנה roomba, גם %יש אובייקט ירוק נע %פלט: מציג תמונת מעקב תמונה, מפת מיילים וטקסט למשתמש %% בעקבות סעיף b = 0; %אתחול משתנים c = 0; x = 0; y = 0; תטא = 0; בעוד c == 0 %לולאה כדי לגרום לזהות את האובייקט הכחול והמכשולים t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %אתחול המבנים לערכי חיישן אור = getLightBumpers (r); bump = getBumpers (r); אם light.leftCenter> = 10 || light.rightCenter> = 10 % חושים אם יש קיר ליד r.stop r.setLEDDigits ('עזרה') c = 1 % בעוד b == 0 % אם bump.right == 1 || bump.left == 1 || bump.front == 1 % מרגיש אם הוא נתקל במשהו לאחר שהוא חש קיר % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %חוש אם הוא נתקל במשהו, אם כן, הוא ישלח דוא"ל r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %תחושות אם יש צוק ליד r.stop c = 1 r.setLEDDigits ('עזרה') אחר %קובע את מהירות הכונן לעקוב אחר הכחול אם yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) סוף סוף theta = theta + r.getAngle; x = d.*cosd (תטא) + x; קואורדינטות % x של החדר y = d.*sind (theta).*d + y; קואורדינטות % y של עלילת המשנה של roomba (1, 2, 1) העלילה (x, y, 'bd') % מתווה את הנתיב ומוסיף כותרת כותרת ('נתיב Roomba') המתן; סוֹף

שלב 5: קוד חלק 3: קטע דוא"ל

זה ייקח את הנתיב והתמונה המתוכננים וישלח אותו לכתובת דוא"ל שצוין

(מוצג כאן בדוא ל לדוגמה)

%% קטע דוא ל

אם b == 1 saveas (gcf, 'rovermap.png') %שומר את הנתון setpref ('אינטרנט', 'SMTP_Server', 'smtp.gmail.com'); setpref ('אינטרנט', 'דואר אלקטרוני', '[email protected]'); % חשבון דואר לשלוח מ setpref ('אינטרנט', 'SMTP_Username', '[email protected]'); % שולחים שם משתמש setpref ('אינטרנט', 'SMTP_Password', 'gssegsse'); % שלוחי סיסמה לשולחים = 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 ('כתובת דוא"ל', 'RoverBeacon', 'האסטרונאוט הפסיק לזוז. לשחזור עקוב אחר ההנחיות בקובץ המצורף.', 'rovermap.png') disp ('נשלח דוא"ל') סוף

מוּמלָץ: