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


1. اساس برنامه الگوریتم است.

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

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

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

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

برگردیم سر کار حال چگونه اقدامات ربات مینی سومو را در رینگ برنامه ریزی کنیم؟ ما قوانینی داریم که در آن هدف به وضوح مشخص شده است - "حریف را به بیرون از رینگ فشار دهید." اما برای رسیدن به آن باید عوامل خاصی را در نظر گرفت. عامل اصلی این است که از خود دایره فراتر نرویم یا به عبارت دقیق تر از مرز سفید دایره فراتر نرویم. این چیزی است که ما به دست آوردیم:

برنج. 1 الگوریتم رفتار ربات در حلقه.

در شکل 1 یک بلوک دیاگرام را مشاهده می کنید. با تمام حقوق، این روشی مرسوم است که الگوریتم‌ها را بنویسند. واضح و قابل فهم.

بلوک اول "شروع" است. از این لحظه، برنامه پس از روشن شدن ربات، شروع به اجرای اقدامات ربات می کند. اولین کاری که او باید انجام دهد این است که دشمن، بلوک "Target Search" را پیدا کند. بلوک بعدی طرح ما به شکل لوزی "هدف پیدا شد؟" است. این بدان معنی است که ما برای دستیابی به یک رویداد خاص، انتخابی از اقدامات خواهیم داشت. اگر هدف پیدا شد (بله)، اجرای برنامه را ادامه می‌دهیم و به قسمت بعدی برنامه حمله می‌رویم، اما اگر هدف پیدا نشد (خیر)، منطقی‌تر است که ادامه دهیم. در جستجوی آن برنامه در این لحظه تا زمانی که ربات دشمن را شناسایی کند، حلقه خواهد شد. هنگام حمله، ربات به سمت حریف به جلو حرکت می کند و سعی می کند او را از رینگ بیرون بکشد، در این لحظه "آیا به لبه رینگ رسیدید؟" به بلوک بعدی "Drive Back" و "Reversal" ادامه می یابد. پس از چرخش، چرخه برنامه اصلی تکرار می شود، یعنی از همان ابتدا شروع می شود و ربات دوباره به دنبال دشمن می گردد. این کار به دلیلی انجام شد. اگر در زمان حمله، دشمن موفق شد از دست ربات ما فرار کند، پس باید بدون خروج از لبه رینگ به جستجوی او برگردیم. همه چیز با تئوری بیایید به سراغ تمرین برویم.

2. قوانین نوشتن برنامه برای آردوینو.

با اینکه گفتم قسمت تئوری تموم شده ولی باید اصل برنامه ساختن رو مطالعه کنیم میکروکنترلرهای آردوینو، اگرچه این اصول برای سایر MKهای خانواده AVR صادق خواهد بود.

برنج. 2 روش نوشتن برنامه برای آردوینو.

این بلوک دیاگرام به وضوح به ما نشان می دهد که چیست نکات مهم، و به چه ترتیبی باید هنگام نوشتن برنامه رعایت شود.

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

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

3. ابزار توسعه آردوینو IDE.

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

ما برنامه را راه اندازی می کنیم. نصب صحیح کتابخانه را بررسی می کنیم، به منوی "فایل" - "نمونه ها" بروید. تقریباً در پایین، مورد اولتراسونیک باید مانند شکل ظاهر شود. 3.

برنج. 3 بررسی کنید که کتابخانه اولتراسونیک به درستی نصب شده باشد.

اگر همه چیز خوب است، به مورد "سرویس" - "پرداخت" بروید. ما باید برد خود را انتخاب کنیم - Arduino Pro Mini 5v.

برنج. راه اندازی 4 برد کنترلر

پورت سریال باید همان پورتی که بعد از آن ظاهر می شود انتخاب شود اتصالات آردوینوبه کامپیوتر در مورد آردوینو پرو مینی باید کمی صحبت کرد. برخلاف سایر کنترلرهای خانواده آردوینو، Pro Mini ماژول اتصال کامپیوتر داخلی ندارد. به صورت جداگانه به صورت تابلو عرضه می شود. آداپتور USBبه UART(TTL) و با استفاده از چهار سیم به برد کنترلر متصل می شود.

برنج. 5 آداپتور USB-UART (TTL).

روی انجیر 6 نحوه اتصال صحیح کنترلر و آداپتور را نشان می دهد.

برنج. 6. اتصال کنترلر به آداپتور USB-UART.

برخلاف اتصال دریافتی خطوط سیگنال، به جای RX-TX و TX-RX، این خطوط باید مستقیماً متصل شوند: RX-RX، TX-TX. اولین باری که آداپتور را به رایانه خود وصل می کنید، درایورهای دستگاه به طور خودکار شروع به نصب می کنند. باید منتظر بمانید تا نصب تمام شود. یکی دیگر از ویژگی های کنترلر عدم وجود نرم افزار است بازنشانی کنیددر زمان برنامه نویسی البته این کمی ناخوشایند است، اما برای امتناع از Pro Mini کافی نیست. کافی است پس از تغییر کتیبه "Compiling" به "Download"، دکمه Reset را روی کنترلر فشار دهید، شکل. 7.

برنج. 7. نمایش اطلاعات در مورد پیشرفت برنامه نویسی MK.

4. کد را می نویسیم.

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

برنج. 8. نوشتن بلوک اولیه برنامه.

بلوک اول: دستورالعمل # کتابخانه کنترل ماژول را به پروژه ما متصل می کند.

بلوک دوم: متغیرها را اعلام می کنیم و مقادیر اولیه را برابر با صفر در آنها می نویسیم. لطفاً توجه داشته باشید که ما نامی برای پورت های خروجی MK ایجاد نمی کنیم. من عمدا آنها را به صورت دیجیتال گذاشتم تا شما به راحتی به آنها مراجعه کنید مدار. در این بلوک، ما فقط سه متغیر را اعلام می کنیم - اینها حسگرهای چپ و راست حلقه (_ و _) هستند، آنها مقادیر ADC را ذخیره می کنند. و همچنین متغیر فاصله مسافت یاب اولتراسونیک (_)، فاصله تا مانع را بر حسب سانتی متر ثبت می کند.

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

بلوک سوم: ()، در آن تمام ورودی ها و خروجی های میکروکنترلر را پیکربندی می کنیم. سیگنال های ورودی را در پورت های 15، 17 دریافت خواهیم کرد، بنابراین (ورودی) را به آنها اختصاص می دهیم. ما چهار پورت برای کنترل موتورها داریم: 3.5 برای موتور سمت چپ و 6.9 برای موتور سمت راست، آنها را به عنوان خروجی اختصاص می دهیم.

چرا برای یک موتور از دو پورت استفاده می کنیم؟ همه چیز ساده است؛ اگر ولتاژ به کنتاکت های موتور اعمال شود، در یکی از جهت ها، مثلاً در جهت عقربه های ساعت، شروع به چرخش می کند. اما اگر قطبیت را تغییر دهید، یعنی. "بعلاوه" و "منهای" را تغییر دهید - شفت موتور در جهت دیگر می چرخد. ما از این ویژگی برای مانورهای تمام عیار استفاده خواهیم کرد.

5. حلقه اصلی حلقه.

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

ساختار چرخه خود را بر اساس الگوریتم شکل 1 در نظر بگیرید. 9

برنج. 9. الگوریتم حلقه اصلی.

از همان ابتدا، ما باید قرائت همه سنسورها را بدست آوریم، برای این کار ما زیر روال را می نامیم:

void check_sensor() // زیر برنامه برای بررسی سنسورها.

R_Sensor=analogRead(15); // قرائت مناسب حسگر را بخوانید

L_Sensor=analogRead(17); // خواندن سنسور سمت چپ

تاخیر (10); //تاخیر برای اتمام تبدیل ADC

dist_cm = ultrasonic.Ranging(CM); // قرائت فاصله یاب اولتراسونیک را بخوانید

تاخیر (10); // تاخیر در تکمیل تبدیل

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

void go_left() // یک هدف را جستجو کنید یا به چپ بروید

analogWrite(5, 100); //موتور چپ

analogWrite(6, 100); //موتور راست

مقدار قدرت موتورها تقریباً نصف می شود ، اگر خیلی سریع بچرخیم ، می توانیم با اینرسی از هدف شناسایی شده بگذریم.

اگر هدف شناسایی شد، باید به آن حمله کنیم و با سرعت تمام به جلو حرکت کنیم.

void go_forward() //Attack - حرکت رو به جلو

analogWrite(3, 0); //موتور چپ

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

go_stop(); // متوقف کردن

تاخیر (100); //10 میلی‌ثانیه صبر کنید

برگرد()؛ // برو عقب، حرکت کن به عقب

تاخیر (1000); //1 ثانیه.

رفتن سمت راست()؛ //بپیچ ​​به راست

تاخیر(300); //300 میلی‌ثانیه

برو جلو()؛ //به جلو حرکت کن

تاخیر(300); //300 میلی‌ثانیه

void go_stop() //stop

analogWrite(5, 255); //موتور چپ

analogWrite(9, 255); //موتور راست

void go_back () //برگشت

analogWrite(3, 255); //موتور چپ

analogWrite(6, 255); //موتور راست

analogWrite(9, 0); //موتور راست

void go_right () //جستجوی هدف یا حرکت به سمت راست

analogWrite(3, 100); //موتور چپ

analogWrite(5, 0); //موتور چپ

analogWrite(6, 0); //موتور راست

analogWrite(9, 100); //موتور راست

void go_forward() //حمله به جلو

analogWrite(3, 0); //موتور چپ

analogWrite(5, 255); //موتور چپ

analogWrite(6, 0); //موتور راست

analogWrite(9, 255); //موتور راست

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

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

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

آرشیو 1

آرشیو 2به مقاله "برنامه ربات مینی سومو".

اگر سؤالی دارید، در FORUM یا در چت آنلاین در مورد روباتیک بنویسید، ما در مورد آنها بحث خواهیم کرد!

توجه! کپی برداری کامل یا جزئی از مطالب بدون اجازه مدیریت ممنوع!

سلام! آیا دوست دارید رباتی را مونتاژ کنید که مونتاژ آن سخت نباشد؟ شما جای درست آمده اید! =) در سایت ما است که می توانید مقالات مفصلی در مورد مونتاژ مرحله به مرحله اولین ربات خود و همچنین بسیاری از ربات های دیگر و حتی برای مسابقات پیدا کنید.

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

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

سومو- یکی از هیجان انگیزترین مسابقه ربات Lego Ev3. در این مسابقه ربات باید ربات حریف را بدون خروج از دایره به بیرون هل دهد.

در همان ابتدای مسابقه، ربات ها در مرکز دایره قرار می گیرند، پس از لایه برنامه ها راه اندازی می شوند و روبات ها باید 3 ثانیه منتظر بمانند، پس از آن ربات ها باید به مرز دایره برسند و تنها پس از آن می توانند فرصت حمله به دشمن این پورتال شامل طرح‌هایی از ربات‌ها برای دستورالعمل‌های مونتاژ و سومو لگو است

بیایید توصیف کنیم الگوریتم و برنامه سوموبرای ربات EV3

1 اقدام

ربات 3 ثانیه صبر می کند، ما از مرکز دایره به سمت مرز دور می شویم، به جلو می رویم، می چرخیم، به دنبال دشمن می گردیم، به سمت دشمن می رویم، اگر از مرز رانندگی کنیم، پس برمی گردیم.

زمان انتظار را روی 3 ثانیه تنظیم کنید.

2 اقدام. به سمت مرز برمی گردیم.


3 عمل. پس از اینکه ربات به سمت مرز حرکت کرد، باید به جلو حرکت کند. حرکت رو به جلو.

4 اقدام. ما یک حلقه بی نهایت راه اندازی کردیم. ربات تا زمانی که به بیرون رانده شود یا زمان مسابقه تمام شود به دشمن حمله خواهد کرد.

ما یک چرخه چرخش را با یک سنسور اولتراسونیک در آن قرار می دهیم. (می توانید از سنسور مادون قرمز نیز استفاده کنید)


5 اقدام. جلو می رویم تا زمانی که حسگر رنگ یک خط سیاه یعنی مرز دایره را ببیند.

6. اقدام پس از دیدن مرز به عقب برمی گردیم.

ورزش.

حرکت برگشت را خودتان با استفاده از درس 1 بنویسید.

هی Geektimes!

مقدمه

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

کمی در مورد تیم ما

ما از سال 2014 وجود داریم. برندگان و برندگان جوایز اکثر مسابقات Robofinist، Robofest، MIPT Spartakiad و تورنمنت های کوچکتر، و همچنین ما قهرمان مطلق روسیه برای 2016-2017 در نامزدی مینی سومو هستیم.

اصلا این ربات های سومو چه کسانی هستند؟

در ابتدا، زمانی که ما برای اولین بار با چنین مسابقاتی آشنا شدیم، کشتی گیران سومو عمدتاً از لگو ساخته می شدند. اما این یک ایده بسیار بد است، بعداً در مورد آن توضیح خواهیم داد.

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

4 نوع وجود دارد:

1. مگا کشتی گیر سومو
2. کشتی گیر مینی سومو
3. کشتی گیر کوچک سومو
4. کشتی گیر نانو سومو

همه افراد نه تنها از نظر بیرونی، بلکه از نظر درونی نیز متفاوت هستند.

مگا - بزرگترین و خطرناک ترین ربات ها. حداکثر وزن تا 3 کیلوگرم است، توانایی قرار دادن "مکنده" های مختلف، که با ربات های دیگر مجاز نیست.

مینی - ربات های کوچک دلپذیر تا 500 گرم 10 در 10 سانتی متر لحیم کاری سخت نیست، نصب و مونتاژ آسان است. آنها محبوب ترین نامزدی در سومو هستند.

میکرو و نانو - کپی های کوچک کاهش یافته. میکرو 5x5x5، نانو 2.5x2.5x2.5. لحیم کاری و برداشتن قطعات مشکل است. محبوب تر از مگا سومو.

آن ها از چه چیزی ساخته شده اند؟

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

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

اطلاعات بیشتر در مورد مونتاژ و بسته بندی

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

سخت ترین کار (علاوه بر برنامه نویسی) طراحی ربات است.

مرحله اول



این همان چیزی است که اولین مرحله نامیده می شود - قرار دادن موتورها و سنسورها. شما همچنین می توانید در اینجا دو سنسور کوچک در جلوی قلاب مشاهده کنید، بنابراین اینها سنسورهای خط هستند.

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

فاز دوم



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

در اینجا به نظر می رسد که روی تخته تمام شده چگونه است:

تخته تمام شده



ربات آماده اجرا:

همانطور که می بینید، هیچ چیز پیچیده ای در اینجا وجود ندارد. در مورد مشکلات زیر

بیایید به سراغ برنامه نویسی برویم

ساده ترین راه استفاده از کنترلرهای آردوینو یا سازگار با آردوینو است. همچنین آردوینو IDE به ما کمک می کند. توسط طرح استانداردربات دارای 5 حسگر است. بنابراین ایالت ها می توانند باشند

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

برای اینکه آن را به سمت دشمن برسانیم، فقط باید پین ها را نصب کنیم، به موتورها ولتاژ اعمال کنیم و قرائت سنسور را بخوانیم:

کد ربات

// تنظیم پین برای سنسورها int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // پین های موتور int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_right_forward=3; int pin_motor_right_back=5; // متغیرهایی برای ذخیره نتیجه سنسورهای نظرسنجی int cl,cc,cr,l,r; // عملکرد سنسورهای نظرسنجی void GLAZ() (cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right);) // Function حرکت، پذیرش سرعت از 0 تا 255 برای تغذیه هر موتور MOVE (int a, int b) ( if(a<0) { digitalWrite(pin_motor_left_forward,LOW); analogWrite(pin_motor_left_back,0-a); } else { analogWrite(pin_motor_left_forward,a); digitalWrite(pin_motor_left_back,LOW); } if(b<0) { digitalWrite(pin_motor_right_forward,LOW); analogWrite(pin_motor_right_back,0-b); } else { digitalWrite(pin_motor_right_back,LOW); analogWrite(pin_motor_right_forward,b); } } void setup() { pinMode (pin_center,INPUT);//центральный pinMode (pin_right, INPUT);//правый датчик pinMode (pin_left,INPUT);//левый датчик pinMode (pin_center_right, INPUT);//передний правый датчик pinMode (pin_center_left,INPUT);//передний левый датчик pinMode (pin_line_left, INPUT); pinMode (pin_line_right, INPUT); pinMode (pin_start,INPUT);//старт pinMode (13,OUTPUT);//старт digitalWrite(13,HIGH); pinMode (pin_motor_left_back, OUTPUT);//мотор лево назад pinMode (pin_motor_right_forward, OUTPUT);//мотор право вперед pinMode (pin_motor_right_back, OUTPUT);//мотор правый назад pinMode (pin_motor_left_forward,OUTPUT);//мотор лево вперед // ожидание сигнала к началу схватки while(!digitalRead(pin_start))continue; MOVE(200,200); } void loop() { GLAZ(); if(l && r) { if((cl + cc + cr) < 2 || !cc){ MOVE(255,255); } if(cc) { if(!cl && cr) MOVE(0-180,180); if(cl && !cr) MOVE(180,0-180); } } else if(cc + cr + cl == 3) { if(!l && r) MOVE(0-200,200); if(!r && l) MOVE(200,0-200); } else if(cc) { if(!l && !cl && cr && r) MOVE(0-150,150); if(l && cl && !cr && !r) MOVE(150,0-150); } if(!digitalRead(pin_start))while(1){MOVE(0,0);} }


شما فقط باید کد را بهبود بخشید.

مهم!
سنسورها اگر چیزی نبینند عدد 1 و اگر مانعی وجود داشته باشد عدد 0 را برمی‌گردانند.

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

ارزش در نظر گرفتن دارد

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

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

همچنین چرخ ها را فراموش نکنید. منحنی ها، نازک و کشویی کار نمی کنند، شما به سادگی نمی توانید مانور دهید و لحظه نیروی کافی وجود نخواهد داشت. حتما لاستیک ها را تست کنید.

هنگام کار با موتورها، به خاطر داشته باشید که آنها باید تحت حداکثر بار کار کنند و اغلب می سوزند.

همچنین ساخت باتری های قابل جابجایی منطقی است، زیرا. ربات به سرعت تخلیه می شود و زمان زیادی طول می کشد تا شارژ شود.

لیست خریدهای ضروری:

1. آهن لحیم کاری، لحیم کاری، شار (اختیاری)
2. تخته های Textolite (برای حکاکی کردن، باید تمام مسیرها را ببندید، سپس همه آن را برای چند ساعت در محلول پراکسید هیدروژن + اسید سیتریک + نمک قرار دهید، و سپس کاغذ را پاره کنید، به عنوان مثال، که زیر آن آهنگ ها قرار داشت. پنهان)
3. سنسورهای شارپ 340
4. موتورها را به سلیقه انتخاب کنید، هر چه دور در دقیقه بیشتر باشد، بهتر است.
ارزش انتخاب یکی از این موارد را دارد: polulu. (اضافه)
5. باتری (من به شما توصیه می کنم لیتیوم پلیمر بگیرید) + ایستگاه شارژ
6. کلید (دکمه سوئیچ، لحیم شده به برد) و عناصر الکتریکی (در تصویر با ردیابی وجود دارد)
7. راننده
8. کنترلر، برای شروع، می توانید Polulu A-Star 32u4 micro را امتحان کنید و بوت لودر آردوینو را در آنجا آپلود کنید.
9. ورق فلزی برای بدنه
10. سوراخ های روی تخته را دریل کنید
11. ماژول لانچر و استارتر
P.S. اگر چیزی را از قلم انداختم - بنویسید، آن را اصلاح می کنم.

رقابت

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

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

چنین مسابقاتی در خارج از کشور غیر معمول نیست و ما نیز می خواهیم به آنجا برسیم. در اینجا نقشه تقریبی مسابقات در سراسر جهان است:

ما واقعا امیدواریم که ربات سومو فقط در کشور ما توسعه یابد و از همه دعوت می کنیم تا در ساخت ربات ما شرکت کنند. وقتی تکه‌هایی از یک ربات خارج می‌شوند، بسیار حماسی به نظر می‌رسد.

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

1. قوانین عمومی

1.1. ربات باید ربات حریف را از خط سیاه (خارج از محدوده) خارج کند.

1.2. پس از شروع مسابقه، ربات ها باید تا زمان برخورد به سمت یکدیگر حرکت کنند.

1.3. پس از برخورد، ربات ها باید سعی کنند با یکدیگر تماس برقرار کنند.

1.4. در طول مسابقه، اعضای تیم نباید ربات ها را لمس کنند.

1.5. دو ربات خودمختار در حلقه (میدان گرد) قرار می گیرند. روبات ها سعی می کنند حریف را به بیرون از رینگ هل دهند.

1.6. رباتی که بیشتر راندها را برد برنده مسابقه است.

1.7. هنگام بازی "هرکدام با هرکدام"، بهترین ربات در نظر گرفته می شود که بیشترین مسابقات را برده است.

1.8. با تعداد زیادی شرکت کننده، امکان سازماندهی رتبه بندی بر اساس "نظام المپیک" (برای خروج) وجود دارد.

2. ربات

2.1. ربات ها باید فقط با استفاده از قطعات LEGO Mindstorms ساخته شوند.

2.2. در کل دور:

اندازه ربات نباید بیشتر از 25x25x25 سانتی متر باشد.

وزن ربات نباید بیش از 1 کیلوگرم باشد.

2.3. رباتی که از نظر داوران به طور عمدی به ربات های دیگر آسیب برساند و یا به سطح زمین آسیب برساند، در تمام مدت مسابقه محروم خواهد شد.

2.4. استفاده در طراحی ربات به شدت ممنوع است:

چسب ها

2.5. قبل از مسابقه، ربات ها از نظر ابعاد و وزن بررسی می شوند.

2.6. ربات ممکن است برنامه های متعددی داشته باشد که اپراتور می تواند هر دور را از بین آنها انتخاب کند.

2.7. بین مسابقات، تغییر طراحی و برنامه های روبات ها مجاز است.

3. رشته

3.1. دایره سفید به قطر 1 متر با حاشیه سیاه به ضخامت 5 سانتی متر.

3.2. در دایره، مناطق شروع ربات ها با نوارهای قرمز مشخص شده است.

3.3. نقطه قرمز مرکز دایره را مشخص می کند.

3.4. زمین بر روی یک سکو با ارتفاع 16 میلی متر قرار می گیرد.

4. برگزاری مسابقات

4.1. مسابقات شامل یک سری مسابقات است. مسابقه تعیین می کند که کدام یک از دو ربات شرکت کننده در آن قوی تر است. این مسابقه شامل 3 راند 30 ثانیه ای است. مسابقه توسط روباتی برنده می شود که بیشترین راندها را برد. قاضی ممکن است از یک دور اضافی برای روشن کردن شرایط مورد مناقشه استفاده کند.

4.2. راندها به صورت متوالی برگزار می شود.

4.3. در ابتدای راند، ربات ها پشت نوارهای قرمز رنگ (از مرکز حلقه) در نواحی شروع خود قرار می گیرند، تمام قسمت های ربات که زمین را لمس می کند باید داخل منطقه شروع باشد.

4.4. به دستور داور، سیگنالی برای راه اندازی ربات ها داده می شود، در حالی که اپراتورهای روبات ها باید برنامه را روی ربات ها شروع کنند و در عرض 5 ثانیه بیش از 1 متر از زمین فاصله بگیرند. در همان 5 ثانیه، ربات ها باید در یک خط مستقیم حرکت کنند و با یکدیگر برخورد کنند.

4.5. برای مبتدیان: پس از برخورد، ربات ها نمی توانند در اطراف حلقه مانور دهند.

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

4.7. اگر ربات ها در عرض 5 ثانیه پس از شروع راند با هم برخورد نکنند، رباتی که به دلیل نظر قاضی، برخوردی نداشته باشد، بازنده راند محسوب می شود. اگر ربات ها در یک خط مستقیم حرکت می کنند و در 5 ثانیه زمان برای برخورد ندارند، نزدیک ترین ربات به منطقه شروع خود بازنده راند در نظر گرفته می شود.

5. قوانین انتخاب برنده

5.1. اگر ربات بیش از 10 ثانیه بدون تماس با ربات دیگری حرکت نکند، بازنده راند محسوب می شود.

5.2. هنگام لمس هر قسمت از ربات (حتی که به ربات متصل نیست) فراتر از مرز مشکی، ربات دور را از دست می دهد.

5.3. اگر در پایان دور هیچ رباتی از دایره به بیرون هل داده نشود، نزدیکترین ربات به مرکز دایره برنده دور در نظر گرفته می شود.

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

6. داوری

6.1. برگزارکنندگان این حق را برای خود محفوظ می دارند که در صورتی که این تغییرات مزیتی برای یکی از تیم ها ایجاد نکند، در قوانین مسابقه تغییراتی ایجاد کنند.

6.2. کنترل و جمع بندی طبق قوانین فوق توسط هیئت داوران انجام می شود.

6.3. داوران در تمام مسابقات دارای اختیارات کامل هستند. همه شرکت کنندگان باید به تصمیمات خود پایبند باشند.

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

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

6.6. اعضای تیم و رهبر نباید از نظر فیزیکی و یا از راه دور در اعمال ربات تیم خود یا ربات حریف دخالت کنند. تداخل منجر به رد صلاحیت فوری می شود.

6.7. اگر ربات نتواند در مدت 10 ثانیه به حرکت خود ادامه دهد، داور ممکن است به صلاحدید خود مسابقه را پایان دهد.

12.2. طراحی ربات برای مسابقه "سومو".

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

با این وجود، بیایید روی هدف خود تمرکز کنیم: یکی از حسگرهایی که قادر به تشخیص اشیاء در فاصله (مادون قرمز یا اولتراسونیک) است همچنان به ما کمک می کند تا به دنبال حریف باشیم و مرز سیاه میدان را با استفاده از یک سنسور رنگی به موقع تعیین خواهیم کرد. بنابراین، برای ایجاد و اشکال زدایی برنامه ربات سومو، پیشنهاد می کنیم از همان رباتی استفاده کنید که برای درس شماره 11 - Kegelring آماده کردیم.

به منظور محافظت از سنسور واقع در جلو از تعامل با حریف، یک ضربه گیر می سازیم و آن را روی ربات خود تعمیر می کنیم. در زیر دستورالعمل‌های دقیق ساختمان برای هر دو لگو ذهنی طوفان‌های خانگی و آموزشی EV3 آورده شده است. با خیال راحت آزمایش کنید و طرح خود را ارائه دهید.

Lego Mindstorms EV3 Home

Lego Mindstorms EV3 Education

عنصر حاصل را روی پرتو جلویی ربات خود ثابت می کنیم.

Lego Mindstorms EV3 Home

Lego Mindstorms EV3 Education

ربات آموزشی ما آماده است. بیایید شروع به ایجاد یک برنامه ربات سومو کنیم. اگر فرصتی برای اشکال زدایی برنامه با استفاده از یک ربات دیگر داشته باشید عالی است! اگر نه، پس اشکالی ندارد: می توانید به عنوان حریف، به عنوان مثال، از یک مدل ماشین رادیویی یا همان اسکیت های کگلرینگ استفاده کنید.

12.3. ایجاد یک برنامه برای مسابقه "سومو".

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

وقت آن است که پروژه خود را در محیط برنامه نویسی آپلود کنیم "درس-2"، یک برنامه جدید در آن ایجاد کنید درس-12و ربات را به محیط برنامه نویسی متصل کنید.

مدل رفتاری یک کشتی گیر سومو را می توان به دو بخش تقسیم کرد: جستجوی حریفو حمله حریف. بیایید با اجرای قسمت اول شروع کنیم - جستجوی حریف.

بیایید به طور مفصل دنباله اقدامات ربات خود را در هنگام شناسایی حریف در زمین شرح دهیم:

  1. حول محور خود بچرخانید تا زمانی که حسگر واقع در جلو حریف را تشخیص دهد.
  2. جلوی حریف بایستد

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

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

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

در "صفحه سخت افزار"، که در گوشه سمت راست پایین محیط برنامه نویسی قرار دارد، تب را انتخاب کنید "نمای پورت" (شکل 1، 2 موقعیت 1)و با تنظیم حالت نمایش مناسب قرائت ها، قرائت سنسوری را بگیرید که فاصله تا حریف را تعیین می کند.

در مورد ما، سنسور اولتراسونیک در حالت است "فاصله بر حسب سانتی متر"ارزش را نشان می دهد - 56.1 (شکل 1 موقعیت 2) 57 .

برنج. یکی

سنسور مادون قرمز در حالت "تقریبی"ارزش را نشان می دهد - 68 (شکل 2 موقعیت 2). برای مقدار آستانه، عدد را می گیریم - 70 .

برنج. 2

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

سنسور اولتراسونیک

  1. "پالت سبز" "روشن کن" "ب"برابر با -30 ، مقدار توان برای پورت "C"برابر با 30 (شکل 3 موقعیت 1).
  2. برای جستجوی حریف، از بلوک برنامه در حالت استفاده کنید "سنسور اولتراسونیک - مقایسه - فاصله بر حسب سانتی متر" 57 (شکل 3 موقعیت 2).
  3. موتورها را خاموش کنید (شکل 3 موقعیت 3).

برنج. 3

سنسور مادون قرمز

  1. برای اینکه ربات حول محور خود بچرخد، از بلوک برنامه استفاده می کنیم "کنترل موتور مستقل" "پالت سبز"، حالت عملیات بلوک را تنظیم کنید "روشن کن"، مقدار توان برای پورت "ب"برابر با -30 ، مقدار توان برای پورت "C"برابر با 30 (شکل 4 موقعیت 1).
  2. برای جستجوی حریف از بلوک برنامه استفاده می کنیم "انتظار" "پالت نارنجی"در حالت "سنسور مادون قرمز - مقایسه - تقریب"،با مقدار آستانه عملکرد سنسور برابر است 70 (شکل 4 موقعیت 2).
  3. بعد از اینکه ربات مقابل حریف قرار گرفت، با استفاده از بلوک برنامه "کنترل موتور مستقل" "پالت سبز"موتورها را خاموش کنید (شکل 4 موقعیت 3).

برنج. چهار

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

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

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

بیایید به اجرای مرحله ای الگوریتم ادامه دهیم حملات حریف: برای این کار یک برنامه موقت در پروژه ایجاد می کنیم درس-12-1و شروع به پر کردن آن با بلوک های برنامه کنید.

  1. بیایید یک بلوک برنامه بگیریم "چرخه" "پالت نارنجی".
  2. داخل بلوک "دوره"یک بلوک برنامه قرار دهید "کنترل موتور مستقل" "پالت سبز" "روشن کن" (شکل 5 موقعیت 1)، قدرت موتور "ب"و "C"حداکثر مقدار را تنظیم کنید - 100 (شکل 5 موقعیت 2).

برنج. 5

  1. پشت بلوک "کنترل موتور مستقل"بلوک برنامه را قرار دهید. حالت عملیات بلوک را روی "مقایسه - شدت نور منعکس شده" (شکل 6)

برنج. 6

در این حالت برنامه بلوک می شود "حسگر رنگ" "پالت زرد"از نظر بصری بسیار شبیه به بلوک نرم افزاری است "انتظار" "پالت نارنجی"در حالت "سنسور رنگ - مقایسه - شدت نور منعکس شده". اما بر خلاف بلوک "انتظار"، این بلوک برنامه منتظر شرایط مشخص شده توسط پارامترها نمی ماند "نوع مقایسه" (شکل 7 جایگاه 1)و "مقدار آستانه" (شکل 7 موقعیت 2)، و بلافاصله یک مقدار بولی می دهد ( "درست است، واقعی"یا "دروغ") در پارامتر خروجی و مقدار اندازه گیری شده در پارامتر خروجی "روشنایی" (شکل 7 موقعیت 4).

گزینه ها "نوع مقایسه"و "آستانه"بر روی برنج. 7 پوز 12 "نتیجه مقایسه" (شکل 7 جایگاه 3)یک مقدار بولی داد "درست است، واقعی"هنگامی که سنسور رنگ از مرز سیاه حلقه عبور می کند.

برنج. 7

  1. در صورت استفاده از سنسور اولتراسونیک در پشت دستگاه "سنسور رنگ"بلوک نرم افزار را نصب کنید "سنسور اولتراسونیک" "پالت زرد". حالت عملیات بلوک را روی "مقایسه - فاصله در سانتی متر" (شکل 8 موقعیت 1). پارامتر "نوع مقایسه" (شکل 8 جایگاه 2)، پارامتر "مقدار آستانه" (شکل 8 موقعیت 3)به گونه ای تنظیم کنید که پارامتر خروجی "نتیجه مقایسه" (شکل 8 جایگاه 4)یک مقدار بولی داد "درست است، واقعی"

برنج. هشت

در صورت استفاده از سنسور مادون قرمز در پشت دستگاه "سنسور رنگ"بلوک نرم افزار را نصب کنید "سنسور مادون قرمز" "پالت زرد". حالت عملیات بلوک را روی "مقایسه - تقریب" (شکل 9 جایگاه 1). پارامتر "نوع مقایسه" (شکل 9 موقعیت 2)، پارامتر "مقدار آستانه" (شکل 9 موقعیت 3)به گونه ای تنظیم کنید که پارامتر خروجی "نتیجه مقایسه" (شکل 9 جایگاه 4)یک مقدار بولی داد "درست است، واقعی"در صورت از دست دادن بینایی توسط ربات حریف.

برنج. 9

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

برنج. ده

حالت بلوک برنامه انتخاب شده است "عملیات منطقی" "پالت قرمز"یکی از چهار عملیات روی داده های بولی را تعریف می کند: "و و)", "OR (OR)", "XOR"و "استثنا (نه)". Dپارامترهای ورودی va "آ"و "ب"(برای عملیات "استثنا (نه)"- یک پارامتر ورودی "آ") مقادیر ورودی را به بلوک برنامه منتقل کنید و مقدار حاصل توسط پارامتر خروجی تولید می شود "نتیجه". اگر قبلاً با عملیات منطقی روبرو نشده اید، می توانید با دانش اولیه در راهنمای پیوست شده در زیر اسپویلر آشنا شوید.

عملیات بولی

عملیات منطقی فقط بر روی مقادیر منطقی (داده) انجام می شود که یک مقدار منطقی نیز هست. یک مقدار بولی می تواند در یکی از دو حالت باشد: "درست است، واقعی"یا "دروغ". عملیات منطقی اغلب به شکل جدول نوشته می شود: "پارامتر ورودی 1" - "پارامتر ورودی 2" = "نتیجه". عملیات منطقی اجرا شده توسط بلوک برنامه "عملیات منطقی" "پالت قرمز"به صورت جدولی می توان به صورت زیر نوشت:

عملیات منطقی "AND (AND)"

نتیجه یک عملیات منطقی "و و)"یک ارزش وجود خواهد داشت "درست است، واقعی" "درست است، واقعی" "دروغ".

"آ" عمل "ب" نتیجه
"دروغ" "و و)" "دروغ" = "دروغ"
"دروغ" "و و)" "درست است، واقعی" = "دروغ"
"درست است، واقعی" "و و)" "دروغ" = "دروغ"
"درست است، واقعی" "و و)" "درست است، واقعی" = "درست است، واقعی"

عملیات منطقی "OR (OR)"

نتیجه یک عملیات منطقی "OR (OR)"یک ارزش وجود خواهد داشت "دروغ"فقط در صورتی که هر دو مقدار ورودی برابر باشند "دروغ"، در سایر موارد ارزش عملیات است "درست است، واقعی".

"آ" عمل "ب" نتیجه
"دروغ" "OR (OR)" "دروغ" = "دروغ"
"دروغ" "OR (OR)" "درست است، واقعی" = "درست است، واقعی"
"درست است، واقعی" "OR (OR)" "دروغ" = "درست است، واقعی"
"درست است، واقعی" "OR (OR)" "درست است، واقعی" = "درست است، واقعی"

عملیات منطقی "XOR"

نتیجه یک عملیات منطقی "XOR"یک ارزش وجود خواهد داشت "درست است، واقعی"فقط در صورتی که یکی از مقادیر ورودی برابر باشد "درست است، واقعی"، در سایر موارد ارزش عملیات است "دروغ".

"آ" عمل "ب" نتیجه
"دروغ" "XOR" "دروغ" = "دروغ"
"دروغ" "XOR" "درست است، واقعی" = "درست است، واقعی"
"درست است، واقعی" "XOR" "دروغ" = "درست است، واقعی"
"درست است، واقعی" "XOR" "درست است، واقعی" = "دروغ"

عملیات منطقی "Exception (NOT)"

عملیات بولی "استثنا (نه)"فقط برای یک مقدار ورودی اعمال می شود. نتیجه یک عملیات منطقی "استثنا (نه)"بالای مقدار ورودی مقدار مخالف است.

  1. پشت بلوک برنامه نویسی "سنسور اولتراسونیک"یا "سنسور مادون قرمز"یک بلوک برنامه قرار دهید "عملیات منطقی" "پالت قرمز".
  • پارامتر خروجی "نتیجه مقایسه"بلوک برنامه "حسگر رنگ" (شکل 11، 12 موقعیت 1) "آ"بلوک برنامه "عملیات منطقی" (شکل 11، 12 موقعیت 4).
  • پارامتر خروجی "نتیجه مقایسه"بلوک برنامه "سنسور اولتراسونیک (مادون قرمز)" (شکل 11، 12 موقعیت 2)اتصال با پارامتر ورودی "ب"بلوک برنامه "عملیات منطقی" (شکل 11، 12 موقعیت 5).
  • حالت عملیات بلوک برنامه "عملیات منطقی"تنظیم "OR (OR)" (شکل 11، 12 موقعیت 3). در این حالت، نتیجه عملیات منطقی مقدار را خواهد گرفت "درست است، واقعی"، فقط در صورت رعایت یکی از شرایط: سنسور رنگ از خط سیاه عبور کرده باشد، ربات حریف خود را از دست داده باشد.
  • با تنظیم حالت بلوک برنامه "دوره"به معنا "مقدار بولی" (شکل 11، 12 موقعیت 7)، پارامتر خروجی "نتیجه"بلوک برنامه "عملیات منطقی" (شکل 11، 12 موقعیت 6)اتصال با پارامتر ورودی "تا زمانی که حقیقت روشن شود"بلوک برنامه "دوره" (شکل 11، 12 موقعیت 8). این تنظیمات زمانی چرخه را کامل می کنند "درست است، واقعی"نتیجه یک عملیات منطقی

برنج. یازده


برنج. 12

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

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

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

برنامه تکمیل شده کشتی گیر سومو باید به طور متوالی حریف را در یک حلقه بی پایان جستجو کند و سپس به حریف حمله کند. اگر برای یک اضافه کوچک نباشد، می‌توان هر دو بخش برنامه را با هم ترکیب کرد. اگر ربات ما بالای مرز حلقه متوقف شد، قبل از شروع جستجو، ربات باید با کمی عقب نشینی، به داخل حلقه بازگردد. ما برنامه حمله خود را با کد زیر تکمیل خواهیم کرد: خارج از حلقه حمله، از بلوک برنامه استفاده خواهیم کرد. تغییر "پالت نارنجی". حالت عملیات مسدود کردن "تعویض"تنظیم "سنسور رنگ - مقایسه - شدت نور منعکس شده".گزینه ها "نوع مقایسه"و "آستانه"به همان روشی که قبلاً در بلوک برنامه استفاده شده بود تنظیم کنید "حسگر رنگ" "پالت زرد". بنابراین، اگر ربات ما بالای خط سیاه متوقف شود، اجرا به ظرف بالایی بلوک برنامه منتقل می شود. "تعویض". در ظرف بالایی است که بلوک برنامه را قرار می دهیم "فرمان" "پالت سبز"، با تنظیمات پارامتری که باعث می شود ربات یک دور موتورها را به عقب برگرداند. به ظرف پایین بلوک برنامه "تعویض"یک بلوک برنامه قرار دهید که موتورها را خاموش می کند (شکل 13). پس از آزمایش مجدد الگوریتم حمله، مطمئن خواهیم شد که پس از اینکه ربات سومو حریف را از رینگ به بیرون هل داد، او کمی به عقب برگشت.

برنج. 13

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

نتیجه:

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

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