সুচিপত্র:

UTK EF 230 MarsRoomba Project Fall 2018: 5 ধাপ
UTK EF 230 MarsRoomba Project Fall 2018: 5 ধাপ

ভিডিও: UTK EF 230 MarsRoomba Project Fall 2018: 5 ধাপ

ভিডিও: UTK EF 230 MarsRoomba Project Fall 2018: 5 ধাপ
ভিডিও: UTK - EF 230 Autonomous Vehicle Project 2024, নভেম্বর
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

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

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

এই নির্দেশযোগ্যটি পাঠককে তার "রুম্বা" প্রোগ্রামিংয়ে সফলভাবে একটি "নভোচারী" অনুসরণ করতে এবং প্রযোজ্য ক্ষেত্রে একটি বিপদ সংকেত পাঠাতে সহায়তা করার জন্য ডিজাইন করা হয়েছে।

ধাপ 1: উপকরণ প্রয়োজন

উপকরণ প্রয়োজন
উপকরণ প্রয়োজন

1) ইন্টারনেট অ্যাক্সেসযোগ্য কম্পিউটার/ল্যাপটপ

2) MATLAB_R2018a

3) Roomba এবং Roomba ডাউনলোড

পদক্ষেপ 2: সেটআপ/ডাউনলোড করুন

সেটআপ/ডাউনলোড করুন
সেটআপ/ডাউনলোড করুন

রুমবা অ্যাক্সেস করার জন্য প্রয়োজনীয় সফ্টওয়্যারটি ডাউনলোড করার জন্য MATLAB এ এই স্ক্রিপ্টটি চালান (প্রকল্প ফোল্ডারে তার নিজস্ব ফাইলে সংরক্ষিত)।

অতিরিক্ত সাহায্য:

EF 230 Roomba Project এর জন্য% ইন্সটলেশন প্রোগ্রাম% সর্বশেষ আপডেট: 13 সেপ্টেম্বর, 2017 (https সার্ভারের সাথে সম্পর্কিত স্থির নিরাপত্তা সমস্যা এবং ত্রুটি দেখা দিলে ফাইল মুছে ফেলার সতর্কতা সরানো হয়েছে) ফাংশন রুমবাইনস্টল clc; ফাইল ইনস্টল করার জন্য ফাইলগুলির তালিকা = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; অপশন = weboptions ('CertificateFilename', '') থেকে ইনস্টল করার জন্য % লোকেশন; % এটি সার্টিফিকেট প্রয়োজনীয়তা সার্ভার উপেক্ষা করতে বলুন = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba Install/Update'; % ডিসপ্লে উদ্দেশ্য এবং কনফার্মেশন প্রম্পট = {'এই প্রোগ্রামটি এই EF 230 Roomba ফাইলগুলি ডাউনলোড করবে: '}; বিপ; yn = questdlg (প্রম্পট,… dlgTitle,… 'হ্যাঁ', 'না', 'হ্যাঁ');

যদি ~ strcmp (yn, 'Yes'), রিটার্ন; শেষ

% বিদ্যমান ফাইলের তালিকা পান বিদ্যমান_ ফাইল = ফাইল (সেলফুন (xexist, ফাইল)> 0); তাহলে }; বিপ; yn = questdlg (প্রম্পট,… dlgTitle,… 'হ্যাঁ', 'না', 'হ্যাঁ'); যদি ~ strcmp (yn, 'Yes'), রিটার্ন; শেষ শেষ

% ফাইল ডাউনলোড করুন cnt = 0; i = 1 এর জন্য: দৈর্ঘ্য (ফাইল) f = ফাইল {i}; disp (['ডাউনলোড করা' f]); url = [সার্ভার f] চেষ্টা করুন; websave (f, url, options); নিরাপত্তা ত্রুটি এড়াতে % যোগ করা বিকল্প cnt = cnt + 1; catch disp (['ডাউনলোড করতে ত্রুটি' f]); ডামি = [f '.html']; যদি বিদ্যমান থাকে (ডামি, 'ফাইল') == 2 মুছে দিন (ডামি) শেষ শেষ শেষ

যদি cnt == length (files) msg = 'ইনস্টলেশন সফল'; waitfor (msgbox (msg, dlgTitle)); else msg = 'ইনস্টলেশন ত্রুটি - বিস্তারিত জানার জন্য কমান্ড উইন্ডো দেখুন'; waitfor (errordlg (msg, dlgTitle)); শেষ

শেষ %roombaInstall

ধাপ 3: কোড পার্ট 1: ট্র্যাকিং ফাংশন

কোড পার্ট 1: ট্র্যাকিং ফাংশন
কোড পার্ট 1: ট্র্যাকিং ফাংশন

এই ফাংশনটি Roomba এর ক্যামেরা থেকে Roomba ভেরিয়েবল এবং ছবি নেয় এবং ট্র্যাক করা বস্তুর কেন্দ্র xy স্থানাঙ্ক খুঁজে পায়।

এই ফোল্ডারে অন্য কোডে এই কোডটি সংরক্ষণ করুন।

ফাংশন [xm, ym] = ট্র্যাকিং ব্লু (r) %ইনপুট: রুমবা ভেরিয়েবল %আউটপুট: নিচের বস্তুর কেন্দ্রের x এবং y মান %উদ্দেশ্য: একটি চিত্র দেওয়া নীল বস্তুর কেন্দ্র খুঁজে পায় %ব্যবহার [x মান, y মান] = ট্র্যাকিং ব্লু (রুমবা ভেরিয়েবল) img = r.getImage; % রোবট সাবপ্লট (1, 2, 2) সাব -ইমেজ (img) এর ক্যামেরা বন্ধ পড়ে; %পাথ শিরোনাম ('ট্র্যাকিং ইমেজ') লাল = img (:,:, 1) হিসাবে একই উইন্ডোতে চিত্র দেখায়; সবুজ = img (:,:, 2); নীল = img (:,:, 3); শুধু নীল = নীল - সবুজ/2 - লাল/2; bw = শুধু নীল> 40; সাবপ্লট (1, 2, 2) সাবমিজ (bw) ধরে রাখুন; [x, y] = খুঁজুন (bw); যদি ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = বৃত্তাকার (গড় (y)); xx = সর্বোচ্চ (1, xm-5): মিনিট (xm+5, আকার (bw, 1)); yy = সর্বোচ্চ (1, ym-5): মিনিট (ym+5, আকার (bw, 2)); bwbw = শূন্য (আকার (bw), 'uint8'); bwbw (xx, yy) = 255; subplot (1, 2, 2) subimage (justBlue + bwbw) ধরে রাখুন; শেষ

ধাপ 4: কোড পার্ট 2: যখন লুপ

এই কোডটি ট্র্যাকিং ফাংশন থেকে বস্তুর x এবং y অবস্থানের উপর ভিত্তি করে রুম্বা চালায়। এটি নীল খোঁজার সময় রুমা দেয়াল এবং পাহাড়ের উপর নজর রাখবে। এটি রুম্বা পথের x এবং y স্থানাঙ্কগুলিও গ্রহণ করবে এবং ট্র্যাকিং চিত্রের সাথে সংশ্লিষ্ট প্লট তৈরি করবে। যদি বাম্প সেন্সর সক্রিয় হয় তবে এটি ইমেল বিভাগে চলে যাবে।

%রোভার প্রকল্প

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Inputs: roomba value, camera data, bump, light and wall sensors %উদ্দেশ্য: নভোচারী অনুসরণ করে এবং বাধা এড়ায়। যদি সতর্ক করা হয়, রুমবা একটি ইমেল পাঠায় %একটি মানচিত্রের বিশদ বিবরণ এবং যেখানে এটি তার শুরুর অবস্থান অনুযায়ী। %ব্যবহার: শুধু একটি রুমবা ভেরিয়েবল ঘোষিত করে প্রোগ্রামটি চালান, এছাড়াও %একটি চলমান সবুজ বস্তু আছে %আউটপুট: ব্যবহারকারীকে ইমেজ ট্র্যাকিং ছবি, ইমেল মানচিত্র এবং পাঠ্য দেখায় %% নিম্নলিখিত বিভাগ b = 0; %শুরু ভেরিয়েবল c = 0; x = 0; y = 0; থিটা = 0; যখন সি == 0 %লুপ এটি নীল বস্তু এবং বাধা সনাক্ত করতে t = r.timeGet; d = r.getDistance; [xval, yval] = ট্র্যাকিং ব্লু (r); cliff = getCliffSensors (r); %সেন্সর মান আলো জন্য কাঠামো আরম্ভ = getLightBumpers (r); bump = getBumpers (r); যদি light.leftCenter> = 10 || light.rightCenter> = 10 % সেন্স যদি r.stop r.setLEDDigits ('help') এর কাছাকাছি একটি দেয়াল থাকে c = 1 % যখন b == 0 % যদি bump.right == 1 || bump.left == 1 || bump.front == 1 % ইন্দ্রিয় যদি এটি কিছু দেয়ালে অনুভূত হয় যদি এটি একটি প্রাচীর অনুভব করে % c = 1 % b = 1 % disp ('bump') % end % end else if bump.right == 1 || bump.left == 1 || bump.front == 1 %সেন্স যদি কোন কিছুতে আঘাত করে, যদি তা হয়, তাহলে এটি একটি ইমেইল পাঠাবে r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %সেন্স যদি r.stop c = 1 r.setLEDDigits ('help') এর কাছাকাছি একটি খিলান থাকে তবে %yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d।*cosd (theta) + x; রুমবা y = d।*সিন্ড (থিটা) এর*x সমন্বয়।*d + y; রুমবা সাবপ্লট (1, 2, 1) প্লটের (y, y, 'bd') % y কোঅর্ডিনেট পথটি প্লট করে এবং একটি শিরোনাম শিরোনাম যোগ করে ('রুম্বা পাথ') ধরে রাখুন; শেষ

ধাপ 5: কোড পার্ট 3: ইমেল বিভাগ

এটি চক্রান্তকৃত পথ এবং চিত্র গ্রহণ করবে এবং এটি একটি নির্দিষ্ট ইমেল ঠিকানায় পাঠাবে।

(উদাহরণ ইমেল সহ এখানে দেখানো হয়েছে)

১০০% ইমেইল বিভাগ

যদি b == 1 saveas (gcf, 'rovermap.png') %ফিগার সেটপ্রেফ ('ইন্টারনেট', 'SMTP_Server', 'smtp.gmail.com') সংরক্ষণ করে; setpref ('ইন্টারনেট', 'E_mail', '[email protected]'); setpref ('ইন্টারনেট', 'SMTP_Username', '[email protected]') থেকে পাঠানোর জন্য % মেল অ্যাকাউন্ট; % প্রেরকদের ব্যবহারকারীর নাম setpref ('ইন্টারনেট', 'SMTP_Password', 'gssegsse'); % সেন্ডার পাসওয়ার্ড প্রপস = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); সেন্ডমেইল ('উদাহরণ ইমেল', 'রোভারবিকন', 'নভোচারী চলাচল বন্ধ করে দিয়েছে। পুনরুদ্ধারের জন্য, সংযুক্ত ফাইলের নির্দেশাবলী অনুসরণ করুন।', 'rovermap.png') ডিসপ ('ইমেল পাঠানো') শেষ

প্রস্তাবিত: