עיבוד אות – יכולות ששווה להכיר

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

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

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

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

  1. Wavelet Signal Denoiser Appאפליקציה המאפשרת לבצע סינון באמצעות מגוון טכניקות סינון. האפליקציה מאפשרת להתאים פרמטרים שונים עבור כל טכניקת סינון, כאשר ניתן לייצר מספר גרסאות של האות לאחר הסינון ובסוף לייצא את הסיגנל הרצוי.

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

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

יש לנו שני סוגי datastore הנוגעים לאותות:

  1. signalDatastoreהמשמש לייבוא אותות באמצעות datastore – מידע נוסף ניתן למצוא בקישור הבא.
  2. audioDatastore המשמש לייבוא אותות שמע באמצעות datastore – מידע נוסף ניתן למצוא בקישור הבא.

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

  1. Signal Labeler Appכלי אינטראקטיבי המאפשר תיוג עבור אותות חד מימדיים. ניתן לתייג באמצעותו את כל האות, אזורי עניין בתוך האות או נקודות ספציפיות באות. ניתן לתייג בצורה ידנית או אוטומטית על ידי כתיבת פונקציה מותאמת אישית.
  2. Audio Labeler App – כלי נוסף המאפשר תיוג עבור סיגנלי אודיו. אל האפליקציה ניתן לייבא סיגנלים או להקליט סיגנלים חדשים ישירות מתוכה. גם כאן בדומה לsignal labeler ניתן לתייג את האות כולו או אזורי עניין.

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

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

  1. Diagnostic Features Designer App –  על ידי האפליקציה ניתן לחלץ מאפיינים עבור סט הנתונים שלנו בצורה אינטראקטיבית, ניתן לחלץ מאפיינים עבור אותות הן במישור הזמן והן במישור התדר, לצפות בצורה ויזואלית במאפיינים ולדרג את איכותם – קישור.
  2. Wavelet Scatteringטכניקה למיצוי מאפיינים אוטומטיים, מתאימה עבור אותות חד מימדיים על ידי פונקציית waveletScattering ועבור תמונות על ידי פונקציית waveletScattering2.

  3. Time-Frequency Transformationsלעיתים נרצה לנתח את האות במישור הזמן-תדר. בצורה כזאת ניתן להפיק מידע נוסף על האות ולייצג את האות כתמונה. מוטביציה לייצוג הזה יכולה לנבוע מכך שאת אותן תמונות ניתן להכניס כקלט לרשתות CNN. סקירה של כל הפונקציות המשמשות לייצוג זמן-תדר, כולל דוגמאות נלוות, ניתן למצוא בקישור הבא.
  4. Audio feature extraction in the Live Editor – כחלק מה-live editor של MATLAB, יצאו בגרסת 2019b ה-live editor tasks. המשימות הללו מאפשרות ליישם פעולות אינטראקטיביות כחלק מהקוד עצמו. משימה שיצאה בגרסת 2020a מאפשר חילוץ מאפיינים אוטומטיים לסיגנלי אודיו. למי שעדין לא יצא לו לעבוד עם ה-live editor tasks, אני ממליצה להתחיל – זה חוסך זמן, נוח לשימוש, מראה את התוצאות בצורה ויזואלית וכמובן מאפשר להמיר את הפעולות האינטראקטיביות שביצענו לקוד שניתן לערוך.

מידע נוסף על ה-audio feature extraction task ניתן למצוא בקישור הבא.

צפו בסרטון הממחיש את העבודה עם ה-live editor

לאחר שלב העיבוד המקדים ובניית המודל, אנחנו מגיעים לשלב האחרון בתהליך הפיתוח, שלב ההטמעה. יתרון משמעותי של MATLAB הוא התמיכה בכל שלבי הפיתוח, כן, גם בשלב ההטמעה! ניתן לבצע המרה אוטומטית של קוד MATLAB  לקוד C++, C או CUDA איכותיים ובכך לייעל את התהליך. פונקציות רבות תומכות בהמרת קוד אוטומטי ובפרט פונקציות מעולם התוכן של עיבוד אות. את הרשימה המלאה תוכלו למצוא בקישורים שלהלן:

  1. פונקציות הנתמכות בהמרת קוד MATLAB לקוד CUDA
  2. פונקציות הנתמכות בהמרת קוד MATLAB לקוד C \ C++

באמצעות הכלים שהוזכרו למעלה תוכלו לייעל את דרך העבודה שלכם ולהפיק את המירב בשלב הפיתוח!

 

פיתוח רובוט הלחימה האולטימטיבי עם ALTIUM DESIGNER

BATTLEBOTS היא סדרת טלויזיה המשודרת בערוץ הדיסקברי כבר שש עונות.

בעונה הנוכחית התחרו בינהם 60 קבוצות מרחבי העולם בזירת לחימה היחידה בעולם בין רובוטים שפיתחו.

רובוט ה – Mammoth מרסק מדפסת שולחנית

קפטן צוות רובוט ה – Mammoth – ריקי ווילאמס מסביר כיצד חלום ילדותו הפך למציאות.

"לטובת בניית הרובוט, השתמשתי בתוכנת  Altium Designerבכדי לפתח ולתכנן Speed Controller שיוכל להתמודד עם הזרם והמתח האדירים הנדרשים בכדי להפעיל את המפלצת הזו.

בעזרת Altium Designer הצלחנו לתכנן את המעגל הקטן ביותר שיכנס למארז הקטן ביותר כיוון שאנחנו מוגבלים מאוד במקום ובמשקל."

המעגל המודפס – Speed Controller לאחר יצור ואריזה

 

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

מתי ואיך להשתמש ב- Emissive Appearance כדי להוסיף חיים לתמונה המרונדרת?

כמה צעדים פשוטים להוספת חומר פולט אור ב- SOLIDWORKS VISUALIZE :

  • בחירת חומר מסוג Emissives במקומות בהם רוצים לראות פליטת אור (למשל פנסים, מנורות וכו'..)

  • מקבלת תאורה "לא מודגשת"

  • כדי להדגיש את התאורה יש להוסיף אפקט Bloom ולהגדיר בהתאם לסוג הדגשת התאורה שרוצים- אפשרות זו קיימת רק ב- Visualize Professional

  • להלן התוצאה:

לצפייה בוובינר בנושא SOLIDWORKS VISUALIZE

פוסטים שוודאי לעניינו אותך:

מה לתומאס אלווה אדיסון ממציא הנורה החשמלית, לז'וזף ניספור נייפס ממציא המצלמה ולתוכנות תיב"ם ?

איך לרנדר אנימציות בקלות בתוכנת Visualize Professional?

באנו חושך לגרש עם SOLIDWORKS VISUALIZE

 

על קיבועים ודרגות חופש באנליזת חוזק

אז "האם האנליזה שלי מדויקת?" – אולי..

ומה עם "בניסוי הפיזי זה מתנהג אחרת לגמרי!"  – כנראה.

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

מבולבלים? עד סוף המאמר כבר לא תהיו.

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

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

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

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

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

בכל פעם שאנחנו מגדירים ריתומים (Fixtures) באנליזה, אנו למעשה מגבילים דרגות חופש של ישויות נבחרות במודל, כלומר: מקבעים אותו בכיוונים שאנו חושבים שלא יזוז במציאות.

וכשמה שאנחנו מגדירים (או מניחים) לא דומה למציאות – התוצאות בהתאם.

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

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

במציאות: הצינור הזוויתי רתום לקיר בשני ברגים העוברים דרך הפלאנג'.

Fixed Geometry

אופן ההגדרה:

משמעות: קיבוע אבסולוטי של כל הפלאנג', הפאה מקבלת קשיחות אינסופית ואינה יכולה להתעוות.

מספר דרגות חופש מוגבלות: 6 (כולן)

יתרון: הגדרה קלה, זמן פתרון מהיר.

חיסרון: מצב שכמעט ולא מתקיים במציאות.

ניתוח תוצאות:

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

מסקנה: הציפייה לריכוז מאמצים באזור הרתום לא התממשה. מכאן שהמצב אינו מציאותי כלל.

Fixed Hinges

אופן ההגדרה:

משמעות: קיבוע צירי של פאות הקדחים בפלאנג'.

מספר דרגות חופש מוגבלות: 5. מתאפשרת רוטציה סביב ציר המרכז של כל אחד מהקדחים בלבד.

יתרון: הגדרה קלה ומציאותית יותר מ-Fixed על אותן פאות. זמן פתרון מהיר.

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

ניתוח תוצאות:

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

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

Virtual Wall + Fixed Hinges

אופן ההגדרה:

משמעות: הגדרת קיר וירטואלי כנגד הפלאנג'. ההגדרה מתאפשרת דרך תפריט Local Interactions.

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

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

חיסרון: אותו חיסרון שבשימוש ב- Fixed Hinge. בנוסף, הקיר הוירטואלי מאריך את זמן הריצה של הפותרן.

ניתוח תוצאות:

מסקנות:

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

Virtual Wall + Foundation Bolts

אופן ההגדרה:

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

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

יתרון: הגדרה מציאותית לחלוטין.

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

תוצאות:

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

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

לפני סיום, ניואנס נוסף:

Bolt Connector VS Bonded Interaction

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

נראה זאת בהשוואה הבאה, בה נבחן מצב של חיבור בורגי בין שני פלאנג'ים לעומת הגדרת אינטראקציית Bonded בינהם:

בחינת אזור הממשק בין הפלאנג'ים לא משאירה מקום לספק – חיבור בורגי במקרה שכזה הוא קריטי לנכונות פתרון האנליזה.

לסיום,

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

כיצד להפיק מסמכי תקשורת טכנית והוראות באמצעות SOLIDWORKS COMPOSER

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

האם אפשר לייעל את התהליך? וודאי שכן! בעזרת SOLIDWORKS COMPOSER

מה זה SOLIDWORKS COMPOSER?

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

 

איזה תוצרים ניתן לקבל בעזרת SOLIDWORKS COMPOSER?

  • הוראות הרכבה
  • הוראות תחזוקה
  • הוראות שימוש
  • הסברים טכניים בין מחלקות שונות
  • הסברים שיווקיים

איזה סוגי תוצרים ניתן להפיק בעזרת SOLIDWORKS COMPOSER?

  • תמונות דו מימדיות
  • תמונות אינטראקטיביות
  • סרטוני אנימציה
  • הסברים אינטראקטיביים

בואו נתבונן בכמה דוגמאות של תוצרי SOLIDWORKS Composer כדי לקבל המחשה לשימוש בתוכנה:

להורדת SOLIDWORKS Composer Player לחץ כאן

תוכן גרפי דו מימדי

להורדת הוראות הרכבה של רובה תבור, חברת I.W.I, לחץ כאן

 

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

 

תמונה אינטרקטיבית

להורדת תיקיית תמונות אינטרקטיביות לחץ כאן

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

 

הוראות תחזוקה אינטרקטיביות

להורדת קובץ הוראות תחזוקה אינטרקטיביות לחץ כאן

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

 

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

 

סרטון אינטרקטיבי

להורדת סרטון הוראות אינטרקטיבי לחץ כאן

 

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

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

 

 

לצפייה בוובינר בנושא SOLIDWORKS Composer

 

 

 

סימולציות ומעבדה היברידית עם MATLAB ו-Simulink | איך נחתתי מהחלל היישר אל סיסטמטיקס?

התחלתי את הקריירה ההנדסית שלי בתור מהנדס וריפיקציה לאלגוריתמי הניווט והבקרה של SpaceIL, שם קצת מפוצץ אבל בפשטות, אני הייתי צריך לקחת את תוכנת הטייס האוטונומי של החללית (שנכתבה כולה ב-MATLAB) ולבדוק אותה בסימולטור real-time מבוסס Linux, ובמעבדה היברידית (כלומר מול חומרה).

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

קרדיט: לספייס אי אל, צולם ע"י בראשית

אז איך קרה כל המסע הזה?

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

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

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

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

אז ישבתי ביחד עם אריאל רובננקו, איש הניווט שהגיע מסיסטמטיקס (לסיפורו של אריאל לחצו כאן), והכנו ביחד רשימה של בדיקות (שהלכה וגדלה), אבל כל בדיקה מבוצעת ב-Linux, והתחקירים כולם קורים ב-MATLAB. למזלי יכולתי לייצר קבצי txt מה-MATLAB שהוזנו ישירות ל-Linux, ככה נוצר הקישור הראשון. כמובן שהיה צריך גם לקחת את המידע מה-Linux ולפענח אותו ב-Simulink, שוב למזלי (או יותר נכון, לבקשתי) הסימולטור הוציא קבצי CSV עם כל הפרמטרים שביקשנו (והיו לא מעט), ואז יכולנו לייבא את הקובץ פנימה, להכניס אותו ל-Simulink ולהוציא תוצאות, ואחרי זה לנתח תרחישים שקרו בreal-time בסימולטור, באמצעות ה-data-inspector של ה-Simulink (למידע נוסף – לחצו כאן). בזכות היכולות של MATLAB כל התהליך הזה הפך לכמעט אוטומטי, ויכולנו למצוא הרבה באגים, שאחרי זה שיפרו משמעותית את הביצועים שלנו במשימה המבצעית.

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

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

אז חזרנו לשולחן השרטוט וחשבנו איך לתחקר תרחישים מהמעבדה ההיברידית?

ה-Simulink כבר לא עזר לנו, כי המידע לא רציף ולא באינטרוולים קבועים של זמן.

עברנו ל-MATLAB, שוב ניצלנו את יכולות ה-Import/Export שלו, והכנסנו את המידע שמגיע מטלמטריה (בגודל אקראי עם פרמטרים חסרים לעיתים ושמות מקודדים) ישירות ל-MATLAB, שם עשינו סידור אוטומטי והזנו את הכל ל-struct אחד נוח שאפשר להסתכל עליו.

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

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

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

פשוט נכון?

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

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

קרדיט: ספייס אי אל, צולם ע"י בראשית

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

עיבוד שבבי באמצעות SOLIDWORKS CAM

כיום, כל עמדת SOLIDWORKS (בכל חבילות SOLIDWORKS, גם חבילת SOLIDWORKS STANDARD) שנמצאת במסגרת חוזה תחזוקה פעיל, מכילה גם תוכנת CAM עבור הפקת G-Code למכונות CNC.

SOLIDWORKS משתמשים בתוכנת ה CAM הפופולרית: CAMWorks מבית HCL. בכל עמדת SOLIDWORKS, ניתן להתקין ולהשתמש ב SOLIDWORKS CAM Standard (כל עוד נמצאים במסגרת חוזה תחזוקה), שמכילה את היכולות הבאות:

  1. אינטגרציה מלאה בתוך SOLIDWORKS (בתוך חלון התכנון), כולל חיבור למערכת ניהול המידע SOLIDWORKS PDM, ועדכונים מידיים בשינויי התכנון.
  2. כרסום 5 צירים, לדוגמה חלקים שדומים לחלק הבא:
  3. כרסום 3 צירים בו-זמנית, הימנעות מ Undercutting.
    לדוגמה חלקים שדומים לחלק הבא:
  4. Automatic feature recognition – זיהוי אוטומטי של פיצ'רים בהתאם לגיאומטריה והבניה ב SOLIDWORKS וכך יוצרת אסטרטגיית כרסום נכונה ללא צורך בהתערבות המשתמש.
  5. Knowledge based machining – בסיס מידע שבו ניתן ללמד את מערכת את אסטרטגיות הכרסום השונות במצבים שונים, וכך המערכת יודעת באופן אוטומטי את אסטרטגיית הכרסום לחלקים שונים באופן אוטומטי.
  6. Toolpath simulation – סימולציה ויזואלית של פעולות הכרסום והשוואה לחלק המתוכנן.
  7. Tolerance based machining – יכולת להגדרת מסלול ואסטרטגיית הכרסום בהתאם לטולרנסים וטיב פני השטח שמוגד בחלק.
  8. CAMWorks NC editor – עורך (Cimco Editor) פלט ה NC שבו ניתן להתערב ידנית כדי לשנות את ה G-Code.
  9. Universal post generator – תוכנה לכתיבת פוסטים באופן עצמאי למכונות ובקרים שונים.  המערכת כוללת ספרייה גדולה של פוסטים מוכנים.

ניתן להרחיב לחבילות CAM נוספות:

SOLIDWORKS CAM Professional כולל גם את היכולות הבאות:

  1. כרסום 2.5 צירים בסביבת ההרכבה, כדי לכרסם מספר חלקים בו-זמנית, תוך הימנעות מכרסום של ה Jigs שמחזיקים את החלקים המכורסמים. לדוגמה:
  2. שימוש בציר 4 ובציר 5 עבור סיבוב העובד או מספר עובדים כדי לכרסם בצדדים שונים של החלק (Indexing). לדוגמה:
  3. VoluMill – יכולת לקבל אסטרטגיית כרסום שגם מקטינה את שחיקת הכלי המכרסם וגם מבצעת את פעולות הכרסום בצורות מיוחדות ובקדמה משתנה כדי לקבל זמן כרסום קצר יותר באופן משמעותי (לפעמים גם 80% קצר יותר).
  4. Turning – תמיכה בפעולות חריטה.

בנוסף, יש חבילות נוספות שמשלימות את יכולות ה CAM השונות:

CAMWorks Standard:

  1. Sub Spindle Turning – חריטה בעזרת אחיזת העובד בשני צדדיו (2 תפסניות).
  2. Rotary milling – כרסום בעובד מסתובב.

CAMWorks Professional:

  1. Mill-Turn – כרסום וחריטה ביחד.

ו:

  1. כרסום 3 צירים בו-זמנית, כולל עיבוד אזורי Undercutting

או:

  1. Synchronous machining – חריטה מכיוונים שונים בו-זמנית.
  2. Virtual Machining std. simulation – סימולציה של מכונת עיבוד השבבי.

CAMWORKS Premium:

  1. כרסום 4 צירים בו-זמנית
  2. כרסום 5 צירים בו-זמנית

לסיכום:

בכל עמדת SOLIDWORKS, יש כיום גם יכולות CAM אינטגליות בתוך התוכנה. ניתן להרחיב את היכולות למגוון רחב מאוד של צרכים ויכולות עיבוד שבבי.

>> למידע נוסף על SOLIDWORKS CAM

פיתוח Widget בסביבת הפיתוח של ArcGIS Experience Builder

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

מעבר לכך, ה-Builder עדיין לא כולל את כל הפקדים הכלולים ב- ArcGIS JavaScript API 4.X, בבלוג זה נראה איך ניתן לבנות ווידג'ט משלנו המאפשר עבודה עם פקדים שעדיין לא כלולים ב-builder

 איך עושים את זה?

מתחילים בהתקנה מאד פשוטה של הסביבה:

  1. מורידים את ה-zip
  2. פורסים אותו על המחשב שלכם
  3. מתקינים את ה-server ב פקודת npm ci
  4. מתקינים את ה-client בפקודת npm ci

ניתן לקרוא יותר באתר

מפעילים את הסביבה

  1. הפעלת ה-server ב בפקודת npm start
  2. הפעלת ה-client בפקודת npm start

גלישה למחולל היישומים שלכם

https://<FQDN>:3001/

ואפשר להתחיל לפתח…

כמה מילים על הסביבה

JIMU  היא ספריית javaScript שה-builder עובד איתה וכוללת מספר חבילות:

  • jimu-core – אחראית לטעינת האפליקציה לפי ה-config , מנהלת את הגישה למאפיינים, מקורות המידע ועוד
  • jimu-arcgis – אחראית לעבודה עם ה-ArcGIS JavaScript API
  • jimu-ui – אחראית לחווית המשתמש
  • jimu-layout – אחראית לעימוד
  • jimu-for-builder- אחראית לפיתוח ה-setting page

ArcGIS JavaScript API 4.X – מאפשר גישה לכל יכולות ה-jsapi

אם הגעתם עד לכאן אני בטח לא צריכה להסביר לכם מה זה  TypeScript, React, Redux או Webpack…

אז בואו נפתח את סביבת הפיתוח (אני ממליצה על VS Code)  ונתחיל לפתח יחד את הווידג'ט הראשון שלנו…

כאמור, מטרת הווידג'ט שלנו היא עבודה עם פקדי jsapi שאינם כלולים עדיין ב-builder.

כל הפיתוח נעשה תחת ספריית your-extension

תחתיו ישנן 2 ספפריות:widgets ו-themes, רנחנו נעבוד תחת ספריית widgets

העתקת ספריית ה-simple לספריה חדשה

שינוי שם הספרייה ל-EXB

בקובץ ה-manifest.json

  • שינוי השם ל-EXB
  • הוספת תלות ב-jimu-arcgis

על מנת לבנות למיישם טופס בו יוכל לעדכן את מאפייני הווידג'ט עלינו לעושים settings לווידג'ט שלנו כך:

הוספת ספריית setting תחת ה-src

הוספת קובץ setting.tsx תחת ספריית setting

 

והקוד:

import {React, Immutable} from 'jimu-core';

import {AllWidgetSettingProps} from 'jimu-for-builder';

import {TextInput} from "jimu-ui";

import {IMConfig} from "../config";

import {JimuMapViewSelector} from 'jimu-ui/advanced/setting-components';

export default function (props: AllWidgetSettingProps<IMConfig>) {

const onExbPropertyChange = (evt: React.FormEvent<HTMLInputElement>) => {

props.onSettingChange({

id: props.id,

config: props.config.set("exampleConfigProperty",
evt.currentTarget.value)

});

};

const onMapSelected = (useMapWidgetIds: string[]) => {

props.onSettingChange({

id: props.id,

useMapWidgetIds: useMapWidgetIds

});

}

return (

<div>

Choose Map:

<div className="sample-use-map-view-setting p-2" >

<JimuMapViewSelector onSelect={onMapSelected}
useMapWidgetIds={props.useMapWidgetIds} />

</div>

<div className="sample-use-map-view-setting p-2">

exampleConfigProperty:

<TextInput

value={props.config.exampleConfigProperty}

onChange={onExbPropertyChange}

></TextInput>

</div>

</div>

);

}

דגשים:

IMConfig – מפנה להגדות שהוגדרו עבור הווידג'ט שלנו בקובץ ה-config.ts

import { ImmutableObject } from 'seamless-immutable';

export interface Config {

  exampleConfigProperty: string;

}

export type IMConfig = ImmutableObject<Config>;

את הקישור למפה מעדכנים באמצעות JimuMapViewSelector

על מנת לאפשר בטופס ההגדרות לעדכן משתנה מסוג string השתמשנו ב- TextInput

לכל סוגי המאפיינים, מעדכנים את המאפיינים בעזרת הפעלת props.onSettingChange (props הוא מסוג AllWidgetSettingProps)

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

הקוד:

/** @jsx jsx */

import { React, AllWidgetProps, jsx } from 'jimu-core';

import { IMConfig } from '../config';

import { JimuMapViewComponent, JimuMapView } from 'jimu-arcgis';

import * as Legend from "esri/widgets/BasemapGallery";

import { useEffect } from 'react';

export default function Widget(props: AllWidgetProps<IMConfig>) {

  let apiWidgetContainer: React.RefObject<HTMLDivElement>;

  let legendWidget: Legend;

  let mapView: __esri.MapView | __esri.SceneView;

  apiWidgetContainer = React.createRef();

  let onActiveViewChange = (jimuMapView: JimuMapView) => {

    if (!(jimuMapView && jimuMapView.view)) {

      return;

    }

    mapView = jimuMapView.view;

    createAPIWidget();

  }

  let createAPIWidget = () => {

    if (!mapView) {

      return;

    }

    if (!legendWidget && apiWidgetContainer && apiWidgetContainer.current) {

      legendWidget = new Legend({

        view: mapView,

        container: apiWidgetContainer.current

      })

    }

  }

  useEffect(() => {

    createAPIWidget();

    return function cleanup() {

      if(legendWidget){

        legendWidget.destroy();

        legendWidget = null;

      }

    };

  });

  return (

    <div className="widget-demo jimu-widget m-2">

      <p>Simple Widget</p>

      <h3>{props.config.exampleConfigProperty}</h3>

      <JimuMapViewComponent

        useMapWidgetIds={props.useMapWidgetIds}

        onActiveViewChange={onActiveViewChange}></JimuMapViewComponent>

      {(!props.useMapWidgetIds || props.useMapWidgetIds.length < 1) ?

        "בחר מפה" :

        <div ref={apiWidgetContainer}></div>}

    </div>

  );

}

דגשים:

import { JimuMapViewComponent, JimuMapView } from 'jimu-arcgis';

import * as Legend from "esri/widgets/BasemapGallery";

הפניה ל-mapview מתבצעץ באמצעות המעטפת של JimuMapViewComponent המוסיפה את כל הנדרש לנו לקישור ולעבודה עםווידג'טים אך עדיין חושפת לנו את אותו mapView או sceneView שאנחנו מכירים מהעבודה עם ה-jsapi

מאחר וההדגמה נבנתה במקור לעבודה עם Legend כך קראנו ב-alias לפקד שלנו אך כל פקד של ה-jsapi שנפנה אליו (בקוד למעלה פונה ל- esri/widgets/BasemapGallery) יוכל לעבוד אם כל הנדרש להפעלתו זה הגדרת view ו-container (בהדגמה ראינו עבודה עם measure,legend ויש עוד).

useEffect – HOOK מאפשר בדומה ל componentDidMount and componentDidUpdate המוכרים מעבודה עם class לפעול לאחר טעינת הקומפוננטה.

React.createRef בשילוב עם הגדרת ref ל-div שחוזר מהפונקציה, מאפשר פניה ישירה למקום בקונטרול שלנו לצורך אכלוסו עם הפקד שלנו.

מאחר וקוד זה מדגים לנו רק כיצד להוסיף פקד של jsapi למפה, כצעד המשך אני ממליצה להוריד את הדוגמאות מאתר ה-github ולעבור באופן ספציפי על הווידג'ט get-map-coordinates-function.
בדוגמה זו ניתן לראות שילוב של עבודה עם events ו-watch על מאפיינים של פקד ה-view של ה-jsapi.
כמו כן, מדגים גם שימוש ב-useState HOOK.

לסיכום, כמה לינקים שחשוב שתכירו (אם עדיין לא הכרתם):

לכניסה לדף הבית – לחצו כאן

לכניסה ל- GITHUB

לכניסה ל- JSAPI

קישור להורדת קובץ ZIP פרויקט הקוד

ונסיים בברכת HAPPY CODING 😊