সুচিপত্র:

EMG দিয়ে রোবোটিক হ্যান্ড কন্ট্রোল: 7 টি ধাপ
EMG দিয়ে রোবোটিক হ্যান্ড কন্ট্রোল: 7 টি ধাপ
Anonim
Image
Image
সংকেত অধিগ্রহণ
সংকেত অধিগ্রহণ

এই প্রকল্পটি পেশী কার্যকলাপ পরিমাপ এবং প্রক্রিয়াকরণের জন্য ব্যবহৃত 3 ওপেনসোর্স ইউইসিজি ডিভাইসের সাহায্যে রোবটিক হাত (ওপেনসোর্স হ্যান্ড ইনমুভ ব্যবহার করে) নিয়ন্ত্রণ দেখায় (ইলেক্ট্রোমিওগ্রাম, ইএমজি)। আমাদের দলের হাত এবং তাদের নিয়ন্ত্রণের সাথে একটি দীর্ঘ গল্প আছে, এবং এটি একটি সঠিক দিকের একটি ভাল পদক্ষেপ:)

সরবরাহ

3x uECG ডিভাইস 1x Arduino (আমি ন্যানো ব্যবহার করছি কিন্তু অন্যরা কাজ করবে) 1x nRF24 মডিউল (যেকোন জেনেরিক এক করবে) 1x PCA9685 বা অনুরূপ সার্ভো ড্রাইভার 5A বা তার বেশি কারেন্ট

ধাপ 1: সংকেত অধিগ্রহণ

নিয়ন্ত্রণ EMG- এর উপর ভিত্তি করে পেশীর বৈদ্যুতিক কার্যকলাপ। ইএমজি সিগন্যাল তিনটি ইউইসিজি ডিভাইস দ্বারা প্রাপ্ত হয় (আমি জানি, এটি একটি ইসিজি মনিটর বলে মনে করা হয়, কিন্তু যেহেতু এটি একটি জেনেরিক এডিসির উপর ভিত্তি করে, এটি ইএমজি সহ যে কোন বায়োসাইনাল পরিমাপ করতে পারে)। ইএমজি প্রক্রিয়াকরণের জন্য, ইউইসিজির একটি বিশেষ মোড রয়েছে যেখানে এটি 32-বিন স্পেকট্রাম ডেটা এবং "পেশী উইন্ডো" গড় (75 থেকে 440 হার্জের মধ্যে গড় বর্ণালী তীব্রতা) পাঠায়। বর্ণালী চিত্রগুলি নীল-সবুজ নিদর্শনগুলির মতো যা সময়ের সাথে পরিবর্তিত হয়। এখানে ফ্রিকোয়েন্সি একটি উল্লম্ব অক্ষের (3 টি প্লটের প্রতিটিতে, নীচের দিকে কম ফ্রিকোয়েন্সি, উপরে - 0 থেকে 488 Hz পর্যন্ত ~ 15 Hz ধাপ), সময় একটি অনুভূমিক (এখানে বাম দিকে পুরানো ডেটা পর্দায় প্রায় 10 সেকেন্ড)। তীব্রতা রঙ দিয়ে এনকোড করা হয়: নীল - কম, সবুজ - মাঝারি, হলুদ - উচ্চ, লাল - এমনকি উচ্চতর।

ধাপ 2: সরলীকৃত সংকেত

সরলীকৃত সংকেত
সরলীকৃত সংকেত

একটি নির্ভরযোগ্য অঙ্গভঙ্গি স্বীকৃতি জন্য, এই বর্ণালী ইমেজ একটি সঠিক পিসি প্রক্রিয়াকরণ প্রয়োজন। কিন্তু রোবোটিক হাতের আঙ্গুলের সহজ সক্রিয়করণের জন্য, এটি 3 টি চ্যানেলে গড় মান ব্যবহার করার জন্য যথেষ্ট - ইউইসিজি সুবিধামত এটি নির্দিষ্ট প্যাকেট বাইটে সরবরাহ করে যাতে আরডুইনো স্কেচ এটি বিশ্লেষণ করতে পারে। এই মানগুলি অনেক সহজ দেখায় - আমি Arduino এর সিরিয়াল প্লটার থেকে কাঁচা মানের একটি চার্ট সংযুক্ত করেছি। লাল, সবুজ, নীল চার্টগুলি হল তিনটি ইউইসিজি ডিভাইস থেকে বিভিন্ন পেশী গোষ্ঠীর কাঁচা মান যখন আমি থাম্ব, রিং এবং মধ্যম আঙ্গুলগুলি একইভাবে চেপে ধরছি। আমাদের চোখের জন্য এই ক্ষেত্রেগুলি স্পষ্টভাবে ভিন্ন, কিন্তু আমাদের সেই মানগুলিকে একরকম "ফিঙ্গার স্কোর" এ পরিণত করতে হবে যাতে একটি প্রোগ্রাম মানকে হ্যান্ড সার্ভিসে আউটপুট করতে পারে। সমস্যা হল, পেশী গোষ্ঠীর সংকেত "মিশ্র": প্রথম এবং তৃতীয় ক্ষেত্রে নীল সংকেতের তীব্রতা প্রায় একই - কিন্তু লাল এবং সবুজ ভিন্ন। দ্বিতীয় এবং তৃতীয় ক্ষেত্রে সবুজ সংকেত একই - কিন্তু নীল এবং লাল ভিন্ন।

ধাপ 3: সিগন্যাল প্রসেসিং

সংকেত প্রক্রিয়াজাতকরণ
সংকেত প্রক্রিয়াজাতকরণ

এই সংকেতগুলিকে "আনমিক্স" করার জন্য, আমি একটি অপেক্ষাকৃত সহজ সূত্র ব্যবহার করেছি:

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 কন্ট্রোলার, এবং উচ্চ amp 5V পাওয়ার সাপ্লাই যা এই সমস্ত সার্ভিসগুলিকে একবারে সরানোর জন্য যথেষ্ট হবে (তাই এটি স্থিতিশীল অপারেশনের জন্য কমপক্ষে 5A রেটযুক্ত পাওয়ার প্রয়োজন)।

সংযোগের তালিকা: nRF24 পিন 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) - Arduino's D11nRF24 pin 7 (SPI: MISO) - Arduino's D12PCA9685 SDA - Arduino's A4PCA9685 SCL - Arduino's A5PCA9685 Vcc - Arduino's 5vPCA9685 GND - amppino GND - amppino GND - ampuino GND - ampduino GND - highPD পিসিএ চ্যানেল 0-4, আমার নোট থাম্ব - চ্যানেল 0, তর্জনী - চ্যানেল 1 ইত্যাদি।

ধাপ 5: EMG সেন্সর প্লেসমেন্ট

ইএমজি সেন্সর প্লেসমেন্ট
ইএমজি সেন্সর প্লেসমেন্ট
ইএমজি সেন্সর প্লেসমেন্ট
ইএমজি সেন্সর প্লেসমেন্ট

যুক্তিসঙ্গত রিডিং পেতে, ইউইসিজি ডিভাইসগুলি স্থাপন করা গুরুত্বপূর্ণ, যা পেশী কার্যকলাপ রেকর্ড করছে, সঠিক জায়গায়। যদিও অনেকগুলি ভিন্ন বিকল্প এখানে সম্ভব, প্রত্যেকটির জন্য আলাদা আলাদা সিগন্যাল প্রসেসিং পদ্ধতির প্রয়োজন - তাই আমার কোডের সাথে আমার ফটোগুলির মতো প্লেসমেন্ট ব্যবহার করা ভাল।, তাই একটি সেন্সর সেখানে স্থাপন করা হয়, এবং তাদের সব কনুই কাছাকাছি স্থাপন করা হয় (পেশী তাদের শরীরের অধিকাংশ অংশ আছে, কিন্তু আপনি ঠিক কোথায় অবস্থিত তা পরীক্ষা করতে চান - সেখানে একটি বড় ব্যক্তিগত পার্থক্য আছে)

ধাপ 6: কোড

মূল প্রোগ্রামটি চালানোর আগে, আপনাকে আপনার নির্দিষ্ট ইউইসিজি ডিভাইসের ইউনিট আইডি খুঁজে বের করতে হবে (এটি লাইন 101 কে অসম্পূর্ণ করে এবং ডিভাইসগুলি একে একে চালু করে, আপনি অন্যান্য জিনিসের মধ্যে বর্তমান ডিভাইসের আইডি দেখতে পাবেন) এবং সেগুলি পূরণ করুন unit_ids অ্যারে (লাইন 37)। এটি ছাড়াও, আপনি সূত্র সহগের সাথে খেলতে চান (লাইন 129-131) এবং রোবটিক হাতে এটি সংযুক্ত করার আগে সিরিয়াল প্লটারে এটি কেমন দেখাচ্ছে তা পরীক্ষা করুন।

ধাপ 7: ফলাফল

কিছু পরীক্ষা -নিরীক্ষার জন্য যা প্রায় 2 ঘন্টা সময় নিয়েছিল, আমি বেশ নির্ভরযোগ্য অপারেশন করতে সক্ষম হয়েছিলাম (ভিডিওটি একটি সাধারণ কেস দেখায়)। এটি নিখুঁতভাবে আচরণ করে না এবং এই প্রক্রিয়াকরণের মাধ্যমে শুধুমাত্র খোলা এবং বন্ধ আঙ্গুলগুলি চিনতে পারে (এবং এমনকি 5 টির প্রত্যেকটি নয়, এটি শুধুমাত্র 3 টি পেশী গোষ্ঠী সনাক্ত করে: থাম্ব, সূচক এবং মধ্যম একসঙ্গে, রিং এবং ছোট আঙ্গুলগুলি একসঙ্গে)। কিন্তু "AI" যা সিগন্যাল বিশ্লেষণ করে এখানে 3 লাইন কোড লাগে এবং প্রতিটি চ্যানেল থেকে একক মান ব্যবহার করে। আমি বিশ্বাস করি পিসি বা স্মার্টফোনে 32-বিন বর্ণালী চিত্র বিশ্লেষণ করে আরও অনেক কিছু করা যেতে পারে। এছাড়াও, এই সংস্করণটি শুধুমাত্র 3 টি ইউইসিজি ডিভাইস (ইএমজি চ্যানেল) ব্যবহার করে। আরো চ্যানেলের সাহায্যে সত্যিই জটিল নিদর্শনগুলি চিনতে পারা উচিত - কিন্তু ভাল, এটাই প্রকল্পের মূল বিষয়, আগ্রহী কারো জন্য কিছু প্রারম্ভিক বিন্দু প্রদান করা:) হাত নিয়ন্ত্রণ অবশ্যই এই ধরনের সিস্টেমের একমাত্র প্রয়োগ নয়।

প্রস্তাবিত: