İçindekiler:

EMG ile Robotik El Kontrolü: 7 Adım
EMG ile Robotik El Kontrolü: 7 Adım

Video: EMG ile Robotik El Kontrolü: 7 Adım

Video: EMG ile Robotik El Kontrolü: 7 Adım
Video: Robotic arm v2 - Robot kol #2 2024, Temmuz
Anonim
Image
Image
Sinyal Toplama
Sinyal Toplama

Bu proje, kas aktivitesini ölçmek ve işlemek için kullanılan 3 açık kaynaklı uECG cihazı (elektromiyogram, EMG) ile robotik elin kontrolünü (açık kaynaklı el inMoov kullanarak) göstermektedir. Ekibimizin elleri ve kontrolü ile uzun bir hikayesi var ve bu doğru yönde atılmış iyi bir adım:)

Gereçler

3x uECG cihazı1x Arduino (Nano kullanıyorum ama diğerlerinin çoğu işe yarar)1x nRF24 modülü (herhangi bir jenerik olanı yapar)1x PCA9685 veya benzeri servo sürücü1x inMoov el5x büyük servolar (uyumlu tipler için inMoov talimatlarına bakın)1x 5V güç kaynağı 5A veya daha fazla akım

Adım 1: Sinyal Toplama

Kontrol EMG - kasların elektriksel aktivitesine dayanır. EMG sinyali üç uECG cihazı tarafından elde edilir (Biliyorum, bunun bir EKG monitörü olması gerekiyordu, ancak genel bir ADC'ye dayandığından, EMG dahil herhangi bir biyosinyali ölçebilir). EMG işleme için, uECG'nin 32-bin spektrum verilerini ve "kas penceresi" ortalamasını (75 ve 440 Hz arasında ortalama spektral yoğunluk) gönderdiği özel bir modu vardır. Spektrum görüntüleri zamanla değişen mavi-yeşil desenlere benziyor. Burada frekans dikey bir eksendedir (3 grafiğin her birinde, altta düşük frekans, üstte yüksek - 0 ila 488 Hz arasında ~15 Hz adımlarla), zaman yataydır (burada genel olarak soldaki eski veriler ekranda yaklaşık 10 saniyedir). Yoğunluk renkle kodlanmıştır: mavi - düşük, yeşil - orta, sarı - yüksek, kırmızı - daha da yüksek.

Adım 2: Basitleştirilmiş Sinyal

Basitleştirilmiş Sinyal
Basitleştirilmiş Sinyal

Güvenilir bir hareket tanıma için, bu spektral görüntülerin uygun bir PC işlemesi gereklidir. Ancak robotik el parmaklarının basit aktivasyonu için, sadece 3 kanalda ortalama değeri kullanmak yeterlidir - uECG, Arduino taslağının ayrıştırabilmesi için belirli paket baytlarında rahatlıkla sağlar. Bu değerler çok daha basit görünüyor - Arduino'nun Seri Plotter'ından bir ham değerler tablosu ekledim. Kırmızı, yeşil, mavi grafikler, başparmak, yüzük ve orta parmakları sırayla sıktığımda farklı kas gruplarındaki 3 uEKG cihazından alınan ham değerlerdir. Gözümüz için bu durumlar açıkça farklıdır, ancak bir programın değerleri el servolarına çıkarabilmesi için bu değerleri bir şekilde "parmak puanına" çevirmemiz gerekir. Sorun şu ki, kas gruplarından gelen sinyaller "karışık"tır: 1. ve 3. durumda mavi sinyal yoğunluğu yaklaşık olarak aynıdır - ancak kırmızı ve yeşil farklıdır. 2. ve 3. durumda yeşil sinyaller aynıdır - ancak mavi ve kırmızı farklıdır.

Adım 3: Sinyal İşleme

Sinyal işleme
Sinyal işleme

Bu sinyalleri "karıştırmak" için nispeten basit bir formül kullandım:

S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), burada S0 - kanal 0, V0, V1, V2 için puan - 0, 1, 2 ve a kanalları için ham değerler, b, c, d - manuel olarak ayarladığım katsayılar (a ve c 0,3 ila 2,0 arasındaydı, b ve d 15 ve 20 idi, yine de belirli sensör yerleşiminize göre ayarlamak için bunları değiştirmeniz gerekir). Kanal 1 ve 2 için aynı puan hesaplandı. Bundan sonra grafikler neredeyse mükemmel bir şekilde ayrıldı. Aynı hareketler için (bu sefer yüzük parmağı, orta ve sonra başparmak) sinyaller nettir ve sadece eşik ile karşılaştırılarak servo hareketlerine kolayca çevrilebilir.

Adım 4: Şemalar

şemalar
şemalar

Şematik oldukça basittir, sadece nRF24 modülüne, PCA9685 veya benzeri I2C PWM kontrolöre ve tüm bu servoları bir kerede hareket ettirmek için yeterli olacak yüksek amp 5V güç kaynağına ihtiyacınız vardır (bu yüzden kararlı çalışma için en az 5A nominal güç gerektirir).

Bağlantı listesi:nRF24 pin 1 (GND) - Arduino'nun GNDnRF24 pin 2 (Vcc) - Arduino'nun 3.3vnRF24 pin 3 (Çip Etkin) - Arduino'nun D9nRF24 pin 4 (SPI:CS) - Arduino'nun D8nRF24 pin 5 (SPI:SCK) - Arduino'nun D13nRF24 pin 6 (SPI:MOSI) - Arduino'nun D11nRF24 pin 7 (SPI:MISO) - Arduino'nun D12PCA9685 SDA - Arduino'nun A4PCA9685 SCL - Arduino'nun A5PCA9685 Vcc - Arduino'nun 5vPCA9685 GND - Arduino'nun GNDPCA9685 GND'si - Arduino'nun GNDPCA9685 V96 yüksek yükselticisi - yüksek yükseltici 5VPCACA - PCA kanalları 0-4, benim gösterimde başparmak - kanal 0, işaret parmağı - kanal 1 vb.

Adım 5: EMG Sensörlerinin Yerleştirilmesi

EMG Sensörleri Yerleştirme
EMG Sensörleri Yerleştirme
EMG Sensörleri Yerleştirme
EMG Sensörleri Yerleştirme

Makul okumalar elde etmek için kas aktivitesini kaydeden uEKG cihazlarını doğru yerlere yerleştirmek önemlidir. Burada birçok farklı seçenek mümkün olsa da, her biri farklı sinyal işleme yaklaşımı gerektirir - bu nedenle benim kodumda fotoğraflarıma benzer yerleşimi kullanmak en iyisidir. Sezgisel olmayabilir, ancak başparmak kas sinyali kolun karşı tarafında daha iyi görülebilir, yani sensörlerden biri oraya yerleştirilir ve hepsi dirseğe yakın yerleştirilir (kaslar vücutlarının çoğu o bölgede bulunur, ancak sizinkinin tam olarak nerede olduğunu kontrol etmek istersiniz - oldukça büyük bir bireysel fark vardır)

6. Adım: Kod

Ana programı çalıştırmadan önce, belirli uECG cihazlarınızın birim ID'lerini bulmanız gerekecek (bu işlem 101 numaralı satırın yorumunu kaldırarak ve cihazları birer birer açarak yapılır, diğer şeylerin yanı sıra mevcut cihazın ID'sini göreceksiniz) ve bunları doldurmanız gerekecektir. unit_ids dizisi (satır 37). Bunun dışında formül katsayılarıyla (129-131) oynamak ve robotik ele bağlamadan önce seri çizicide nasıl göründüğünü kontrol etmek istiyorsunuz.

7. Adım: Sonuçlar

Yaklaşık 2 saat süren bazı deneylerle oldukça güvenilir bir çalışma elde edebildim (video tipik bir vakayı gösteriyor). Kusursuz davranmaz ve bu işlemle yalnızca açık ve kapalı parmakları tanıyabilir (ve 5'in her birini bile tanımaz, yalnızca 3 kas grubunu algılar: başparmak, işaret ve orta birlikte, yüzük ve küçük parmaklar birlikte). Ancak sinyali analiz eden "AI" burada 3 satır kod alır ve her kanaldan tek bir değer kullanır. PC veya akıllı telefondaki 32 bin spektral görüntüleri analiz ederek çok daha fazlasının yapılabileceğine inanıyorum. Ayrıca, bu sürüm sadece 3 uECG cihazı (EMG kanalları) kullanır. Daha fazla kanal ile gerçekten karmaşık kalıpları tanımak mümkün olmalıdır - ama projenin amacı bu, ilgilenen herkes için bir başlangıç noktası sağlamak:) El kontrolü kesinlikle böyle bir sistem için tek uygulama değildir.

Önerilen: