فهرست مطالب:

نحوه ساخت یک ربات بسکتبال مستقل با استفاده از IRobot ایجاد به عنوان پایه: 7 مرحله (همراه با تصاویر)
نحوه ساخت یک ربات بسکتبال مستقل با استفاده از IRobot ایجاد به عنوان پایه: 7 مرحله (همراه با تصاویر)

تصویری: نحوه ساخت یک ربات بسکتبال مستقل با استفاده از IRobot ایجاد به عنوان پایه: 7 مرحله (همراه با تصاویر)

تصویری: نحوه ساخت یک ربات بسکتبال مستقل با استفاده از IRobot ایجاد به عنوان پایه: 7 مرحله (همراه با تصاویر)
تصویری: Learn English while you sleep | English conversation practice B1 2024, جولای
Anonim
چگونه می توان با استفاده از IRobot یک ربات بسکتبال مستقل بسازد و به عنوان پایه بسازد
چگونه می توان با استفاده از IRobot یک ربات بسکتبال مستقل بسازد و به عنوان پایه بسازد

این ورودی من برای چالش iRobot Create است. سخت ترین بخش این فرایند برای من تصمیم گیری در مورد کار ربات بود. من می خواستم ویژگی های جالب Creat را نشان دهم ، در حالی که استعداد robo را نیز اضافه می کنم. به نظر می رسید که همه ایده های من یا در گروه خسته کننده اما مفید قرار می گیرند ، یا سرد و غیرعملی. در پایان ربات جالب و غیرعمدی برنده شد و ربات بسکتبال به دنیا آمد. پس از کمی فکر متوجه شدم که می تواند عملی باشد. فرض کنید که از کاغذ نارنجی استفاده می کنید و همه سطل های زباله شما دارای تخته پشتی سبز هستند…

مرحله 1: قطعات Aquire

به دلیل محدودیت زمانی مسابقه ، بیشتر قسمت هایی که استفاده کردم "خارج از قفسه" بود. قطعات ربات "Stock" مورد استفاده: ایجاد (x1)-از iRobot www.irobot.com XBC V.3.0 (x1)-از Botball www.botball.orgCreate-Roomba cable (x1)-از Botball www.botball.orgServo (x2)-از Botball www.botball.org فاصله یاب تیز (x1)-از Botball www.botball.org آجرهای مختلف LEGO-از LEGO www.lego.com پیچ های دستگاه 6-32 (x4)-از McMaster www.mcmaster.com "ایجاد شده" قطعات ربات مورد استفاده: ورق PVC اکسترود شده ضخیم 3/8 " - این چیزها عالی هستند ، اما نمی توانم به یاد داشته باشم که از کجا تهیه کرده ام ، اما دقیقاً مانند این موارد است

مرحله 2: بخش منحصر به فرد را ایجاد کنید

قسمت Unique را ایجاد کنید
قسمت Unique را ایجاد کنید

تنها قسمتی که مجبور به ساخت آن شدم صفحه ای بود که به Creat متصل شده بود و فاصله LEGO را ارائه می داد. فاصله سوراخ های آجر LEGO 8 میلی متر از هم فاصله دارد ، اما من برای صرفه جویی در وقت ، دو فاصله انجام دادم. PVC اکسترود شده برای کار کردن بسیار راحت است. می توان آن را با چاقوی کاربردی برش داد ، اما سفت و محکم است. من اغلب ربات را با این بشقاب بر می دارم و هنوز مشکلی نداشته ام.

مرحله 1: ورق را به ابعاد 3.5 اینچ در 9.5 اینچ برش دهید ، می توانید این را با یک چاقوی ابزار برش دهید. مرحله 2: سوراخ های پیچ ایجاد شده را سوراخ کنید. پیچ های ایجاد شده جعبه ای با اندازه 2 و 5/8 اینچ در 8 و 5/8 اینچ ایجاد می کنند. مرحله 3: سوراخ های فاصله آجر LEGO را سوراخ کنید. از یک مته 3/16 اینچی استفاده کنید و من سوراخ ها را 16 میلی متر از هم فاصله دادم. نکته: من ورق را در یک برنامه CAD قرار دادم ، آن را در اندازه کامل چاپ کردم و روی ورق چسباندم. سپس از این به عنوان راهنمای برش و حفاری

مرحله 3: مونتاژ ربات

مونتاژ ربات
مونتاژ ربات
مونتاژ ربات
مونتاژ ربات
مونتاژ ربات
مونتاژ ربات

من از ساختن چیزها به سادگی لذت می برم ، به این ترتیب وقتی آنها از روی میز بر می خیزند لازم نیست آنقدر بازسازی کنید!

1. صفحه جدید را به بالای ایجاد کنید 2. بازویی برای گرفتن توپ بسازید 3. بازویی را برای نگه داشتن دوربین بسازید 4. پایه ای برای فاصله سنج بسازید 5. XBC را نصب کرده و همه کابل ها را وصل کنید

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

من تصمیم گرفتم از XBC به عنوان کنترل کننده خود به دلیل ردیابی رنگ داخلی آن استفاده کنم. از آنجا که من تصمیم گرفتم با XBC به عنوان مغز عملیات ، روبات خود را در Interactive C یا به اصطلاح IC نامگذاری کردم. IC رایگان است و می توانید آن را در www.botball.org بارگیری کنید. IC بسیار شبیه به C ++ است ، اما چندین کتابخانه داخلی دارد. همانطور که پیداست ، دیوید میلر از دانشگاه اوکلاهما کتابخانه ای برای Creat ایجاد کرده است که می توانید از صفحه او در https://i-borg.engr.ou.edu/~dmiller/create/ بارگیری کنید. با آن منابع و کتابچه های راهنمای ایجاد ، من آماده برنامه نویسی بودم. اما چالش بزرگ بعدی این بود که می خواستم چه کاری انجام دهد؟ من یک ربات می خواستم که بتواند توپ های نارنجی را برداشته و در یک سبد گلزنی کند. هدف من ساده به نظر می رسید ، و احتمالاً می توانست ساده باشد ، اما هرچه بیشتر در مورد آنچه Creat می تواند انجام دهد ، بیشتر می خواستم. لیست نهایی من به این شکل بود: 1. توپ نارنجی را پیدا کنید 2. توپ نارنجی را بردارید 3. سبد را تعیین کنید 4. قرار دادن توپ در سبدWhile1. اجتناب از اشیاء 2 افتادن از هیچ چیزی (مانند یک میز) 3. تشخیص میزان شارژ باتری و اتصال به پایه خانه در زمان lowOh ، و همه اینها کاملاً مستقل است ، به این معنی که همه از قبل برنامه ریزی شده است.

مرحله 5: کد

ممکن است کثیف باشد ، اما کار می کند.#استفاده از "createlib.ic" #use "xbccamlib.ic" #define cam 0 // port servo camera#define arm 3 // arm servo port#define et (آنالوگ (0)) // et port/*کابل ایجاد نیز باید وصل شود. پریز برق ، دو شاخه 3 شاخه به پورت 8 و یک برچسب UX به JP 28 (کنار پورت USB) با U به سمت دوربین*/ #تعریف c_down 5 // دوربین سروو پایین#تعریف a_down 17 // بازوی سروو پایین#تعریف نگه داشتن 50 // سرو نگهدارنده توپ#تعریف گرفتار 27 // موقعیت سروو بازو برای جلوگیری از گیر افتادن روی میز#تعریف شلیک 150 // سروو پرتاب توپ#تعریف track_c 25 // دوربین سروو مسیر بستن موقعیت#تعریف مسیر_ف 45 // دوربین سروو مسیر دور موقعیت#تعریف مرکز 120 // مرکز دید دوربین#تعریف نارنجی 30 // مختصات_هنگام زمانی که توپ در پنجه است#تعریف توپ 0 // کانال توپ نارنجی#define ball_x (track_x (ball، 0)) // x مختصات توپ#define ball_y (track_y (ball، 0)) // y مختصات توپ#تعریف آهسته 100 // سرعت آهسته موتور#تعریف سریع 175 // سرعت موتور سریع#تعریف 0.2 // ثانیه روشن جهش برای عقب نشینی از موانع#تعریف زمان 0.5 //1.0 گردش 90 درجه به راست#تعریف استراحت 0.05 // زمان خواب هنگام ردیابی حباب ها#تعریف speeda 175 // سرعت اجتناب از چرخش#تعریف_پشت_ -200 // سرعت به برگشتن از شیء ناهموار#تعریف مستقیم 32767 // رانندگی در یک خط مستقیم#تعریف پشتیبان 2 // کانال رنگ اصلی تخته پشت#تعریف مربع 1 // کانال رنگ لهجه پشتی#تعریف مسیر_د 250 // موقعیت دوربین برای ردیابی هدف# define track_find 70 // موقعیت دوربین برای ردیابی طولانی#تعریف معکوس 2.25 // زمان خواب برای 180#تعریف back_f -150 // سرعت سریع عقب#تعریف back_sl -125 // سرعت عقب عقب#تعریف center_x 178 // true x center از cam#define center_y 146 // true y center of camint pida؛ // جلوگیری از processint pidb؛ // track processint pidc؛ // score processint have_ball = 0؛ // می گوید که ما کدام تابع را نامعتبر main () {long ch؛ enable_servos ()؛ // فعال servos init_camera ()؛ // شروع اتصال دوربین ()؛ // اتصال برای ایجاد با کنترل کامل start_a ()؛ // شروع اجتناب از عملکرد start_b ()؛ // شروع عملکرد توپ_تراکینگ در حالی که (1) {if (r_button () || gc_ldrop || gc_rdrop) {// اگر برداشته شود یا دکمه r شانه را بکشد (pida) ؛ کشتن (pidb) ؛ کشتن (pidc) ؛ disable_servos ()؛ قطع شدن()؛ break؛} create_battery_charge ()؛ display_clear ()؛ printf ("شارژ =٪ l / n" ، gc_battery_charge) ؛ if (gc_battery_charge <1200l || b_button ()) {kill (pida) ؛ کشتن (pidb) ؛ کشتن (pidc) ؛ پرت کردن()؛ have_ball = 0؛ create_demo (1) ؛ while (b_button ())؛ while (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge ()؛ display_clear ()؛ printf ("شارژ =٪ l / n" ، gc_battery_charge) ؛ sleep (1.0)؛} cconnect ()؛ بازگشت()؛ خواب (2.0) ؛ شروع یک()؛ start_b ()؛}}} void جلوگیری از () {در حالی که (1) {// برای همیشه تکرار کنید create_sensor_update ()؛ // همه مقادیر حسگر را به روز کنید // create_drive (speeda ، مستقیم) ؛ if (gc_lbump == 1) {// چپ دست چپ shman_درست ()؛} // جهت جلوگیری از else به راست می شود اگر (gc_rbump == 1) {// برآمدگی راستي escape_left ()؛} // برای اجتناب از چپ به چپ می رود اگر () gc_lfcliff == 1) {// صخره جلو سمت چپ shman_درست () ؛} در غیر این صورت (gc_rfcliff == 1) {// صخره جلویی سمت راست right_left ()؛} در غیر این صورت اگر (gc_lcliff == 1) {// صخره چپ جلوگیری از_صحیح ()؛} else if (gc_rcliff == 1) {// صخره سمت راست shmang_left ()؛}}}} void track_ball () {kill (pidc)؛ while (! have_ball) {// تکرار کنید تا ball_update را دریافت کنید ()؛ far () ؛ // دوربین را آماده می کند () ؛ // بازو را در حالی تنظیم می کند (et <255) {// تا زمانی که حداکثر توپ هنگام گرفتن توپ track_update () اتفاق می افتد ؛ // عکس دوربین را به روز کنید اگر (ball_x <= (center-5)) {// در صورت باقی ماندن توپ track_update () ؛ create_drive_direct (آهسته ، سریع) ؛ // خواب چپ (استراحت) ؛} در غیر این صورت (ball_x> = (مرکز+5)) {// اگر توپ مسیر صحیح باشد ()؛ create_drive_direct (سریع ، آهسته) ؛ // خواب راست (استراحت) ؛} در غیر این صورت (ball_x (center-5)) {// اگر توپ در مرکز track_update () باشد ؛ create_drive_straight (سریع) ؛ // خواب مستقیم (استراحت) ؛}} گرفتن () ؛ // گرفتن صدای بوق توپ () ؛ // ایجاد سر و صدا () ؛ // توقف رانندگی have_ball = 1 ؛ // یادداشت کنید که من توپ دارم} start_c () ؛ // خواب سبد را پیدا کنید (1.0) ؛ // بخوابید تا وقتی کشته می شوم کاری انجام ندهم} void find_basket () {kill (pidb) ؛ // کشتن فرایند ردیابی توپ پیدا کردن () ؛ // قرار دادن دوربین در track_set_minarea (1000) ؛ // تخته پشتی بزرگ است ، بنابراین فقط در حالی که (have_ball) دارید {/در حالی که من توپ track_update () را دارم ، به دنبال حباب های بزرگ باشید. while (track_x (backb، 0) = (center_x+20)) {// در حالی که track_update () متمرکز نشده است؛ if (track_x (backb، 0)> = (center_x+20)) {// در صورتی که تخته پشتی ترک شود track_update ()؛ create_spin_CCW (100)؛} // اگر به سمت چپ بپیچید if (track_x (backb، 0) <= (center_x-20)) {// اگر تخته پشتی درست باشد track_update ()؛ create_spin_CW (300-center_x) ؛} // با نزدیک شدن مرکز به راست بپیچید} توقف ()؛ while (track_size (backb، 0) <= (6000)) {// در حالی که هدف کمتر از 6000 پیکسل در اندازه track_update ()؛ if (track_x (backb، 0) <= (center_x-5)) {// اگر هدف track_update () باقی مانده باشد؛ create_drive_direct (آهسته ، سریع) ؛ // خواب چپ (استراحت) ؛} در غیر این صورت (track_x (backb، 0)> = (center_x+5)) {// اگر هدف درست track_update () باشد ؛ create_drive_direct (سریع ، آهسته) ؛ // خواب راست (استراحت) ؛} در غیر این صورت (track_x (پشتیبان ، 0) (center_x-5)) {// اگر هدف در مرکز track_update () باشد ؛ create_drive_straight (سریع) ؛ // مستقیم بخوابید (استراحت کنید) ؛}} توقف () ؛ // create_drive_straight (سریع) ؛ // کمی نزدیکتر شوید //sleep(1.0) ؛ //متوقف کردن()؛ خواب (1.0) ؛ create_spin_CW (speeda) ؛ // چرخش خواب راست (معکوس) ؛ // خواب کافی برای توقف 180 دور () پایین () ؛ // دوربین را برای ردیابی خواب پشت صفحه (1.0) ؛ track_set_minarea (200) ؛ // از اندازه min کوچکتر استفاده کنید ، زیرا ما به آن اشاره کرده ایم و در حالی که (track_y (backb، 0)> = (center_y-140)) {// در حالی که هدف کمتر از y هماهنگی track_update ()؛ if (track_x (backb، 0) <= (center_x-5)) {// اگر هدف track_update () باشد back_right ()؛ // گردش به چپ خواب (استراحت)؛} در غیر این صورت (track_x (backb، 0)> = (center_x+5)) {// اگر هدف درست track_update () باشد؛ back_left ()؛ // گردش به راست خواب (استراحت) ؛} در غیر این صورت (track_x (پشتیبان ، 0) (center_x-5)) {// در صورتی که هدف track_update () باشد ؛ برگشت () ؛ // مستقیم بخوابید (استراحت کنید) ؛}} توقف () ؛ بوق ()؛ پرتاب () ؛ // شلیک خواب (1.0) ؛ have_ball = 0؛ // یادآوری من توپ را پرتاب کردم و آن را نداشتم} start_b ()؛ // بازگشت به حالت ردیابی توپ (1.0) ؛ // تا زمانی که این فرایند از بین نرود کاری انجام ندهید} void cconnect () {create_connect ()؛ create_full ()؛ // برای کنترل کامل سنسورهای طاقچه create_power_led (0، 255)؛} // green power ledvoid disconnect () {stop ()؛ // stop move_disconnect ()؛} void back_away () {back () ؛ خواب (روشن) ؛ stop ()؛} void rotate_l () {create_spin_CCW (speeda)؛ وقت خواب)؛ stop ()؛} void rotate_r () {create_spin_CW (speeda)؛ وقت خواب)؛ stop ()؛} void stop () {create_drive (0 ، مستقیم) ؛} void back () {create_drive (back_s ، straight)؛} void ready () {set_servo_position (بازو ، a_down) ؛} بررسی خلاء () {set_servo_position (cam، track_c)؛} void far () {set_servo_position (cam، track_f)؛} void ledge () {set_servo_position (بازو ، گرفتار شده است)؛} void throw () {int a؛ برای (a = 50؛ a> = 30؛ a- = 1) {// آماده set_servo_position (بازو ، a) ؛} set_servo_position (بازو ، شلیک) ؛} void grab () {int a؛ for (a = 0؛ a <= hold؛ a+= 1) {// بازو را به آرامی بالا ببرید set_servo_position (بازو ، a)؛}} void down () {set_servo_position (cam، track_d)؛} void find () {set_servo_position (cam، track_find)؛} void start_a () {pida = start_process (جلوگیری از ())؛} void start_b () {pidb = start_process (track_ball ())؛} void start_c () {pidc = start_process (find_basket ()) ؛} void kill (int pid) {CREATE_BUSY؛ // منتظر بمانید تا روند ایجاد فعلی به پایان برسد و اولویت kill_process (pid) را در نظر بگیرید. CREATE_FREE ؛ // من کارم را متوقف کردم () ؛} void shmang_left () {کشتن (pidb) ؛ // توقف همه چیز دیگر کشتن (pidc) ؛ طاقچه () ؛ // چنگال را بردارید تا روی میز گیر نکند {// اگر من توپ را دارم start_c ()؛} // شروع ردیابی هدف در غیر این صورت (! have_ball) {// اگر من توپ را ندارم start_b ()؛} // شروع ردیابی توپ} void shmangia_right () {کشتن (pidb) ؛ کشتن (pidc) ؛ طاقچه ()؛ back_away ()؛ rotate_r ()؛ آماده()؛ if (have_ball) {start_c ()؛} دیگری اگر (! have_ball) {start_b ()؛}} void back_left () {create_drive_direct (back_f، back_sl)؛} void back_right () {create_drive_direct (back_sl، back_f)؛}

مرحله 6: آیا ارزشش را داشت؟

هزینه ها عبارتند از: ایجاد + باتری + سند = 260 دلار کیت راه اندازی XBC (xbc ، cam ، آجر LEGO ، سنسور) = 579 دلار PVC + رنگ + پیچ = حدود 20 دلار هزینه کل = 859 دلار من قبلاً کیت راه اندازی XBC را از Botball داشتم ، بنابراین هزینه برای من هزینه ایجاد بود. من فکر می کنم که ارزشش را داشت و بهترین قسمت این است که اگر بتوانم خودم را به این ربات متصل کنم ، همه قسمتهایی که استفاده کردم قابل استفاده مجدد هستند. این ویدئو اجتناب از روال زیر را نشان می دهد ، روی میز این ویدئو نشان می دهد که ربات 5 توپ نارنجی را در یک گل به ثمر می رساند. من فقط به سرعت بخشیدن به این روند کمک کردم ، در نهایت توپ 5 به تنهایی پیدا می شد.

مرحله 7: نتیجه گیری

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

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

توصیه شده: