תוכן עניינים:
וִידֵאוֹ: פרויקט מרס רומבה UTK: 4 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
כתב ויתור: זה יעבוד רק אם הרומבה תוקם ב- א
דרך מאוד מיוחדת, ההוראה הזו נוצרה ומכוונת לשימוש על ידי אוניברסיטת סטודנטים ומפקחים.
קוד זה משמש להגדרת Roomba להפעלת קוד כתוב ושמור מקומית ב- MATLAB. זה לא יעבוד אם לא תוכל להשיג את הספריות הדרושות מאתר אוניברסיטת טנסי. אם יש לך את הספריות, תוכל להשתמש בהן לתכנות Roomba משלך באמצעות הפונקציות בספרייה. מדריך זה מלמד אותך כיצד להתקין את הספריות, ליצור תיקייה לכל הקוד וכיצד לקוד ולהשתמש בתוכנית שסיפקנו למטה.
חומרים נדרשים:
· רומבה
· MATLAB
· מצלמת פטל פי ופי
שלב 1: השגת הספריות
באתר ההנדסה יש ארגז כלים/ספרייה מסופק, הורד אותו והנח אותו בתיקייה חדשה. תיקיה זו חייבת להכיל את כל קבצי העבודה של הפרויקט, שכן כל פונקציה המשמשת בתוכנית שתעשה תצטרך להפנות לספרייה. לאחר שתעשה זאת תוכל להתחיל לעבוד על התוכניות שלך
שלב 2: כתיבת התוכניות
יש לא מעט פונקציות שניתן להשתמש בהן בתוכנית, ניתן לגשת לפונקציות אלה באמצעות הפקודה "doc roomba". באמצעות פונקציות אלה, אתה יכול לשלוט ב- Roomba שלך בהרבה דרכים שונות. הקוד שניתן להלן משתמש בחיישני הבליטות, בחיישני מוטות האור, במצלמות ובחיישני צוק בדרכים שונות ליצירת רובר מאדים. השתמשנו בחיישני הבליטות כדי לזהות מתי הרומבה פוגע באובייקט, כאשר זה קורה הרובוט יתהפך, יסתובב וימשיך לנוע. לפני שהרומבה פוגע באובייקט, סרגל האור יזהה את האובייקט ויאט את הרומבה כך שכאשר הוא אכן יתנגש באובייקט כדי להפעיל את חיישן הבליטה הרומבה ייפגע פחות/יושפע מההשפעה. המצלמה מחפשת מים או לבה על פני השטח, אם לא נמצא נוזל אז הרובוט ימשיך לחפש, אם יימצא קצת מים אז הרובוט ישלח הודעה למפעילים. חיישני המצוק נועדו לעצור את הרובוט אם הוא מתקרב לצוק. אם הרובוט חש מצוק הוא יתהפך ויסתובב כדי להימנע מנפילה.
שלב 3: קוד
העתק והדבק אותו לקובץ MATLAB הממוקם באותה תיקייה של הספריות
functionMainRoombaFile (r)
r.setDriveVelocity (0.1, 0.1)
בעוד % Infinte בזמן לולאה אמיתית כדי לשמור על ריצה של קוד
dontFall = cliffCheck (r) % מקצה משתנה 'dontFall' לפונקציה 'cliffCheck'
אם dontFall % אם ההצהרה להמשיך בקוד לאחר השלמת 'cliffCheck'
r.setDriveVelocity (0.1, 0.1) % משאיר את Roomba בתנועה לאחר השלמת 'cliffCheck'
end % מסתיים בהצהרת 'dontFall' if
bumper = bumpcheck (r) % מקצה משתנה 'bumper' לפונקציה 'bumpcheck'
אם באמפר % אם ההצהרה להמשיך בקוד לאחר השלמת 'בדיקה'
r.setDriveVelocity (0.1, 0.1) % משאיר את Roomba בתנועה לאחר השלמת 'הבדיקה'
סוף % מסתיים 'באמפר' אם הצהרה
liquids = LiquidCheck (r) % מקצה משתנה 'נוזלים' לפונקציה 'LiquidCheck'
אם נוזלים % אם ההצהרה להמשיך בקוד לאחר השלמת 'LiquidCheck'
r.setDriveVelocity (0.1, 0.1) % משאיר את Roomba בתנועה לאחר השלמת 'LiquidCheck'
סוף % מסתיים בהצהרת 'נוזלים'
lightbumper = lightcheck (r) % מקצה משתנה 'lightbumper' לפונקציה 'lightcheck'
השהה (0.1) % השהה בקצרה כדי למנוע איטרציה של לולאה רציפה
סוף % מסתיים אינסופי בעוד לולאה
הפונקציה end % ends מסתיימת
פונקציה bumper = bumpcheck (r) % יוצר פונקציית 'bumpcheck'
bumpdata = r.getBumpers % מקצה את כל הנתונים מהפגוש למשתנה 'bumpdata'
bumper = bumpdata.right || bumpdata.left || bumpdata.front % יוצר משתנה מאוחסן, 'פגוש', עבור הפגושים השונים
אם bumpdata.right> 0 % אם הצהרה גורמת לפונקציות שונות של החדר להתרחש אם הפגוש נתקל
r.stop % עוצר Roomba
r.moveDistance (-0.3, 0.2) % הופך את Roomba 0.3 מ '
r.turnAngle (90, 0.5) % מסתובב Roomba 90 מעלות מהר ככל האפשר
סוֹף
אם bumpdata.front> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (randi (270), 0.5) % מסובב את Roomba במרווח אקראי בין 0 ל -270 מעלות מהר ככל האפשר
סוֹף
אם bumpdata.left> 0
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (-90, 0.5) % מסתובב Roomba -90 מעלות מהר ככל האפשר
סוֹף
סוֹף
function lightbumper = lightcheck (r) % יוצר פונקציה 'lightcheck'
lightdata = r.getLightBumpers % מקצה את כל הנתונים מחיישן בליטות האור למשתנה 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % יוצר משתנה מאוחסן, 'lightbumper', עבור פגשי האור השונים
אם lightbumper % If הצהרה להתקשר לנתוני lightbumper מלמעלה
אם lightdata.left> 10 % אם הצהרה גורמת לפונקציות שונות של החדר להתרחש אם פגוש האור מרגיש יותר מ -10 ערכים
r.setDriveVelocity (0.05, 0.05) % מאט את roomba להתכונן לבליטות
סוף % מסיים הצהרה ראשונית אם
אם lightdata.rightCenter> 10
r.setDriveVelocity (0.05, 0.05)
סוֹף
אם lightdata.right> 10
r.setDriveVelocity (0.05, 0.05)
סוֹף
אם lightdata.leftCenter> 10
r.setDriveVelocity (0.05, 0.05)
סוֹף
סוף % מסתיים 'lightbumper' if משפט
סוף %מסתיים פונקציית lightcheck
function dontFall = cliffCheck (r) % יוצר פונקציה 'cliffCheck'
data = r.getCliffSensors; % מקצה את כל הנתונים מחיישן המצוק ל'נתונים 'משתנים
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % יוצר משתנה מאוחסן, 'dontFall', עבור חיישני המצוק השונים
אם dontFall % If הצהרה להתקשר לנתוני חיישן המצוק מלמעלה
אם data. left <1010 % אם הצהרה גורמת לפונקציות שונות של החדר להתרחש אם חיישן המצוק מרגיש פחות מ- 1010 ערכים
r.stop
r.moveDistance (-0.2, 0.2) % הופך את Roomba 0.2 מ '
r.turnAngle (-90, 0.5) % מסתובב Roomba -90 מעלות מהר ככל האפשר
נתוני elseif.leftFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5) % מסתובב Roomba 90 מעלות מהר ככל האפשר
elseif data.rightFront <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5) % מסתובב Roomba 90 מעלות מהר ככל האפשר
elseif data.right <1010
r.stop
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5) % מסתובב Roomba 90 מעלות מהר ככל האפשר
סוֹף
סוֹף
סוֹף
פונקציית נוזלים = LiquidCheck (r) % יוצר את הפונקציה 'LiquidCheck'
בעוד % %מתחילים לולאה אינסופית לכיול
img = r.getImage; % קורא את המצלמה מהרובוט
image (img) % מציג את התמונה בחלון דמות
red_mean = ממוצע (ממוצע (img (200, 150, 1)))% קורא את הכמות הממוצעת של פיקסלים אדומים
blue_mean = ממוצע (ממוצע (img (200, 150, 3)))% קורא את הכמות הממוצעת של הפיקסלים הכחולים
נוזלים = אדום_מצע || blue_mean % יוצר משתנה מאוחסן, 'נוזלים', עבור משתני הצבעים השונים
אם נוזלים % If הצהרה לקרוא לנתוני התמונה מלמעלה
אם red_mean> 170 % אם הצהרה גורמת לפונקציות שונות של החדר להתרחש אם המצלמה רואה צבע אדום ממוצע גדול מ -170
r.stop % מפסיק את roomba
r.setLEDCenterColor (255) % מגדיר את העיגול לצבע אדום
r.setLEDDigits (); נקה את התצוגה %
f = סרגל המתנה (0, '*הודעה נכנסת*'); % יוצר סרגל המתנה להודעת טעינה
r.setLEDDigits ('HOT'); % מגדיר את תצוגת LED לפלט 'חם'
השהה (0.5) %השהה קצרה לקריאת מידע המופץ
r.setLEDDigits ('LAVA'); % מגדיר את תצוגת LED לפלט 'LAVA'
השהה (0.5)
סרגל המתנה (.33, f, '*הודעה נכנסת*'); %יוצר עלייה בסרגל ההמתנה
r.setLEDDigits ('HOT');
השהה (0.5)
r.setLEDDigits ('LAVA');
השהה (0.5)
סרגל המתנה (.67, f, '*הודעה נכנסת*'); % יוצר עלייה בסרגל ההמתנה
r.setLEDDigits ('HOT');
השהה (0.5)
r.setLEDDigits ('LAVA');
סרגל המתנה (1, ו, '*הודעה נכנסת*'); %משלים את סרגל ההמתנה
הפסקה (1)
close (f) %סוגר את סרגל ההמתנה
r.setLEDDigits (); % מנקה את תצוגת ה- LED
close all %סוגר את כל החלונות הקודמים
צירים ('צבע', 'אין', 'XColor', 'אין', 'YColor', 'אין') % מנקה את חלון העלילה של הצירים והתרשים
y = 0.5; % קובע את המיקום y של הטקסט בחלון התכנון
x = 0.06; % קובע את מיקום ה- x של הטקסט בחלון התכנון
title ('FROM MARS ROOMBA', 'fontsize', 32) % מוסיף כותרת לחלון התכנון
quadeqtxt = 'DANGER LAVA'; % מגדיר את המשתנה 'quadeqtxt' לפלט 0
טקסט (x, y, quadeqtxt, 'מתורגמן', 'לטקס', 'גודל גופנים', 36); % מציג את הטקסט quadeq בחלון התכנון
r.moveDistance (-0.2, 0.2) %הופך את החדר 0.2 מ '
r.turnAngle (180, 0.5) %הופך את החדר ל- 180 מעלות כמה שיותר מהר
r.setLEDCenterColor (128, 128); % מגדיר את ה- LED המרכזי של roomba לכתום
סגור את כל %סוגר את החלונות הפתוחים שנותרו
elseif blue_mean> 175 % אם הצהרה גורמת לפונקציות שונות של החדר להתרחש אם המצלמה רואה צבע כחול ממוצע גדול מ- 175
r.stop % מפסיק את roomba
r.setLEDCenterColor (255) % מגדיר את העיגול לצבע אדום
r.setLEDDigits (); נקה את התצוגה %
f = סרגל המתנה (0, '*הודעה נכנסת*'); % יוצר סרגל המתנה להודעת טעינה
r.setLEDDigits ('לוק'); % מגדיר את תצוגת LED לפלט 'LOOK'
השהה (0.5) %השהה קצרה לקריאת מידע המופץ
r.setLEDDigits ('WATR'); % מגדיר את תצוגת LED לפלט 'WATR'
השהה (0.5)
סרגל המתנה (.33, f, '*הודעה נכנסת*'); %יוצר עלייה בסרגל ההמתנה
r.setLEDDigits ('לוק');
השהה (0.5)
r.setLEDDigits ('WATR');
השהה (0.5)
סרגל המתנה (.67, f, '*הודעה נכנסת*'); % יוצר עלייה בסרגל ההמתנה
r.setLEDDigits ('לוק');
השהה (0.5)
r.setLEDDigits ('WATR');
סרגל המתנה (1, ו, '*הודעה נכנסת*'); %משלים את סרגל ההמתנה
הפסקה (1)
close (f) %סוגר את סרגל ההמתנה
r.setLEDDigits (); % מנקה את תצוגת ה- LED
close all %סוגר את כל החלונות הקודמים
צירים ('צבע', 'אין', 'XColor', 'אין', 'YColor', 'אין') % מנקה את חלון העלילה של הצירים והתרשים
y = 0.5; % קובע את המיקום y של הטקסט בחלון התכנון
x = 0.06; % קובע את מיקום ה- x של הטקסט בחלון התכנון
title ('FROM MARS ROOMBA', 'fontsize', 32) % מוסיף כותרת לחלון התכנון
quadeqtxt = 'מצא מים'; % מגדיר את המשתנה 'quadeqtxt' לפלט 0
טקסט (x, y, quadeqtxt, 'מתורגמן', 'לטקס', 'גודל גופנים', 36); % מציג את הטקסט quadeq בחלון התכנון
r.moveDistance (-0.2, 0.2) %הופך את החדר 0.2 מ '
r.turnAngle (180, 0.5) %הופך את החדר ל- 180 מעלות כמה שיותר מהר
r.setLEDCenterColor (128, 128); % מגדיר את ה- LED המרכזי של roomba לכתום
סגור את כל %סוגר את החלונות הפתוחים שנותרו
סוף %מסתיים 'red_mean' if משפט
סוף %מסתיים בהצהרת 'נוזלים'
סוף % נסגר בלולאה אינסופית
סוף % end פונקציה 'LiquidCheck'
שלב 4: הפעלת הקוד
לאחר שהעתקת והדבקת את הקוד ב- MATLAB עליך להתחבר לרומבה. לאחר חיבור Roomba עליך לתת שם למשתנה r. הפונקציות משתמשות במשתנה r כאשר מתייחסים לרומבה, ולכן יש להגדיר את הרומבה כמשתנה r. לאחר הפעלת הקוד Roomba צריך לפעול בהתאם להוראות.
מוּמלָץ:
פרויקט רובוט UTK 2017: 3 שלבים
פרויקט הרובוט UTK 2017: משימה: צוות המהנדסים שלנו נשכר על ידי פרוגל, קרן ללא מטרות רווח לפיתוח טכנולוגיות קוד פתוח, כדי לפתח צוות חדשני המסייע למאדים רובר.אאוט " רובר " הוא רומבה שקידנו לביצוע סדרה של
פרויקט "מוכן מוכן" - שליטה על פרויקט "פונקציות כוח לגו": 9 שלבים
"Ready Maker" - שליטה על פרויקט "פונקציות כוח הלגו": למד כיצד לשלוט בלגו " פונקציות כוח " רכיבים עם לוח Arduino ובונה את הפרויקט שלך ב " Ready Maker " עורך (אין צורך בקוד) לשליטה מרחוק בדגם שלך
מאדים רומבה: 6 שלבים
מרס רומבה: מדריך זה ינחה אותך בהנחיות ההפעלה של בוט ואקום נשלט Roomba הנשלט על ידי Raspberry Pi. מערכת ההפעלה בה נשתמש היא באמצעות MATLAB
פרויקט רומבה: 5 שלבים (עם תמונות)
פרויקט רומבה: הוראה זו נוצרה לצורך מילוי דרישת הפרוייקט של בית המקדש באוניברסיטת דרום פלורידה (www.makecourse.com). הוראה זו תכסה את כל השלבים והרכיבים הדרושים להרכבת עבודת הרומבה שלי
מבער מופעל באמצעות USB! פרויקט זה יכול להישרף מפלסטיק / עץ / נייר (פרויקט מהנה חייב להיות עץ דק מאוד): 3 שלבים
מבער מופעל באמצעות USB! פרויקט זה יכול להישרף מפלסטיק / עץ / נייר (פרויקט מהנה חייב להיות עץ דק מאוד): אל תעשה זאת באמצעות USB !!!! גיליתי שזה יכול להזיק למחשב שלך מכל התגובות. המחשב שלי בסדר גמור השתמש במטען טלפון של 600ma 5v. השתמשתי בזה וזה עובד מצוין ושום דבר לא יכול להינזק אם אתה משתמש בתקע בטיחות כדי לעצור את החשמל