สารบัญ:

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

ปัจจุบัน รถสำรวจดาวอังคารถูกใช้เพื่อรวบรวมข้อมูลบนพื้นผิวดาวอังคารด้วยวิธีการต่างๆ นานา จนถึงจุดสิ้นสุดของการเรียนรู้เพิ่มเติมเกี่ยวกับศักยภาพของจุลินทรีย์ในโลกใบนี้ รถแลนด์โรเวอร์ใช้เครื่องมือถ่ายภาพและวิเคราะห์ดินเป็นหลักในการเก็บรวบรวมข้อมูล แต่รถโรเวอร์ยังรวมถึงเครื่องมือนำทาง เครื่องตรวจจับรังสี เซ็นเซอร์บรรยากาศ และเลเซอร์สำหรับการทำให้ตัวอย่างหินกลายเป็นไอ เป้าหมายของภารกิจโรเวอร์ในปี 2020 ที่วางแผนไว้นั้นส่วนใหญ่เหมือนกัน แต่ด้วยภารกิจพิเศษในการ "รวบรวมตัวอย่างดินและหินและเก็บตัวอย่างไว้บนพื้นผิวเพื่อกลับสู่โลกโดยภารกิจในอนาคต" ตามที่ NASA กล่าว

อย่างไรก็ตาม ภายใต้สมมติฐานที่ว่ารถแลนด์โรเวอร์ในอนาคตจะถูกนำมาใช้เพื่อช่วยเหลือมนุษย์ ทีมงานของเราได้พิจารณาถึงแง่มุมของมนุษย์ที่รถแลนด์โรเวอร์สามารถตรวจสอบได้ เราได้ข้อสรุปว่าหากมีเหตุฉุกเฉินบางอย่างทำให้นักบินอวกาศหมดสติด้วยการสนับสนุนชีวิตและอุปกรณ์ที่ล้มเหลว รถแลนด์โรเวอร์ของเราสามารถทำหน้าที่เป็นสัญญาณไฟที่เคลื่อนที่ได้โดยการสังเกตว่านักบินอวกาศที่ตามมานั้นไม่สามารถเคลื่อนที่ได้และถ่ายทอดข้อความแห่งความทุกข์ ในการติดตามมนุษย์และกำหนดความไม่สามารถเคลื่อนที่ได้ รถแลนด์โรเวอร์จะรับข้อมูลต่างๆ เช่น สีของรองเท้าของมนุษย์และการเคลื่อนที่ของรองเท้า ข้อมูลอื่นที่ต้องพิจารณาคือจะต้องจำเส้นทางเพื่อส่งสัญญาณความทุกข์ในกรณีฉุกเฉิน รถแลนด์โรเวอร์ของเราตอบสนองความต้องการบนดาวอังคารในการที่พยายามทำภารกิจราคาแพงบนภูมิประเทศต่างประเทศดังกล่าว จำเป็นต้องมีตู้ป้องกันความผิดพลาดหลายชั้น และหากนักบินอวกาศไม่สามารถขอความช่วยเหลือได้เองเนื่องจากการทำงานผิดพลาดหรือหมดสติ รถแลนด์โรเวอร์สามารถแจ้งเตือนผู้อื่นได้.

คำแนะนำนี้ได้รับการออกแบบมาเพื่อช่วยผู้อ่านในการเขียนโปรแกรม Roomba ของตนให้ติดตาม "นักบินอวกาศ" ได้สำเร็จและเพื่อส่งสัญญาณความทุกข์ถ้ามี

ขั้นตอนที่ 1: วัสดุที่จำเป็น

วัสดุที่จำเป็น
วัสดุที่จำเป็น

1) คอมพิวเตอร์/แล็ปท็อปที่เชื่อมต่ออินเทอร์เน็ตได้

2) MATLAB_R2018a

3) ดาวน์โหลด Roomba และ Roomba

ขั้นตอนที่ 2: ตั้งค่า/ดาวน์โหลด

ตั้งค่า/ดาวน์โหลด
ตั้งค่า/ดาวน์โหลด

เรียกใช้สคริปต์นี้ใน MATLAB เพื่อดาวน์โหลดซอฟต์แวร์ที่จำเป็นในการเข้าถึง Roomba (บันทึกไว้ในไฟล์ของตัวเองในโฟลเดอร์โครงการ)

ความช่วยเหลือเพิ่มเติม:

% โปรแกรมการติดตั้งสำหรับ EF 230 Roomba Project% อัปเดตล่าสุด: 13 กันยายน 2017 (แก้ไขปัญหาด้านความปลอดภัยที่เกี่ยวข้องกับเซิร์ฟเวอร์ https และลบไฟล์ลบคำเตือนหากเกิดข้อผิดพลาด) ฟังก์ชัน roombaInstall clc; % รายการไฟล์ที่จะติดตั้งไฟล์ = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % ตำแหน่งที่จะติดตั้งจากตัวเลือก = weboptions ('CertificateFilename', ''); % บอกให้ละเว้นข้อกำหนดใบรับรองเซิร์ฟเวอร์ = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'ติดตั้ง/อัปเดต Roomba'; % วัตถุประสงค์ในการแสดงผลและรับข้อความยืนยัน = { 'โปรแกรมนี้จะดาวน์โหลดไฟล์ EF 230 Roomba เหล่านี้:' '' strjoin (ไฟล์, ' ') '' 'ไปยังโฟลเดอร์นี้:' '' cd '' 'คุณต้องการดำเนินการต่อหรือไม่? ' }; เสียงบี๊บ; yn = questdlg(พร้อมท์, … dlgTitle, … 'ใช่', 'ไม่', 'ใช่');

ถ้า ~strcmp(yn, 'ใช่') ให้ส่งคืน; จบ

% รับรายการไฟล์ที่มีอยู่ที่มีอยู่_files = files(cellfun(@exist, files) > 0); if ~isempty(existing_files) % ตรวจสอบให้แน่ใจว่าสามารถแทนที่ได้ prompt = {'คุณกำลังแทนที่ไฟล์เหล่านี้:' '' strjoin (existing_files, ' ') '' 'ตกลงที่จะแทนที่หรือไม่' }; เสียงบี๊บ; yn = questdlg(พร้อมท์, … dlgTitle, … 'ใช่', 'ไม่', 'ใช่'); ถ้า ~strcmp(yn, 'ใช่') ให้ส่งคืน; ปลาย ปลาย

% ดาวน์โหลดไฟล์ cnt = 0; สำหรับ i=1:length(files) f=files{i}; disp(['กำลังดาวน์โหลด' f]); ลอง url = [เซิร์ฟเวอร์ f]; บันทึกเว็บ (f, url, ตัวเลือก); % เพิ่มตัวเลือกเพื่อหลีกเลี่ยงข้อผิดพลาดด้านความปลอดภัย cnt = cnt + 1; catch disp(['เกิดข้อผิดพลาดในการดาวน์โหลด' f]); หุ่น = [f '.html']; ถ้ามี (จำลอง, 'ไฟล์')==2 ลบ (จำลอง) สิ้นสุดปลายสิ้นสุด

ถ้า cnt == length(files) msg = 'การติดตั้งสำเร็จ'; waitfor(msgbox(msg, dlgTitle)); else msg = 'ข้อผิดพลาดในการติดตั้ง - โปรดดูรายละเอียดที่หน้าต่างคำสั่ง'; รอ (errordlg(msg, dlgTitle)); จบ

สิ้นสุด %roombaInstall

ขั้นตอนที่ 3: รหัสส่วนที่ 1: ฟังก์ชันการติดตาม

รหัสส่วนที่ 1: ฟังก์ชั่นการติดตาม
รหัสส่วนที่ 1: ฟังก์ชั่นการติดตาม

ฟังก์ชันนี้ใช้ตัวแปร Roomba และรูปภาพจากกล้องบน Roomba และค้นหาพิกัด xy กึ่งกลางของวัตถุที่ติดตาม

บันทึกรหัสนี้ในไฟล์อื่นในโฟลเดอร์เดียวกัน

ฟังก์ชัน [xm, ym] = trackingblue(r)%Inputs: ตัวแปร roomba %Outputs: ค่า x และ y ของจุดศูนย์กลางของวัตถุต่อไปนี้ %Purpose: ค้นหาจุดศูนย์กลางของวัตถุสีน้ำเงินที่กำหนดรูปภาพ %Usage [x value, y ค่า] = trackingblue (ตัวแปร roomba) img=r.getImage; % อ่านกล้องจากแผนย่อยของหุ่นยนต์ (1, 2, 2) ภาพย่อย (img); % แสดงรูปภาพในหน้าต่างเดียวกับชื่อพาธ ('Tracking Image') red = img(:,:, 1); สีเขียว = img(:,:, 2); สีน้ำเงิน = img(:,:, 3); justBlue = น้ำเงิน - เขียว/2 - แดง/2; bw = justBlue > 40; ถือแผนย่อย (1, 2, 2) ภาพย่อย (bw); [x, y] = ค้นหา (bw); ถ้า ~isempty(x) && ~isempty(y) xm = รอบ (ค่าเฉลี่ย (x)); ym = รอบ (ค่าเฉลี่ย (y)); xx = สูงสุด (1, xm-5): นาที (xm+5, ขนาด (bw, 1)); yy = สูงสุด (1, ym-5): นาที (ym+5, ขนาด (bw, 2)); bwbw = ศูนย์ (ขนาด (bw), 'uint8'); bwbw(xx, ปป) = 255; ถือแผนย่อย (1, 2, 2) ภาพย่อย (justBlue + bwbw); จบ

ขั้นตอนที่ 4: รหัสส่วนที่ 2: ขณะวนรอบ

รหัสนี้ขับเคลื่อน Roomba ตามตำแหน่ง x และ y ของวัตถุจากฟังก์ชันการติดตาม สิ่งนี้จะทำให้ Roomba คอยระวังกำแพงและหน้าผาในขณะที่มองหาสีน้ำเงิน สิ่งนี้จะใช้พิกัด x และ y ของเส้นทาง Roomba และสร้างพล็อตที่สอดคล้องกับรูปภาพที่ติดตาม ถ้าเซ็นเซอร์กันกระแทกถูกเปิดใช้งาน มันจะไปยังส่วนอีเมล

%โครงการโรเวอร์

โจนาห์ ซาห์น ราคาเวด โนอาห์สโลน jzahn2, wprice15, nsloan1 ปัจจัยการผลิต: ค่า roomba ข้อมูลกล้อง เซ็นเซอร์กันกระแทก แสงและผนัง วัตถุประสงค์: ติดตามนักบินอวกาศและหลีกเลี่ยงอุปสรรค หากได้รับการแจ้งเตือน Roomba จะส่งอีเมล % รายละเอียดแผนที่และตำแหน่งที่อยู่ตามตำแหน่งเริ่มต้น %การใช้งาน: เพียงแค่เรียกใช้โปรแกรมโดยได้ประกาศตัวแปร roomba แล้ว มีวัตถุสีเขียวเคลื่อนที่ด้วย %ผลลัพธ์: แสดงรูปภาพการติดตามรูปภาพ แผนที่อีเมลและข้อความไปยังผู้ใช้ %% ส่วนต่อไปนี้ b=0; %การเริ่มต้นตัวแปร c=0; x=0; y=0; ทีต้า=0; ในขณะที่ c==0 %วนรอบเพื่อให้ตรวจพบวัตถุสีน้ำเงินและสิ่งกีดขวาง t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue(r); หน้าผา=getCliffSensors(r); % การเริ่มต้นโครงสร้างสำหรับค่าเซ็นเซอร์ light=getLightBumpers(r); ชน= getBumpers(r); ถ้า light.leftCenter >= 10 || light.rightCenter >= 10% สัมผัสได้ว่ามีกำแพงอยู่ใกล้ r.stop r.setLEDDigits('help') c=1 % while b==0 % if bump.right == 1 || bump.left == 1 || Bump.front == 1 % สัมผัสได้หากชนบางอย่างหลังจากสัมผัสกำแพง % c=1 % b=1% disp('bump') % end % end elseif bump.right == 1 || bump.left == 1 || Bump.front == 1 % สัมผัสได้ถ้าชนอะไร ถ้าใช่ จะส่งอีเมล์ r.stop c=1 b=1elseif 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) ปลายสุด theta = theta + r.getAngle; x = d.*cosd(ทีต้า) + x; % x พิกัดของ roomba y = d.*sind(theta).*d + y; % y พิกัดของแผนผังย่อย roomba(1, 2, 1) plot(x, y, 'bd') % วางแผนเส้นทางและเพิ่มชื่อเรื่อง ('Roomba Path') ค้างไว้; จบ

ขั้นตอนที่ 5: รหัสส่วนที่ 3: ส่วนอีเมล

การดำเนินการนี้จะใช้เส้นทางและรูปภาพที่วางแผนไว้ และส่งไปยังที่อยู่อีเมลที่ระบุ

(แสดงที่นี่พร้อมตัวอย่างอีเมล)

%% ส่วนอีเมล

ถ้า b==1 saveas(gcf, 'rovermap.png') % บันทึกตัวเลข setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('อินเทอร์เน็ต', 'อีเมล', '[email protected]'); % บัญชีเมลที่จะส่งจาก setpref('Internet', 'SMTP_Username', '[email protected]'); % ผู้ส่งชื่อผู้ใช้ setpref('Internet', 'SMTP_Password', 'gssegsse'); % ผู้ส่งรหัสผ่าน props = 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'); sendmail('อีเมลตัวอย่าง', 'RoverBeacon', 'นักบินอวกาศหยุดเคลื่อนไหวแล้ว สำหรับการกู้คืน ให้ทำตามคำแนะนำในไฟล์แนบ', 'rovermap.png') disp('อีเมลที่ส่ง') สิ้นสุด

แนะนำ: