יום שני, 23 ביולי 2012

A Guide to GUIDE | פיתוח ממשקים גרפיים ידידותיים למשתמש בעזרת MATLAB

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

את ה-GUI המיוחד המשמש לפיתוח GUIs מעלים באמצעות פקודת guide ובחירה באופציה של Blank GUI (ברירת המחדל). לצורך הדוגמה, אפתח בעזרת ה-GUI המיוחד GUI בו יוצגו 10 מספרים אקראיים (מפולגים אחיד בין 0 ל-1) באמצעות גרף, בכל פעם בה המשתמש ילחץ על לחצן ייעודי. על מנת להגדיר את השטח בו יוצג הגרף, יש לבחור בלחצן ה-Axes ב-GUI המיוחד, ולצייר מרובע על משטח העבודה. על מנת למקם לחצן ייעודי אשר לחיצה עליו תביא להצגת הגרף בשטח שהוגדר, יש להכניס למשטח העבודה לחצן שכזה (על ידי בחירה בלחצן Push Button וציור מלבן על משטח העבודה).

ניתן לשנות בקלות את גודל ה-GUI, צבע הרקע או הכיתוב על הלחצן. למשל, לצורך ביצוע המשימה האחרונה, יש להקליק על הלחצן פעמיים עם העכבר, ולשנות את השדה String (אני שיניתי ל-Push here to display plot). התוצאה בינתיים נראית כך:


כעת, כל שנותר הוא ללחוץ על לחצן ה-play הירוק (מופיע בצד ימין בשורה העליונה), לאשר את ההודעה הקופצת אל המסך (אחרי קריאתה...) ולתת שם ל-m file שיווצר ויכיל את הפקודות אשר בעבר הייתם חייבים לכתוב ידנית לצורך קבלת GUI דומה.

כפי שתשימו לב, ה-GUI שקיבלתם בהחלט נראה כמצופה, אבל לא ממש מתפקד. על מנת שלחיצה על לחצן ה- Push here to display plot תביא להצגת הגרף, יש להגדיר ללחצן זה מה אמור להתבצע כאשר לוחצים עליו. חיזרו ל-GUI המיוחד, הקליקו עם המקש הימני של העכבר על הלחצן, וביחרו ב-View Callbacks ואז ב-Callback. תוצאת פעולה זו היא מיקום של הסמן בקוד ה-MATLAB שנוצר לא מזמן, בדיוק בשורה שמתחתיה יש לכתוב את הקוד שצריך להתבצע בעת לחיצה על הלחצן. במקרה שלנו:
plot(rand(10,1));

כעת, אם תריצו את קוד ה-MATLAB (באמצעות F5), תקבלו שוב את ה-GUI, אך הפעם הוא גם יתפקד כהלכה:


זו היתה דוגמה בסיסית לקלות בה ניתן היום לפתח GUIs בסביבת MATLAB. דוגמאות שימושיות נוספות ניתן למצוא בקישור הזה. לסיום, אציין כי באפשרותכם לקמפל את ה-GUI שפיתחתם ולהעביר אותו למחשבים אשר אין בהם התקנה של MATLAB (וזאת באמצעות כלי שנקרא MATLAB Compiler).

האם אתם מפתחים GUIs באמצעות GUIDE או באמצעות פקודות? האם יש GUI משוכלל שפיתחתם ותרצו להשוויץ בו?

יום ראשון, 1 ביולי 2012

גילוי פנים בעזרת MATLAB

בגרסת R2011a של כלי MathWorks נוסף למשפחת המוצרים כלי חדש – Computer Vision System Toolbox, או בקיצור - CVST. כלי זה משמש לתכנון וסימולציה של מערכות ראיה ממוחשבת ועיבוד וידאו, באמצעות שלוש דרכים:

1. בלוקים לעיבוד וידאו וראיה ממוחשבת בסביבת Simulink – מדובר למעשה בבלוקים שהרכיבו את הכלי שנקרא בעבר Video and Image Processing Blockset
2. סיסטם אובג'קטס - אשר מאפשרים גישה לחלק משמעותי מאותם הבלוקים המוזכרים לעיל, אך ללא צורך ברישיון Simulink או בידע בעבודה עם Simulink
3. אלגוריתמים יעודיים חדשים לראיה ממוחשבת

דוגמה למרכיב השלישי של ה-CVST הובאה בפוסט של אריאל מלפני חודש, ולכן אתמקד היום במרכיב אחר – המרכיב השני.

System Objects קיימים ב-MATLAB כבר מאז R2010a, ונידונו כאן בעבר. אחד מה-System Objects החדשים שנוספו בגרסת R2012a של ה-CVST הוא ה-CascadeObjectDetector, המאפשר לבצע גילוי פנים באמצעות אלגוריתם Viola-Jones. שימו לב שלא מדובר בזיהוי פנים, אלא בגילוי פנים (יודעים שיש פנים בתמונה, לא יודעים של מי הפנים). בנוסף, חשוב להדגיש שהאלגוריתם גם יכול לסייע במציאת אלמנטי גוף אחרים, שאינם פנים – למשל: עיניים, אף, פה או פלג גוף עליון.

האלגוריתם ממומש בצורה של System Object על מנת שיוכל לאפשר גילוי של פנים בסדרת תמונות או בסרט וידאו, ולא רק בפריים בודד. כפי שניתן לראות בדוגמה, הפלט של הפעלת האלגוריתם (באמצעות המתודה step) על גבי תמונה (של חברי הצוות שפיתח את ה-CVST) הינו מערך של bounding boxes – ריבוע סביב כל פנים שזוהו בתמונה. ואת הריבועים הללו ניתן לצייר על התמונה באמצעות ה-System Object של ShapeInserter.

קוד המדגים גילוי פנים (לחצו להגדלה)

חשוב להדגיש שהחל מגרסת R2012a, הכלי היחיד (פרט ל-MATLAB) שנדרש לצורך הפעלת ה-CVST הוא ה-Image Processing Toolbox (עד אז היה צורך גם ב-DSP System Toolbox וב-Signal Processing Toolbox). למידע נוסף על יכולות עיבוד הוידאו בסביבת MATLAB באמצעות ה-CVST, ה-Image Processing Toolbox וה-Image Acquisition Toolbox, לחצו לצפיה בסרטון של 5 דקות.

ואפרופו גילוי פנים – נחשפתי לאחרונה לכתבה נחמדה בנושא הדרכים להתחמקות מגילוי הפנים שלכם על ידי הטכנולוגיות הקיימות.

האם ידעתם על היכולת לבצע גילוי פנים באמצעות ה-CVST? האם בכלל הכרתם את ה-CVST?

יום ראשון, 17 ביוני 2012

ייצור אמוניה באמצעות Simulink | שימוש בסביבת סימולציה לתכנון, בדיקה ומימוש של מערכות בקרה לתעשיה התהליכית

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

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

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

באמצעות דוגמא זו ניתן לראות כיצד סביבת הפיתוח של Simulink מאפשרת תכנון של מערכות דינמיות מורכבות, זיהוי פרמטרים של רכיבי המערכת מתוך מידע מדוד, ביצוע כיוונון אוטומטי של בקרים (Auto-Tuning), בדיקת ביצועי המערכת הכוללת הן את המרכיבים הפיסיים והן את מערכת הבקרה והמשוב, ולבסוף - ייצור קוד המותאם להרצה על בקרי PLC או DSP.

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

האם ידעתם כי המילה העברית לאמוניה הינה "נַשְׁדּוּר"? והאם ידעתם שניתן לייצר בצורה אוטומטית קוד לבקרי PLC מתוך MATLAB ו-Simulink?

יום ראשון, 3 ביוני 2012

רגיסטרציה של תצלומי אוויר באמצעות כלי מיפוי, עיבוד תמונה וראיה ממוחשבת


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

הMapping Toolbox-  הינו כלי המשלב בין העולם המעניין של מיפוי ומידע גיאוגרפי, לבין היכולות החזקות של MATLAB  לביצוע אנליזות מהירות והצגה קלה של נתונים. באמצעות הכלי קל לקרוא ולהציג מפות בפורמטים שונים (shapefile, GeoTIFF, DEM ועוד), לבצע הצגות רב-שכבתיות, לבצע אנליזות מתמטיות על המידע הגיאוגרפי (חישובי קו ראיה, שטחי כיסוי ועוד) ובשילוב עם כלים נוספים מבית MathWorks - אפילו לבצע הצגה וירטואלית תלת-מימדית של מפות או לערוך רגיסטרציה של תמונות.

תמונה 1.  חלק מיכולות ה- Mapping Toolbox (מימין לשמאל – הצגה תלת מימדית של מפת גובה, מפה רב שכבתית, מציאת קו ראיה ושטח כיסוי)

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

החלק המורכב והקשה ביותר בתהליך המתואר לעיל הינו מציאת נקודות תואמות בתמונה ובמפה. ניתן לבצע זאת באופן ידני על ידי התבוננות וסימון נקודות זהות בתמונה ובמפה כפי שמודגם בדוגמה המגיעה עם הכלי (Georeferencing an Image to an Orthotile Base Layer), המשתמשת בפקודה cpselect מתוך ה- Image Processing Toolbox.


תמונה 2. מציאת נקודות עניין זהות באופן ידני על ידי שימוש ב cpselect
(התמונה משמאל, המפה מימין)


 
למרות שהתוצאות באמצעות השיטה הידנית מצויינות, השיטה אינה עומדת במבחן התרחיש המציאותי בו מתקבל סרט וידיאו בקצב גבוה ויש לבצע רגיסטרציה אוטומטית ללא מגע אדם. במקרה זה רצוי להפעיל אלגוריתמים אוטומטיים של ראיה ממוחשבת למציאת נקודות עניין, ואחת מהשיטות בקטגוריה זו היא להשתמש באלגוריתם SIFT (scale invariant feature transform). אלגוריתם זה עובד בשיטה של "טשטוש" התמונה בסקלות שונות ומציאת סקלת הטשטוש והמיקום בתמונה בהם העצם עובר טשטוש לכדי כתם יחיד עם עוצמה ההולכת ודועכת ממרכזו. לדוגמה, במבט מקרוב על כדור הארץ ניתן להבחין בפרטים כמו יבשות, הרים וימים, אך אם נטשטש את התמונה בשלבים לבסוף נקבל כתמים חומים באזורי היבשה וכתמים כחולים באזורי הים. מרכזו של כל כתם חום יהיה מרכז של יבשת (שהוא בעצם מרכז נקודת העניין) ואילו המעגל התוחם את הכתם יגדיר סקלה של גודל הכתם (תחום העניין). כדי לתאר את "אופיה" של כל נקודת עניין מחלקים את תחום העניין לרשת של 4x4 ומחשבים היסטוגרמות של גרדיאנטים עבור כל נקודה ברשת, כך שעבור כל נקודת עניין מתקבל תאור הכולל את מיקומה, תחום העניין שסביבה (סקלה) ותיאור (descriptor) בן 128 נתונים המתאר את פילוג הגרדיאנטים בתוך תחום העניין.

בגרסת R2011a של כלי MathWorks הצטרף כלי לביצוע משימות ראיה ממוחשבת
(Computer Vision System Toolbox), הכולל את אלגוריתם ה- SURF (speeded-up robust feature), שהינו אלגוריתם מהיר ושימושי יותר מאלגוריתם ה- SIFT. העבודה עם האלגוריתם מודגמת בקובץ mapReg_RANSAC.m, הניתן להורדה מכאן, והמוסבר להלן:


1) בשלב הראשון מתבצעת מציאה של נקודות עניין ותחומי עניין הן במפה והן בתמונה

תמונה 3. נקודות עניין + תחומי עניין בתמונה (למעלה) ובמפה (למטה). מרכזי המעגלים הם נקודות העניין והמעגלים עצמם הם תחומי העניין

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

3) בשלב השלישי מתבצעת התאמה בין נקודות עניין במפה ובתמונה על ידי התאמת נקודות בעלות "אופי" זהה. תוצאה של פעולה זו מודגמת בתמונה 4, בה ניתן לשים לב לכך שמתוך אלפי נקודות עניין בסופו של דבר התקבל מספר מצומצם יחסית של התאמות (9). זהו תרחיש נפוץ של שימוש באלגוריתמים מהסוג הנדון.

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

תמונה 4. נקודות עניין זהות בתמונה (למעלה) ובמפה (למטה)

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

תמונה 5. הטלה של התמונה על המפה


לאילו תמונות אתם מבצעים רגיסטרציה? האם הכרתם את ה-Mapping Toolbox לפני הפוסט הזה? ומה לגבי אלגוריתמי SURF ו-SIFT? האם השתמשתם בעבר בפקודת cpselect? האם ידעתם שקיים מימוש של אלגוריתם ה-SURF בתוך ה-Computer Vision System Toolbox?


יום רביעי, 16 במאי 2012

יש גם Event-ים מחוץ ל-Facebook | על בניית סימולציות למערכות בדידות באמצעות SimEvents


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


נניח שקצב ההגעה של אנשים לסניף בנק מתנהג כפילוג אקספוננציאלי בעל ממוצע של 5 דקות. כמה נותני שירות צריכים להיות בבנק בכדי להבטיח שמשך ההמתנה הממוצע לא יעלה על 10 דקות? ומה רוחב הסרט הנדרש בכדי להעביר חבילות תקשורת על קו Ethernet? שאלות אלו ורבות אחרות מצריכות ניתוח מעמיק באמצעות בנית סימולציה של אירועים בדידים.

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

SimEvents הינה הרחבה לתוכנת Simulink, המוסיפה לה יכולות למידול וסימולציה של מערכות בדידות – ספריית בלוקים עשירה ומנוע סימולציה המותאם למערכות בדידות. התוכנה נמצאת בשימוש על ידי מהנדסים ומתכננים בתחומים תעשיה וניהול, תקשורת, בקרה, תהליך ומערכות חומרה.

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



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


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


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


איסוף מידע סטטיסטי הינו אינהרנטי ב-SimEvents. ניתן לבצע ניתוח סטטיסטי בפשטות על ידי בחירה בכך בתוך הבלוקים של SimEvents. בין האפשרויות הקיימות ניתן למצוא משך המתנה, השהייה, קצב מעבר (ספיקה), אורך תור ממוצע ונצילות משאב (utilization). ובעזרת הקישור ל-Simulink ניתן לאפיין ולהוסיף כל אלמנט סטטיסטי אחר המעניין את המשתמש.

כפי שצוין לעיל, SimEvents פועלת על גבי סביבת Simulink, ולכן נהנית מכל היתרונות בעבודה עם Simulink ו-MATLAB – ממשק גרפי של דיאגרמות בלוקים, סביבה אינטואיטיבית נוחה לתפעול, מנוע מתמטי המבוסס על MATLAB, עבודה בצורה היררכית,  אפשרות לייצר דו"חות בצורה אוטומטית, אפשרות לחיבור לגרפיקה תלת-מימדית, אופציה להוספת יכולות ובלוקים, מינוף יכולות MATLAB כמו ניתוח סטטיסטי, ויזואליזציה של התוצאות, וכמובן הרצת תהליכים של אופטימיזציה על המערכת בכדי להגיע לנקודת עבודה יעילה. בעזרת MATLAB ניתן לבנות בפשטות ממשק גרפי למשתמש, בו הוא יזין את כל הפרמטרים הרלוונטיים לסימולציה. ניתן לייבא ולייצא נתונים מקבצים בפורמטים רבים – Excel, CSV, טקסט, Word ועוד. וניתן גם לחבר את הסימולציה למקורות מידע מקוונים, כמו שרתים המכילים מידע על מניות, מידע טמפרטורה, העברת חבילות מידע ברשת וכו'.

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

האם יש לכם צורך בכלי לסימולציה של אירועים בדידים? האם שמעתם על SimEvents? ואפרופו Events ו-Facebook - האם כבר עשיתם Like לקבוצת הפייסבוק למשתמשי MATLAB ו-Simulink בישראל?

יום רביעי, 2 במאי 2012

הרצה קלה על חומרה

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

כפי שכתב רועי בסקירה שלו על החידושים בגירסת R2012a, בחודש מרץ 2012 הודיעה חברת MathWorks על הוספה של תמיכה מובנית ב-Simulink למעבדים:
Arduino
BeagleBoard
ו-LEGO Mindstorms NXT.
כלומר, בלחיצת כפתור אחת ניתן לבחון את אופן הפעולה של אלגוריתם הבקרה או עיבוד האות – ישירות על חומרה.

בעבר היה צורך ברישיון מיוחד לכלי יצירת קוד שנקרא Embedded Coder, אשר מאפשר יצירת קוד יעיל לחומרה הסופית. כיום, התמיכה היא ישירות מתוך Simulink, ואין צורך באף כלי נוסף. החיסרון הוא שללא רישיון ל-Embedded Coder לא ניתן לראות את קוד ה-C הנוצר לפני הורדתו לחומרה, אך במידה וזהו עדיין שלב ניסיוני בהליך הפיתוח – אין בכך צורך של ממש.

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



התקנת כל תוספי התוכנה הדרושים לצורך העברת האלגוריתם מ-Simulink למעבד הסופי נעשית בקלות ישירות מתוך Simulink – אין צורך לחפש קבצים באתרים שונים או לוודא התאמת גרסאות וכדומה. כל שיש לעשות הוא להקיש את הפקודה "targetinstaller" בתוך חלון הפקודות של MATLAB, וממשק גרפי ייעודי ילווה אתכם לאורך כל שלב ההורדה וההתקנות של התוכנות הייעודיות. תוכנות אלו נדרשות לרוץ ברקע בשלב החיבור למעבד הסופי, יצירת קוד והעברתו דרך הליך Compile/Link/Deploy הייחודי למעבד זה.

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

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

יצא לכם להשתמש בפיצ'ר החדש? מה דעתכם עליו?

יום ראשון, 15 באפריל 2012

אופטימיות לגבי כלי האופטימיזציה


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

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

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

האופטימיזציה בסביבת MATLAB מתבצעת באמצעות שני כלים:

1) Optimization Toolbox – אוסף של אלגוריתמים איטרטיבים, נפוצים בתעשיה, המוצאים פתרונות אופטימליים באמצעות חישוב נגזרות (Steepest Descent). בין האלגוריתמים:
  •  fmincon- אלגוריתם למציאת מינימום לבעיות בעלות פונקצית מטרה לא לינארית, תחת אילוצים שונים (לינאריים ולא לינאריים).
  •  fminmax- אלגוריתם למציאת מינימום לבעיות MinMax, תחת אילוצים שונים.
  •  Linear Programming- לפתרון בעיות בעלות פונקצית מטרה לינארית, תחת אילוצים שונים.
  •  Quadratic Programming- לפתרון בעיות קוואדרטיות, תחת אילוצים שונים.
 האוסף העשיר של האלגוריתמים ב-Optimization Toolbox מאפשר לפתור מגוון רחב של בעיות, וזמני הריצה שלהם עד ההתכנסות לפתרון בהחלט סבירים. החסרון המרכזי של הכלי הוא שתמיד קיים סיכוי שהפתרון שמצאנו לבעיה הוא מינימום מקומי ולא מינימום גלובלי.
 2) Global Optimization Toolbox – אוסף של שיטות היוריסטיות למציאת פתרונות אופטימליים גלובלים (הכלי לא מבוסס על חישובי נגזרות). בין האלגוריתמים:
  •  Simulated Annealing- אלגוריתם הממדל את הפיסיקה של תהליך קירור של מתכת. האלגוריתם עובד טוב במיוחד כאשר מרחב חיפוש הפתרון הוא גדול והבעיה היא ללא אילוצים.
  •  Genetic Algorithm- אלגוריתם איטרטיבי זה ממדל תהליך אבולוציוני למציאת פתרונות אופטימליים, והינו נפוץ לביצוע אופטימיזציה גלובלית תחת אילוצים שונים. האלגוריתם מתאים במיוחד לפתרון בעיות אופטימיזציה קומבינטוריות (דוגמת בעית הסוכן הנוסע) בתוך מרחב חיפוש גדול .
  •  Direct Search- אלגוריתם איטרטיבי אשר בכל איטרציה מחפש בסביבה הקרובה של נקודה כלשהי נקודות בהן ערך הפונקציה נמוך יותר, ואם מוצא אחת כזו - הוא בוחר בה כנקודת התחלה לאיטרציה הבאה. האלגוריתם מתאים במיוחד לבעיות בהן פונקצית המטרה איננה גזירה או אינה רציפה. 
היתרון של ה-Global Optimization Toolbox הוא באלגוריתמים המאפשרים למצוא פתרון גלובלי בתוך אוסף גדול של מינימות מקומיות ומאפשרים לפתור בעיות אופטימזיציה קומבינטוריות.

ועם שני כלי האופטימיזציה של MathWorks שפורטו לעיל, בטוח שמעתה פתרון בעיות האופטימיזציה שלכם יהיה אופטימלי ! אז אפשר להיות קצת יותר אופטימיים...

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

יום ראשון, 1 באפריל 2012

MATLAB לביצוע חישובים פיננסים



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

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

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

• לנתח כמויות עצומות של מידע היסטורי (למשל, של שערי מניות בעבר)
• לפתח מודלים פיננסיים מורכבים וליצור באמצעותם חיזויים (למשל, של שערי מניות בעתיד)
• לתמחר מוצרים פיננסים (מניות, אופציות וכו')
• לנתח ולנהל סיכונים
• לפתח ולבדוק אסטרטגיות מסחר
• לבנות תיקי השקעות אופטימליים
• לשלב אלגוריתמי לימוד מכונה בתהליכים פיננסים
• לשלב אפליקציות MATLAB לתוך סביבות עבודה אחרות (מערכות בסניפי הבנקים, מחשבונים פיננסים באינטרנט וכו')

וכל זאת - תחת רגולציה אשר הופכת למחמירה יותר ויותר, במיוחד מאז המשבר הפיננסי האחרון.

מימין - עקום תשואה של אג"ח. משמאל - עקום יעילות עם עשרה תיקי אג"ח שונים עליו
                                             לחצו להגדלה

להלן רשימת הכלים היעודיים של MathWorks לעולם הפיננסי:

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

Fixed-Income Toolbox - מספק פונקציות למידול ואנליזה של מוצרים בעלי ריבית מובנית. הכלי כולל כלים להתאמת עקומי ריבית, ניתן באמצעותו לחשב מחיר, ריביות ורגישויות עבור interest rate swaps, וניתן לתמחר בעזרתו גם נגזרים נוספים, למשל credit default swaps, אג"ח להמרה וחוזים עתידיים על אג"ח. הכלי מאפשר גם לנתח מוצרים פיננסים כמו אג"ח חברות, אג"ח מדינה וניירות ערך מגובי משכנתאות.

Financial Derivatives Toolbox - מרחיב את היכולות של ה-Financial Toolbox ביכולות לביצוע ניתוח ומידול של נגזרים על מניות ומדדים ומידול של נגזרים על אג"ח. ניתן להשתמש בכלי לחישובי מחיר ורגישויות של נגזרים, להצגת התפתחות מחיר מוצרים כתלות בזמן ולביצוע ניתוחי גידור באמצעות מודלים שונים.

Econometrics Toolbox - מאפשר למדל ולנתח מערכות פיננסיות וכלכליות באמצעות שיטות סטטיסטיות. הכלי עוזר לבחור מודל אקונומטרי ולכייל אותו באמצעות מידע שוק לצורך ביצוע חיזוי עתידי. עם הכלי ניתן לנתח סדרות זמן לפי מודלי ARMAX/GARCH ולכייל מודלים מסוג Vector Autoregressive. הכלי מספק שיטות מונטה קרלו לסימולוציה ופתרון בעיות דיפרנציאליות סטוכסטיות המתארות התפתחות בזמן של משתנים אקונומטריים דוגמת ריבית ומחירי נכסים.

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

האם הכרתם את הכלים של MathWorks לעולם הפיננסי? האם תעדיפו שכספי הפנסיה שלכם ינוהלו על ידי גוף שמשתמש ב-MATLAB? האם אי פעם השתמשתם ב-MATLAB לצורך ביצוע חישובים פיננסים?

יום חמישי, 15 במרץ 2012

מה חדש ב-MATLAB ו-Simulink בגירסת R2012a ?


בתחילת מרץ שוחררה גירסת R2012a של כלי MathWorks, המכילה יכולות חדשות ב-MATLAB ו-Simulink, וכן עדכונים לעשרות כלים אחרים.


בין היכולות החדשות במשפחת מוצרי MATLAB :

MATLAB – ביצועים משופרים לפונקציות מתמטיות בסיסיות ולפונקציות האינטרפולציה, וכן Variable Editor משודרג.

Image Processing Toolbox – התווספה יכולת לבצע רגיסטרציה אוטומטית של תמונות בעזרת intensity-metric optimization, וכן נוספו פונקציות למציאת מעגלים בתמונה והצגתם.

Computer Vision System Toolbox – הכלי המקל על תכנון וסימולציה של מערכות ראיה ממוחשבת ומערכות עיבוד וידאו ותמונה תומך כעת גם בגילוי פנים באמצעות אלגוריתם Viola-Jones, גילוי פיצ'רים בשיטת MSER, עקיבה בגישת CAMShift וחישוב Integral Image. הכלי אינו מצריך עוד את ה-DSP System Toolbox וה-Signal Processing Toolbox לצורך פעולתו.

Image Acquisition Toolbox – הכלי המאפשר להזין בקלות את סביבות MATLAB ו-Simulink במידע ויזואלי (וידאו/תמונה) על ידי מגוון מצלמות ו-frame grabbers כולל כעת System Object הניתן להמרה אוטומטית לקוד C באמצעות ה-MATLAB Coder.

MATLAB Compilerה-MCR ניתן כעת להורדה מהאינטרנט, דבר המקל על הפצת אפליקציות וקומפוננטות מקומפלות לעמדות בהן אין התקנה של MATLAB. מעבר לכך, הכלי תומך במספר פונקציות נוספות המשתייכות ל-Computer Vision System Toolbox.

MATLAB Coder – הכלי המאפשר המרה ישירה של קוד MATLAB לקוד C מאפשר כעת גם המרה של System Objects שפותחו על ידי המשתמש.

HDL Coder – הכלי, אשר נקרא בעבר Simulink HDL Coder ואיפשר המרת מודלי Simulink לקוד HDL, מאפשר כעת גם המרה ישירה של קוד MATLAB לקוד HDL מטיפוס Fixed-Point לצורך קבלה מהירה של אבטיפוס ולשם מימוש אלגוריתמים על רכיבי ASIC ו-FPGA. הנ"ל אמור גם לגבי System Objects. הכלי אינו מצריך עוד Simulink Fixed-Point או Simulink לצורך פעולתו (דורש רק MATLAB Coder ו-Fixed-Point Toolbox).

HDL Verifier – מאפשר שימוש חוזר ב-test benches קיימים ב-MATLAB ו-Simulink לצורך וריפיקציה של קוד HDL על ידי קו-סימולציה עם סימולטורי HDL או בדיקות hardware-in-the-loop עם רכיבי FPGA. הכלי מחליף את ה-EDA Simulator Link וכולל כעת תמיכה בביצוע בדיקות hardware-in-the-loop גם לרכיבי FPGA של חברת Altera (חמישה-עשר דגמי FPGA של Altera ו-Xilinx נתמכים).

Statistics Toolbox – מכיל ממשק משופר לביצוע התאמה, חיזוי והצגה באמצעות רגרסיה לינארית, לינארית-מוכללת, ולא-לינארית.

Communications System Toolbox – מכיל כעת מודלים לערוצי LTE MIMO, ומאפשר ניצול של הכרטיס הגרפי (GPU) שבמחשב לצורך האצת סימולציות של מגוון System Objects הרלוונטים לתכנון, סימולציה וניתוח השכבה הפיזית
 (Physical Layer) של מערכות תקשורת.

Parallel Computing Toolbox – מאפשר כעת האצת ביצועים של מגוון פונקציות ה-FFT (על כל הסינטקסים שלהן) ופונקציות נוספות על ידי שימוש בכרטיס הגרפי (GPU) שבמחשב. בנוסף, פונקצית arrayfun שודרגה.



בין היכולות החדשות במשפחת מוצרי Simulink :

Simulink – מאפשר כעת הרצה של מודלים על חומרה זולה דוגמת LEGO MINDSTORMS NXT ו-BeagleBoard ישירות מתוך Simulink. בנוסף, חלון ה-editor של בלוק ה-MATLAB Function משולב כעת עם חלון ה-editor הרגיל של MATLAB, הורחבה התמיכה במערכות source control באמצעות ה-Source Control Adapter SDK, נוספה היכולת להוסיף legends בבלוק ה-Scope, הצטרפה האפשרות לשמור מודלים וספריות בפורמט הקבצים החדש של Simulink הנקרא SLX (חוסך מקום בזיכרון, מספק מידע רב למערכות הצגת קבצים, חוסך בזמן ביישומים מסוימים, וצפוי להיות הפורמט היחיד החל מ-R2012b) והתווסף ה-Signal Hierarchy Viewer.

Simulink Verification & Validation – לכלי המאפשר, בין היתר, שמירה על עקביות במודל אותו מפתחים, נוספה יכולת להחריג בלוקים ותת-מערכות כך שלא ייבדקו על ידי ה-Model Advisor, דבר אשר מקצר את משך פעולתו.

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

Real-Time Windows Target – מאפשר הרצת מודלים של Simulink ב-
real-time בסביבת Windows תוך שימוש ב-Normal Mode, לצורך rapid prototyping או בדיקות hardware-in-the-loop
. כלומר, הכלי אינו מצריך עוד את ה-MATLAB Coder וה-Simulink Coder לצורך פעולתו, שכן פרט ל-External Mode, ניתן להשתמש כעת גם ב-Normal Mode.


עוד משהו?

מידע נוסף על החידושים הללו ועל יתר היכולות שהתווספו ניתן למצוא בעמוד הגרסה באתר MathWorks.

האם הורדתם כבר את הגרסה החדשה? איזו יכולת חדשה שצוינה למעלה שימושית במיוחד עבורכם? האם יש חידוש שגיליתם שלא הופיע למעלה?

יום חמישי, 1 במרץ 2012

CAD קטן | על המרת מידע בין תוכנות CAD ותוכנת MATLAB


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


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

אם המטרה היא לחבר את המודל למערכת בקרה או ליצור סימולציה מערכתית רחבה יותר, אזי ניתן להשתמש בכלי של MathWorks שנקרא SimMechanics, אשר מאפשר יצירת מודלים של Simulink מתוך מודל ה-CAD. התוצאה היא מודל Simulink לא ליניארי, אשר מכיל את כל התכונות של מודל ה-CAD, לרבות שמות החלקים, תכונות פיסיקליות כמו מסה ואינרציה, אופן חיבור החלקים וכו'. אופציה זו משמשת מהנדסי בקרה ומהנדסי מערכת רבים לתכנון מערכות בקרה אופטימליות.

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

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

תמונה 1: שמירת המודל בפורמט STL

2. יש להוריד מתוך אתר שיתוף הקבצים של MathWorks את הקובץ stlread.m

תמונה 2: הורדת הקובץ מאתר שיתוף הקבצים של MathWorks

3. הפונקציה stlread מתועדת היטב, וקל לעקוב אחרי הוראות השימוש בה. ייבוא הנתונים פשוט מאוד, כפי שניתן לראות בתוכנית הקצרה הבאה שכתבתי:

תמונה 3: קוד המשמש לקריאת הנתונים והצגת המודל בתוך MATLAB

ועל ידי השימוש בפונקציה patch, התוצאות ב-MATLAB נראות כך:

תמונה 4: הצגת הנתונים ב-MATLAB על ידי שימוש בפקודת patch

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

תמונה 5: צילום מסך מתוך SolidWorks

האם העליתם פונקציה משלכם לאתר שיתוף הקבצים של MathWorks? האם יש פונקציה מסויימת שהורדתם והפכה את החיים שלכם לקלים יותר? האם השתמשתם בעבר ב-SimMechanics? ומה לגבי פונקציית patch?