תוכן עניינים:

דרך להשתמש ביחידת מדידה אינרציאלית?: 6 שלבים
דרך להשתמש ביחידת מדידה אינרציאלית?: 6 שלבים

וִידֵאוֹ: דרך להשתמש ביחידת מדידה אינרציאלית?: 6 שלבים

וִידֵאוֹ: דרך להשתמש ביחידת מדידה אינרציאלית?: 6 שלבים
וִידֵאוֹ: הפיזיקאי מגלה את המפץ הגדול! הלולאות הקוונטיות של אבהיי אשטקר 2024, נוֹבֶמבֶּר
Anonim
דרך להשתמש ביחידת מדידה אינרטיבית?
דרך להשתמש ביחידת מדידה אינרטיבית?

ההקשר:

אני בונה בשביל הכיף רובוט שאני רוצה להעביר באופן אוטונומי בתוך בית.

זו עבודה ארוכה ואני עושה צעד אחר צעד.

פרסמתי כבר 2 הוראות בנושא זה:

  • אחד על ייצור מקודד גלגלים
  • אחד על חיבור wifi

הרובוט שלי מונע על ידי 2 מנועי DC בעזרת מקודד הגלגלים הביתי שלי.

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

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

שלב 1: מדוע להשתמש ביחידת מדידה אינרטיבית?

מדוע להשתמש ביחידת מדידה אינרטיבית?
מדוע להשתמש ביחידת מדידה אינרטיבית?

אז למה השתמשתי ב- IMU?

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

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

ובכל זאת הייתי סקרן לנסות קצת IMU. אני בוחר ברכיב BNO055. הקדשתי זמן להבין ולבדוק את ה- IMU הזה. בסוף החלטתי לבחור בחיישן זה מהסיבות הבאות

  • אני יכול לשלוט בסיבוב כמו גם ב- L3GD20
  • אני יכול לזהות סיבוב קל כאשר אני זז ישר
  • אני צריך לקבל כיוון צפוני ללוקליזציה של הרובוטים וכיול המצפן של BNO055 הוא פשוט מאוד

שלב 2: כיצד להשתמש ב- BNO055 ללוקליזציה דו -ממדית?

כיצד להשתמש ב- BNO055 ללוקליזציה דו -ממדית?
כיצד להשתמש ב- BNO055 ללוקליזציה דו -ממדית?

BNO055 IMU הוא חיישן אינטליגנטי של 9 צירים של בוש שיכול לספק אוריינטציה מוחלטת.

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

אני חושב שזה יכול להיות שימושי לחלוק את החוויה הזו.

ראשית השתמשתי בספריית Adafruit המספקת כלי טוב לכיול וגילוי החיישן.

בסוף ואחרי הרבה בדיקות החלטתי

  • השתמש בספריית Adafruit לשמירת כיול בלבד
  • השתמש בשלושה מכל המצבים האפשריים של BNO055 (NDOF, IMU, Compss)
  • להקדיש Arduino Nano לחישוב לוקליזציה המבוססת על מדדי BNO055

שלב 3: נקודת חומרה של Vue

נקודת חומרה של Vue
נקודת חומרה של Vue
נקודת חומרה של Vue
נקודת חומרה של Vue
נקודת חומרה של Vue
נקודת חומרה של Vue

BNO055 הוא רכיב I2C. אז הוא זקוק לאספקת חשמל, SDA ו- SCL כדי לתקשר.

רק דאג למתח Vdd בהתאם למוצר שקנית. שבב בוש עובד בטווח: 2.4V עד 3.6V ותוכל למצוא רכיב 3.3v ו- 5v.

אין קשיים לחיבור ה- Nano ו- BNO055.

  • ה- BNO055 מופעל על ידי ה- Nano
  • SDA ו- SCL מחוברים עם נגדי משיכה 2 x 2k.
  • 3 LED מחובר לננו לאבחון (עם נגדים)
  • 2 מחברים המשמשים להגדרת המצב לאחר האתחול
  • מחבר אחד לכיוון BNO (Gnd, Vdd, Sda, Scl, Int)
  • מחבר אחד לכיוון הרובוט/מגה (+9V, Gnd, sda, Scl, Pin11, Pin12)

קצת הלחמה וזהו!

שלב 4: איך זה עובד?

איך זה עובד ?
איך זה עובד ?

מנקודת המבט של התקשורת:

  • ה- Nano הוא מנהל האוטובוסים I2C
  • הרובוט/מגה ו- BNO055 הם עבדים מסוג I2C
  • הננו קרא באופן קבוע את רשימות BNO055
  • הרובוט/מגה מעלה אות מספרי כדי לבקש את המילה מהנאנו

מנקודת החישוב של vue: ה- Nano בשילוב עם ה- BNO055 מספק

  • כותרת המצפן (משמשת ללוקליזציה)
  • כותרת יחסית (משמשת לשליטה בסיבובים)
  • הכותרת והמיקום המוחלטים (משמשים לשליטה במהלכים)

מנקודת מבט פונקציונלית: הננו:

  • מנהל את הכיול BNO055
  • מנהל את הפרמטרים והפקודות של BNO055

תת המערכת Nano & BNO055:

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

שלב 5: האדריכלות והתוכנה

האדריכלות והתוכנה
האדריכלות והתוכנה

התוכנה העיקרית פועלת על Arduino Nano

  • האדריכלות מבוססת על תקשורת I2C.
  • בחרתי להקדיש ננו בשל העובדה שה- Atmega שמריץ את הרובוט היה די כבר טעון והארכיטקטורה הזו מקלה על שימוש חוזר במקומות אחרים.
  • הננו קורא את רישומי BNO055, מחשב ומאחסן כותרות ולוקליזציה ברשמים משלו.
  • ה- Arduino Atmega שמפעיל את קוד הרובוט, שולח מידע מקודד גלגלים לננו וקורא את הכותרות והלוקליזציה בתוך רושמי הננו.

קוד subsytem (Nano) זמין כאן ב- GitHub

כלי הכיול Adafruit אם כאן ב- GitHub (הכיול יישמר ב- eeproom)

שלב 6: מה למדתי?

לגבי I2C

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

לגבי BNO055 לכיוון דו -ממדי

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

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

מוּמלָץ: