فهرست مطالب:

سر موضعی مانکن با کینکت: 9 مرحله (همراه با تصاویر)
سر موضعی مانکن با کینکت: 9 مرحله (همراه با تصاویر)

تصویری: سر موضعی مانکن با کینکت: 9 مرحله (همراه با تصاویر)

تصویری: سر موضعی مانکن با کینکت: 9 مرحله (همراه با تصاویر)
تصویری: Dorehami Mehran Modiri E 70 - دورهمی مهران مدیری با دکتر گیو شریفی 2024, جولای
Anonim
صدای محلی سازی سر مانکن با کینکت
صدای محلی سازی سر مانکن با کینکت

با مارگارت آشنا شوید ، یک دستگاه آزمایش برای سیستم نظارت بر خستگی راننده. او به تازگی از وظایف خود کناره گیری کرده و راهی دفتر کار ما شده است و از آن زمان توجه کسانی را که فکر می کنند او "وحشتناک" است جلب کرده است. به نفع عدالت ، من به او این توانایی را داده ام که مستقیماً با متهمانش روبرو شود. به جای آنکه ظاهراً با نگاه بی روح او شما را دنبال کند ، در واقع این کار را انجام می دهد. این سیستم از آرایه میکروفون مایکروسافت کینکت و یک سروو برای هدایت او به سمت افرادی که در نزدیکی او صحبت می کنند ، استفاده می کند.

مرحله 1: نظریه

تئوری
تئوری

محاسبه زاویه

وقتی چیزی را می شنویم ، مگر اینکه آن سر و صدا مستقیماً در مقابل ما باشد ، قبل از گوش دیگر به یک گوش می رسد. مغز ما این تأخیر ورود را درک می کند و آن را به جهت کلی که سر و صدا از آن می آید تبدیل می کند و به ما امکان می دهد منبع را پیدا کنیم. ما می توانیم با استفاده از یک جفت میکروفون به همان نوع محلی سازی برسیم. نمودار نشان داده شده را در نظر بگیرید ، که شامل یک جفت میکروفون و یک منبع صدا است. اگر ما از بالا به پایین نگاه می کنیم ، امواج صوتی دایره ای هستند ، اما اگر فاصله تا منبع نسبت به فاصله بین میکروفون ها زیاد باشد ، از نظر سنسورهای ما موج تقریباً مسطح است. این به عنوان فرض میدان دور شناخته می شود و هندسه مسئله ما را ساده می کند.

بنابراین فرض کنید خط موج یک خط مستقیم است. اگر صدا از سمت راست می آید ، در زمان t2 به میکروفون #2 و در زمان t1 به میکروفون #1 ضربه می زند. فاصله d صدا بین برخورد میکروفون #2 و میکروفون #1 تفاوت زمانی در تشخیص صدا ضرب در سرعت صدا در ثانیه است:

d = v s *(t1-t2) = vs *Δt

ما می توانیم این فاصله را به فاصله d 12 بین جفت میکروفون و زاویه θ از جفت به منبع صدا با رابطه مربوط کنیم:

cos (θ) = d /d 12 = vs*Δt /d12

از آنجا که ما فقط دو میکروفون داریم ، در محاسبه ما ابهامی وجود دارد که منبع صدا در جلو یا پشت ما باشد. در این سیستم ، فرض می کنیم که منبع صدا در مقابل جفت است و زاویه بین 0 درجه (کاملاً در سمت راست جفت) تا 180 درجه (به طور کامل در سمت چپ) را محکم می کنیم.

در نهایت ، ما می توانیم برای تتا با گرفتن کسینوس معکوس حل کنیم:

θ = acos (در مقابل*Δt/d12) ، 0 <= θ <= π

برای کمی طبیعی تر شدن زاویه ، می توانیم 90 درجه را از تتا کم کنیم ، به طوری که 0 درجه مستقیماً در مقابل جفت قرار گرفته و +/- 90 درجه کاملاً چپ یا راست راست باشد. این امر بیان ما را از کسینوس معکوس به سینوس معکوس تبدیل می کند.

  • cos (θ-π/2) = sin (θ) = d/d12 = vs*Δt/d12
  • θ = asin (vs*Δt/d12) ، -π/2 <= θ <= π/2

پیدا کردن تاخیر

همانطور که از معادله بالا مشاهده می کنید ، تنها چیزی که باید برای زاویه حل کنیم تأخیر در رسیدن موج صوتی به میکروفون یک در مقایسه با میکروفون دو است. سرعت صدا و فاصله بین میکروفون ها ثابت و مشخص است. برای تحقق این امر ، ابتدا سیگنال های صوتی را در فرکانس fs نمونه می گیریم ، آنها را از آنالوگ به دیجیتال تبدیل کرده و داده ها را برای استفاده بعدی ذخیره می کنیم. ما برای مدتی به نام پنجره نمونه گیری نمونه برداری می کنیم ، که مدت زمان طولانی آن به اندازه کافی طول می کشد تا ویژگی های قابل تشخیص موج صوتی ما را به تصویر بکشد. به عنوان مثال ، پنجره ما می تواند داده های صوتی به ارزش نیم ثانیه آخر باشد.

پس از بدست آوردن سیگنال های صوتی پنجره دار ، با محاسبه همبستگی بین این دو ، تأخیر بین آنها را پیدا می کنیم. برای محاسبه همبستگی متقاطع ، ما سیگنال پنجره دار را از یک میکروفون ثابت نگه می داریم و سیگنال دوم را در امتداد محور زمان از تمام مسیر پشت اول تا تمام جلوتر از اولین حرکت می دهیم. در هر مرحله در امتداد اسلاید ما ، هر نقطه از سیگنال ثابت خود را در نقطه مربوطه در سیگنال کشویی ضرب می کنیم ، سپس همه نتایج را با هم جمع می کنیم تا ضریب همبستگی ما برای آن مرحله محاسبه شود. پس از تکمیل اسلاید ما ، مرحله ای که بیشترین ضریب همبستگی را دارد مربوط به نقطه ای است که دو سیگنال بیشتر شبیه هم هستند و در چه مرحله ای هستیم به ما می گوید که چند نمونه n سیگنال دو با سیگنال 1 جابجا شده است. اگر n منفی باشد ، سپس سیگنال دو از سیگنال یک عقب تر است ، اگر مثبت باشد ، سیگنال دو جلوتر است ، و اگر صفر باشد ، آن دو از قبل تراز شده اند. ما این نمونه افست را با استفاده از فرکانس نمونه برداری خود با رابطه Δt = n/fs به تأخیر زمانی تبدیل می کنیم ، بنابراین:

  • θ = asin (vs*n/(d12*fs)) ، -π/2 <= θ <= π/2

مرحله 2: اجزاء

قطعات

  • مایکروسافت Kinect برای Xbox 360 ، مدل 1414 یا 1473. Kinect دارای چهار میکروفون است که در یک آرایه خطی قرار گرفته اند.
  • آداپتور برای تبدیل کانکتور اختصاصی Kinect به برق USB + AC مانند این.
  • رزبری پای 2 یا 3 Raspbian Stretch را اجرا می کند. من در ابتدا سعی کردم از Pi 1 Model B+استفاده کنم ، اما به اندازه کافی قدرتمند نبود. من همچنان با قطع ارتباط با Kinect مشکل داشتم.
  • وحشتناک ترین سر مانکن که می توانید پیدا کنید
  • یک سرو آنالوگ به اندازه کافی قوی که سر مانکن شما را بچرخاند
  • یک شارژر دیواری USB 5 ولت با آمپر کافی برای تغذیه Pi و سروو و حداقل دو پورت. (من از پلاگین 3 پورت 5A مشابه این استفاده کردم
  • یک سیم کشی با دو خروجی (یکی برای شارژر دیواری USB و دیگری برای آداپتور AC Kinect.
  • دو کابل USB: کابل نوع A به میکرو USB برای تغذیه Pi و دیگری برای تغذیه سروو که قطع کردن آنها با شما مشکل ندارد.
  • سکویی برای نشستن همه چیز و سکوی کوچکتر دیگری برای سر مانکن. من از یک سینی پلاستیکی به عنوان پایه و یک صفحه پلاستیکی به عنوان سکوی سر استفاده کردم. هر دو از Walmart بودند و فقط چند دلار هزینه داشتند
  • پیچ و مهره 4x #8-32 1/2 "برای اتصال سروو به سکوی بزرگتر
  • 2 برابر پیچ M3 8 میلی متری با واشر (یا هر اندازه ای که برای اتصال شاخ سرو به سکوی کوچکتر نیاز دارید)
  • دو سیم بلوز مردانه به مرد ، یکی سیم قرمز و دیگری مشکی و یک سیم جامپر زن به مرد
  • نوارهای Velcro با پشت چسب
  • نوار الکتریکی
  • نوار چسب برای مدیریت کابل

ابزارها

  • درمل با چرخ برش
  • مته
  • مته های 7/64 "، 11/16" و 5/16"
  • شیر M3 (اختیاری ، بسته به شاخ سروو)
  • پیچ گوشتی
  • لحیم کاری با لحیم کاری
  • دستهای کمکی (اختیاری)
  • نشانگر
  • قطب نما
  • استریپرهای سیم
  • مولتی متر (اختیاری)

PPE

  • عینک ایمنی

  • ماسک صورت (برای تکه های پلاستیکی dremmel-ed).

مرحله 3: مجموعه پلت فرم پایین تر

مجمع پلت فرم پایین
مجمع پلت فرم پایین
مجمع پلت فرم پایین
مجمع پلت فرم پایین
مجمع پلت فرم پایین
مجمع پلت فرم پایین

اولین قسمتی که ما می سازیم ، پلت فرم پایینی است که Kinect ، سروو و تمام قطعات الکترونیکی ما را در خود جای می دهد. برای ایجاد بستر به موارد زیر نیاز دارید:

  • سینی سرو پلاستیکی
  • سروو
  • پیچ 4x #8-32 1/2 اینچی با مهره
  • درمل با چرخ برش
  • پیچ گوشتی
  • مته
  • مته 11/16 اینچی
  • نشانگر

چگونه بسازیم

  1. سینی خود را وارونه کنید.
  2. سروو را به صورت جانبی در پشت سینی قرار دهید ، اطمینان حاصل کنید که دنده خروجی سرو در امتداد خط مرکزی سینی قرار دارد ، سپس در اطراف پایه سروو علامت گذاری کنید.
  3. با استفاده از چرخ و برش خود ، ناحیه ای را که مشخص کرده اید ببرید ، سپس سروو را به شکاف آن بکشید.
  4. مراکز سوراخ های نصب محفظه سروو را روی سینی علامت گذاری کنید ، سپس سروو را بردارید و با سوراخ سوراخ 11/16 اینچی آن سوراخ ها را سوراخ کنید. در حین سوراخ کردن پلاستیک نازک مانند این بسیار آسان است ، بنابراین من آن را بسیار ایمن تر می دانم. مته را به صورت معکوس اجرا کنید و به آرامی مواد را از بین ببرید. این بسیار کندتر از حفر کردن صحیح سوراخ ها است اما اطمینان حاصل می کند که هیچ شکافی وجود ندارد.
  5. سروو را دوباره در شکاف قرار دهید ، سپس آن را با پیچ و مهره های شماره 8-32 #روی سینی نصب کنید.

مرحله 4: مجموعه Platform Head

سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم
سرپرست مجمع پلت فرم

قسمت بعدی که خواهیم ساخت ، بستری برای اتصال سر مانکن به سروو خواهد بود. برای ساختن سکوی سر به موارد زیر نیاز دارید:

  • بشقاب پلاستیکی
  • سرو شاخ
  • پیچ 2x M3 8 میلی متری با واشر
  • پیچ گوشتی
  • مته
  • مته های 7/64 اینچی و 5/16 اینچی
  • قطب نما
  • درمل با چرخ برش

چگونه بسازیم

  1. قطب نما را در شعاع پایه سر مانکن قرار دهید.
  2. از قطب نما خود برای علامت گذاری دایره ای در مرکز صفحه استفاده کنید. این اندازه واقعی سکوی سر ما خواهد بود.
  3. از برش و چرخ برش خود استفاده کنید تا سکوهای کوچکتر را از صفحه جدا کنید.
  4. مرکز پلت فرم جدید خود را با یک مته 5/16 اینچ سوراخ کنید. این به ما امکان دسترسی به پیچ را می دهد که شاخ سروو را به سروو ما متصل می کند. برای ثبات پلت فرم هنگام سوراخ کردن ، یک قرقره از سیم را در زیر آن قرار دهید و از طریق مرکز قرقره سوراخ کنید.
  5. شاخ سروو را با مرکز سکو صف آرایی کرده و دو سوراخ برای اتصال شاخ به سکو مشخص کنید. مطمئن شوید که این سوراخ های نصب به اندازه کافی از هم فاصله داشته باشند تا جایی برای سر پیچ و واشر M3 شما وجود داشته باشد.
  6. این سوراخ های مشخص شده را با یک مته 7/64 اینچی ایجاد کنید.
  7. سوراخ پایین شاخ سروو من صاف بود ، یعنی نخ هایی برای پیچ M3 نداشت. بنابراین ، من از مته و شیر M3 برای ساخت نخ استفاده کردم.
  8. از پیچ و مهره و واشر برای اتصال شاخ سرو به سکوی سر استفاده کنید.

مرحله 5: کابل برق سروو

کابل برق سروو
کابل برق سروو
کابل برق سروو
کابل برق سروو
کابل برق سروو
کابل برق سروو
کابل برق سروو
کابل برق سروو

سروهای آنالوگ معمولاً با 4.8-6V تغذیه می شوند. از آنجایی که رزبری پای در حال حاضر از طریق USB 5 ولت تغذیه می شود ، ما سیستم خود را با تغذیه سروو از USB نیز ساده می کنیم. برای این کار باید کابل USB را تغییر دهیم. برای ساخت کابل برق سروو به موارد زیر نیاز دارید:

  • کابل USB یدکی با انتهای نوع A (نوعی که به رایانه شما وصل می شود)
  • یک سیم بلوز قرمز و یک سیم مشکی
  • آهن لحیم کاری
  • لحیم کاری
  • استریپرهای سیم
  • نوار الکتریکی
  • دستهای کمکی (اختیاری)
  • مولتی متر (اختیاری)

چگونه بسازیم

  1. اتصال غیر USB نوع A را از کابل خود جدا کنید ، سپس مقداری از عایق را بردارید تا چهار سیم داخلی مشخص شود. محافظ اطراف سیمهای در معرض را قطع کنید.
  2. به طور معمول کابل USB دارای چهار سیم است: دو سیم برای انتقال و دریافت داده و دو سیم برای برق و زمین. ما به قدرت و زمین علاقه داریم که معمولاً به ترتیب قرمز و سیاه هستند. مقداری از عایق سیمهای قرمز و سیاه را برداشته و سیمهای سبز و سفید را قطع کنید. اگر نگران این هستید که سیم برق و سیم مناسب ندارید ، می توانید کابل خود را به آداپتور برق USB خود وصل کرده و ولتاژ خروجی را با مولتی متر بررسی کنید.
  3. در مرحله بعد ، یک سر کابل های بلوز قرمز و مشکی خود را قطع کرده و مقداری از عایق را جدا کنید.
  4. حالا سیمهای مشکی بلوز و کابلهای USB را با هم بچرخانید. از مرکز سیمهای در معرض عبور عبور کرده و آنها را دور یکدیگر بچرخانید. سپس ، روی سیم های جفت شده لحیم کاری کنید تا آنها را در کنار هم نگه دارید. دست های کمکی با نگه داشتن کابل ها در محل کار این امر را آسان می کند.
  5. مرحله 4 را برای سیم های قرمز تکرار کنید.
  6. سیمهای نمایان شده را با نوار برقی بپوشانید ، یا اگر احساس فانتزی می کنید ، لوله های کوچک کننده حرارتی را بپوشانید. این اتصالات شکننده خواهند بود زیرا سیم ها بسیار کوچک هستند ، بنابراین لایه دوم نوار را که کابل های بلوز را نگه می دارد به عایق بیرونی کابل USB اضافه کنید. این باعث می شود که مونتاژ سفت تر شود و در نتیجه کمتر از خم شدن شکسته شود.

مرحله 6: نصب تجهیزات الکترونیکی

نصب و راه اندازی قطعات الکترونیکی
نصب و راه اندازی قطعات الکترونیکی
نصب و راه اندازی قطعات الکترونیکی
نصب و راه اندازی قطعات الکترونیکی
نصب و راه اندازی قطعات الکترونیکی
نصب و راه اندازی قطعات الکترونیکی

در نهایت ، ما همه چیز را کنار هم قرار می دهیم ، وسایل الکترونیکی خود و سایر موارد را به سکوی پایینی سوار می کنیم. شما نیاز خواهید داشت:

  • سکوی پایین تر
  • سکوی سر
  • سر مانکن
  • با آداپتور USB+AC کینکت کنید
  • آداپتور برق USB
  • سیم سیار
  • کابل میکرو USB
  • کابل برق سروو
  • تمشک پای
  • کابل جهنده مرد به زن
  • چسب چسبدار
  • قیچی

چگونه بسازیم

  1. Pi را در قسمت پایین سینی با Velcro نصب کنید.
  2. آداپتور برق USB را با Velcro وصل کنید.
  3. سروو و Pi را به آداپتور برق USB وصل کنید.
  4. پین 12 (GPIO18) Pi را به کابل سیگنال سروو وصل کنید. این ششمین پین در سمت راست است.
  5. سیم کش خود را از طریق دسته عقب سینی بکشید و آداپتور برق USB را به یک طرف وصل کنید.
  6. آداپتور AC Kinect USB+را بردارید و آداپتور برق را به طرف دیگر سیم فرمت و USB را به Pi وصل کنید.
  7. طناب کینکت را از طریق دسته جلوی سینی بکشید و به آداپتور Kinect وصل کنید.
  8. من از نوار چسب برای نگه داشتن کابل ها در قسمت زیرین سکو استفاده کردم. این ظاهر زیبا ترین نیست ، اما خوشبختانه همه اینها پنهان است.
  9. پلت فرم را سمت راست بچرخانید و از Velcro برای نصب Kinect در جلوی سکو استفاده کنید.
  10. از Velcro برای اتصال سر مانکن به سکوی سر استفاده کنید. به محض اینکه همه چیز مرتب شد ، دو قطعه را جدا کنید تا بتوانیم به پیچ نصب بوق سروو دسترسی پیدا کنیم. هرچند هنوز بوق را به سروو متصل نکنید ، زیرا باید مطمئن شویم که سروو ابتدا در موقعیت مرکزی خود قرار دارد تا بتوانیم همه چیز را در یک خط قرار دهیم. این کار را در مرحله بعد انجام می دهیم.

مرحله 7: نرم افزار و الگوریتم

نرم افزار و الگوریتم
نرم افزار و الگوریتم

بررسی اجمالی

نرم افزار این پروژه به زبان C ++ نوشته شده است و با سیستم عامل Robot (ROS) ، چارچوبی برای نوشتن نرم افزار رباتیک ، ادغام شده است. در ROS ، نرم افزار یک سیستم به مجموعه ای از برنامه ها به نام گره ها تقسیم می شود ، که در آن هر گره زیر بخش خاصی از عملکرد سیستم را پیاده سازی می کند. داده ها بین گره ها با استفاده از روش انتشار/اشتراک ارسال می شوند ، جایی که گره هایی که داده ها را تولید می کنند آن را منتشر می کنند و گره هایی که مصرف می کنند مشترک آن می شوند. جداسازی کد به این روش باعث می شود عملکرد سیستم به راحتی گسترش یابد و اجازه می دهد تا گره ها بین سیستم ها برای توسعه سریعتر به اشتراک گذاشته شوند.

در این سیستم ، ROS در درجه اول برای جدا کردن کد محاسبه جهت ورود (DOA) منبع صدا از کد کنترل کننده سروو استفاده می شود و به پروژه های دیگر اجازه می دهد تا برآورد Kinect DOA را بدون درج کد سروو که ممکن است نیازی به آن نداشته باشند یا مایل نیستند ، قرار دهند. به اگر می خواهید خود کد را ببینید ، می توانید آن را در GitHub پیدا کنید:

github.com/raikaDial/kinect_doa

گره DOA Kinect

گره kinect_doa گوشت و استخوان های این سیستم است که اساساً همه کارهای جالب را انجام می دهد. هنگام راه اندازی ، گره ROS را راه اندازی می کند و تمام جادوی ROS را ممکن می سازد ، سپس سیستم عامل را در Kinect بارگذاری می کند تا جریانهای صوتی در دسترس قرار گیرند. سپس یک موضوع جدید ایجاد می کند که جریانهای صوتی را باز می کند و شروع به خواندن در داده های میکروفون می کند. Kinect از چهار میکروفون خود با فرکانس 16 کیلوهرتز نمونه برداری می کند ، بنابراین خوب است که از همبستگی متقابل و جمع آوری داده ها در نخ های جداگانه استفاده شود تا از داده های از دست رفته به دلیل بار محاسباتی جلوگیری شود. ارتباط با Kinect با استفاده از libfreenect ، یک محرک محبوب منبع باز انجام می شود.

موضوع مجموعه هر زمان که داده های جدید دریافت می شود یک تابع callback را اجرا می کند و هر دو داده ها را ذخیره می کند و زمان تخمین DOA را تعیین می کند. داده های هر میکروفون در بافرهای نورد به طول برابر با پنجره نمونه برداری ما ذخیره می شود ، که در اینجا 8192 نمونه است. این به معنی محاسبه ارتباط متقابل با داده های نیم ثانیه گذشته است ، چیزی که من از طریق آزمایش دریافتم که یک توازن خوب بین عملکرد و بار محاسباتی است. برآورد DOA برای هر 4096 نمونه با سیگنال دهی به نخ اصلی آغاز می شود ، به طوری که همبستگی متقابل متوالی تا 50 همپوشانی دارد. موردی را در نظر بگیرید که هیچ تداخلی وجود ندارد و سر و صدای بسیار سریعی ایجاد می کنید که توسط پنجره نمونه برداری به نصف کاهش می یابد. قبل و بعد از صدای متمایز شما احتمالاً نویز سفید خواهد بود ، که به سختی می تواند با همبستگی متقابل هماهنگ شود. همپوشانی پنجره ها یک نمونه کاملتر از صدا را در اختیار ما قرار می دهد و با ارائه ویژگی های متمایزتر برای صف بندی ، قابلیت اطمینان ارتباط متقابل ما را افزایش می دهد.

نخ اصلی منتظر سیگنال از نخ جمع آوری است ، سپس برآورد DOA را محاسبه می کند. با این حال ، ابتدا بررسی می کند که آیا شکل موج های گرفته شده تفاوت قابل توجهی با نویز سفید دارد یا خیر. بدون این بررسی ، ما برآورد خود را چهار بار در ثانیه محاسبه می کنیم بدون توجه به اینکه صداهای جالبی وجود دارد یا نه ، و سر مانکن ما یک آشفتگی اسپاستیک خواهد بود. الگوریتم تشخیص نویز سفید مورد استفاده در این سیستم اولین مورد از دو مورد ذکر شده در اینجا است. ما نسبت انتگرال مطلق مشتق شکل موج خود را به انتگرال مطلق آن محاسبه می کنیم. برای سیگنالهایی با محتوای نویز سفید زیاد این نسبت بیشتر از سیگنالهای کم سر و صدا است. با تعیین آستانه ای برای این نسبت که نویز را از نویز جدا می کند ، تنها در مواقع مناسب می توانیم همبستگی متقابل را ایجاد کنیم. البته این نسبت چیزی است که باید هر بار که سیستم به محیط جدیدی منتقل می شود دوباره تنظیم شود.

هنگامی که مشخص شد شکل موج دارای محتوای قابل توجهی بدون نویز است ، برنامه با همبستگی متقابل پیش می رود. با این حال ، سه بهینه سازی مهم در این محاسبات وجود دارد:

  1. چهار میکروفون در Kinect وجود دارد ، به این معنی که در مجموع شش جفت شکل موج وجود دارد که می توانیم آنها را به هم متصل کنیم. با این حال ، اگر به ترتیب فضایی آرایه میکروفون نگاه کنید ، می بینید که میکروفون های 2 ، 3 و 4 بسیار به یکدیگر نزدیک هستند. در واقع ، آنها آنقدر نزدیک هستند که به دلیل سرعت صدا و فرکانس نمونه برداری ، شکل های موج دریافتی در 2 ، 3 و 4 حداکثر با یک نمونه جلو یا عقب جدا می شود ، که می توانیم با محاسبه maxlag = Δd *fs/vs ، جایی که Δd جداسازی جفت میکروفون ، fs فرکانس نمونه برداری و vs سرعت صدا است. بنابراین ، ارتباط جفت بین این سه مورد بی فایده است و ما فقط باید میکروفون 1 را با 2 ، 3 و 4 متقابل کنیم.
  2. ارتباط متقابل استاندارد سیگنال های صوتی در عملکرد طنین (پژواک) ضعیف است. یک جایگزین قوی به عنوان همبستگی متقابل عمومی با تبدیل فاز (GCC-PHAT) شناخته می شود. این روش به منظور اعمال یک تابع وزنی است که قله ها را در رابطه متقابل تقویت می کند ، و تشخیص سیگنال اصلی از اکو را آسان تر می کند. من عملکرد GCC-PHAT را با همبستگی متقابل ساده در محفظه طنین مقایسه کردم (بخوانید: حمام بتنی در حال بازسازی است) ، و GCC-PHAT را در برآورد زاویه صحیح 7 برابر مثرتر دیدم.
  3. هنگام انجام همبستگی متقابل ، ما دو سیگنال را گرفته ، یکی را در امتداد دیگری می لغزیم و در هر مرحله هر نقطه از سیگنال ثابت خود را در هر نقطه در سیگنال کشویی خود ضرب می کنیم. برای دو سیگنال با طول n ، این منجر به محاسبات n^2 می شود. ما می توانیم این کار را با انجام همبستگی متقابل در حوزه فرکانس ، که شامل یک تبدیل سریعتر چهارگانه (محاسبات nlogn) ، ضرب هر نقطه در یک سیگنال تبدیل شده در نقطه مربوطه در دیگری (n محاسبات) ، و سپس انجام یک معکوس ، بهبود دهیم. تبدیل فوریه برای بازگشت به حوزه زمان (محاسبات nlogn) ، در نتیجه محاسبه n+2*nlogn ، کمتر از n^2. با این حال ، این روش ساده لوحانه است. میکروفون های آرایه ما آنقدر به هم نزدیک هستند و سرعت صدا آنقدر کم است که شکل موج های صوتی در حال حاضر عمدتا تراز شده اند.بنابراین ، ما می توانیم همبستگی متقابل خود را فقط برای جبران هایی که کمی جلوتر یا عقب تر هستند در نظر بگیریم. برای میکروفون های 1 و 4 ، تأخیر باید بین +/- 12 نمونه باشد ، به این معنی که برای هر رابطه متقابل ما فقط باید محاسبات 24*n را انجام دهیم ، و درصورتی که شکل موج ما بیشتر از 2900 نمونه باشد ، در محاسبه صرفه جویی می شود.

این سیستم از کتابخانه minidsp استفاده می کند ، که الگوریتم GCC-PHAT را با بهینه سازی 3 پیاده سازی می کند.

پس از پیدا کردن تاخیر در سیگنالهای هر جفت میکروفون ، برنامه مقدار متوسط تاخیر را انتخاب می کند ، از آن برای محاسبه زاویه برآورد شده استفاده می کند و نتیجه را منتشر می کند تا بتواند برای کنترل سروو استفاده شود.

سرویس کنترل گره

در مقایسه با گره kinect_doa ، گره سروو نسبتاً ساده است. وظیفه آن صرفاً DOA برآورد شده و سروو را به آن زاویه منتقل می کند. از کتابخانه wiringPi برای دسترسی به ماژول سخت افزاری PWM رزبری پای استفاده می کند و از آن برای تنظیم زاویه سروو استفاده می کند. اکثر سروهای آنالوگ توسط یک سیگنال PWM با عرض پالس بین 1000 میکرو ثانیه تا 2000 میکرو ثانیه ، مطابق با زاویه 0 تا 180 درجه کنترل می شود ، اما سرووی مورد استفاده من با 500 میکرو ثانیه تا 2500 میکرو ثانیه کنترل می شود ، که مربوط به یک زاویه است. از 0 تا 270 درجه بنابراین ، گره برای سخت افزارهای مختلف سروو با تنظیم پارامترهای حداقل عرض پالس ، حداکثر عرض پالس و تفاوت بین حداکثر و حداقل زاویه قابل تنظیم است. علاوه بر این ، سروو بلافاصله به زاویه مورد نظر حرکت نمی کند ، بلکه با سرعت قابل تنظیم به سمت زاویه حرکت می کند و باعث می شود مارگارت روحیه تدریجی و وحشتناکی داشته باشد (به علاوه ، صدای سروو که به سرعت به جلو و عقب حرکت می کند واقعا سریع آزاردهنده می شود.)

مرحله 8: ساخت و نصب

نصب وابستگی ها:

ابتدا libfreenect را نصب کنید. ما باید آن را از منبع ایجاد کنیم زیرا نسخه ای که می توانید با مدیر بسته دریافت کنید پشتیبانی از صدا را شامل نمی شود. این امر به این دلیل است که ما باید سیستم عامل را در Kinect بارگذاری کنیم تا صدا فعال شود و توزیع مجدد این سیستم عامل در حوزه های خاص قانونی نیست. علاوه بر این ، ما می توانیم از ساختن نمونه هایی که به OpenGL و glut نیاز دارند ، که برای نصب Raspbian بدون سر نیاز ندارند ، اجتناب کنیم.

sudo apt-get install git cmake build-essential libusb-1.0-0-dev

cd git clone https://github.com/OpenKinect/libfreenect cd libfreenect mkdir build cd build cmake.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = OFF make sudo make/sudo//51.rules /etc/udev/rules.d کنترل udevadm-بارگذاری قوانین && udevadm ماشه

در مرحله بعد ، ما باید بسته wiringPi را نصب کنیم که به ما اجازه می دهد پین های GPIO Pi را کنترل کنیم:

سی دی

git clone git: //git.drogon.net/wiringPi cd ~/wiringPi./build

سر مانکن را وصل کنید:

با نصب سیم کشی Pi ، اکنون می توانیم یک مسیر انحرافی سریع را به زمین سخت افزاری بازگردانیم تا سر مانکن را به سکوی پایینی متصل کنیم. برای متمرکز کردن سروو از طریق خط فرمان ، دستورات زیر را وارد کنید:

gpio pwm-ms

gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18 150

اگر حرکتی وجود ندارد ، احتمالاً سرووی شما در حال حاضر در مرکز قرار دارد. با این حال ، برای اطمینان ، می توانید سروو را روی یک مقدار غیر مرکزی تنظیم کنید ، به عنوان مثال. gpio -g pwm 18 200 ، سپس آن را روی 150 تنظیم کنید.

هنگامی که مطمئن شدید سروو در مرکز قرار دارد ، شاخ سرو را روی سکوی سر به سروو وصل کنید تا سر مانکن شما مستقیم به جلو نگاه کند. سپس ، بوق را روی سروو پیچ کنید و سر خود را از طریق بیت های Velcro وصل کنید.

نصب ROS:

در مرحله بعد ، ROS را روی Pi خود نصب کنید. راهنمای نصب عالی را می توانید در اینجا پیدا کنید. برای سیستم ما نیازی به OpenCV نداریم ، بنابراین می توانید مرحله 3 را رد کنید. تکمیل این ساخت چند ساعت طول می کشد. پس از اتمام راهنمای نصب ، منبع نصب را به bashrc خود اضافه کنید تا بتوانیم از بسته های ROS تازه نصب شده خود استفاده کنیم:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

ساخت بسته Kinect DOA:

پس از انجام همه کارها ، یک پروژه کاری برای پروژه ما ایجاد کنید و فهرست src را وارد کنید:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

کد این پروژه در بسته kinect_doa موجود است ، بنابراین آن را در فهرست src فضای کار جدید خود کلون کنید:

git clone

بسته robot_upstart یک ابزار آسان برای نصب فایل های راه اندازی فراهم می کند تا در هنگام راه اندازی اجرا شوند ، بنابراین این مورد را نیز در فضای کاری خود کلون کنید:

git clone

اکنون ، ما می توانیم کد پروژه را با فراخوانی catkin_make از فهرست بالای سطح کار خود بسازیم ، سپس بیلد خود را منبع گذاری کنیم تا بسته های ما در دسترس باشند:

cd ~/kinect_doa_ws

catkin_make echo "source /home/pi/kinect_doa_ws/devel/setup.bash" >> ~/.bashrc

دویدن و تنظیم:

با فرض اینکه همه چیز به برق متصل و روشن است ، اکنون باید بتوانید سیستم را راه اندازی کرده و آهنگ Kinect را که صدایتان می شود ، داشته باشید! با این حال ، اگر Kinect 1473 دارید ، ابتدا فایل ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa. را در ویرایشگر متن راه اندازی کنید و پارامتر استفاده از_kinect_1473 را روی true تنظیم کنید. علاوه بر این ، اگر از سرووی متفاوتی نسبت به من استفاده کردید ، احتمالاً یک سروو آنالوگ استاندارد است ، بنابراین در حالی که در فایل راه اندازی هستید ، پارامتر min_us را به 1000 ، max_us را به 2000 و max_deg را به 180 تغییر دهید.

roslaunch kinect_doa kinect_doa.launch

مدتی با آن بازی کنید. اگر احساس می کنید سیستم بسیار حساس است (در جهت های تصادفی که با صداها یا صداهای متمایز مطابقت ندارد) ، پارامتر white_noise_ratio را در فایل راه اندازی تغییر دهید و سیستم را مجدداً راه اندازی کنید تا پاسخگویی در سطحی باشد که با آن راحت هستید به افزایش نسبت باعث می شود سیستم کمتر پاسخگو باشد و برعکس. به احتمال زیاد مجبورید هر زمان که سیستم را به مکان دیگری منتقل می کنید این عملکرد را انجام دهید تا عملکرد مورد نظر خود را بدست آورید.

برای راه اندازی برنامه وقتی Pi را روشن می کنیم ، از بسته robot_upstart برای نصب فایل راه اندازی خود استفاده می کنیم. اگر ROS در حال حاضر اجرا نمی شود ، آن را با دستور roscore شروع کنید. سپس ، یک ترمینال جدید باز کرده و راه اندازی را با موارد زیر نصب کنید:

rosrun robot_upstart نصب kinect_doa/launch/kinect_doa.launch --user root --symlink

ما به جای کپی کردن یک فایل پیوندی برای فایل راه اندازی ایجاد می کنیم تا بتوانیم با ویرایش ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch پارامترها را تغییر دهیم.

مرحله 9: مخفی کردن آن در دفتر

مخفی کردن آن در دفتر
مخفی کردن آن در دفتر

حالا برای قسمت باحالش. بعد از ساعت ها سر کار بروید و سر مانکن خود را مخفیانه قرار دهید. سپس فقط بنشینید و ببینید چقدر طول می کشد تا همکاران شما بتوانند این کار را انجام دهند! خلقت جدید شما تضمین می کند که چند سر را برگرداند…

توصیه شده: