সুচিপত্র:

IRobot Create-Mars Expedition Rover Mark I: 4 ধাপ
IRobot Create-Mars Expedition Rover Mark I: 4 ধাপ

ভিডিও: IRobot Create-Mars Expedition Rover Mark I: 4 ধাপ

ভিডিও: IRobot Create-Mars Expedition Rover Mark I: 4 ধাপ
ভিডিও: লুকানো UAP উন্মোচন? | আভি লোয়েবের সাথে একটি ব্ল্যাক হোল বেঁচে থাকা 2024, জুলাই
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

এই নির্দেশাবলী আপনাকে শেখাবে কিভাবে ম্যাটল্যাব কোডিং ব্যবহার করে iRobot Create সেটআপ করতে হয়। আপনার রোবটটি খনিজ অনুসন্ধানের ক্ষমতা পাবে আকৃতি আলাদা করে, ক্লিফ সেন্সর ব্যবহারের মাধ্যমে রুক্ষ ভূখণ্ড চালানোর এবং লাইভ ফিডের মাধ্যমে ম্যানুয়ালি নিয়ন্ত্রণ করার ক্ষমতা আছে।

ধাপ 1: সরবরাহ

সরবরাহ
সরবরাহ

এই প্রকল্পের জন্য, আপনার একটি iRobot Create প্রয়োজন হবে, যা Roomba রোবট ভ্যাকুয়াম ক্লিনারের একটি প্রোগ্রামযোগ্য সংস্করণ। রোবটটি এই প্রকল্পের জন্য প্রয়োজনীয় সমস্ত সেন্সর, বিশেষ করে বাম্প সেন্সর, ক্লিফ সেন্সর এবং "লাইট বাম্প" সেন্সর দিয়ে সজ্জিত। আপনার একটি রাস্পবেরি পাই এবং ভিডিও ক্যামেরাও প্রয়োজন হবে, যা ওয়্যারলেস যোগাযোগ, লাইভ প্রোগ্রামিং এবং লাইভ ভিডিও ফিডের জন্য ব্যবহৃত হয়। অবশেষে, রাস্পবেরি পাই এবং ক্যামেরার জন্য আপনার একটি 3D মুদ্রিত মাউন্ট প্রয়োজন হবে।

পদক্ষেপ 2: পছন্দসই ফলাফল সন্তুষ্ট করার জন্য কোডিং তৈরি করুন

পছন্দসই ফলাফল সন্তুষ্ট করার জন্য কোডিং তৈরি করুন
পছন্দসই ফলাফল সন্তুষ্ট করার জন্য কোডিং তৈরি করুন

একবার আপনি আপনার রুম্বা সংযুক্ত করলে, আপনাকে একটি ম্যাটল্যাব কোড তৈরি করতে হবে যা আপনার কাঙ্ক্ষিত ইনপুটগুলির পরে আপনাকে আপনার পছন্দসই আউটপুট দেবে।

কোডটি এখানে দেখা যাবে:

%Roomba Project%Brenten Arnold (barnol15); জুলিয়ান কর্ন (qdp218); মাইক হিল (মিহল) %4/11/19 %সমস্যার বিবরণ: মঙ্গল গ্রহের %অনুসন্ধান/বাসস্থানের সময় মানুষকে সহায়তা করার জন্য একটি রোভার তৈরি করুন। %সমাধান পদ্ধতি: জৈব পদার্থ পরীক্ষা করার জন্য %হালকা বাম্পার, ক্লিফ সেন্সর এবং ক্যামেরা ব্যবহার করে জৈব (সবুজ) পদার্থ অনুসন্ধান করুন। %রোভারকে বাম্পার, ক্লিফ %সেন্সর এবং হুইল হাইট সেন্সর ব্যবহারের মাধ্যমে রুক্ষ ভূখণ্ড নেভিগেট করার অনুমতি দিন। মানুষকে একটি নিরাপদ দূরত্বে থেকে রোভার নিয়ন্ত্রণ করতে এবং ম্যানুয়ালি খনিজ অনুসন্ধান করতে সক্ষম করুন। পছন্দ = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %ডায়ালগ মেনুতে তিনটি বিকল্প সেটিং = মেনু ('', পছন্দ) যদি সেটিং> 0 %যদি বিকল্পটি বেছে নেওয়া হয় ব্যবহারকারীর নিশ্চিতকরণ পছন্দগুলি জিজ্ঞাসা করুন 2 = {'হ্যাঁ', 'না'} %"হ্যাঁ" বা "না" এর জন্য একটি সেল অ্যারে তৈরি করুন "পছন্দ নিশ্চিত করুন = মেনু (['আপনি' 'পছন্দ {সেটিং}' 'মোড।'], পছন্দ 2) %নিশ্চিত করুন ব্যবহারকারী সেটিং পছন্দ নিশ্চিত করুন == 1 নিশ্চিত করুন যদি সেটিং == 1 %" লাইফ "সেটিং বেছে নেওয়া হয়েছে কিনা তা পরীক্ষা করুন = 0 যখন i == 0 r.setLEDDigits (num2str ('LIFE')) %ডিসপ্লে 'LIFE' LED এর জন্য i = 1: 100 r.setDriveVelocity (0.05) %রুমবাকে 0.05 m/sy = r.getCliffSensors এ এগিয়ে নিয়ে যান %কোষের কাঠামো "y" l = r.getLightBumpers- এ ক্লিফ সেন্সরের মান পুনরুদ্ধার এবং সঞ্চয় করুন l.left> 100 %চেক করুন যদি বাম আলোর বাম্পার.াকা থাকে r.moveDistance (-0.05 রুমবাকে পিছনে 0.05 মিটার সরান img = imcrop (img, rect) %ফসলের ছবি কেন্দ্রে লাল = গড় (গড় (img (:,:, 1)) %গড় লাল তীব্রতা সবুজ = গড় (গড় (img (:,:, 2)) %গড় সবুজ তীব্রতা নীল = গড় (গড় (img (:,:, 3))) %গড় নীল তীব্রতা যদি সবুজ> লাল এবং & সবুজ> নীল %উদ্ভিদ ছবিতে আছে কিনা তা পরীক্ষা করুন d = msgbox (['জীবন পাওয়া গেছে! ']); %একটি বার্তা বাক্স প্রদর্শন করুন "জীবন পাওয়া গেছে!" waitfor (d); end elseif l.leftFront> 100 %চেক বাকি/সামনের আলো বাম্পার আচ্ছাদিত r.moveDistance (-0.05) %সরান রুমবা পিছনে 0.05 মিটার img = r.getImage %রুমবাতে রাসবেরি পাই ক্যামেরা থেকে ছবি পান এবং ভেরিয়েবল 'img 'রেকট = [100 0 150 150]; img = imcrop (img, rect) %ফসলের ছবি কেন্দ্রে লাল = গড় (গড় (img (:,:, 1)) %গড় লাল তীব্রতা সবুজ = গড় (গড় (img (:,:, 2)) %গড় সবুজ তীব্রতা নীল = গড় (গড় (img (:,:, 3))) %গড় নীল তীব্রতা যদি সবুজ> লাল এবং & সবুজ> নীল %উদ্ভিদ ছবিতে আছে কিনা তা পরীক্ষা করুন d = msgbox (['জীবন পাওয়া গেছে! ']); %একটি বার্তা বাক্স প্রদর্শন করুন "জীবন পাওয়া গেছে!" waitfor (d); শেষ অন্যথায় l.leftCenter> 100 %চেক করুন যদি বাম/কেন্দ্রের হালকা বাম্পার coveredাকা থাকে r.moveDistance (-0.05) %সরান রুমবা পিছনে 0.05 মিটার img = r.getImage %রুমবাতে রাসবেরি পাই ক্যামেরা থেকে ছবি পান এবং পরিবর্তনশীল 'img 'রেকট = [100 0 150 150]; img = imcrop (img, rect) %ফসলের ছবি কেন্দ্রে লাল = গড় (গড় (img (:,:, 1)) %গড় লাল তীব্রতা সবুজ = গড় (গড় (img (:,:, 2)) %গড় সবুজ তীব্রতা নীল = গড় (গড় (img (:,:, 3))) %গড় নীল তীব্রতা যদি সবুজ> লাল এবং & সবুজ> নীল %উদ্ভিদ ছবিতে আছে কিনা তা পরীক্ষা করুন d = msgbox (['জীবন পাওয়া গেছে! ']); %একটি বার্তা বাক্স প্রদর্শন করুন "জীবন পাওয়া গেছে!" waitfor (d); শেষ অন্যথায় l.rightCenter> 100 %চেক করুন যদি ডান/কেন্দ্রের হালকা বাম্পার আচ্ছাদিত হয় r.moveDistance (-0.05) %সরান রুমবা পিছনে 0.05 মিটার img = r.getImage %রুমবাতে রাসবেরি পাই ক্যামেরা থেকে ছবি পান এবং ভেরিয়েবল 'img 'রেকট = [100 0 150 150]; img = imcrop (img, rect) %ফসলের ছবি কেন্দ্রে লাল = গড় (গড় (img (:,:, 1)) %গড় লাল তীব্রতা সবুজ = গড় (গড় (img (:,:, 2)) %গড় সবুজ তীব্রতা নীল = গড় (গড় (img (:,:, 3))) %গড় নীল তীব্রতা যদি সবুজ> লাল এবং & সবুজ> নীল %উদ্ভিদ ছবিতে আছে কিনা তা পরীক্ষা করুন d = msgbox (['জীবন পাওয়া গেছে! ']); %একটি বার্তা বাক্স প্রদর্শন করুন "জীবন পাওয়া গেছে!" waitfor (d); শেষ অন্যথায় l.rightFront> 100 %চেক করুন ডান/সামনের আলো বাম্পার আচ্ছাদিত কিনা r.moveDistance (-0.05) %সরান রুমবা পিছনে 0.05 মিটার img = r.getImage %রুমবাতে রাসবেরি পাই ক্যামেরা থেকে ছবি পান এবং ভেরিয়েবল 'img 'রেকট = [100 0 150 150]; img = imcrop (img, rect) %ফসলের ছবি কেন্দ্রে লাল = গড় (গড় (img (:,:, 1)) %গড় লাল তীব্রতা সবুজ = গড় (গড় (img (:,:, 2)) %গড় সবুজ তীব্রতা নীল = গড় (গড় (img (:,:, 3))) %গড় নীল তীব্রতা যদি সবুজ> লাল এবং & সবুজ> নীল %উদ্ভিদ ছবিতে আছে কিনা তা পরীক্ষা করুন d = msgbox (['জীবন পাওয়া গেছে! ']); %একটি বার্তা বাক্স প্রদর্শন করুন "জীবন পাওয়া গেছে!" waitfor (d); শেষ না হলে l.right> 100 %চেক করুন ডান আলোর বাম্পার coveredাকা আছে কিনা। রুমবাতে রাসবেরি পাই ক্যামেরা এবং ভেরিয়েবল 'img' রেকট = [100 0 150 150] এ সংরক্ষণ করুন; img = imcrop (img, rect) %ফসলের ছবি কেন্দ্রে লাল = গড় (গড় (img (:,:, 1)) %গড় লাল তীব্রতা সবুজ = গড় (গড় (img (:,:, 2)) %গড় সবুজ তীব্রতা নীল = গড় (গড় (img (:,:, 3))) %গড় নীল তীব্রতা যদি সবুজ> লাল এবং & সবুজ> নীল %উদ্ভিদ ছবিতে আছে কিনা তা পরীক্ষা করুন d = msgbox (['জীবন পাওয়া গেছে! ']); %একটি বার্তা বাক্স প্রদর্শন করুন "জীবন পাওয়া গেছে!" waitfor (d); শেষ না হলে y.leftFront <1500 %চেক করুন যদি রুমবা এর বাম/সামনের অংশ ক্লিফ r.moveDistance (-0.1, 0.05) %রুমবা পিছনে 0.1 মিটার 0.05 m/s r.turnAngle (-5) %ঘোরান রুমবা 5 ডিগ্রী CW অন্যথায় y.right ফ্রন্ট <1500 %চেক করুন রুমবা এর ডান/সামনের অংশ ক্লিফ r.moveDistance (-0.1, 0.05) %রুমবা পিছনে 0.1 মিটার 0.05 m/s r.turnAngle (5) %ঘোরান রুমবা 5 ডিগ্রী CCW অন্যথায় y.left <1000 %পরীক্ষা করুন যদি রুমবা এর বাম দিকটা ক্লিফ r.moveDistance (-0.05, 0.05) %রুমবা পিছনে 0.05 মিটার 0.05 m/s r.turnAngle (-10) %ঘোরান রুমবা 10 ডিগ্রী CW অন্যথায় y.right0 %চালান যদি বোতাম টিপলে চালিয়ে যান == 1 i = 0 %জীবন অনুসন্ধান চালিয়ে যান i = 1 %শেষ জীবন মোড শেষ শেষ অন্যথায় i = 0 যখন i == 0 r.setLEDDigits (num2str ('RGH')) %ডিসপ্লে 'রাফ' LED ডিসপ্লের জন্য i = 1: 1000 r.setDriveVelocity (0.05) %সেট করুন রুমবা ড্রাইভের বেগ 0.05 m/sx = r.getBumpers %"x" y = r.get কাঠামোতে বাম্পার সেন্সর মান পুনরুদ্ধার এবং সঞ্চয় করুন CliffSensors %x.right == 1 %কাঠামোতে ক্লিফ সেন্সরের মানগুলি পুনরুদ্ধার করুন এবং সংরক্ষণ করুন যদি r.turnAngle (10) %ডান বাম্পার চাপানো হয় কিনা তা পরীক্ষা করুন। বাম্পার চাপানো হয় r.turnAngle (-10) %ঘোরান রুমবা 10 ডিগ্রী CW অন্যথায় x.front == 1 %সামনের বাম্পার টিপে আছে কিনা তা পরীক্ষা করুন r.turnAngle (20) %ঘোরান রুমবা 20 ডিগ্রী CCW অন্যথায় x.rightWheelDrop == 1 % ডান চাকাটি নেমে গেছে কিনা তা পরীক্ষা করুন r.turnAngle (-20) %ঘোরান রুমবা 20 ডিগ্রী CW অন্যথায় x.leftWheelDrop == 1 %চেক বাম চাকা নেমে গেছে r.turnAngle (20) %ঘোরান রুমবা 20 ডিগ্রী CCW অন্যথায় y.leftFront < 1500 %পরীক্ষা করুন রুমবা এর সামনের বাম অংশ ক্লিফ r.moveDistance (-0.05, 0.05) %রুমবা পিছনে 0.05 মিটার 0.05 m/s r.turnAngle (-5) %ঘোরান রুমবা 5 ডিগ্রী CW অন্যথায় y.rightFront < 1500 %চেক করুন রুমবা এর ডান সামনের অংশ ক্লিফ r.moveDistance (-0.05, 0.05) %রুমবা পিছনে 0.05 মিটার 0.05 m/s r.turnAngle (5) %ঘোরান রুমবা 5 ডিগ্রী CCW অন্যথায় y.left <1000 %চেক করুন যদি বাম অংশ o f roomba ক্লিফ r.moveDistance (-0.05, 0.05)%0.05 m/s r.turnAngle (-10)%এ রুমবা পিছনে 0.05 মিটার সরান। %অবিরাম ভূখণ্ড অব্যাহত রাখুন i = 1 %শেষ রুক্ষ ভূখণ্ড শেষ শেষ অন্য অন্য %ম্যানুয়াল মোড i = 0 r.setLEDDigits (num2str ('ব্যবহারকারী')) %ডিসপ্লে 'ব্যবহারকারী' LED ডিসপ্লে d = msgbox (['তীর কী - সরানো; এস - স্টপ রোভার; ESC - শেষ ব্যবহারকারী নিয়ন্ত্রণ; A - সম্পদ সনাক্ত করুন ']); waitfor (d); যখন i == 0 r.showCamera %রাসবেরি পাই ক্যামেরা লাইভ ফিড খুলুন পৃথক উইন্ডোতে r.setDriveVelocity চাপিয়ে দেওয়া হয়েছে, 0.05) %রুমবা 45 ডিগ্রী সিসিডব্লিউ 0.05 মি/সেকেন্ডে ঘোরান অন্যথায় D == 31 %"নিচে" তীরটি চাপানো হয়েছিল কিনা তা পরীক্ষা করুন r.setDriveVelocity (-0.1) %রুমবাকে 0.2 মি/সেকেন্ডে পিছনে সরান অন্যথায় D == 29 % R.setDriveVelocity (0) %ডানদিকে তীর চাপানো হয় কিনা তা পরীক্ষা করুন r.turnAngle (-15, 0.05) %রুমবা 45 ডিগ্রি CW 0.05 মি/সেকেন্ডে ঘোরান অন্যথায় D == 27 %চেক করুন "esc" (Escape) কী চাপলে i = 1 %পরিবর্তনশীল "i" এর মান পরিবর্তন করুন লুপ d = msgbox ('প্রস্থান "ব্যবহারকারী নিয়ন্ত্রণ"') %ব্যবহারকারীকে জানাতে দিন যে ম্যানুয়াল মোড থেকে বেরিয়ে আসা হচ্ছে অন্যথায় D == 115 %চেক করুন "s" কী টিপানো হয়েছে কিনা r.setDriveVelocity (0) %থেকে রুমবা বন্ধ করুন সামনে বা পিছনে যাচ্ছেন অন্যথায় D == 97 %চেক করুন "a" টিপানো হয়েছে কিনা image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) যদি K == 3 d = msgbox ('Resource found') %ডিসপ্লে হয় যদি আয়তক্ষেত্রের রিসোর্স অপেক্ষা করে (d); %ব্যবহারকারীর বার্তা বাক্স "d" বন্ধ করার জন্য অপেক্ষা করুন end else d = msgbox ('একটি বৈধ কী ইনপুট নয়।') %প্রদর্শন করুন যদি ব্যবহারকারী "সেটিং নির্বাচন করুন" মেনু অপেক্ষা করে (d); %ব্যবহারকারীর বার্তা বাক্স "d" শেষ অপেক্ষা করার জন্য অপেক্ষা করুন ব্যবহারকারী বার্তা বাক্স "d" শেষ শেষ শেষ করতে অন্যথায়

ধাপ 3: পরীক্ষা

পরীক্ষামূলক
পরীক্ষামূলক

একবার আপনার কোড লেখা হয়ে গেলে, আপনাকে আপনার রুমবা পরীক্ষা করতে হবে। যদিও আপনার কোডটি সঠিক বলে মনে হতে পারে, আপনার রুম্বা যেসব বস্তুকে আপনি সনাক্ত করতে চান তা সঠিকভাবে চিনতে আপনার বিশেষ করে রঙ বা আকৃতির জন্য আপনার অনেক মান পরিবর্তন করতে হবে।

ধাপ 4: ভিজ্যুয়াল আউটপুট পর্যবেক্ষণ করুন

ভিজ্যুয়াল আউটপুট পর্যবেক্ষণ করুন
ভিজ্যুয়াল আউটপুট পর্যবেক্ষণ করুন
ভিজ্যুয়াল আউটপুট পর্যবেক্ষণ করুন
ভিজ্যুয়াল আউটপুট পর্যবেক্ষণ করুন

আপনার রুম্বা এর ভিজ্যুয়াল আউটপুটের উপর ভিত্তি করে আপনি সফলভাবে প্রোগ্রাম করেছেন কিনা তা খুব স্পষ্ট হবে।

আউটপুট অন্তর্ভুক্ত:

  • আকৃতি সনাক্তকরণ: সঠিক খনিজগুলি খুঁজে পেতে রুম্বার সঠিকভাবে আকৃতি আলাদা করার ক্ষমতা
  • রুক্ষ ভূখণ্ডের চালাকি: পাহাড় বা অন্ধকার এলাকা এড়ায়
  • ম্যানুয়াল মোড: লাইভ ফিড এবং রুম্বা নিয়ন্ত্রণ করার ক্ষমতা
  • ছবি: খনিজ পদার্থের ছবি
  • জীবন পাওয়া গেছে!

এটি আমাদের টিউটোরিয়ালের সমাপ্তি, আপনার নতুন মঙ্গল অভিযান রোভার উপভোগ করুন!

প্রস্তাবিত: