Daftar Isi:

Kontrol Tangan Robotik Dengan EMG: 7 Langkah
Kontrol Tangan Robotik Dengan EMG: 7 Langkah

Video: Kontrol Tangan Robotik Dengan EMG: 7 Langkah

Video: Kontrol Tangan Robotik Dengan EMG: 7 Langkah
Video: Robotics Hand using Arduino || Amazing Arduino Projects 2024, Juli
Anonim
Image
Image
Akuisisi Sinyal
Akuisisi Sinyal

Proyek ini menunjukkan kontrol tangan robot (menggunakan tangan opensource inMoov) dengan 3 perangkat uECG opensource yang digunakan untuk mengukur dan memproses aktivitas otot (elektromiogram, EMG). Tim kami memiliki cerita panjang dengan tangan dan kendali mereka, dan ini adalah langkah yang baik ke arah yang benar:)

Perlengkapan

3x perangkat uECG1x Arduino (Saya menggunakan Nano tetapi kebanyakan yang lain akan berfungsi)1x modul nRF24 (semua yang generik bisa dilakukan)1x PCA9685 atau driver servo serupa1x inMoov hand5x servos besar (lihat instruksi diMoov untuk tipe yang kompatibel)1x 5V power supply mampu 5A atau lebih saat ini

Langkah 1: Akuisisi Sinyal

Kontrol didasarkan pada EMG - aktivitas listrik otot. Sinyal EMG diperoleh oleh tiga perangkat uECG (saya tahu, ini seharusnya monitor EKG, tetapi karena didasarkan pada ADC generik, ia dapat mengukur sinyal biologis apa pun - termasuk EMG). Untuk pemrosesan EMG, uECG memiliki mode khusus yang mengirimkan data spektrum 32-bin, dan rata-rata "jendela otot" (intensitas spektral rata-rata antara 75 dan 440 Hz). Gambar spektrum terlihat seperti pola biru-hijau yang berubah seiring waktu. Di sini frekuensi berada pada sumbu vertikal (pada masing-masing dari 3 plot, frekuensi rendah di bagian bawah, tinggi di bagian atas - dari 0 hingga 488 Hz dengan langkah ~15 Hz), waktu berada pada horizontal (data lama di sebelah kiri secara keseluruhan di sini adalah sekitar 10 detik di layar). Intensitas dikodekan dengan warna: biru - rendah, hijau - sedang, kuning - tinggi, merah - bahkan lebih tinggi.

Langkah 2: Sinyal Sederhana

Sinyal Sederhana
Sinyal Sederhana

Untuk pengenalan gerakan yang andal, pemrosesan PC yang tepat dari gambar spektral ini diperlukan. Tetapi untuk aktivasi sederhana jari tangan robot, cukup menggunakan nilai rata-rata pada 3 saluran - uECG menyediakannya dengan mudah pada paket byte tertentu sehingga sketsa Arduino dapat menguraikannya. Nilai-nilai ini terlihat jauh lebih sederhana - saya telah melampirkan bagan nilai mentah dari Serial Plotter Arduino. Grafik merah, hijau, biru adalah nilai mentah dari 3 perangkat uECG pada kelompok otot yang berbeda ketika saya meremas ibu jari, jari manis dan jari tengah secara bersamaan. Untuk mata kita, kasus-kasus ini jelas berbeda, tetapi kita perlu mengubah nilai-nilai itu menjadi "skor jari" entah bagaimana sehingga sebuah program dapat menampilkan nilai ke servos tangan. Masalahnya adalah, sinyal dari kelompok otot "bercampur": dalam kasus 1 dan 3 intensitas sinyal biru hampir sama - tetapi merah dan hijau berbeda. Dalam kasus ke-2 dan ke-3, sinyal hijau adalah sama - tetapi biru dan merah berbeda.

Langkah 3: Pemrosesan Sinyal

Pemrosesan Sinyal
Pemrosesan Sinyal

Untuk "membatalkan" sinyal-sinyal ini, saya menggunakan rumus yang relatif sederhana:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), di mana S0 - skor untuk saluran 0, V0, V1, V2 - nilai mentah untuk saluran 0, 1, 2, dan a, b, c, d - koefisien yang saya sesuaikan secara manual (a dan c adalah dari 0,3 hingga 2,0, b dan d adalah 15 dan 20, Anda tetap harus mengubahnya untuk menyesuaikan penempatan sensor khusus Anda). Skor yang sama dihitung untuk saluran 1 dan 2. Setelah ini, grafik menjadi hampir terpisah sempurna. Untuk isyarat yang sama (kali ini jari manis, tengah, dan kemudian ibu jari) sinyalnya jelas dan dapat dengan mudah diterjemahkan ke dalam gerakan servo hanya dengan membandingkan dengan ambang batas

Langkah 4: Skema

skema
skema

Skemanya cukup sederhana, Anda hanya memerlukan modul nRF24, PCA9685 atau pengontrol I2C PWM serupa, dan catu daya 5V amp tinggi yang cukup untuk memindahkan semua servos ini sekaligus (sehingga membutuhkan setidaknya daya pengenal 5A untuk operasi yang stabil).

Daftar koneksi: 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 pin 6 (SPI:MOSI) - D11nRF24 pin 7 Arduino (SPI:MISO) - D12PCA9685 SDA Arduino - A4PCA9685 SCL Arduino - A5PCA9685 Vcc Arduino - GND 5vPCA9685 Arduino - GNDPCA9685 V+ tinggi Arduino - GNDPCA9685 V+ tinggi - amp tinggi GN Saluran PCA 0-4, dalam notasi saya jempol - saluran 0, jari telunjuk - saluran 1 dll.

Langkah 5: Penempatan Sensor EMG

Penempatan Sensor EMG
Penempatan Sensor EMG
Penempatan Sensor EMG
Penempatan Sensor EMG

Untuk mendapatkan pembacaan yang masuk akal, penting untuk menempatkan perangkat uECG, yang merekam aktivitas otot, di tempat yang tepat. Meskipun banyak opsi berbeda dimungkinkan di sini, masing-masing memerlukan pendekatan pemrosesan sinyal yang berbeda - jadi dengan kode saya, sebaiknya gunakan penempatan yang mirip dengan foto saya. Ini mungkin kontra-intuitif, tetapi sinyal otot ibu jari lebih terlihat di sisi berlawanan dari lengan, jadi salah satu sensor ditempatkan di sana, dan semuanya ditempatkan dekat dengan siku (otot memiliki sebagian besar tubuh mereka di area itu, tetapi Anda ingin memeriksa di mana tepatnya Anda berada - ada perbedaan individu yang cukup besar)

Langkah 6: Kode

Sebelum menjalankan program utama, Anda perlu mengetahui ID unit perangkat uECG khusus Anda (dilakukan dengan menghapus komentar pada baris 101 dan menyalakan perangkat satu per satu, Anda akan melihat ID perangkat saat ini antara lain) dan mengisinya ke larik unit_ids (baris 37). Selain itu, Anda ingin bermain dengan koefisien rumus (baris 129-131) dan memeriksa tampilannya pada plotter serial sebelum memasangnya ke tangan robot.

Langkah 7: Hasil

Dengan beberapa percobaan yang memakan waktu sekitar 2 jam, saya bisa mendapatkan operasi yang cukup andal (video menunjukkan kasus biasa). Ia berperilaku tidak sempurna dan dengan pemrosesan ini hanya dapat mengenali jari-jari yang terbuka dan tertutup (dan bahkan tidak masing-masing dari 5, ia hanya mendeteksi 3 kelompok otot: ibu jari, telunjuk dan jari tengah bersama-sama, jari manis dan jari kelingking bersama-sama). Tetapi "AI" yang menganalisis sinyal mengambil 3 baris kode di sini dan menggunakan satu nilai dari setiap saluran. Saya percaya lebih banyak yang bisa dilakukan dengan menganalisis gambar spektral 32-bin pada PC atau smartphone. Selain itu, versi ini hanya menggunakan 3 perangkat uECG (saluran EMG). Dengan lebih banyak saluran, seharusnya dimungkinkan untuk mengenali pola yang sangat kompleks - tapi yah, itulah inti dari proyek ini, untuk memberikan beberapa titik awal bagi siapa saja yang tertarik:) Kontrol tangan jelas bukan satu-satunya aplikasi untuk sistem seperti itu.

Direkomendasikan: