****** 1 - הטכניון

Download Report

Transcript ****** 1 - הטכניון

‫הטכניון – מכון טכנולוגי לישראל‬
‫הפקולטה להנדסת חשמל‬
‫המעבדה לבקרה‬
‫מאת ‪ :‬שגיא סטון ועדי אמויאל‬
‫בהנחיית קובי כוחיי‬
‫בפרויקט זה מימשנו מערכת זיהוי ועקיבה אחר פני אדם ע"י רחפן‬
‫מסוג )‪. (Ar.Drone 1.0‬‬
‫למימוש מערכת זו כמה אספקטים עליהם נרחיב בהמשך‪:‬‬
‫• ניתוח תמונה‬
‫• בקרה‬
‫• תוכנה‬
‫•למידה‬
‫• אינטגרציה‬
‫המערכת הכוללת‬
‫אופן הפעולה‬
‫המערכת מורכבת מרחפן אשר מצויד במצלמה קדמית ותקשורת‬
‫אלחוטית (‪ ,)Wi-Fi‬בנוסף מחשב עליו מותקן ‪ SDK‬אשר מאפשר‬
‫לשלוט ולתקשר עם הרחפן‪.‬‬
‫המימוש מורכב משני שלבים‪ ,‬שלב הזיהוי ושלב העקיבה‪.‬‬
‫שלב הזיהוי‬
‫• הרחפן ממריא תוך כדי סריקת החדר‬
‫• כאשר מגיע לגובה ממוצע של פני אדם בוגר מתחיל להסתובב סביב צירו‬
‫• כל זמן זה שולח הרחפן תמונות אל יחידת השליטה (המחשב) אשר‬
‫משתמש באלגוריתם זיהוי פנים לניתוח התמונות‬
‫אופן הפעולה ‪ -‬המשך‬
‫שלב העקיבה‬
‫• לאחר שהמערכת מזהה פנים‪ ,‬היא מורה ליחידת השליטה להתחיל‬
‫לשלוח פקודות עקיבה אחר הפנים‪.‬‬
‫• בזמן העקיבה ממשיך הרחפן לשדר תמונות ליחידת השליטה‬
‫שמנתחת את התמונות ומספקת מידע על מיקום הפנים אשר‬
‫אחריהם אנו עוקבים‪.‬‬
‫• המעקב מתבצע ע"י סגירת שלושה חוגי בקרה‪,‬שהם גובה‪ ,‬מרחק‬
‫ומרכוז ‪ .‬כאשר הגובה והמרכוז מבוקרים ע"י מיקום הפנים‬
‫בתמונה‪ ,‬ואילו המרחק ע"י גודל שטח הפנים‪.‬‬
‫‪Face detection‬‬
‫האלגוריתם מבוסס על האלגוריתם לאיתור פנים של & ‪viola‬‬
‫‪ .jones‬ובו כמה אלמנטים עיקריים‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫שימוש במלבני ‪ haar‬בתור מסווגים חלשים‬
‫שימוש "בתמונות אינטגרל" להאצת הזיהוי‬
‫אלגוריתם הלמידה ‪adaboost‬‬
‫מסווג ‪cascade‬‬
‫איחוד תוצאות חופפות לפי קריטריון השכן הקרוב‬
‫מלבני ‪haar‬‬
‫‪ ‬שימוש במסננים קטנים יחסית כדי לקבוע ציון לכל איזור בתמונה‬
‫‪ ‬ציון כל איזור הוא ע"י חיסור רמות האפור שבחלק הלבן מהשחור‬
‫‪ ‬כל אלמנט כזה מוגדר בתור מסווג "חלש" אשר החיזוי שלו לבד‬
‫נותן אחוזי חיזוי קצת יותר טובים ממטבע (‪)50/50‬‬
‫אלגוריתם הלמידה ‪adaboost‬‬
‫‪ ‬עושה שימוש בצירוף ליניארי של‬
‫כמה מסווגים חלשים‬
‫‪ ‬רץ על סט הבוחן בכמה וכמה‬
‫איטרציות‬
‫‪ ‬עוצר כאשר אין ירידה משמעותית‬
‫בטעות וכך קובע ערך סף‬
‫תמונת אינטגרל‬
‫‪ ‬טכניקה שפותחה ע"מ לשפר את‬
‫זמן הריצה של האלגוריתם‬
‫‪ ‬כל פיקסל מחזיק את סכום רמות‬
‫האפור שנמצאים בריבוע השמאלי‬
‫העליון‬
‫‪ ‬כך ניתן לאחר מעבר בודד על‬
‫התמונה לחשב בקלות את סכום‬
‫רמות האפור בכל ריבוע שנרצה‬
‫מסווג ‪cascade‬‬
‫‪ ‬עוד דרך להאיץ את האלגוריתם היא שימוש בכמה מעברים על‬
‫איזורים שונים בתמונה כאשר כל מעבר הוא עם רמת סף שנותנת‬
‫שגיאה לא קטנה אך כזאת שמספיק טוב לסווג נכון כמעט את כל‬
‫סט הלימוד‪.‬‬
‫‪ ‬כך עושים מיון של אזורים לא רלוונטים ומשקיעים בהם פחות זמן‬
‫ואילו באזורים רלוונטים משקיעם עוד זמן ע"מ לקבל תוצאות‬
‫יותר טובות‪.‬‬
‫איחוד תוצאות‬
‫‪ ‬לאחר כמה מעברים על התמונה עם כמה גדלי פנים שונים יש צורך‬
‫לאחד זיהוי פנים חופפות מפני שהם בעצם אותו זיהוי של כמה‬
‫פנים שהתקבל ממעברים שונים‬
‫סיכום גילוי פנים‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫למידה ‪offline‬‬
‫מעבר על כל תמונה‬
‫איחוד של ממצאים חופפים ומיצוע‬
‫החזרת תוצאה‬
‫בקרה‬
‫קריטריונים לבחירת בקר‪:‬‬
‫‪ ‬בקר שיפיק ביצועי תעופה טובים ‪ -‬ימקסם את יכולות העקיבה‬
‫כך שהמעוף אחר האובייקט יהיה חלק ובעל תגובה מהירה כאשר‬
‫האובייקט משנה את כיוונו או מהירותו‬
‫‪ ‬פשטות המימוש‬
‫על כן בחרנו להשתמש בבקר ‪ PID‬שהוא הנפוץ ביותר בבקרת‬
‫מערכות ליניאריות‪.‬‬
‫מימוש הבקר‬
‫להבדיל מכלי תחבורה יבשתיים הרחפן יכול לנוע בשלושה צירים‬
‫במרחב‪ .‬על כן יש לממש חוגי בקרה עבור כל הצירים‪ .‬אנו מימשנו‬
‫בקר עבור ‪ 3‬צירים‪Z,Y,X :‬‬
‫הבקר בציר ‪ X‬אחראי על פקודה הגלגול – ‪.ROLL‬‬
‫הבקר בציר ‪ Y‬אחראי על פקודת שינוי הגובה – ‪.GAZ‬‬
‫הבקר בציר ‪ Z‬אחראי על פקודת העלרוד ‪PITCH -‬‬
‫* כל ההסברים בהמשך מתייחסים לציר ‪ X‬בלבד אבל זהים לשלושת הצירים‬
‫מימוש הבקר ‪ -‬המשך‬
‫המידע שנשלח לבקר הינו עבור תמונה יחידה בכל יחידת זמן‪,‬‬
‫בנוסף יכולת העיבוד של המחשב היא סופית ועל כן מימשנו‬
‫את הבקר בזמן בדיד‬
‫הסבר על חישוב "השגיאה" ‪ err -‬יגיע בהמשך‬
‫‪:P‬‬
‫‪:I‬‬
‫‪:D‬‬
‫)‪ Up(nT) = Kp*err(nT‬‬
‫))‪ Ui (nT) = Ki*(Ui_prev + err(nT‬‬
‫‪ Ud(nT) = Kd *( err(nT) - err(n(T-1))) /T‬‬
‫)‪ Uc = Up(nT) + Ui (nT) + Ud(nT‬‬
‫מימוש הבקר – חישוב השגיאה‬
‫חישוב השגיאה ‪ -‬המשך‬
‫"השגיאה" ‪ – "err ",‬ההפרש בין מרכז הפריים של‬
‫מצלמת הרחפן למיקום האובייקט (על מסך הרחפן)‪.‬‬
‫‪errX = Xm – Xc‬‬
‫‪errY = Ym – Yc‬‬
‫מימוש הבקר ‪ -‬המשך‬
‫‪ ‬עבור פריים בודד שמגיע ממצלמת הרחפן‪ ,‬נקבל את מיקום האובייקט בפריים ונחשב‬
‫את "השגיאה" כפי שתואר לעיל‪.‬‬
‫‪ ‬הבקר מקבל את השגיאה ומחשב את הפקודה הבאה שעל הרחפן לבצע על מנת למזער‬
‫את השגיאה כלומר להביא את האובייקט למרכז הפריים‪.‬‬
‫‪ ‬כאשר האובייקט זז ממקומו הוא כבר לא יהיה במרכז הפריים ושוב תחושב השגיאה‬
‫ותתקבל פקודה חדשה‬
‫מימוש הבקר ‪ -‬פרמטרים‬
‫על מנת לקבל פרמטרים עבור הבקר כך שיתאימו בצורה‬
‫אופטימאלית לתעופת הרחפן ביצענו את הפעולות הבאות‪:‬‬
‫‪ ‬מידול הרחפן ע"י מודל מתמטי פשטני שמצאנו ע"י מדידות‬
‫שערכנו ברחפן‪.‬‬
‫‪ ‬הכנסת פונקציות הלם שונות לרחפן (פקודה יחידה בכמה‬
‫הגברים שונים)‬
‫‪ ‬מדידה של שינוי מיקום הרחפן‬
‫וקיבלנו את התוצאות הבאות‪:‬‬
‫מודל פיסיקלי של מיקום הרחפן‬
‫בציר ‪X‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫תזוזה‬
‫[מספר‬
‫פיקסלים]‬
‫‪20‬‬
‫‪0‬‬
‫‪-1.5‬‬
‫‪-1‬‬
‫‪0‬‬
‫‪-0.5‬‬
‫‪-20‬‬
‫‪y = -49.711x‬‬
‫‪-40‬‬
‫‪-60‬‬
‫הגבר הפקודה‬
‫‪0.5‬‬
‫‪1‬‬
‫‪1.5‬‬
‫מימוש הבקר ‪ -‬פרמטרים‬
‫ביצענו את המדידות עבור שלושת הצירים וע"י רגרסיה ליניארית הוצאנו את המודל‬
‫הפיסיקלי של כל ציר בקרה‪.‬‬
‫לאחר מכן הוצאנו מ ‪ matlab‬את הפרמטרים לבקר ‪ PID‬המתאים ע"י שימוש במודל‬
‫הרחפן שבנינו‪.‬‬
‫בגרף מתואר זמן ההתכנסות לכניסת מדרגה עבור הפרמטרים האידיאלים‬
‫‪Step Response‬‬
‫מה‪.matlab -‬‬
‫‪1.02‬‬
‫‪1.01‬‬
‫‪1‬‬
‫‪0.98‬‬
‫‪0.97‬‬
‫‪12‬‬
‫‪10‬‬
‫‪8‬‬
‫‪6‬‬
‫)‪Time (seconds‬‬
‫‪4‬‬
‫‪2‬‬
‫‪Amplitude‬‬
‫‪System: T‬‬
‫‪Time (seconds): 0.98‬‬
‫‪Amplitude: 0.98‬‬
‫‪0.99‬‬
‫מימוש הבקר ‪ -‬פרמטרים‬
‫‪ ‬הביצועים שקיבלנו עבור הפרמטרים שקיבלנו מ‪ MATLAB-‬לא‬
‫היו מספיק טובים‪ -‬העקיבה לא היית חלקה מספיק לדרישות‬
‫שלנו‪.‬‬
‫‪ ‬לאחר כינון ידני של הפרמטרים הגענו לבקר ‪ PID‬שנותן תוצאות‬
‫טובות יותר בפועל‪.‬‬
‫אופטימיזצית התוצאות‬
‫לאחר ניסיונות רבים הגענו לפרמטרים האופטימלים עבור יחידת זיהוי הפנים‬
‫אשר נתנו לנו את תוצאות המעקב הטובות ביותר‪.‬‬
‫‪ ‬שיפרנו ב ‪ 100%‬את תדר העבודה המקורי ‪ -‬מ‪ frame/sec 4‬ל ‪8 frame/sec‬‬
‫ע"י מעבר מהפרמטרים הדיפולטים לפרמטרים האופטימלים שמצאנו‪.‬‬
‫‪ ‬לאחר ניתוח צוואר הבקבוק של ריצת התוכנה מצאנו שאנו לא מנצלים נכון‬
‫את ממשק ה ‪ ,OpenCV‬מפני שלמחשב שעבדנו איתו לא היה כרטיס מסך‬
‫אלה רק יחידת עיבוד במעבד‪ .‬לכן עברנו לעבוד עם מחשב בעל מאיץ גרפי‪ ,‬מה‬
‫שהביא לשיפור של עוד ‪ 50%‬בתדר העבודה מ‪ frame/sec 8‬ל ‪.frame/sec 12‬‬
‫‪ ‬התקרבנו מאוד לתדר העבודה המקסימאלי שמוגבל ע"י תדר העבודה של‬
‫המצלמה ‪.15 frame/sec -‬‬
‫תוצאות ואופטימיזצית התוצאות‬
‫מלבד הבקר‪ ,‬גם לאלגוריתם הזיהוי יש השפעה על איכות‬
‫התוצאות וזמן הריצה‪.‬‬
‫‪ -Scale ‬פרמטר שמגדיר באיזה רזולוציה לדגום את התמונה‬
‫המקורית שמקבלים מהרחפן‪ .‬ככל שהוא גדול יותר כך נדגום את‬
‫התמונה המקורית ברזולוציה קטנה יותר‪ ,‬מצד אחד התמונה‬
‫תהייה פחות אמינה אך הריצה תהייה יותר מהירה‪.‬‬
‫‪ –ScaleFactor ‬פרמטר שמגדיר במתודולוגית ה ‪ cascade‬את‬
‫גודל הקפיצה בין כל חוליה של השרשרת‪ .‬ככל שפרמטר זה יהיה‬
‫קטן יותר נבצע יותר איטרציות‪ ,‬דבר שייקח יותר זמן אך ישפר את‬
‫אמינות המשערך‪.‬‬
‫סיכום ומסקנות‬
‫‪ ‬מטרת הפרויקט הייתה זיהוי פנים ע"י רחפן תוך כדי שימוש‬
‫בערוץ הוידיאו שלו ולאחר מכן עקיבה‪ .‬כאשר כל השלבים‬
‫מתבצעים באופן אוטונומי ובקורלציה גבוהה בין האלמנטים‬
‫השונים‪.‬‬
‫‪ ‬איכות מעגלי הבקרה הושפעו ישירות מתדר העבודה של המערכת‬
‫שהושפע מכמה סיבות‪ .‬תדר תקשורת הוידיאו בין הרחפן למערכת‬
‫הבקרה הוא ‪ 15‬תמונות לשנייה‪ .‬על כל תמונה בודדת נעשתה‬
‫עבודה של אלגוריתם זיהוי הפנים דבר שמאט את תדר העבודה‬
‫עוד יותר‬
‫מסקנות ‪ -‬המשך‬
‫‪ ‬מודל הרחפן היה פשטני מדי שכן לא התייחס לכל משוואות‬
‫התנועה ולחוקי הפיסיקה אלה התקבל אמפירית‪.‬‬
‫‪ ‬הפרויקט נעשה בתנאים מסוימים והפעלתו בתנאים אחרים לא‬
‫בהכרח יניבו תוצאות טובות כמו שהתקבלו בתנאים בהם עבדו‪.‬‬
‫כגון תנאי תאורה‪ ,‬מזג האוויר‪ ,‬הרוח שמדחפי הרחפן מייצרים‬
‫וכו'‪.‬‬
‫‪ ‬מקור אנרגיה – מעט סוללות ‪ +‬זמן טעינה ארוך ‪ ,‬מגביל מאוד את‬
‫זמן העבודה על הרחפן‪.‬‬
‫מסקנות ‪ -‬המשך‬
‫‪ ‬לאלגוריתם זיהוי הפנים כמה פרמטרים שניתנים לכיוון‪ ,‬אשר משפיעים‬
‫על איכות התוצאות ומהירות הריצה‪ .‬לאחר אופטימיזציה לפרמטרים‬
‫קיבלנו שיפור ב ‪ 100%‬בתדר העבודה‪ ,‬מ‪ 4‬ל ‪ 8‬תמונות בשנייה‪.‬‬
‫‪ ‬לב האלגוריתם מבוסס על ‪ OpenCV‬שעושה שימוש רציני ביחידות‬
‫העיבוד הגרפי של המחשב‪ .‬מעבר בין מחשב שיש לו מאיץ גרפי מאחד‬
‫בלי מאיץ גרפי נתן שיפור בתדר העבודה ב ‪ 50%‬מ‪ 8‬ל ‪ 12‬תמונות‬
‫בשנייה‪.‬‬
‫‪ ‬לאחר שימוש במחשב עם מאיץ גרפי צוואר הבקבוק עבר מהשימוש ב‬
‫‪ OpenCV‬לזמן מעבד‪ .‬בעידן בו כל המעבדים מרובי ליבות יש מקום‬
‫לשפר את הביצועים ע"י מקבול הקוד‪.‬‬