פילטרים – אבקת הקסמים של BetaFlight
פילטרים, הרבה מאוד נכתב על כל סוגיית הפילטרים סביב בטא 3.3 ו 3.4 אבל אחד השינויים היותר מגניבים ( כלומר אם אתם חנג'ים כמונו ודברים כאלו מגניבים אתכם) דווקא נעשה ב 3.5, וזוהי התכונה היחידה שלא דיברנו עליה כאן בפוסט הקודם.
בוא נתחיל לפשט את הדברים ולעשות קצת סדר, נדבר מהו פילטר, אילו סוגים קיימים ומה ההבדלים ביניהם, לגבי למה צריך אותם, ניחשתם נכון – להסיר / לפלטר סיגנל או "רעש" לא רצוי
יש "אימלוק" בתחתית העמוד
מה זה פילטר ?
אז ככה פילטר בתחביב הנחמד והחפרני שלנו זה בעצם Signal Processing Filter והוא מקביל לפילטרים שמשתמשים בהם בהפקות מוזיקה ובאלקטרוניקה באופן כללי – הרעיון הוא לבודד תחום מסויים של האות או במידה הפוכה לסנן אותות לא רצויים.
אילו סוגי פילטרים קיימים ?
מלא – בבטא פלייט קימיים הפילטרים הבאים
Low-pass filter – (LPF) כל תכליתו בייקום הוא לסנן רעשים עם תדר גבוה, ולהעביר את התדרים הנמוכים
High-pass filter – סוג של ההיפך מ LPF מסנן את התדרים הנמוכים ומעביר את התדרים הגבוהים
ישנם מספר סוגים / מימושים של הפילטרים הנ"ל (LPF ו HPF) להלן : PT1 ו BIQUAD – מדובר בעצם בשתי שיטות חישוב שונות של אלגוריתם הסינון – כאשר PT1 – מסנן קצת פחות טוב ( -3db ב Cutoff לעומת -12db ב Cutoff של BiQuad ) אבל גורם להרבה פחות Delay.
בכלל ומבלי להכנס יותר מדיי לעומק – פילטר טוב יותר יגרום ליותר דיליי מה שיגרום לרחפן להגיב קצת פחות טוב לשינויים מאוד מהירים כמו PropWash
ואלו ,על רגל אחת, עיקרי השינויים שעשו בגרסאות האחרונות(החליפו את ברירת המחדל מפילטרים מסוג Notch לפילטרים מסוג LPF)
Band-pass filter – בוחר (שימו לב –הוא כן מסנן את מה שלא נבחר) תחום מסויים של תדרים ונמצא בשימוש ב Dynamic Filter בקוד מתיחסים אליו כ FFT.
Notch filter – נקרא גם Band Stop (אבל הרבה יותר צר) מסנן תדר אחד מאוד ספציפי
עכשיו שאנחנו קצת יותר מבינים את סוגי הפילטרים אנחנו יכולים לקרוא שוב (או שלא..) את כל אותם הדיונים שנעשו על ה Fast Kalman Filter (לאן באמת הוא נעלם ?)
לעניינינו – בבטא פלייט יש שימוש מאוד נרחב בפילטרים על סוגיהם השונים, הרוב ניתנים לכיוון, אך לפני זה יש צורך להבין היכן אותם פילטרים יושבים באותו לופ/לולאה מרכזית של תוכנה שרצה על בקר הטיסה שלנו.
הלולאה אגב, פשוטה להפליא, אם מפשטים אותה, וככה היא נראית מידע מהגיי'רו ß PID ß מנועים וחוזר חלילה.
בתוך הלולאה בין השלבים הכניסו המפתחים כל מיני פילטרים ואפילו פילטרים שמשתמשים בפילטרים (WTF ?!?!?)
הגישה ההוליסטית של המפתחים היא כזאת – בואו נסנן את כל ה"רעש" שמגיע מהג'יירו לפני ה PID, ואז נסנן עוד קצת את ה -TermD לפני שהוא יוצא למנועים
( שירוצו יותר חלק ויהיו יותר קרירים מה שיאפשר לנו לכוון את הרחפן יותר בקלות) ולכן יש לנו שני סוגים של מימושים :
Gyro Filtering – כל הפילטרים הנ"ל ימומשו בין המידע שמגיע מהג'יירו ועד שהוא נכנס ל PID :
· Gyro HW LFP – פילטר חומרתי שמגיע עם הגיי'רו – תדר הסינון משתנה בהתאם למהירות הריצה של הג'יירו בברירת המחדל הוא יהיה באיזור 256Hz– בגדול אין מה לגעת בו ובגרסאות הקודמות של בטא היה אפשר לקבוע את הערך שלו, עכשיו אפשר רק להשאיר את ברירת המחדל או אפוציה ניסיונית (אל תנסו !!)
· Gyro Notch – כאן בעצם נתנו לנו שני פילטרים סטטיים שהיו החידוש המשמעותי בבטא 3.2, שלאחר מכן בוריס המליץ פשוט לכבות אותם מפאת הדיליי הפסיכי שהם יוצרים על עיבוד האות.
· Gyro Dynamic Notch – הפילטר הדינמי של בטא – החל מגרסא 3.2 ואחד הדברים הטובים שקרו כאן בשנים האחרונות (למעט אישור משרד התקשורת להשתמש ב תדר 5.8 אצלנו בליגה !!) – ואחד החידושים הגדולים של 3.5.
הפילטר הדינמי הוא בעצם פילטר מסוג notch שמתאים את עצמו למיקום של הרעש המקסימלי, הפילטר הדינמי משתמש בפילטר אחר מסוג band-pass בכדי לקבוע את איזור הרעש המקסמלי (כן כן .. פילטר שמשתמש בפילטר) וע"י כך לקבוע היכן לסנן אותו. טווח העבודה של הפילטר הדנמי הוא בין 150Hz – 500Hz והוא דוגם את הרעש ב 1Khz – כלומר אם אתם רצים בלופ של 8k הדגימה תהיה פעם בשמונה ריצות. הפילטר הדינמי קיבל סוג של מתיחת פנים משמעותית בבטא 3.5 כאשר שיפרו את ה Band-Pass פילטר וגם נתנו לנו אופציה לכוון אותו כך שהפילטר הדינמי יידע מה לסנן בצורה טובה יותר.
· Gyro LPF1 – הפילטר הקלאסי והרגיל שתמיד היה שם בבטא פלייט (ואחת התכונות העיקריות שבגללה בכלל נולדה בטא.. ), בהתחלה הוא היה באיזור ה 80-90Hz והיום הוא ב100Hz כברירת מחדל.
· Gyro LPF2 – פילטר חדש יחסית, והוא בעצם המימוש של בטא לאותה סאגת הקלמן פילטר (קיצור תולדות החפירה על קלמן בהמשך), נותן עוד LFP באיזור ה300Hz כברירת מחדל, ומאפשר לנו יחד עם הפילטר הדינמי להפטר לחלוטין מאותם פילטרים Notch סטטיים שגורמים ל Delay.
Dterm Filtering – יסנן עוד רעשים / תנועות בתדרים גבוהים מה שיגרום למנועים לרוץ חלק יותר, מה שאיפשר לכוון את הרחפן טוב יותר. ואלו הפילטרים:
· Dterm LPF – פילטר חובה של בטא, אסור בשופם פנים ואופן לבטל אותו גם בסטאפים ללא רעשים – אפשר להקביל אותו ל Gyro HW LPF רק שהוא מסנן את הרעשים מ D לאחר ה PID.
· Dterm Notch – תוספת נחמדה שיש בבטא, והרעיון כאן הוא שיהיה אפשר לסנן רעש מאוד ספציפי מה D לאחר חישוב ה PID, ואז בעצם להעלות קצת את ה Center Frequency של ה Dterm LPF.
מה היה כל הסיפור עם הקלמן פילטר (בקצרה) ?
ככה – מכירים Raceflight או בשם החדש שלה Flight One ? אז הגישה שלהם היא לכתוב תוכנה שרצה על מהירות עדכון ג'יירו של 32Khz .
אחד הדברים שקורים כאשר מריצים ג'יירו במהירות גבוהה הוא שהפילטר החומרתי של הג'יירו (Gyro HW LPF) עובד בתדרים גבוהים (3Khz – 8 Khz) ואין סינון רעשים בטווחים הנמוכים.
דבר נוסף, ככל שמהירות הריצה / דגימה של הג'יירו גבוהה יותר יותר רעש נכנס לג'יירו.
הפתרון שלהם( Flight one ) היה kalman – עוד סוג של פילטר (אלגוריתם אחר) מסוג LPF ( Low Pass Filter) , כן .. כן.. יש טענה שיש אבקת פיות, וזיקוק אבקה של חד קרן בקוד שמריץ את הפילטר ב Flight One – מבחינה מתמטית אין הבדל גדול בין איך שקלמן מתנהג ל LPF מסוג 1PT.
באו המפתחים של בטא, קיבלו את הקוד מאחד המפתחים הראשיים של Flight One (כי הוא רב עם האבא של RF– פרסטון, אני מקדש את האדמה שסקיצו דורך עליה, גריסון.) וראו שבאמת אין הבדל בין הקלמן ל 1PT, וגם לא צריך לעשות OVERCLOCK למעבדים של בקרי הטיסה בשביל להריץ 32Khz, והלכו עם הקוד הישן/חדש והטוב שלהם, ופשוט הוסיפו את הפילטר Gyro LPF 2 או בשמו הראשון Stage 2 Filter או בשם הממש ראשון שלו BQRCF2.
אמ;לק / TL;DR
- פילטרים מסננים רעש מהג'יירו (Gyro Filter) ובדרך אל המנועים (D-term).
- ככל שפילטר חזק יותר (מסנן טוב יותר) הוא יוצר יותר Delay.
- PT1 יותר טוב מ NOTCH כי הוא גורם לפחות Delay בלולאה ולכן רוב הפילטרים בבטא עברו אליו.
- ככל שנגדיר פילטר בתדר גבוה יותר יהיה פחות Delay
- Kalman = PT1 = ButterSworth
- Dynamic Filter זה מעולה בעיקר מגרסא 3.5
- אני לא אוהב את RaceFlight / Flight One 😉