สารบัญ:

การควบคุมมือด้วยหุ่นยนต์ด้วย EMG: 7 ขั้นตอน
การควบคุมมือด้วยหุ่นยนต์ด้วย EMG: 7 ขั้นตอน

วีดีโอ: การควบคุมมือด้วยหุ่นยนต์ด้วย EMG: 7 ขั้นตอน

วีดีโอ: การควบคุมมือด้วยหุ่นยนต์ด้วย EMG: 7 ขั้นตอน
วีดีโอ: Luna EMG & Mezos SIT - หุ่นยนต์กายภาพบำบัดสำหรับผู้ป่วยอัมพฤกษ์ อัมพาต l Vejthani Hospital 2024, กรกฎาคม
Anonim
Image
Image
การรับสัญญาณ
การรับสัญญาณ

โปรเจ็กต์นี้แสดงการควบคุมมือหุ่นยนต์ (โดยใช้ opensource hand inMoov) ด้วยอุปกรณ์โอเพ่นซอร์ส uECG 3 เครื่องที่ใช้สำหรับการวัดและประมวลผลการทำงานของกล้ามเนื้อ (electromyogram, EMG) ทีมงานของเรามีเรื่องราวที่ยาวนานด้วยมือและการควบคุมของพวกเขา และนี่เป็นขั้นตอนที่ดีในทิศทางที่ถูกต้อง:)

เสบียง

3x อุปกรณ์ uECG1x Arduino (ฉันใช้ Nano แต่ส่วนอื่น ๆ ส่วนใหญ่จะใช้งานได้) โมดูล nRF24 1x (อุปกรณ์ทั่วไปที่สามารถทำได้) 1x PCA9685 หรือไดรเวอร์เซอร์โวที่คล้ายกัน 1x inMoov มือถือ 5x เซอร์โวขนาดใหญ่ (ดูคำแนะนำ inMoov สำหรับประเภทที่เข้ากันได้) แหล่งจ่ายไฟ 1x 5V ที่มีความสามารถ 5A หรือมากกว่าปัจจุบัน

ขั้นตอนที่ 1: การได้มาซึ่งสัญญาณ

การควบคุมขึ้นอยู่กับ EMG - กิจกรรมทางไฟฟ้าของกล้ามเนื้อ สัญญาณ EMG ได้มาจากอุปกรณ์ uECG สามเครื่อง (ฉันรู้ มันควรจะเป็นจอภาพ ECG แต่เนื่องจากมันใช้ ADC ทั่วไป จึงสามารถวัด biosignal ใดๆ ก็ตาม รวมถึง EMG ด้วย) สำหรับการประมวลผล EMG uECG มีโหมดพิเศษที่จะส่งข้อมูลสเปกตรัม 32 bin และค่าเฉลี่ย "หน้าต่างของกล้ามเนื้อ" (ความเข้มสเปกตรัมเฉลี่ยระหว่าง 75 และ 440 Hz) ภาพสเปกตรัมมีลักษณะเป็นลวดลายสีน้ำเงินอมเขียวที่เปลี่ยนไปตามกาลเวลา ที่นี่ความถี่อยู่บนแกนตั้ง (ในแต่ละ 3 แปลง ความถี่ต่ำที่ด้านล่าง สูงที่ด้านบน - จาก 0 ถึง 488 Hz ด้วย ~15 Hz ขั้นตอน) เวลาอยู่ในแนวนอน (ข้อมูลเก่าทางด้านซ้ายโดยรวมที่นี่ บนหน้าจอประมาณ 10 วินาที) ความเข้มถูกเข้ารหัสด้วยสี: น้ำเงิน - ต่ำ, เขียว - กลาง, เหลือง - สูง, แดง - สูงกว่านั้น

ขั้นตอนที่ 2: สัญญาณแบบง่าย

สัญญาณแบบง่าย
สัญญาณแบบง่าย

สำหรับการจดจำท่าทางสัมผัสที่เชื่อถือได้ จำเป็นต้องมีการประมวลผลภาพสเปกตรัมเหล่านี้ด้วยพีซีอย่างเหมาะสม แต่สำหรับการเปิดใช้งานนิ้วมือหุ่นยนต์แบบง่ายๆ ก็เพียงพอแล้วที่จะใช้ค่าเฉลี่ยใน 3 ช่องสัญญาณ - uECG จัดเตรียมไว้ที่แพ็คเก็ตไบต์บางไบต์เพื่อให้ Arduino Sketch สามารถแยกวิเคราะห์ได้ ค่าเหล่านี้ดูง่ายกว่ามาก - ฉันได้แนบแผนภูมิค่าดิบจาก Serial Plotter ของ Arduino แผนภูมิสีแดง เขียว และน้ำเงินเป็นค่าดิบจากอุปกรณ์ uECG 3 เครื่องในกลุ่มกล้ามเนื้อต่างๆ เมื่อฉันบีบนิ้วโป้ง แหวน และนิ้วกลางตามลำดับ สำหรับสายตาของเรากรณีเหล่านี้แตกต่างกันอย่างชัดเจน แต่เราจำเป็นต้องเปลี่ยนค่าเหล่านั้นให้เป็น "คะแนนนิ้ว" เพื่อให้โปรแกรมสามารถส่งออกค่าไปยังเซอร์โวมือได้ ปัญหาคือ สัญญาณจากกลุ่มกล้ามเนื้อ "ผสมกัน": กรณีที่ 1 และ 3 ความเข้มของสัญญาณสีน้ำเงินใกล้เคียงกัน แต่สีแดงและสีเขียวต่างกัน ในกรณีที่ 2 และ 3 สัญญาณสีเขียวจะเหมือนกัน - แต่สีน้ำเงินและสีแดงต่างกัน

ขั้นตอนที่ 3: การประมวลผลสัญญาณ

การประมวลผลสัญญาณ
การประมวลผลสัญญาณ

ในการ "unmix" สัญญาณเหล่านี้ ฉันได้ใช้สูตรที่ค่อนข้างง่าย:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)) โดยที่ S0 - คะแนนสำหรับช่อง 0, V0, V1, V2 - ค่าดิบสำหรับช่อง 0, 1, 2 และ a b, c, d - สัมประสิทธิ์ที่ฉันปรับด้วยตนเอง (a และ c มีค่าตั้งแต่ 0.3 ถึง 2.0, b และ d คือ 15 และ 20 คุณจะต้องเปลี่ยนค่าเหล่านี้เพื่อปรับให้เข้ากับตำแหน่งเซ็นเซอร์ของคุณอยู่ดี) คะแนนเดียวกันถูกคำนวณสำหรับช่อง 1 และ 2 หลังจากนั้น แผนภูมิก็แทบจะแยกไม่ออก สำหรับท่าทางเดียวกัน (คราวนี้นิ้วนาง นิ้วกลาง และนิ้วหัวแม่มือ) สัญญาณจะชัดเจนและสามารถแปลงเป็นการเคลื่อนที่ของเซอร์โวได้ง่ายๆ เพียงเปรียบเทียบกับขีดจำกัด

ขั้นตอนที่ 4: แผนผัง

แผนผัง
แผนผัง

แผนผังค่อนข้างง่าย คุณต้องใช้เฉพาะโมดูล nRF24, PCA9685 หรือตัวควบคุม I2C PWM ที่คล้ายกัน และแหล่งจ่ายไฟ 5V แอมป์สูงที่เพียงพอสำหรับการเคลื่อนย้ายเซอร์โวทั้งหมดในคราวเดียว (ดังนั้นจึงต้องใช้กำลังไฟอย่างน้อย 5A สำหรับการทำงานที่เสถียร)

รายการการเชื่อมต่อ:nRF24 pin 1 (GND) - Arduino's GNDnRF24 pin 2 (Vcc) - Arduino's 3.3vnRF24 pin 3 (Chip Enable) - Arduino's D9nRF24 pin 4 (SPI:CS) - Arduino's D8nRF24 pin 5 (SPI:SCK) - Arduino's D13nRF24 พิน 6 (SPI:MOSI) - D11nRF24 ของ Arduino พิน 7 (SPI:MISO) - D12PCA9685 SDA ของ Arduino - A4PCA9685 SCL ของ Arduino - A5PCA9685 Vcc ของ Arduino - 5vPCA9685 GND ของ Arduino - GNDPCA9685VP ของ Arduino สูง - แอมป์สูง CAD-96 ของ Arduino PCA ช่อง 0-4 ในนิ้วหัวแม่มือของฉัน - ช่อง 0, นิ้วชี้ - ช่อง 1 เป็นต้น

ขั้นตอนที่ 5: การจัดตำแหน่งเซนเซอร์ EMG

ตำแหน่งเซนเซอร์ EMG
ตำแหน่งเซนเซอร์ EMG
ตำแหน่งเซนเซอร์ EMG
ตำแหน่งเซนเซอร์ EMG

เพื่อให้ได้ค่าที่อ่านได้อย่างเหมาะสม การวางอุปกรณ์ uECG ซึ่งบันทึกกิจกรรมของกล้ามเนื้อไว้ในตำแหน่งที่ถูกต้องเป็นสิ่งสำคัญ แม้ว่าตัวเลือกต่างๆ จะเป็นไปได้ที่นี่ แต่แต่ละรายการต้องใช้วิธีการประมวลผลสัญญาณที่แตกต่างกัน ดังนั้นในโค้ดของฉัน ควรใช้ตำแหน่งที่คล้ายกับรูปภาพของฉัน มันอาจจะดูขัดๆ กัน แต่สัญญาณของกล้ามเนื้อนิ้วหัวแม่มือจะมองเห็นได้ชัดเจนกว่าที่ฝั่งตรงข้ามของแขน ดังนั้นเซ็นเซอร์ตัวใดตัวหนึ่งจึงถูกวางไว้ที่นั่น และวางเซ็นเซอร์ทั้งหมดไว้ใกล้กับข้อศอก (กล้ามเนื้อมีส่วนของร่างกายส่วนใหญ่อยู่ในบริเวณนั้น แต่คุณต้องการตรวจสอบว่าคุณอยู่ที่ไหน - มีความแตกต่างกันค่อนข้างมาก)

ขั้นตอนที่ 6: รหัส

ก่อนเรียกใช้โปรแกรมหลัก คุณจะต้องค้นหา ID ยูนิตของอุปกรณ์ uECG เฉพาะของคุณ (ทำได้โดยการไม่ใส่เครื่องหมายบรรทัด 101 และเปิดอุปกรณ์ทีละตัว คุณจะเห็น ID ของอุปกรณ์ปัจจุบัน และอื่นๆ) และกรอกข้อมูลลงใน อาร์เรย์ unit_ids (บรรทัดที่ 37) นอกเหนือจากนี้ คุณต้องการเล่นกับค่าสัมประสิทธิ์ของสูตร (บรรทัดที่ 129-131) และตรวจสอบว่ามีลักษณะอย่างไรบนพล็อตเตอร์แบบอนุกรมก่อนที่จะติดเข้ากับมือหุ่นยนต์

ขั้นตอนที่ 7: ผลลัพธ์

ด้วยการทดลองบางอย่างที่ใช้เวลาประมาณ 2 ชั่วโมง ฉันจึงสามารถดำเนินการได้อย่างน่าเชื่อถือ (วิดีโอแสดงกรณีทั่วไป) มันทำงานไม่สมบูรณ์และด้วยการประมวลผลนี้สามารถรับรู้ได้เฉพาะนิ้วที่เปิดและปิด (และไม่ใช่แต่ละนิ้วจาก 5 นิ้ว แต่จะตรวจจับกลุ่มกล้ามเนื้อเพียง 3 กลุ่มเท่านั้น: นิ้วหัวแม่มือ นิ้วชี้และนิ้วกลางด้วยกัน นิ้วก้อย และนิ้วก้อยรวมกัน) แต่ "AI" ที่วิเคราะห์สัญญาณใช้โค้ด 3 บรรทัดที่นี่และใช้ค่าเดียวจากแต่ละช่องสัญญาณ ฉันเชื่อว่าสามารถทำได้มากกว่านี้ด้วยการวิเคราะห์ภาพสเปกตรัม 32 bin บนพีซีหรือสมาร์ทโฟน นอกจากนี้ เวอร์ชันนี้ใช้อุปกรณ์ uECG เพียง 3 เครื่อง (ช่อง EMG) เมื่อมีช่องทางมากขึ้น ก็น่าจะเป็นไปได้ที่จะจดจำรูปแบบที่ซับซ้อนจริงๆ - แต่นั่นคือจุดเริ่มต้นของโครงการ เพื่อเป็นจุดเริ่มต้นสำหรับผู้ที่สนใจ:) การควบคุมด้วยมือไม่ใช่แอปพลิเคชั่นเดียวสำหรับระบบดังกล่าวอย่างแน่นอน

แนะนำ: