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

שליטה ביד רובוטית עם EMG: 7 שלבים
שליטה ביד רובוטית עם EMG: 7 שלבים

וִידֵאוֹ: שליטה ביד רובוטית עם EMG: 7 שלבים

וִידֵאוֹ: שליטה ביד רובוטית עם EMG: 7 שלבים
וִידֵאוֹ: Тодд Куйкен: Протез руки, который «чувствует» 2024, נוֹבֶמבֶּר
Anonim
Image
Image
רכישת אותות
רכישת אותות

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

אספקה

3x התקני uECG 1x Arduino (אני משתמש ב- Nano אבל רוב האחרים יעבדו) 1 x nRF24 מודול (כל אחד כללי) 1x PCA9685 או נהג סרוו דומה 1x inMoov יד 5 x סרוו גדול (ראה הוראות inMov לסוגים תואמים) 1x 5V אספקת חשמל מסוגלת זרם 5A או יותר

שלב 1: רכישת אותות

הבקרה מבוססת על EMG - פעילות חשמלית של השרירים. אות EMG מתקבל על ידי שלושה התקני uECG (אני יודע, זה אמור להיות צג א.ק.ג., אך מכיוון שהוא מבוסס על ADC גנרי, הוא יכול למדוד כל אותות ביו - כולל EMG). לעיבוד EMG, ל- uECG יש מצב מיוחד בו הוא שולח נתוני ספקטרום של 32 סל, וממוצע "חלון שריר" (עוצמת ספקטרלית ממוצעת בין 75 ל -440 הרץ). תמונות ספקטרום נראות כמו דפוסים כחולים-ירוקים המשתנים עם הזמן. כאן התדר נמצא על ציר אנכי (בכל אחת מ -3 עלילות, תדר נמוך בתחתית, גבוה למעלה - מ 0 עד 488 הרץ עם צעדים של ~ 15 הרץ), הזמן הוא אופקי (נתונים ישנים בצד השמאלי בסך הכל כאן הוא בערך 10 שניות על המסך). העוצמה מקודדת בצבע: כחול - נמוך, ירוק - בינוני, צהוב - גבוה, אדום - אפילו גבוה יותר.

שלב 2: אות פשוט

אות פשוט
אות פשוט

לצורך זיהוי מחוות אמין, יש צורך בעיבוד PC תקין של תמונות ספקטרליות אלה. אבל להפעלה פשוטה של אצבעות יד רובוטיות, מספיק פשוט להשתמש בערך ממוצע ב -3 ערוצים - uECG מספק אותו בנוחות בבתים מסוימים של מנות כך שסקיצה של Arduino תוכל לנתח אותו. ערכים אלה נראים הרבה יותר פשוטים - צירפתי תרשים של ערכים גולמיים מהפלוטר הסידורי של Arduino. תרשימים אדומים, ירוקים, כחולים הם ערכים גולמיים משלושה מכשירי uECG בקבוצות שרירים שונות כשאני לוחץ את האגודל, הטבעת והאצבעות האמצעיות בהתאם. לעינינו המקרים הללו בבירור שונים, אך עלינו להפוך את הערכים הללו ל"ניקוד אצבע "איכשהו כך שתוכנית תוכל להפיק ערכים לסרווס ידיים. הבעיה היא שאותות מקבוצות השרירים "מעורבות": במקרה הראשון והשלישי עוצמת האות הכחולה זהה בערך - אך האדום והירוק שונים. במקרה השני והשלישי אותות ירוקים זהים - אך כחול ואדום שונים.

שלב 3: עיבוד אותות

עיבוד אות
עיבוד אות

על מנת "לבטל" את האותות הללו, השתמשתי בנוסחה פשוטה יחסית:

S0 = V0^2 / ((V1 * a0 +b0) (V2 * c0 +d0)), כאשר S0 - ציון לערוץ 0, V0, V1, V2 - ערכי גלם לערוצים 0, 1, 2, ו-, b, c, d - מקדמים אותם התאמתי ידנית (a ו- c היו מ 0.3 עד 2.0, b ו- d היו 15 ו- 20, תצטרך לשנות אותם כדי להתאים למיקום החיישן הספציפי שלך בכל מקרה). אותו ציון חושב לערוצים 1 ו 2. לאחר מכן התרשימים הופרדו כמעט לחלוטין. לאותן מחוות (הפעם אצבע, אמצע ואז אגודל) האותות ברורים וניתנים לתרגום בקלות לתנועות סרוו רק על ידי השוואה עם סף

שלב 4: תרשימים

סכמטים
סכמטים

סכמטים די פשוטים, אתה צריך רק מודול nRF24, בקר PCA9685 או IWC דומה PWM, ואספקת כוח 5V אמפר גבוהה שתספיק כדי להזיז את כל הסרווואים האלה בבת אחת (כך שהוא דורש הספק מדורג של 5A לפחות לפעולה יציבה).

רשימת חיבורים: סיכת nRF24 1 (GND) - סיכה 2 של GNUnDNRF24 של Arduino (Vcc) - פין 3 של 3.3VRF24 של Arduino (הפעלה של שבב) - סיכה D9nRF24 של Arduino (SPI: CS) - סיכה 5 של Arduino D8nRF24 5 (SPI: SCK) - Arduino's פין D13nRF24 6 (SPI: MOSI) - Arduino's D11nRF24 סיכה 7 (SPI: MISO) - Arduino's D12PCA9685 SDA - Arduino's A4PCA9685 SCL - Arduino's A5PCA9685 Vcc - Arduino's 5vPCA9685 GND - High9: GN9 - High9 ערוצי PCA 0-4, באגודל הסימון שלי - ערוץ 0, אצבע מורה - ערוץ 1 וכו '.

שלב 5: מיקום חיישני EMG

מיקום חיישני EMG
מיקום חיישני EMG
מיקום חיישני EMG
מיקום חיישני EMG

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

שלב 6: קוד

לפני הפעלת התוכנית הראשית, יהיה עליך לברר את מזהי היחידה של מכשירי uECG הספציפיים שלך (זה נעשה על ידי ביטול שורה 101 והפעלת התקנים אחד אחד, תראה את מזהה המכשיר הנוכחי בין היתר) ומלא אותם מערך unit_ids (שורה 37). מלבד זאת, אתה רוצה לשחק עם מקדמי נוסחה (שורות 129-131) ולבדוק איך זה נראה על פלוטר סדרתי לפני שאתה מחבר אותו ליד הרובוטית.

שלב 7: תוצאות

עם כמה ניסויים שנמשכו כשעתיים, הצלחתי לקבל פעולה די אמינה (סרטון מראה מקרה אופייני). הוא מתנהג לא בצורה מושלמת ועם עיבוד זה יכול לזהות רק אצבעות פתוחות וסגורות (ואפילו לא כל אחת מה -5, הוא מזהה רק 3 קבוצות שרירים: אגודל, אינדקס ואמצע יחד, טבעת ואצבעות קטנות יחד). אבל "AI" שמנתח אות לוקח כאן 3 שורות קוד ומשתמש בערך יחיד מכל ערוץ. אני מאמין שאפשר לעשות הרבה יותר על ידי ניתוח תמונות ספקטרליות של 32 סל במחשב או בסמארטפון. כמו כן, גרסה זו משתמשת רק ב -3 התקני uECG (ערוצי EMG). עם יותר ערוצים צריך להיות אפשר לזהות דפוסים מורכבים באמת - אבל טוב, זו הנקודה של הפרויקט, לספק נקודת התחלה לכל מי שמעוניין:) שליטה ביד היא בהחלט לא היישום היחיד למערכת כזו.

מוּמלָץ: