Mục lục:
- Bước 1: Vật liệu và nguồn cung cấp:
- Bước 2:
- Bước 3: Lắp ráp "Khu vườn" của bạn
- Bước 4: Viết mã
- Bước 5: Sao chép mã
Video: Garden Helper Roomba Bot: 8 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
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ấ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
-
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
-
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
- Ở 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
-
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
- Đặ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:
Đèn cốc bọt tự làm - Ý tưởng trang trí Diwali dễ dàng và rẻ tiền bằng cách sử dụng cốc bọt: 4 bước
Đèn cốc bọt tự làm | Ý tưởng trang trí Diwali dễ dàng và rẻ tiền bằng cách sử dụng cốc bọt: Trong bài đăng này, chúng ta sẽ nói về dự án tổ chức Lễ kỷ niệm Diwali với ngân sách tiết kiệm. Tôi hy vọng bạn sẽ thích hướng dẫn này
Breadboard Wire Helper: 10 bước (có hình ảnh)
Breadboard Wire Helper: Tài liệu hướng dẫn này chỉ ra cách xây dựng một công cụ để giúp tạo mẫu breadboard dễ dàng hơn và gọn gàng hơn. Tôi gọi nó là Breadboard Wire Helper
Ultimate Electronics Helper -- PSU hàng đầu có thể thay đổi được với bàn tay trợ giúp: 12 bước (có hình ảnh)
Ultimate Electronics Helper || PSU hàng đầu có thể thay đổi được với bàn tay trợ giúp: Khi làm việc với thiết bị điện tử, hai công cụ luôn cần thiết. Hôm nay chúng ta sẽ tạo ra hai yếu tố cần thiết này. Và chúng tôi cũng sẽ tiến thêm một bước nữa và hợp nhất hai thứ này lại với nhau thành một thiết bị trợ giúp điện tử tối tân! Tất nhiên, tôi đang nói abou
Roomba Bot the Bulider: 5 bước (có hình ảnh)
Roomba Bot the Bulider: Bot the Builder là một roomba, có " người lấy " gắn vào phía trước sẽ có thể di chuyển các đối tượng xung quanh. Mã với nó được thiết lập để ghi lại chuyển động đầu tiên với một hộp GUI mà bạn có thể điều khiển chỉ bằng một cú nhấp chuột. Sau
ROS MoveIt Cánh tay rô bốt Phần 2: Bộ điều khiển rô bốt: 6 bước
ROS MoveIt Robotic Arm Phần 2: Robot Controller: https://github.com/AIWintermuteAI/ros-moveit-arm.git Trong phần trước của bài viết, chúng tôi đã tạo các tệp URDF và XACRO cho cánh tay robot của chúng tôi và khởi chạy RVIZ để điều khiển cánh tay robot trong môi trường mô phỏng. Lần này chúng ta sẽ làm điều đó với