فهرست مطالب:

یک روبات 4WD از طریق گیم پد USB از راه دور: 6 مرحله
یک روبات 4WD از طریق گیم پد USB از راه دور: 6 مرحله

تصویری: یک روبات 4WD از طریق گیم پد USB از راه دور: 6 مرحله

تصویری: یک روبات 4WD از طریق گیم پد USB از راه دور: 6 مرحله
تصویری: یک ربات استخدام میکنه برای انجام کارای خونه، ولی ازش استفاده های دیگه ایی میکنه 2024, نوامبر
Anonim
Image
Image

برای پروژه بعدی رباتیکم ، به دلیل شرایط پیش بینی نشده مجبور به طراحی/طراحی پلت فرم روبات خودم شدم.

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

نتایج تقریباً خوب یا بهتر از آنچه انتظار داشتم بوده است.

مزیت استفاده از مسیر USB Gamepad با برنامه نویسی زیاد این است که می توانم آن را سفارشی کرده و به کارهایی که قبلاً انجام داده ام بیفزایم. من هیچ تجربه واقعی در ساخت یک وسیله نقلیه RC ندارم ، اما تصور می کنم که این دستگاه تقریباً با هرگونه فرستنده RC (جوی استیک/دکمه و غیره) و گیرنده RC گیر کرده است.

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

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

این دستورالعمل یک روش واقعی ، دقیق ، همه جانبه و گام به گام نخواهد بود ، اما من سعی می کنم تا آنجا که می توانم جزئیات را ارائه دهم.

تدارکات

بخشهای پیشنهادی: بیشتر اینها را از Servo City (Actobotics) دریافت کردم.

2 - 13.5 U -channel ها ، برای کناره های قاب پایه. موتورها روی آن نصب شده اند. من با چیزی کوتاهتر رفتم و موتورهای من در گوشه ها نصب شده است ، و نصب آنها را دشوار کرد.

کانال های U 2 - 12 اینچی برای جلو و عقب قاب اصلی.

کانال های U - 15 برای سپرها ، جلو و عقب

2 - 7 (یا 7.5 اینچ بود؟) کانال های U برای ستون های جلو. این خیلی مهم نیست ، طول ها می تواند متفاوت باشد. این بستگی به ارتفاع ستون های عقب و در چه ارتفاعی برای قرار دادن زاویه دار دارد. کانال U که بین آنها متصل می شود.

2-(طول؟) کانال های U برای عضو زاویه دار ، جلو به عقب ، که ستون های عمودی را متصل می کند. این مورد بسیار مهم است ، زیرا Servo City / Actobotics برای این منظور پانل ها یا براکت های زاویه دار 45 درجه می فروشد ، اما برای اطمینان از اینکه طول های مناسب را بدست می آورید ، باید برخی از ریاضیات را انجام دهید.

2-(طول؟) کانال های U به عنوان سپرهای جانبی سطح بالاتر عمل می کنند ، باز هم اینها بستگی به عملکرد شما با پایه دارد

2-(طول؟) کانال های U به عنوان سپرهای جلو و عقب سطح بالاتر عمل می کنند ، به همین دلیل در بالا.

1 - (طول؟) کانال U برای خدمت به عنوان بالاترین عضو ، از ستونهای عقب می گذرد. این ممکن است خیلی مهم نباشد ، زیرا می توانید در بالا یا جلوی / پشت ستون های عمودی سوار شوید.

12 (حدود) کانال L یا براکت. اینها اهداف متعددی را ارائه می دهند ، اما اساساً یکپارچگی/استحکام ساختاری را برای گوشه های قاب پایه و ستون های عمودی ارائه می دهند.

4 (+؟) کانالهای مسطح 3 سوراخ تا 5 سوراخ. اینها همچنین قدرت ساختاری را برای ربات فراهم می کنند.

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

یک پنل 4 (4.5؟) "X 12" وجود دارد ، و من فکر می کنم پنل دیگر یک پنل 9 (9.5؟) "X 12 است.

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

و نکته این است که شما واقعاً نمی دانید به کدام یک نیاز دارید یا چند … زیرا راه های زیادی وجود دارد که می توانید این قطعات را در کنار هم قرار دهید.

من می توانم مواردی را که استفاده کرده ام لیست کنم:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

دو مورد زیر بسیار مفید هستند و من فقط موارد زیر را ذخیره می کنم:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

بعد همه پیچ ها (پیچ و مهره) است. من با یک بسته اندازه HACH شروع کردم و اکثر آنها را مرور کردم. من از پیچ های بلندتری که اندازه آنها مهم نیست استفاده کردم ، و پیچ های کوتاه تر را برای جایی که لازم بود ذخیره کردم زیرا هیچ طول دیگری کار نمی کند.

در نهایت ، شما باید 1 کیسه از این موارد را تهیه کنید:

www.servocity.com/6-32-nylock-nuts-pack

من از این تعداد زیاد استفاده نکردم ، اما آنها (من فکر می کنم) برای اطمینان از لرزش موتورهای شما از قاب در طول زمان بسیار مهم هستند. فقط دو موتور در هر موتور به دلیل وجود کانال U کار می کنند

شما حداقل به 4 مورد از این موارد احتیاج دارید ، در صورت صدمه زدن به یکی ، ممکن است یک مورد اضافی دریافت کنید (به من اعتماد کنید ، ممکن است چند بار موتور را روشن یا خاموش کنید):

www.servocity.com/heavy-duty-clamping-shaf…

به طور معمول ، محورهای موتور 6 میلی متر و محورها 1/4 اینچ (0.25 اینچ) هستند.

من تعدادی پیچ مشکی ، ظاهراً قوی تر ، می گیرم و از آنها برای گیره های بالا استفاده می کنم ، و از پیچ های همراه گیره استفاده نمی کنم:

(من فکر می کنم اینها هستند):

یاتاقانهای قطر 4 - 1/4 اینچ (0.25 اینچ)

1 - کیسه اسپیسر سیاه 1/4 اینچی

4 - بستن D -Hubs

www.servocity.com/0-770-clamping-d-hubs

4-D-Shafts (#6340621.375 "(1-3/8")

چرخ های 4 تا 6 اینچی سنگین

www.servocity.com/6-heavy-duty-wheel

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

همچنین ، آنها تمایل دارند که فرش شما را لکه دار کنند !!!

4 - موتورها:

www.servocity.com/motors-actuators/gear-mo…

من با سرعت 223 دور در دقیقه ، بهترین سرعت داخلی خوب ، می توانم ربات خود را (با 2 باتری SLA 12V سنگین) به راحتی در حرکت آهسته حرکت دهم.

2 - رمزگذار موتور برای موتورها. (Roboclaw Servo City فقط 2 رمزگذار را کنترل می کند)

1 - کنترل کننده موتور Roboclaw 2X45A ، مطمئن شوید که یکی از بلوک های ترمینال سبز را بر روی آن تهیه کرده اید ، نه پین ها…. خوب … هرکدام مزایای خود را دارند. Hindsight.. شاید من پین ها را گرفته ام.

من فکر می کنم این از Servo City است.

SparkFun Arduino Uno (که من از آن استفاده کردم) و همچنین Redboard Artemis را به عنوان مدیر درایو شما می فروشد.

شما یک Raspberry Pi 3 (یا 4؟) به عنوان "مغز" سطح بالا و رابط کاربری خود برای شما می خواهید.

شما به سیم کشی ، کلید ، فیوز و یک دیود بسیار قوی "flyback" نیاز دارید.

من از یک باتری SLA چرخه عمیق Duracell 12V 14AH استفاده کردم ، اما شما می توانید از هر چیزی استفاده کنید.

هشدار! طراحی این ربات (TALL ، و WIDE ، اما SHORT) ، نوعی مرکز ثقل سنگین را در نظر می گیرد ، مانند یک باتری SLA. ممکن است با انواع دیگر بسته های باتری فناوری جدید خوب عمل نکند. LiPo ، Lion و غیره به راحتی می تواند واژگون شود.

از Pololu چند آداپتور پلاگین بشکه دریافت کردم تا بتوانم به طور مستقل Arduino و/یا Redboard را تغذیه کنم ، حتی اگر آنها از طریق USB به رزبری متصل شوند ، زیرا نمی خواهم به قدرت تمشک متکی باشم به (مخصوص نصب دوربین ، سنسور و …)

شما به یک تنظیم کننده ولتاژ 12 تا 5 ولت ، حداقل 5A (؟) برای تمشک احتیاج دارید. بقیه می توانند هر چیزی بین 7 تا 15 ولت را مستقیماً با باتری SLA اداره کنند.

این در مورد قطعات است.

کاری که من نمی توانم انجام دهم - چرخ دنده دار 90 درجه.

باز هم ، ویدئوهای زیادی در لیست پخش یوتیوب Robotics من وجود دارد که بیشتر موارد فوق را توضیح می دهد.

مرحله 1: ساخت و ساز

صادقانه بگویم ، تمام مراحل ساخت من در حال حاضر به شکل یوتیوب است. شما می توانید کسانی را که در لیست پخش Robotics من هستند ، از "Wallace Robot 4" شروع کنید ، مشاهده کنید. موارد قبلی (والاس II ، والاس III) نیز مواد خوبی دارند

www.youtube.com/playlist؟list=PLNKa8O7lX-w…

مرحله 2: Roboclaw ، Motors و Encoders را آزمایش کنید

سازندگان Roboclaw (BasicMicro) دارای یک برنامه Windows هستند که می توانید از آنها برای اطمینان از اتصال صحیح موتورها و رمزگذارها به Roboclaw استفاده کنید. شما به موازات Roboclaw موتورهای طرفی را متصل می کنید. شما می توانید از سیم های رمزگذار ، فقط در موتورهای عقب ، یا موتورهای جلو ، یا شاید حتی بهتر - به صورت DIAGONALLY استفاده کنید.

دلیل پیشنهاد من مربوط به (بعدا) بررسی ربات گیر کرده است. داشتن وضعیت مورب در صورت عدم چرخش چرخهای جلو/عقب ممکن است بهتر از جلو یا عقب باشد.

توجه: آنچه من انجام نداده ام این است که از Arduino برای اتصال (از طریق پین های GPIO) به رمزگذارها استفاده کنم - اگر این کار را انجام دهید ، می توانید Roboclaw 2 رمزگذار را اداره کنید ، و سپس Arduino دو مورد دیگر را کنترل کنید ، و فقط Roboclaw را برای دو مقدار رمزگذار (و سرعت) درخواست کنید.

توجه: من از برنامه BasicMicro برای پیش پیکربندی Roboclaw برای Ramping Up / Ramping Down استفاده کردم. این برای محافظت از سخت افزار و وسایل الکترونیکی خوب است. یک ویدیو در مورد آن در لیست پخش Robotics من وجود دارد.

من تقریباً فراموش کردم: من همچنین تعدادی کابل اتصال دهنده گلوله که بین کابل های موتور و Roboclaw خریداری کردم ، خریدم. توجه: اگر این کار را انجام دهید ، متوجه خواهید شد که طول کل کابل واقعاً طولانی است. اما من نمی خواستم مجبور به قطع هر گونه اگر من لازم نیست. من (برای مراحل بعدی) با مشکلات ارتباطی با USB بین رزبری و آردوینو مواجه شدم ، احتمالاً به دلیل نویز EMI است.

اگر مشکل ساز شد ، می توانید سیم ها را کوتاه کنید - همچنین می توانید محافظ فلزی (از آمازون ، به قطر 1 اینچ) خریداری کنید.

آخرین مورد: این من هنوز باید انجام دهم --- تنظیمات خودکار Roboclaw یا تنظیم خودکار (با استفاده از رمزگذار) را انجام دهید تا هر دو موتور سمت چپ و راست با سرعت یکسان حرکت کنند و ربات مستقیم حرکت کند.

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

مرحله 3: افزودن و برنامه نویسی آردوینو

شما به دوشاخه بشکه و سیم کشی ، همچنین یک کابل USB نیاز دارید. مطمئن شوید که کانکتور مناسب برای کانکتور آردوینو را دریافت کرده اید.

باید Arduino IDE را بارگیری کنید.

در اینجا در Github آخرین طرح که رانندگی ربات را کنترل می کند ، آمده است:

github.com/elicorrales/wallace.robot.ardui…

شما Arduino را به رایانه خود که IDE را اجرا می کند متصل می کنید و بر اساس نحوه نگارش طرح ، از پین های 10 و 11 در Arduino برای ارتباطات سریال (نرم افزار سریال) با Roboclaw استفاده می کنید.

من یک پروتکل ارتباطی ساده بین رزبری پای و آردوینو ایجاد کردم.

این کاراکتر مبتنی بر ASCII است ، که اشکال زدایی و آزمایش را فقط با استفاده از پنجره "مانیتور سریال" Arduino IDE آسان می کند.

دستورات از شماره "0" (صفر) شروع می شوند و فقط در صورت نیاز بالا می روند

دستوراتی که در "20" شروع می شوند دستورات مستقیم Roboclaw هستند و دستورات زیر این تعداد کاملاً دستورات مربوط به آردوینو هستند.

به دلیل نویز EMI ، رشته فرمان را بهبود بخشیدم تا شامل چک چک شود.

بنابراین ، هر رشته شامل موارد زیر است:

# تعداد نشانه در رشته از جمله این یکی

چک چک

به عنوان مثال ، بگویید که می خواهید آردوینو با منوی دستورات خود پاسخ دهد:

4 0 12 16

"4" چهار نشانه در رشته است.

"0" دستور MENU است.

"12" عددی تصادفی است که من انتخاب کردم.

"16" مجموع 4 + 0 + 12 است.

همان دستور MENU می تواند متفاوت باشد:

4 0 20 24

از آنجا که من یک عدد تصادفی متفاوت انتخاب کردم ، جمع چک نیز متفاوت است.

به عنوان مثال ، بگویید که می خواهید با سرعت 100 forward به جلو حرکت کنید:

5 29 0 134 100

"5" پنج نشانه

"29" دستور FORWARD

"0" عدد تصادفی

"134" چک چک

"100" پارامتر 1 (سرعت در این مورد)

اگر آردوینو نتواند آن رشته ورودی را تأیید کند ، فقط آن را رها می کند / نادیده می گیرد ، هیچ پاسخی نمی دهد.

اگر آردوینو فرمان حرکت بعدی را با X میلی ثانیه دریافت نکند ، موتورهای STOP را به Roboclaw ارسال می کند.

آردوینو راه اندازی می شود و شروع به ارسال وضعیت خودکار به پورت USB می کند … مگر اینکه به او دستور دهید این کار را متوقف کند.

در این مرحله شما باید آماده کنترل Roboclaw و تماشای چرخش موتورها باشید ، فقط با استفاده از "Serial Monitor" در IDE.

مرحله 4: افزودن و برنامه نویسی Raspberry Pi (node.js)

باز هم ، اگر به لیست پخش Robotics من نگاه کنید ، حتی از ابتدا ، من برای راه اندازی رزبری هر مرحله را پشت سر گذاشتم.

نکته ای که ممکن است به آن اشاره کنم این است که شما به یک رگولاتور 5 ولت احتیاج دارید و یا به نحوی کابل USB را برای آن بسازید ، برش دهید/تغییر دهید یا رزبری را به روش دیگری تغذیه کنید.

در اینجا در Github همه چیزهایی که در رزبری برای ارتباط با آردوینو از طریق USB نیاز دارید وجود دارد.

github.com/elicorrales/wallace.robot.raspb…

حتی اسکریپت های آزمایشی نیز وجود دارد.

می توانید به کد سرور node.js نگاهی بیندازید و خواهید دید که چگونه رزبری دستورالعمل های عددی مختصر را به رشته های url نوع REST تبدیل می کند. برای ارسال دستورات آزمایشی می توانید از "curl" استفاده کنید.

مثال:

آدرس IP RP3 شما: 8084/arduino/api/forward/50

باعث می شود موتورها لحظه ای چرخها را به جلو بچرخانند.

اگر آن را در حلقه اسکریپت پوسته قرار دهید ، می بینید که چرخ ها همچنان می چرخند.

کد node.js (server.js) شامل یک ویژگی اتصال مجدد در صورت از دست دادن سریال های ارتباطی به آردوینو است. فقط می توانید Arduino را از رزبری جدا کرده و دوباره آن را وصل کنید.

اطمینان حاصل کنید که میزان باود سریال بین این دو را مطابقت دهید.

به دلیل حذف آردوینو از بسته های بد داده ، و در سطح node.js و در سطح مرورگر جاوا اسکریپت ، همه چیز برای ارسال بسیاری از دستورات "درایو" کدگذاری شده است ، من توانستم تا 2 000 000 baud را اجرا کنم (2 مگابیت بر ثانیه)

اگر اسکریپت های آزمایشی را اجرا کرده اید و شاهد چرخش چرخ ها هستید ، پس برای مرحله بعدی آماده هستید.

مرحله 5: مرحله نهایی - برنامه نویسی / استفاده از سرویس گیرنده صفحه وب

در پیوند Github به بخش تمشک از همه اینها ، پرونده های مشتری وجود دارد.

index.html. index.js. p5.min.js.

آنها USB Gamepad را از طریق Gamepad API (مبتنی بر مرورگر) اداره می کنند و شما باید دکمه ها و لغزنده های مختلف موجود در صفحه وب را مشاهده کنید.

کد جاوا اسکریپت مقادیر محور X و Y را برای یکی از جوی استیک ها درخواست می کند. این نظرسنجی بسیار سریع انجام می شود و تمام این مقادیر را به سرور node.js گوش می دهد که در 8084 گوش می دهد.

مقادیر خام محور X و Y جوی استیک ها بین 0 تا 1 است.

اما عملکرد کتابخانه کنترل کننده Roboclaw که در Arduino برای حرکت موتورها استفاده می شود ، انتظار می رود که مقدار بین -100 تا 0 (عقب) یا (0 تا 100) رو به جلو باشد.

سو…. این هدف شامل p5.min.js. به طور اتفاقی این تابع map () بسیار زیبا و مناسب را دارد که در آن مقدار خام را به آن می دهید ، محدوده خام (فعلی) آن و محدوده دلخواه جدید است. و مقدار خام را به مقدار در محدوده جدید و نقشه برداری تبدیل می کند.

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

چیزی که شما باید اضافه کنید شبیه به نوار لغزنده Max Speed فعلی در صفحه وب است. آن نوار لغزنده تعیین می کند که بیشترین یا حداکثر مقداری که جوی استیک های Xs و Ys را در آن نگاشت می کنید چقدر است.

مثال:

بگویید که در حال نگاشتن 0 -> 1 تا 0 -> 100 هستید. هنگامی که جوی استیک را به طور کامل فشار می دهید ، در 100 هستید. شاید خیلی سریع باشه

اما ، اگر آن نوار لغزنده Max Speed را کمی به عقب بکشید ، اکنون در حال ترسیم 0 -> 1 تا 0 -> 80 یا 70 هستید.

این بدان معناست که شما آزادی عمل بیشتری برای حرکت جوی استیک خود بدون تغییر زیاد در سرعت ارسال به node.js (و به آردوینو) دارید.

و علاوه بر این می توانید Xs را بچرخانید (بچرخانید به چپ یا راست) از Ys (جلو یا عقب) به حداکثر سرعتهای موجود خود.

بنابراین ، برای حرکت سریع خطی می توانید Y را در 0 تا 100 ، 0 تا -100 بگذارید ، اما برای کنترل بیشتر حرکت چرخشی حداکثر سرعت Xs را کاهش دهید. بهترین از هر دو جهان.

مرحله 6: اختیاری: Drive Robot With Mouse Drag and / or Touch Events

اگر تا اینجا پیش رفته اید ، می دانید که لایه های نرم افزار از مرورگر شروع شده و از طریق Javascript و سرور Raspberry nod.js و در نهایت به arduino ، مختصات Gamepad جوی استیک X و Y را به "تبدیل" می کند. دستورات جلو "(یا" عقب "و غیره) (و مقدار سرعت آنها).

بعلاوه ، می دانید که در حالی که X ها و Y های جوی استیک ها منفی 1 ، از صفر ، به مثبت 1 هستند ، آنها باید بین صفر و 100 تبدیل شوند. خوب ، حداکثر به حداکثر سرعت تنظیم شده در صفحه وب بستگی دارد.

Soo … تنها کاری که می توانید از ماوس یا رویدادهای لمسی (مانند تلفن های هوشمند) انجام دهید ، گرفتن این رویدادها ، گرفتن Xs و Ys است.

اما ---- آن X ها و Y ها بین 1 و 1 نیستند. آنها 0 را شروع می کنند و مثبت افزایش می دهند ، زیرا در اصل پیکسل یا مختصات نسبی صفحه برخی از عناصر HTML (مانند پانل بوت استرپ) یا یک بوم هستند.

بنابراین دوباره ، عملکرد "map ()" کتابخانه Js کتابخانه P5 برای نقشه برداری مجدد به آنچه نیاز داریم بسیار مفید است.

من کد را دوباره تغییر دادم که دارای دو صفحه وب مختلف باشد ، یکی برای دسکتاپ با استفاده از Gamepad ، دیگری برای تلفن همراه ، با استفاده از رویدادهای لمسی.

همچنین ، هنگامی که Xs و Ys مجدداً نقشه برداری می شوند ، همان زنجیره کد و غیره مانند Xs و Ys از Gamepad تغذیه می شوند.

توصیه شده: