সুচিপত্র:

IRobot ব্যবহার করে কিভাবে একটি স্বায়ত্তশাসিত বাস্কেটবল প্লেয়িং রোবট তৈরি করা যায় বেস হিসাবে তৈরি করুন: 7 টি ধাপ (ছবি সহ)
IRobot ব্যবহার করে কিভাবে একটি স্বায়ত্তশাসিত বাস্কেটবল প্লেয়িং রোবট তৈরি করা যায় বেস হিসাবে তৈরি করুন: 7 টি ধাপ (ছবি সহ)

ভিডিও: IRobot ব্যবহার করে কিভাবে একটি স্বায়ত্তশাসিত বাস্কেটবল প্লেয়িং রোবট তৈরি করা যায় বেস হিসাবে তৈরি করুন: 7 টি ধাপ (ছবি সহ)

ভিডিও: IRobot ব্যবহার করে কিভাবে একটি স্বায়ত্তশাসিত বাস্কেটবল প্লেয়িং রোবট তৈরি করা যায় বেস হিসাবে তৈরি করুন: 7 টি ধাপ (ছবি সহ)
ভিডিও: বীমের প্রাচীন রোবট! (irobot Roomba 606 রোবট ভ্যাকুয়াম ক্লিনার আনবক্সিং বৈশিষ্ট্য এবং সুইপিং) 2024, জুলাই
Anonim
কিভাবে একটি স্বায়ত্তশাসিত বাস্কেটবল প্লেয়িং রোবট তৈরি করা যায় একটি IRobot ব্যবহার করে একটি বেস হিসেবে তৈরি করুন
কিভাবে একটি স্বায়ত্তশাসিত বাস্কেটবল প্লেয়িং রোবট তৈরি করা যায় একটি IRobot ব্যবহার করে একটি বেস হিসেবে তৈরি করুন

IRobot ক্রিয়েট চ্যালেঞ্জের জন্য এটি আমার এন্ট্রি। আমার জন্য এই পুরো প্রক্রিয়ার সবচেয়ে কঠিন অংশটি রোবটটি কী করতে চলেছে তা নির্ধারণ করা ছিল। আমি তৈরি করার শীতল বৈশিষ্ট্যগুলি প্রদর্শন করতে চেয়েছিলাম, কিছু রোবো ফ্লেয়ার যুক্ত করার সময়। আমার সমস্ত ধারনা বিরক্তিকর কিন্তু দরকারী, অথবা শীতল এবং অবাস্তব শ্রেণীর মধ্যে পড়ে বলে মনে হয়েছিল। শেষ পর্যন্ত শীতল এবং অবাস্তব জয়লাভ করে এবং বাস্কেটবল খেলা রোবটের জন্ম হয়। কিছু চিন্তা করার পরে আমি বুঝতে পারি যে এটি ব্যবহারিক হতে পারে। ধরুন আপনি কমলা কাগজ ব্যবহার করেন এবং আপনার সমস্ত আবর্জনা ক্যানের সবুজ ব্যাকবোর্ড রয়েছে …

ধাপ 1: অ্যাকোয়ার পার্টস

প্রতিযোগিতার সময়সীমার কারণে, আমি যে অংশগুলি ব্যবহার করেছি তার বেশিরভাগই ছিল "অফ শেলফ"। ব্যবহৃত "স্টক" রোবট পার্টস: তৈরি করুন (x1)-iRobot www.irobot.com থেকে XBC V.3.0 (x1)-বটবল থেকে www.botball.org ক্রিয়েট-রুম্বা কেবল (x1)-বটবল থেকে www.botball.orgServo (x2)-বটবল থেকে www.botball.org শার্প রেঞ্জফাইন্ডার (x1)-বটবল থেকে www.botball.org অ্যাসোর্টেড লেগো ইট-লেগো থেকে www.lego.com6-32 মেশিন স্ক্রু (x4)-ম্যাকমাস্টার www.mcmaster থেকে.com "তৈরি" রোবট যন্ত্রাংশ ব্যবহার করা হয়েছে: 3/8 "পুরু এক্সট্রুড পিভিসি শীট - এই জিনিসগুলি অসাধারণ, কিন্তু আমি মনে করতে পারছি না যে এটি কোথা থেকে পেয়েছি, কিন্তু এটি ঠিক এই জিনিসগুলির মতো https://www.lynxmotion.com/Category.aspx? categoryID = 62 অন্যান্য অংশ: কমলা "POOF" বল - WalMart থেকে বাস্কেটবল গোল দেখতে ট্র্যাশ ক্যান - LowesGreen "ব্যাকবোর্ড" থেকে - অতিরিক্ত পিভিসি উজ্জ্বল সবুজ রং করা

ধাপ 2: অনন্য অংশ তৈরি করুন

অনন্য অংশ তৈরি করুন
অনন্য অংশ তৈরি করুন

একমাত্র অংশ যা আমাকে বানাতে হয়েছিল তা হল একটি প্লেট যা তৈরি করাতে লেগেছিল এবং লেগো স্পেসিং অফার করেছিল। লেগো ইটের গর্তের ব্যবধান 8 মিমি আলাদা, তবে সময় বাঁচানোর জন্য আমি দ্বিগুণ ব্যবধান করেছি। বহির্মুখী পিভিসি কাজ করার জন্য একটি বাতাস। এটি একটি ইউটিলিটি ছুরি দিয়ে কাটা যায়, কিন্তু তা অনমনীয় এবং শক্তিশালী। আমি প্রায়ই এই প্লেটের মাধ্যমে রোবটটি তুলি এবং আমার এখনও কোন সমস্যা হয়নি।

ধাপ 1: শীটটি 3.5 "x 9.5" করুন, আপনি এটি একটি ইউটিলিটি ছুরি দিয়ে কাটাতে পারেন। ধাপ 2: স্ক্রু তৈরির জন্য গর্তগুলি ড্রিল করুন। তৈরি স্ক্রু একটি বাক্স তৈরি করে যা 2 এবং 5/8 "8 এবং 5/8 দ্বারা"। ধাপ 3: লেগো ইটের ফাঁকযুক্ত গর্তগুলি ড্রিল করুন। একটি 3/16 "ড্রিল বিট ব্যবহার করুন এবং আমি গর্তগুলো 16 মিমি দূরত্বে রেখেছি। টিপ: আমি একটি সিএডি প্রোগ্রামে শীটটি রেখেছি, এটি পুরো আকারে মুদ্রণ করেছি এবং শীটে টেপ করেছি। তারপর আমি এটি কাটার জন্য একটি গাইড হিসাবে ব্যবহার করেছি এবং তুরপুন

ধাপ 3: রোবট একত্রিত করা

রোবট একত্রিত করা
রোবট একত্রিত করা
রোবট একত্রিত করা
রোবট একত্রিত করা
রোবট একত্রিত করা
রোবট একত্রিত করা

আমি যতটা সম্ভব সহজভাবে জিনিসগুলি তৈরি করতে উপভোগ করি, এইভাবে যখন তারা টেবিল থেকে লাফ দেয় তখন আপনাকে আর পুনর্গঠন করতে হবে না!

1. নতুন ধাঁচের প্লেটটি ক্রিয়েটের শীর্ষে টানুন 2. বল ধরার জন্য একটি বাহু তৈরি করুন 3. ক্যামেরা ধরার জন্য একটি বাহু তৈরি করুন 4. রেঞ্জফাইন্ডারের জন্য একটি মাউন্ট তৈরি করুন 5. XBC মাউন্ট করুন এবং সমস্ত তারের সাথে সংযুক্ত করুন

ধাপ 4: রোবট প্রোগ্রামিং

আমি এক্সবিসি কে আমার নিয়ামক হিসাবে ব্যবহার করার সিদ্ধান্ত নিয়েছি কারণ এটির রঙিন ট্র্যাকিংয়ের কারণে। কারণ আমি অপারেশনের মস্তিষ্ক হিসাবে XBC এর সাথে সিদ্ধান্ত নিয়েছিলাম যে আমি আমার রোবটকে ইন্টারেক্টিভ C তে প্রোগ্রাম করেছি, অথবা আমি এটিকে IC বলি। আইসি বিনামূল্যে ব্যবহার করা যায় এবং www.botball.org থেকে ডাউনলোড করা যায়। আইসি সি ++ এর অনুরূপ, তবে বেশ কয়েকটি লাইব্রেরি রয়েছে। দেখা যাচ্ছে, ওকলাহোমা বিশ্ববিদ্যালয়ের ডেভিড মিলার ক্রিয়েটের জন্য একটি লাইব্রেরি লিখেছেন যা তার পৃষ্ঠা থেকে https://i-borg.engr.ou.edu/~dmiller/create/ এ ডাউনলোড করা যাবে। সেই সম্পদ এবং তৈরি করার জন্য ম্যানুয়ালগুলির সাথে আমি প্রোগ্রাম করার জন্য প্রস্তুত ছিলাম। কিন্তু পরবর্তী বড় চ্যালেঞ্জ ছিল আমি এটা কি করতে চেয়েছিলাম? আমি এমন একটি রোবট চেয়েছিলাম যা গিয়ে কমলা বল সংগ্রহ করে একটি ঝুড়িতে স্কোর করতে পারে। আমার লক্ষ্য সহজ মনে হয়েছিল, এবং সম্ভবত সহজ হতে পারত, কিন্তু আমি যতটা তৈরি করতে পারতাম, ততই আমি এটি করতে চেয়েছিলাম। আমার চূড়ান্ত তালিকাটি এর মতো দেখাচ্ছিল: 1। কমলা বল খুঁজুন 2। কমলা বল নিন 3। ঘুড়ি 4 খুঁজুন। ঝুড়িতে বল রাখুন 1 বস্তু এড়িয়ে যাওয়া 2। কোন কিছু পড়ে না যাওয়া (টেবিলের মত) 3। ব্যাটারির চার্জ শনাক্ত করা এবং হোম বেসের সাথে ডকিং যখন লোহ, এবং এই সবই সম্পূর্ণ স্বায়ত্তশাসিত, এর মানে হল যে এটি সমস্ত পূর্বনির্ধারিত।

ধাপ 5: কোড

এটি নোংরা হতে পারে, কিন্তু এটি কাজ করে। // এট পোর্ট/*ক্রিয়েট ক্যাবলটিও প্লাগ ইন করতে হবে। পাওয়ার জ্যাক, পোর্ট 8 -এ 3 টি প্রস্থযুক্ত প্লাগ এবং ক্যামেরার দিকে ইউ সহ জেপি 28 (ইউএসবি পোর্টের পাশে) ইউএক্স লেবেলযুক্ত #ডিফাইন সি_ডাউন 5 // ক্যামেরা সার্ভো ডাউন#ডিফাইন এ_ডাউন 17 // আর্ম সার্ভো ডাউন#ডাইফাইন হোল্ড 50 // সার্ভ হোল্ড বল#ডিফাইন ক্যাচ 27 // আর্ম সার্ভো পজিশন টেবিলে ধরা থেকে বিরত রাখতে#শ্যুট 150 ডিফাইন করুন // সার্ভো নিক্ষেপ বল#সংজ্ঞায়িত ট্র্যাক_সি 25 // ক্যামেরা সার্ভো ট্র্যাক বন্ধ অবস্থান#ট্র্যাক_এফ 45 // ক্যামেরা সার্ভো ট্র্যাক দূর অবস্থান#সংজ্ঞায়িত কেন্দ্র 120 // ক্যামেরা ভিশন কেন্দ্র#সংজ্ঞায়িত 30 // ট্র্যাক_y সমন্বয় যখন বল নখের মধ্যে থাকে#বল সংজ্ঞায়িত করুন 0 // কমলা বলের চ্যানেল#বল_এক্স (ট্র্যাক_এক্স (বল, 0)) // বলের সমন্বয়#বল_ওয়াই নির্ধারণ করুন (ট্র্যাক_ওয়াই (বল, 0)) // বলের সমন্বয়#ধীর 100 সংজ্ঞায়িত করুন মোটর#দ্রুত সংজ্ঞায়িত 175 // দ্রুত মোটরের গতি#স্পষ্ট 0.2 // গুলি সংজ্ঞায়িত করুন বাধা থেকে পিছনে ফিরে যেতে#সময় নির্ধারণ করুন 0.5 //1.0 একটি 90 ডিগ্রী ডান মোড়#বিশ্রাম 0.05 নির্ধারণ করুন // ব্লব ট্র্যাক করার সময় ঘুমের সময়#স্পিড 175 // এভাইন টার্নের গতি নির্ধারণ করুন#ব্যাক_এস -200 // স্পিড নির্ধারণ করুন টুকরো টুকরো বস্তু থেকে দূরে#সরাসরি সরলরেখায় সংজ্ঞায়িত করুন 32767 // একটি সরলরেখায় ড্রাইভ করুন#ব্যাকবাইন সংজ্ঞায়িত করুন // ব্যাকবোর্ডের প্রধান রঙের চ্যানেল#বর্গক্ষেত্র 1 নির্ধারণ করুন // ব্যাকবোর্ড অ্যাকসেন্ট রঙের চ্যানেল#ট্র্যাক_ডি 250 সংজ্ঞায়িত করুন // লক্ষ্য ট্র্যাক করার জন্য ক্যামেরা অবস্থান# ট্র্যাক_ফাইন্ড 70 // লম্বা ট্র্যাকিংয়ের জন্য ক্যামেরার অবস্থান নির্ধারণ করুন#বিপরীত 2.25 সংজ্ঞায়িত করুন> 180 এর জন্য ঘুমের সময়#ব্যাক_এফ -150 // ব্যাক ফাস্ট স্পিড#ডিফাইন ব্যাক_এসএল -125 // ব্যাক স্লো স্পিড#ডিফাইন সেন্টার_এক্স 178 // ট্রু এক্স সেন্টার cam#define center_y 146 // camint pida এর সত্যিকারের y কেন্দ্র; // processint pidb এড়িয়ে চলুন; // track processint pidc; // score processint have_ball = 0; // বলে যে কোন ফাংশনে আমরা ইনভয়েড মেইন () {long ch; সক্ষম করুন_ {যদি (r_button () || gc_ldrop || gc_rdrop) {// যদি তুলে নেওয়া হয় বা r কাঁধের বোতাম কিল (পিডা); হত্যা (pidb); হত্যা (pidc); অক্ষম_সর্বোস (); সংযোগ বিচ্ছিন্ন (); বিরতি;} create_battery_charge (); display_clear (); printf ("চার্জ = %l / n", gc_battery_charge); যদি (gc_battery_charge <1200l || b_button ()) {kill (pida); হত্যা (pidb); হত্যা (pidc); নিক্ষেপ (); have_ball = 0; create_demo (1); যখন (b_button ()); যখন (gc_battery_charge <2800l &&! b_button ()) {create_battery_charge (); display_clear (); printf ("চার্জ = %l / n", gc_battery_charge); ঘুম (1.0);} cconnect (); পেছনে(); ঘুম (2.0); শুরু করেছে একটি(); স্টার্ট_বি (); যদি (gc_lbump == 1) {// বাম বাম্প এড়ান_রাইট ();} // অন্যদিকে এড়াতে ডানদিকে ঘুরান (gc_rbump == 1) {// ডান বাঁক এড়িয়ে_লেফট ();} // অন্যদিকে এড়ানোর জন্য বামে ঘুরলে যদি (gc_lfcliff == 1) {// বাম সামনের ক্লিফ এভয়েট -রাইট ();} অন্যথায় (gc_rfcliff == 1) {// ডান সামনের ক্লিফ এভয়েট_লেফট ();} অন্যথায় যদি (gc_lcliff == 1) {// বাম ক্লিফ এভয়েট -রাইট ();} অন্যথায় যদি (gc_rcliff == 1) {// right cliff avoid_left ();}}} void track_ball () {kill (pidc); যখন (! have_ball) {// বল ট্র্যাক_আপডেট () না পাওয়া পর্যন্ত পুনরাবৃত্তি করুন; far (); // সেট করে ক্যামেরা রেডি (); // আর্ম সেট করে যখন (et <255) {// সর্বোচ্চ মান না হওয়া পর্যন্ত বল ধরা পড়ে track_update (); // আপডেট ক্যামেরা ছবি যদি (ball_x <= (কেন্দ্র -5)) {// যদি বলটি বাকি থাকে track_update (); create_drive_direct (মন্থর, দ্রুত); // বাম ঘুম (বিশ্রাম);} অন্যথায় যদি (ball_x> = (কেন্দ্র+5)) {// যদি বল সঠিক track_update () হয়; create_drive_direct (দ্রুত, ধীর); // ডানদিকে ঘুম (বিশ্রাম);} অন্যথায় যদি (ball_x (center-5)) {// যদি বল কেন্দ্রীভূত track_update () হয়; create_drive_straight (fast); // go straight sleep (rest);}} grab (); // grab ball beep (); // make noise stop (); // stop driving have_ball = 1; // একটি নোট করুন যে আমার বল আছে} start_c (); // বাস্কেট স্লিপ (1.0); // ঘুম যাতে আমি খুন হয়ে গেলে কিছু করি না} void find_basket () {kill (pidb); // kill ball track process find (); // put camera up track_set_minarea (1000); // ব্যাকবোর্ডটি বড়, তাই শুধুমাত্র বড় ব্লবগুলি সন্ধান করুন যখন (have_ball) {// যখন আমার বল track_update () আছে; while (track_x (backb, 0) = (center_x+20)) {// while not centered track_update (); যদি (track_x (backb, 0)> = (center_x+20)) {// যদি ব্যাকবোর্ডটি ট্র্যাক_আপডেট () থাকে; create_spin_CCW (100);} // অন্যদিকে বাঁদিকে ঘুরুন যদি create_spin_CW (300-center_x);} // ডানদিকে ধীর গতিতে এগিয়ে আসার সাথে সাথে কেন্দ্রটি বন্ধ হচ্ছে} stop (); while (track_size (backb, 0) <= (6000)) {// যখন লক্ষ্য 6000 পিক্সেলের চেয়ে কম সাইজের track_update (); if (track_x (backb, 0) <= (center_x-5)) {// যদি টার্গেট বামে থাকে track_update (); create_drive_direct (ধীর, দ্রুত); // বাম ঘুম (বিশ্রাম);} অন্যথায় যদি create_drive_direct (দ্রুত, ধীর); // ডান ঘুম (বিশ্রাম);} অন্যথায় যদি create_drive_straight (fast); // সোজা ঘুমান (বিশ্রাম);}} stop (); // create_drive_straight (fast); // একটু কাছে আসুন // ঘুম (1.0); // স্টপ (); ঘুম (1.0); // স্পিন ডান ঘুম (বিপরীত); // একটি 180 টার্ন স্টপ () জন্য যথেষ্ট দীর্ঘ ঘুম (); নিচে (); // ব্যাকবোর্ড ঘুম (1.0) ট্র্যাক করতে ক্যামেরা নিচে রাখুন; track_set_minarea (200); // একটি ছোট মিনি আকার ব্যবহার করুন, যেহেতু আমরা এটির দিকে ইঙ্গিত করেছি এবং কাছাকাছি যেতে যাচ্ছি (track_y (backb, 0)> = (center_y-140)) {// যখন লক্ষ্যটি এর চেয়ে কম y সমন্বয় track_update (); if (track_x (backb, 0) <= (center_x-5)) {// যদি টার্গেট বামে থাকে track_update (); back_right (); // বাঁদিকের ঘুম (বিশ্রাম);} অন্যথায় যদি back_left (); // ডান ঘুম (বিশ্রাম);} অন্যথায় যদি ফিরে যান (); // সরাসরি ঘুমান (বিশ্রাম);}} থামুন (); বিপ (); নিক্ষেপ (); // ঘুম ঘুম (1.0); have_ball = 0; // অনুস্মারক আমি বল নিক্ষেপ করেছি এবং এটি নেই} start_b (); // ফিরে বল বল ট্র্যাকিং ঘুম (1.0); // এই প্রক্রিয়াটি শেষ না হওয়া পর্যন্ত কিছু করবেন না} void cconnect () {create_connect (); create_full (); // লেজ সেন্সরের সম্পূর্ণ নিয়ন্ত্রণের জন্য create_power_led (0, 255);} // সবুজ শক্তি LEDvoid সংযোগ বিচ্ছিন্ন () {stop (); // stop move create_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, straight);} void back () {create_drive (back_s, straight);} void ready () {set_servo_position (arm, a_down);} void check () {set_servo_position (cam, track_c);} void far () {set_servo_position (cam, track_f);} void ledge () {set_servo_position (arm, ধরা);} void throw () {int a; জন্য (a = 50; a> = 30; a- = 1) {// get set_servo_position (arm, a);} set_servo_position (arm, shoot);} void grab () {int a; জন্য (a = 0; a <= hold; a+= 1) {// বাহু মসৃণভাবে set_servo_position (arm, a);}} void down () {set_servo_position (cam, track_d);} void find () {set_servo_position (ক্যাম, ট্র্যাক_ফাইন্ড);;} অকার্যকর হত্যা (int pid) {CREATE_BUSY; // বর্তমান সৃষ্টি প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করুন, এবং অগ্রাধিকার kill_process (pid) নিন; CREATE_FREE; // i am done stop ();} void avoid_left () {kill (pidb); // stop else everything kill (pidc); লজ (); // নখ কুড়ান যাতে এটি টেবিলে ধরা পড়ে না_ back_away (); // ফিরে দূরে rotate_l (); // বাধা প্রস্তুত থেকে দূরে ঘোরান (); // যদি (have_ball) {// if I have the ball have start_c ();} // start target track else if (! have_ball) {// if I have not have the ball start_b ();} // start ball tracking} void avoid_right () {হত্যা (pidb); হত্যা (pidc); স্তর(); ফিরে_ দূরে (); rotate_r (); প্রস্তুত(); যদি (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: এটা কি মূল্যবান?

খরচ ছিল: তৈরি + ব্যাটারি + ডক = $ 260XBC স্টার্টার কিট (xbc, ক্যাম, লেগো ইট, সেন্সর) = $ 579PVC + পেইন্ট + স্ক্রু = প্রায় $ 20 মোট খরচ = $ 859 আমার ইতিমধ্যে বটবল থেকে XBC স্টার্টার কিট ছিল, তাই খরচ আমার কাছে তৈরি করার খরচ ছিল। আমি মনে করি এটি মূল্যবান ছিল, এবং সবচেয়ে ভাল অংশ হল যে আমি যে সমস্ত অংশ ব্যবহার করেছি তা পুনরায় ব্যবহারযোগ্য, যদি আমি নিজেকে এই বট থেকে বের করে আনতে পারি।, একটি টেবিলের উপরে। এই ভিডিওতে দেখা যাচ্ছে রোবট একটি গোল করে ৫ টি কমলা বল স্কোর করছে। আমি কেবল প্রক্রিয়াটি বরাবর গতিশীল করতে সহায়তা করেছি, এটি শেষ পর্যন্ত নিজের হাতে বল 5 পাওয়া যেত।

ধাপ 7: উপসংহার

চূড়ান্ত ফলাফল হল একটি রোবট যা একটি গোল করে কমলা বল সংগ্রহ করতে পারে।

আমি এই প্রকল্পে কাজ করতে ভালোবাসি। আমি যত বেশি এই রোবটটিতে কাজ করেছি ততই আমি এর প্রতি আরও বেশি সংযুক্ত হয়েছি। আমি এখন এটির সাথে কথা বলি যেন এটি একটি পোষা প্রাণী। আমি আশা করি এটি আপনাকে আপনার পরবর্তী প্রকল্পে সাহায্য করেছে। এমন অনেক লোক আছে যাদের আমাকে ধন্যবাদ দিতে হবে, কিন্তু অনেকগুলি আছে। চার্টার্সের বার্নার্ডের মতো এত সুন্দরভাবে বলা হয়েছে: "আমরা দৈত্যদের কাঁধে বামনদের মতো, যাতে আমরা তাদের চেয়ে বেশি দেখতে পারি, এবং জিনিসগুলি আরও বেশি দূরত্বে দেখতে পারি, আমাদের দৃষ্টিতে কোন তীক্ষ্ণতার কারণে নয়, অথবা কোন শারীরিক পার্থক্য, কিন্তু কারণ আমরা তাদের বিশাল আকার দ্বারা উঁচু এবং উত্থাপিত।"

প্রস্তাবিত: