فهرست مطالب:

بازوی روباتیک: جنسن: 4 مرحله
بازوی روباتیک: جنسن: 4 مرحله

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

تصویری: بازوی روباتیک: جنسن: 4 مرحله
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, نوامبر
Anonim
بازوی روباتیک: جنسن
بازوی روباتیک: جنسن

جنسن یک بازوی رباتیک است که بر روی پلت فرم آردوینو با تمرکز بر برنامه ریزی حرکتی بصری ساخته شده است ، به عنوان یک پروژه مستقل از اعتبار زیر نظر استاد چارلز بی مالوک ، دکترا انجام شده است. این می تواند مجموعه ای از حرکات برنامه ریزی شده با حرکت دستی بازو را تکرار کند. من الهام بخش ساختن آن را از دیدن سایر بازوهای روباتیک ساخته شده در فضای UMass Amherst M5 ساختم. علاوه بر این ، من می خواستم نحوه استفاده از نرم افزار CAD را بیاموزم و می خواستم یک پروژه پیشرفته آردوینو بسازم. من این را فرصتی برای انجام همه آن کارها دیدم.

مرحله 1: طراحی و محدوده اصلی

طرح اصلی و محدوده
طرح اصلی و محدوده

نرم افزار CAD که برای یادگیری برای این پروژه انتخاب کردم OnShape بود و اولین چیزی که مدل کردم یک سروو آنالوگ HiTec HS-422 بود. من سروو را انتخاب کردم زیرا در دسترس محلی بود و قیمت مناسبی داشت. همچنین قبل از اقدام به طراحی قطعات شخصی من برای یادگیری OnShape به عنوان تمرین خوبی عمل کرد. در اوایل این پروژه ، من تصور کلی از آنچه می خواهم بازو قادر به انجام آن باشد ، داشتم. می خواستم دامنه حرکتی مناسبی داشته باشد و یک گیره برای جمع آوری وسایل داشته باشد. این مشخصات کلی با آشکارسازی مدل در CAD ، طراحی را آگاه کرد. یکی دیگر از محدودیت های طراحی من در این مرحله اندازه تخت چاپ روی چاپگر سه بعدی من بود. به همین دلیل پایه ای که در عکس بالا مشاهده می کنید یک مربع نسبتاً ابتدایی است.

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

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

مرحله 2: کنترل

کنترل
کنترل

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

در این روش کنترل ، چیزهای زیادی برای کشف وجود داشت. برای اینکه هر سروو به زاویه ذخیره شده بازگردد ، من باید در درجه اول آن زوایا را به نحوی "ذخیره" کنم. برای این کار Arduino Uno I استفاده می کرد تا بتواند زاویه فعلی هر سروو را دریافت کند. دوست من جرمی پارادی ، که یک بازوی روباتیک ساخته است که از این روش کنترل استفاده می کند ، من را مجبور به استفاده از پتانسیومتر داخلی هر سروو سرگرمی کرد. این پتانسیومتری است که سروو برای رمزگذاری زاویه خود از آن استفاده می کند. من یک سروو آزمایشی را انتخاب کردم ، یک سیم را به پین وسط پتانسیومتر داخلی لحیم کردم و یک سوراخ در محفظه برای تغذیه سیم خارج ایجاد کردم.

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

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

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

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

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

مرحله 3: سر و صدا

سر و صدا
سر و صدا

تصویر بالا

با رنگ قرمز: سیگنال ورودی اصلی

به رنگ آبی: سیگنال ورودی پس از پردازش

اولین قدم برای کاهش نویز در سیگنال ورودی ، درک علت آن بود. بررسی سیگنال روی یک اسیلوسکوپ نشان داد که افزایش ولتاژ با سرعت 50 هرتز اتفاق می افتد. من تصادفاً فهمیدم که سیگنال PWM که به سروها ارسال می شود نیز با نرخ 50 هرتز بود ، بنابراین حدس زدم که افزایش ولتاژ ربطی به آن دارد. من فرض کردم که حرکت سروها به نوعی باعث افزایش ولتاژ در پین V+ پتانسیومترها می شود ، که به نوبه خود باعث خراب شدن خوانش در پین وسط می شود.

در اینجا من اولین تلاش خود را برای کاهش سر و صدا انجام دادم. من دوباره هر سروو را باز کردم و یک سیم از پین V+ به پتانسیومتر اضافه کردم. من برای خواندن آنها به ورودی های آنالوگ بیشتری نسبت به Arduino Uno نیاز داشتم ، بنابراین من نیز در این مرحله به Arduino Mega رفتم. در کد من ، زاویه ورودی را از قرائت آنالوگ ولتاژ در پین وسط به نسبت بین ولتاژ پین وسط به ولتاژ روی پین V+ تغییر دادم. امید من این بود که اگر ولتاژ روی پین ها وجود داشته باشد ، این نسبت از بین می رود.

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

من نمی فهمیدم چرا این اتفاق می افتد ، بنابراین در نهایت اتصال زمینی خود را در سروها بررسی کردم. میانگین افت ولتاژ در حدود 0.3 ولت در سطح زمین وجود داشت و هنگامی که سرووها جریان برق را می کشیدند ، حتی بیشتر می شد. در آن زمان برای من واضح بود که آن پین ها دیگر نمی توانند "پایه" تلقی شوند و بهتر است به عنوان پین های "مرجع" توصیف شوند. تخته های کنترل در سروها باید ولتاژ پین وسط پتانسیومتر را نسبت به ولتاژ V+ و پین های مرجع اندازه گیری می کردند. تغذیه پتانسیومترها به طور جداگانه اندازه گیری نسبی را به هم ریخت زیرا در حال حاضر به جای افزایش ولتاژ در همه پین ها ، فقط در پین مرجع اتفاق افتاده است.

مربی من ، دکتر ماللوک ، به من کمک کرد تا همه اینها را عیب یابی کنم و پیشنهاد داد که ولتاژ پین وسط را نسبت به سایر پین ها اندازه گیری کنم. این همان کاری است که من برای سومین و آخرین تلاش خود برای کاهش نویز ورودی زاویه انجام دادم. من هر سروو را باز کردم ، سیم را که جدا کرده بودم دوباره وصل کردم و یک سیم سوم را که از پین مرجع روی پتانسیومتر می آمد ، اضافه کردم. در کد من ، زاویه ورودی را معادل عبارت زیر کردم: (پین وسط - پین مرجع) / (پین V+ - پین مرجع). من آن را آزمایش کردم و با موفقیت اثرات افزایش ولتاژ را کاهش داد. علاوه بر این ، یک فیلتر EWMA نیز روی این ورودی قرار دادم. این سیگنال پردازش شده و سیگنال اصلی در بالا نشان داده شده است.

مرحله 4: جمع بندی کارها

پیچیدن چیزها
پیچیدن چیزها

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

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

سند CAD:

cad.onshape.com/documents/818ea878dda7ca2f…

توصیه شده: