Mục lục:

Garden Helper Roomba Bot: 8 bước
Garden Helper Roomba Bot: 8 bước

Video: Garden Helper Roomba Bot: 8 bước

Video: Garden Helper Roomba Bot: 8 bước
Video: You’re welcome 😚 #Roomba #maintenance 2024, Tháng mười một
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

Kiara Myers, Ahmad Alghadeer và Madison Tippet

Mục đích:

Tài liệu hướng dẫn này sẽ dạy bạn cách lập trình Roomba Bot, sử dụng MATLAB, để điều hướng trong vườn, phát hiện các loại trái cây / rau có hình tròn đủ chín để hái dựa trên kích thước của chúng. Robot này cũng gửi cho bạn một email, thông báo cho bạn biết có bao nhiêu trái cây đã sẵn sàng để hái và con đường mà nó đã đi.

Đặc trưng:

  • Sử dụng cảm biến ánh sáng để phát hiện các bức tường và quay nhẹ để tránh va vào chúng
  • Sử dụng cảm biến va đập để phá vỡ chương trình khi nó va vào tảng đá ở cuối khu vườn
  • Sử dụng xử lý hình ảnh để phát hiện một vòng tròn trong vườn và sau đó xác định bán kính của nó
  • Sử dụng cảm biến vách đá để phát hiện băng màu cho biết sự hiện diện của trái cây

Bước 1: Vật liệu và nguồn cung cấp:

  • Một máy tính xách tay
  • MATLAB 2017
  • Máy hút bụi Roomba
  • Raspberry Pi
  • Khối gỗ
  • Giấy trắng
  • Giấy đen
  • Băng màu / dải giấy màu mỏng
  • Đá lớn

Bước 2:

Bước 3: Lắp ráp "Khu vườn" của bạn

Lắp ráp của bạn
Lắp ráp của bạn
  1. Lấy giấy đen của bạn và cắt các hình tròn với nhiều kích cỡ khác nhau
  2. Dán các hình tròn màu đen này lên một tờ giấy trắng lớn

    Sự tương phản này sẽ cần thiết khi phát hiện một loại trái cây

  3. Sử dụng mộc bản của bạn để xây dựng một con đường trong vườn giống như mê cung để rô bốt của bạn điều hướng

    Chúng tôi đã chọn một con đường hình chữ U như hình trên

  4. Ở cuối khu vườn của bạn, hãy thêm một tảng đá hoặc cánh cửa hoặc một vật thể khác để rô bốt của bạn biết là đã xong
  5. Dán giấy trắng của bạn với hình tròn lên các bức tường của khu vườn

    Chúng tôi đã sử dụng những chiếc xô để dán nó vào vì bức tường của chúng tôi quá ngắn đối với máy ảnh

  6. Đặt băng dính màu / dải giấy màu mỏng trên mặt đất trước quả

Bước 4: Viết mã

Điều hướng khu vườn

Sử dụng Bump Sensors: Để chạy chương trình, chúng tôi đặt mã hóa trong một câu lệnh while lặp lại qua các câu lệnh if khác nhau cho đến khi mã bị hỏng. Nếu bất kỳ đoạn đệm nào bị chạm vào, thì giá trị của chúng sẽ bằng true (trong Boolean là giá trị 1). Câu lệnh if được sử dụng để ngắt mã khi một trong các giá trị của chúng bằng 1.

Sử dụng Cảm biến Vách đá: Trong câu lệnh while, chúng tôi sử dụng câu lệnh if để cho Roomba biết khi nào nó đã đến vị trí của một nhà máy. Roomba phát hiện băng màu trên sàn bằng cách kiểm tra ngưỡng màu đỏ mà cảm biến vách đá thu nhận. Nếu cảm biến vách đá bên trái hoặc bên phải phát hiện màu có ngưỡng lớn hơn màu của mặt đất, thì nó sẽ dừng robot trong 2 giây (sử dụng lệnh tạm dừng). Trong 2 giây này, Roomba sẽ chụp và hiển thị hình ảnh của trái cây. Sử dụng lệnh imfindcircles được tích hợp sẵn, đặt một phạm vi cho bán kính của các vòng kết nối của bạn và Roomba của bạn sẽ tìm thấy cái gọi là trái cây của bạn.

Sử dụng Xử lý Hình ảnh: Trong câu lệnh if, chúng tôi nhúng một câu lệnh if khác cho biết: nếu bán kính được phát hiện, bán kính 3, lớn hơn hoặc bằng yêu cầu tối thiểu của chúng tôi đối với một trái cây chín, r1 (bạn quyết định điều này), sau đó đếm và hiển thị trên Roomba có bao nhiêu trái cây đã sẵn sàng và quay tiếp tục đi qua khu vườn. Nếu không, đến lượt tiếp tục qua vườn. Lưu ý: bạn có thể cần điều chỉnh góc quay vì mỗi Roomba đều khác nhau

Sử dụng Quảng cáo đệm: Trong một câu lệnh if khác, các cản sáng được phân tích để đảm bảo không có chúng nào lớn hơn ngưỡng đã xác định của chúng tôi. Nếu cản đèn trước bên trái, bên phải, bên trái, giữa bên phải, bên trái trước hoặc bên phải vượt quá ngưỡng, thì Roomba sẽ quay nhẹ theo góc thích hợp để tránh va vào tường. Do đó, điều hướng mê cung.

Phần còn lại của mã được sử dụng để vẽ đường dẫn do Roomba thực hiện và sau đó gửi kết quả đến email của bạn

Bước 5: Sao chép mã

Mục đích: Dựa trên kích thước của chúng, roomba sẽ đi qua một khu vườn và phân biệt các loại rau / trái cây đã sẵn sàng để hái. % Đầu vào: Cảm biến cản sáng, Cảm biến vách đá, Cảm biến Bump, hình ảnh từ máy ảnh% Kết quả đầu ra: Bất cứ khi nào cảm biến ánh sáng lớn hơn ngưỡng, roomba sẽ quay và chụp ảnh, tiếng bíp nếu bán kính của% rau / trái cây nằm trong một phạm vi cụ thể. Mã bị phá vỡ khi roomba va vào% một đối tượng, gửi cho phi hành gia một email về số lượng trái cây đã sẵn sàng để hái% và lập bản đồ chuyển động của roomba. % Cách sử dụng: Câu lệnh if và while, lệnh vẽ biểu đồ, mã email từ MATLAB

k = 0

tic

timerVal = tic

trong khi đúng

v =.2; % tốc độ r.setDriveVelocity (v, v);% roomba đi về phía trước L = r.getLightBumpers; LC = L.leftCenter; Rr = L.phải; Lf = L.left; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; ngưỡng%. RTH = 30; % Ngưỡng đỏ cao RTL = 10; % Thấp ngưỡng màu đỏ B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; nếu S.leftFront> PL1 || S.rightFront> PL1% phát hiện xem màu trên mặt đất có vượt quá ngưỡng r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% tạm dừng trong 2 giây img = r.getImage; % lấy hình ảnh imshow (img)% display image [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitive', 0.9); h = viscircles (tâm3, bán kính3); % tìm kiếm các vòng tròn có bán kính w / trong phạm vi xác định trong ảnh nếu bán kính3> = r1 T = 1 k = k + 1 dist1 = 0,2. * ElapsedTime% Nếu bán kính được phát hiện lớn hơn hoặc bằng% yêu cầu tối thiểu của quả chín, thì Roomba sẽ tính quả này khác nếu bán kính3 <= r3 T = 0 else T = 0 dist2 = 0,2. * ElapsedTime% Nếu không, thì nó không tính quả cuối cùng

if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Nếu một quả được phát hiện, hãy hiển thị số trên Roomba,% tạo ra tiếng ồn và quay elseif T == 2 r.turnAngle (78)% Nếu phát hiện ra 2 trái cây, sau đó quay sang tiếp tục qua khu vườn% else r.turnAngle (78)% Nếu không có trái nào được phát hiện, sau đó quay đầu tiếp tục qua khu vườn% kết thúc if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end% Nếu bất kỳ giá trị nào của bộ đệm sáng vượt quá ngưỡng thì% Roomba sẽ hơi quay theo hướng thích hợp để tránh% va vào tường

nếu B.right == 1 || B.left == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Nếu bất kỳ các con số được nhấn, sau đó roomba phát âm thanh, quay xung quanh,% và phá vỡ mã

ngắt kết thúc

end scatter (0.533, 0, '^') giữ ở scatter (0.533, dist1, '<') giữ ở scatter (-dist2, dist1, 'v') giữ scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123 #' host = 'smtp.gmail.com' port = '465'

setpref ('Internet', 'E_mail', thư); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', thư); props.setProperty ('mail.smtp.host', máy chủ lưu trữ); props.setProperty ('mail.smtp.port', cổng); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', cổng); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (mail, "Xin chào Phi hành gia! Có rất nhiều trái cây trong vườn này", kmsg, {'movement.png'})

Đề xuất: