Mục lục:

Dự án UTK EF 230 MarsRoomba mùa thu 2018: 5 bước
Dự án UTK EF 230 MarsRoomba mùa thu 2018: 5 bước

Video: Dự án UTK EF 230 MarsRoomba mùa thu 2018: 5 bước

Video: Dự án UTK EF 230 MarsRoomba mùa thu 2018: 5 bước
Video: [AceStarter x Galatic War] Review dự án Gamefi | NFT Games 2024, Tháng mười một
Anonim
Dự án UTK EF 230 MarsRoomba mùa thu 2018
Dự án UTK EF 230 MarsRoomba mùa thu 2018

Hiện tại, tàu thám hiểm sao Hỏa được sử dụng để thu thập dữ liệu trên bề mặt sao Hỏa thông qua nhiều phương pháp khác nhau, nhằm mục đích cuối cùng là tìm hiểu thêm về tiềm năng của hành tinh đối với sự sống của vi sinh vật. Người lái xe chủ yếu sử dụng các công cụ chụp ảnh và phân tích đất để thu thập dữ liệu, nhưng người lái xe cũng bao gồm các công cụ điều hướng, máy dò bức xạ, cảm biến khí quyển và tia laser để làm bốc hơi mẫu đá. Theo NASA, mục tiêu của sứ mệnh thám hiểm đã được lên kế hoạch vào năm 2020 hầu như giống nhau, nhưng với nhiệm vụ đặc biệt là "thu thập các mẫu đất và đá và lưu chúng trên bề mặt để có thể trở về Trái đất trong một sứ mệnh trong tương lai", theo NASA.

Tuy nhiên, với tiền đề rằng những người lái xe trong tương lai sẽ được sử dụng để hỗ trợ con người, nhóm của chúng tôi đã xem xét những khía cạnh nào của con người mà người lái xe có thể giám sát. Chúng tôi đã đi đến kết luận rằng nếu trường hợp khẩn cấp nào đó khiến một phi hành gia bất tỉnh với thiết bị hỗ trợ sự sống và thiết bị không hoạt động, chiếc máy bay của chúng tôi có thể đóng vai trò như một đèn hiệu di động vào ban ngày bằng cách quan sát thấy phi hành gia mà nó theo dõi đang bất động và chuyển tiếp thông báo về sự cố. Để theo dõi con người và xác định tình trạng bất động, người điều khiển sẽ lấy các yếu tố đầu vào như màu giày của con người và chuyển động của họ. Một đầu vào khác cần xem xét là nó sẽ phải nhớ đường đi của nó để chuyển tiếp tín hiệu cấp cứu trong trường hợp khẩn cấp. Người thám hiểm của chúng tôi đáp ứng nhu cầu trên sao Hỏa trong việc cố gắng thực hiện một sứ mệnh tốn kém trên địa hình xa lạ như vậy đòi hỏi nhiều lớp bảo vệ dự phòng và nếu một phi hành gia không thể nhận được sự trợ giúp của họ do sự cố hoặc bất tỉnh, người lái xe có thể cảnh báo cho những người khác.

Có thể hướng dẫn này được thiết kế để hỗ trợ người đọc trong việc lập trình Roomba của mình để theo dõi thành công một "phi hành gia" và gửi tín hiệu cấp cứu nếu có.

Bước 1: Vật liệu cần thiết

Vật liệu cần thiết
Vật liệu cần thiết

1) Máy tính / máy tính xách tay có thể truy cập Internet

2) MATLAB_R2018a

3) Tải xuống Roomba và Roomba

Bước 2: Thiết lập / Tải xuống

Thiết lập / Tải xuống
Thiết lập / Tải xuống

Chạy tập lệnh này trong MATLAB để tải xuống phần mềm cần thiết để truy cập Roomba (được lưu trong tệp riêng của nó trong thư mục dự án)

Trợ giúp Bổ sung:

% Chương trình cài đặt cho Dự án Roomba EF 230% Cập nhật lần cuối: Ngày 13 tháng 9 năm 2017 (Đã khắc phục sự cố bảo mật liên quan đến máy chủ https và loại bỏ cảnh báo xóa tệp nếu xảy ra lỗi) function roombaInstall clc; % danh sách các tập tin cần cài đặt files = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % vị trí cần cài đặt từ options = weboptions ('CertificateFilename', ''); % yêu cầu nó bỏ qua máy chủ yêu cầu chứng chỉ = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Cài đặt / Cập nhật Roomba'; % display mục đích và nhận lời nhắc xác nhận = {'Chương trình này sẽ tải xuống các tệp Roomba EF 230 này:' '' strjoin (files, '') '' 'vào thư mục này:' '' cd '' 'Bạn có muốn tiếp tục không? '}; tiếng kêu bíp; yn = questdlg (nhắc,… dlgTitle,… 'Có', 'Không', 'Có');

if ~ strcmp (yn, 'Yes'), return; kết thúc

% lấy danh sách các tập tin tồn tại current_files = files (cellfun (@exist, files)> 0); if ~ isempty (current_files)% hãy đảm bảo rằng việc thay thế chúng là thực sự ổn. }; tiếng kêu bíp; yn = questdlg (nhắc,… dlgTitle,… 'Có', 'Không', 'Có'); if ~ strcmp (yn, 'Yes'), return; kết thúc cuối cùng

% tải xuống các tệp cnt = 0; for i = 1: length (files) f = files {i}; disp (['Đang tải xuống' f]); thử url = [máy chủ f]; websave (f, url, tùy chọn); % thêm tùy chọn để tránh lỗi bảo mật cnt = cnt + 1; catch disp (['Lỗi khi tải xuống' f]); dummy = [f '.html']; nếu tồn tại (dummy, 'file') == 2 xóa (dummy) end end end

if cnt == length (files) msg = 'Cài đặt thành công'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Lỗi Cài đặt - xem cửa sổ lệnh để biết chi tiết'; waitfor (errordlg (msg, dlgTitle)); kết thúc

end% roombaInstall

Bước 3: Mã Phần 1: Chức năng theo dõi

Mã Phần 1: Chức năng theo dõi
Mã Phần 1: Chức năng theo dõi

Hàm này lấy biến Roomba và ảnh từ camera trên Roomba và tìm tọa độ xy tâm của đối tượng được theo dõi

Lưu mã này trong một tệp khác trong cùng một thư mục.

function [xm, ym] = trackingblue (r)% Đầu vào: biến roomba% Đầu ra: giá trị x và y của tâm đối tượng sau% Mục đích: tìm tâm của đối tượng màu xanh lam cho một hình ảnh% Sử dụng [giá trị x, y value] = trackingblue (biến roomba) img = r.getImage; % đọc máy ảnh khỏi ô con rô bốt (1, 2, 2) (img); % hiển thị hình ảnh trong cùng một cửa sổ với tiêu đề đường dẫn ('Hình ảnh theo dõi') red = img (:,:, 1); green = img (:,:, 2); blue = img (:,:, 3); justBlue = blue - green / 2 - red / 2; bw = justBlue> 40; giữ trên subplot (1, 2, 2) subimage (bw); [x, y] = find (bw); if ~ isempty (x) && ~ isempty (y) xm = round (mean (x)); ym = round (mean (y)); xx = max (1, xm-5): min (xm + 5, size (bw, 1)); yy = max (1, ym-5): min (ym + 5, size (bw, 2)); bwbw = zeros (size (bw), 'uint8'); bwbw (xx, yy) = 255; giữ trên subimage subplot (1, 2, 2) (justBlue + bwbw); kết thúc

Bước 4: Mã Phần 2: Trong khi Vòng lặp

Mã này điều khiển Roomba dựa trên vị trí x và y của đối tượng từ chức năng theo dõi. Điều này sẽ làm cho Roomba trông chừng các bức tường và vách đá, đồng thời tìm kiếm màu xanh. Thao tác này cũng sẽ lấy tọa độ x và y của đường dẫn Roomba và tạo ra một âm mưu tương ứng với hình ảnh theo dõi. Nếu cảm biến va chạm được kích hoạt, nó sẽ chuyển sang phần email

Dự án% Rover

% Jonah Zahn, Wade Price, Noah Sloan% jzahn2, wprice15, nsloan1% Đầu vào: giá trị roomba, dữ liệu camera, cảm biến va chạm, ánh sáng và tường% Mục đích: Theo dõi phi hành gia và tránh chướng ngại vật. Nếu được cảnh báo, roomba sẽ gửi email% nêu chi tiết bản đồ và vị trí của bản đồ theo vị trí bắt đầu của nó. % Cách sử dụng: chỉ cần chạy chương trình với việc khai báo một biến roomba, cũng% có một đối tượng màu xanh lá cây chuyển động% Kết quả: hiển thị hình ảnh theo dõi hình ảnh, bản đồ email và văn bản cho người dùng %% Theo dõi Phần b = 0; % Khởi tạo biến c = 0; x = 0; y = 0; theta = 0; while c == 0% Vòng lặp để làm cho nó phát hiện đối tượng màu xanh lam và các chướng ngại vật t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); vách đá = getCliffSensors (r); % khởi tạo cấu trúc cho các giá trị cảm biến light = getLightBumpers (r); mấp mé = getBumpers (r); nếu light.leftCenter> = 10 || light.rightCenter> = 10% Senses nếu có một bức tường gần r.stop r.setLEDDigits ('trợ giúp') c = 1% trong khi b == 0% nếu va chạm phải == 1 || va chạm.left == 1 || coll.front == 1% Senses nếu nó đã va phải thứ gì đó sau khi cảm nhận được bức tường% c = 1% b = 1% disp ('va')% end% end elseif va.right == 1 || va chạm.left == 1 || va chạm.front == 1% Các giác quan nếu nó va phải thứ gì đó, nếu có, nó sẽ gửi một email r.stop c = 1 b = 1 elseif vách đá.leftFront <= 100 || vách đá.rightFront <= 100 || vách đá.left <= 100 || vách đá.right <= 100% Các cảm giác nếu có một vách đá gần r.stop c = 1 r.setLEDDigits ('trợ giúp') else% Đặt vận tốc truyền động theo màu xanh lam nếu yval = 100 r.setDriveVelocity (0,1) elseif yval 400 r.turnAngle (-5) end end theta = theta + r.getAngle; x = d. * cosd (theta) + x; % x tọa độ của roomba y = d. * sind (theta). * d + y; % y tọa độ của ô con roomba (1, 2, 1) (x, y, 'bd')% vẽ sơ đồ đường dẫn và thêm tiêu đề ('Roomba Path') giữ nguyên; kết thúc

Bước 5: Mã Phần 3: Phần Email

Thao tác này sẽ lấy đường dẫn và hình ảnh được vẽ và gửi nó đến một địa chỉ email được chỉ định

(Hiển thị ở đây với email mẫu)

%% Phần Email

if b == 1 saveas (gcf, 'rovermap.png')% lưu hình setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % tài khoản thư cần gửi từ setpref ('Internet', 'SMTP_Username', '[email protected]'); % người gửi tên người dùng setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Người gửi đạo cụ mật khẩu = 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 ('ví dụ email', 'RoverBeacon', 'Phi hành gia đã ngừng di chuyển. Để khôi phục, hãy làm theo hướng dẫn trong tệp đính kèm.', 'rovermap.png') disp ('email đã gửi') end

Đề xuất: