Mục lục:

Dự án Mars Roomba UTK: 4 bước
Dự án Mars Roomba UTK: 4 bước

Video: Dự án Mars Roomba UTK: 4 bước

Video: Dự án Mars Roomba UTK: 4 bước
Video: Cách tạo MASTERPIECES! Dimash và Sundet 2024, Tháng mười một
Anonim
Dự án Mars Roomba UTK
Dự án Mars Roomba UTK
Dự án Mars Roomba UTK
Dự án Mars Roomba UTK

KHUYẾN CÁO: ĐIỀU NÀY SẼ CHỈ HOẠT ĐỘNG NẾU ROOMBA ĐƯỢC THIẾT LẬP TRONG

CÁCH RẤT CỤ THỂ, HƯỚNG DẪN NÀY ĐÃ ĐƯỢC TẠO VÀ HƯỚNG DẪN SỬ DỤNG CHO SINH VIÊN ĐẠI HỌC TENNESSEE VÀ MẶT TIỀN

Mã này được sử dụng để thiết lập Roomba chạy mã được lưu và viết cục bộ trong MATLAB. Điều này sẽ không hiệu quả nếu bạn không thể lấy các thư viện cần thiết từ trang web của Đại học Tennessee. Nếu bạn có các thư viện thì bạn có thể sử dụng chúng để lập trình Roomba của riêng mình bằng các chức năng trong thư viện. Có thể hướng dẫn này hướng dẫn bạn cách cài đặt các thư viện, tạo một thư mục cho tất cả mã, cũng như cách viết mã và sử dụng chương trình mà chúng tôi đã cung cấp bên dưới.

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

· Roomba

· MATLAB

· Máy ảnh Raspberry Pi và Pi

Bước 1: Nhận các thư viện

Trên trang web kỹ thuật có một hộp công cụ / thư viện được cung cấp, hãy tải xuống và đặt nó vào một thư mục mới. Thư mục này phải chứa tất cả các tệp công việc của dự án vì bất kỳ chức năng nào được sử dụng trong một chương trình bạn tạo sẽ cần phải tham chiếu đến thư viện. Sau khi hoàn thành việc này, bạn có thể bắt đầu làm việc trên các chương trình của mình

Bước 2: Viết chương trình

Có khá nhiều chức năng có thể được sử dụng trong chương trình, các chức năng này có thể được truy cập bằng cách sử dụng lệnh "doc roomba". Sử dụng các chức năng này, bạn có thể kiểm soát Roomba của mình theo nhiều cách khác nhau. Đoạn mã được đưa ra bên dưới sử dụng cảm biến va chạm, cảm biến vạch sáng, máy ảnh và cảm biến vách đá theo những cách khác nhau để tạo ra một người đi thám hiểm sao hỏa. Chúng tôi đã sử dụng các cảm biến va đập để phát hiện khi Roomba chạm vào một vật thể, khi điều này xảy ra, robot sẽ đảo ngược, quay lại và tiếp tục di chuyển. Trước khi Roomba chạm vào một đối tượng, thanh ánh sáng sẽ phát hiện đối tượng và làm chậm Roomba để khi nó va vào đối tượng để kích hoạt cảm biến va chạm, Roomba sẽ ít bị hư hỏng / ảnh hưởng bởi tác động. Camera tìm kiếm nước hoặc dung nham trên bề mặt, nếu không tìm thấy chất lỏng thì robot sẽ tiếp tục tìm kiếm, nếu tìm thấy có nước thì robot sẽ nhắn tin cho người vận hành. Các cảm biến vách đá được thiết kế để ngăn robot nếu nó đến gần một vách đá. Nếu robot cảm nhận được một vách đá, nó sẽ đảo ngược và quay đầu lại để tránh rơi.

Bước 3: Mã

Sao chép và dán tệp này vào tệp MATLAB nằm trong cùng thư mục với thư viện

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

trong khi vòng lặp while true% Infinte để tiếp tục chạy mã

dontFall = vách đáCheck (r)% Gán biến 'dontFall' cho hàm 'vách đá'

if dontFall% if câu lệnh để tiếp tục trong mã sau khi 'vách đá' hoàn tất

r.setDriveVelocity (0,1, 0,1)% Giữ cho Roomba tiếp tục di chuyển sau khi 'kiểm tra lại' hoàn tất

end% kết thúc câu lệnh if 'dontFall'

Bội = va chạm (r)% Gán biến 'bội' cho hàm 'đệm'

if Bội% if câu lệnh để tiếp tục trong mã sau khi 'kiểm tra lại' hoàn tất

r.setDriveVelocity (0,1, 0,1)% Giữ cho Roomba di chuyển sau khi 'kiểm tra lại' hoàn tất

end% kết thúc câu lệnh if 'bội'

chất lỏng = LiquidCheck (r)% Gán 'chất lỏng' biến đổi cho hàm 'LiquidCheck'

if liquid% if để tiếp tục trong mã sau khi 'LiquidCheck' hoàn tất

r.setDriveVelocity (0,1, 0,1)% Giữ cho Roomba hoạt động sau khi 'LiquidCheck' hoàn tất

end% kết thúc câu lệnh if 'chất lỏng'

lightbumper = lightcheck (r)% Gán biến 'lightbumper' cho hàm 'lightcheck'

tạm dừng (0,1)% Tạm dừng trong thời gian ngắn để tránh lặp lại vòng lặp liên tục

end% kết thúc vòng lặp while vô hạn

end% kết thúc chức năng

chức năng cản = va chạm (r)% Tạo chức năng 'va chạm'

vapedata = r.getBumpers% Gán tất cả dữ liệu từ đoạn quảng cáo đệm thành 'dữ liệu đệm' biến

bội thu = vapedata.right || vapedata.left || colldata.front% Tạo một biến được lưu trữ, 'đoạn đệm', cho các đoạn đệm khác nhau

if colldata.right> 0% Câu lệnh if để khiến các chức năng khác nhau của roomba xảy ra nếu Bumper bị va chạm

r.stop% Dừng Roomba

r.moveDistance (-0,3, 0,2)% Đảo ngược Roomba 0,3m

r.turnAngle (90, 0,5)% Xoay Roomba 90 độ nhanh nhất có thể

kết thúc

nếu vapedata.front> 0

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (randi (270), 0,5)% Xoay Roomba theo khoảng thời gian ngẫu nhiên từ 0 đến 270 độ càng nhanh càng tốt

kết thúc

nếu vapedata.left> 0

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (-90, 0,5)% Xoay Roomba -90 độ nhanh nhất có thể

kết thúc

kết thúc

function lightbumper = lightcheck (r)% Tạo chức năng 'lightcheck'

lightdata = r.getLightBumpers% Gán tất cả dữ liệu từ cảm biến cản sáng thành 'lightdata' có thể thay đổi

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Tạo một biến được lưu trữ, 'lightbumper', cho các cản sáng khác nhau

if lightbumper Câu lệnh% if để gọi dữ liệu lightbumper từ phía trên

if lightdata.left> 10% Câu lệnh if khiến các chức năng khác nhau của roomba xảy ra nếu bộ cản sáng cảm nhận được lớn hơn 10 giá trị

r.setDriveVelocity (0,05, 0,05)% Làm chậm roomba để chuẩn bị cho va chạm

end% kết thúc câu lệnh if ban đầu

nếu lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

kết thúc

nếu lightdata.right> 10

r.setDriveVelocity (0,05, 0,05)

kết thúc

nếu lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

kết thúc

end% kết thúc câu lệnh if 'lightbumper'

end% kết thúc chức năng kiểm tra ánh sáng

function dontFall = vách đáCheck (r)% Tạo chức năng 'vách đá'

data = r.getCliffSensors; % Gán tất cả dữ liệu từ cảm biến vách đá thành 'dữ liệu' có thể thay đổi

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Tạo một biến được lưu trữ, 'dontFall', cho các cảm biến vách đá khác nhau

if dontFall% If để gọi dữ liệu cảm biến vách đá từ phía trên

if data.left <1010% Câu lệnh if khiến các chức năng khác nhau của roomba xảy ra nếu cảm biến vách đá cảm nhận được giá trị nhỏ hơn 1010

r.stop

r.moveDistance (-0,2, 0,2)% Đảo ngược Roomba 0,2m

r.turnAngle (-90, 0,5)% Xoay Roomba -90 độ nhanh nhất có thể

elseif data.leftFront <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5)% Xoay Roomba 90 độ nhanh nhất có thể

elseif data.rightFront <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5)% Xoay Roomba 90 độ nhanh nhất có thể

elseif data.right <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5)% Xoay Roomba 90 độ nhanh nhất có thể

kết thúc

kết thúc

kết thúc

chức năng chất lỏng = LiquidCheck (r)% Tạo chức năng 'LiquidCheck'

trong khi true% bắt đầu vòng lặp vô hạn để hiệu chỉnh

img = r.getImage; % đọc camera tắt của rô bốt

image (img)% hiển thị hình ảnh trong cửa sổ hình

red_mean = mean (mean (img (200, 150, 1))))% đọc số lượng pixel màu đỏ trung bình

blue_mean = mean (mean (img (200, 150, 3)))% đọc số lượng pixel màu xanh lam trung bình

chất lỏng = red_mean || blue_mean% Tạo một biến được lưu trữ, 'chất lỏng', cho các biến màu khác nhau

if chất lỏng Câu lệnh% if để gọi dữ liệu hình ảnh từ phía trên

if red_mean> 170% Câu lệnh if khiến các chức năng khác nhau của roomba xảy ra nếu máy ảnh nhìn thấy màu đỏ trung bình lớn hơn 170

r.stop% dừng roomba

r.setLEDCenterColor (255)% đặt vòng tròn thành màu đỏ

r.setLEDDigits (); % xóa màn hình

f = waitbar (0, '* TIN NHẮN THU NHẬP *'); % tạo một thanh chờ cho một tin nhắn đang tải

r.setLEDDigits ('HOT'); % đặt màn hình LED để xuất ra 'HOT'

tạm dừng (0,5)% Tạm dừng ngắn để đọc thông tin bị tạm dừng

r.setLEDDigits ('LAVA'); % đặt màn hình LED để xuất ra 'LAVA'

tạm dừng (0,5)

thanh chờ (.33, f, '* THÔNG ĐIỆP THU NHẬP *'); % tạo ra sự gia tăng trong thanh chờ

r.setLEDDigits ('HOT');

tạm dừng (0,5)

r.setLEDDigits ('LAVA');

tạm dừng (0,5)

thanh chờ (.67, f, '* THÔNG ĐIỆP THU NHẬP *'); % tạo ra sự gia tăng trong thanh chờ

r.setLEDDigits ('HOT');

tạm dừng (0,5)

r.setLEDDigits ('LAVA');

thanh chờ (1, f, '* THÔNG ĐIỆP THU NHẬP *'); % hoàn thành thanh chờ

tạm dừng (1)

close (f)% đóng thanh chờ

r.setLEDDigits (); % xóa màn hình LED

đóng tất cả% Đóng tất cả các cửa sổ trước đó

trục ('Màu', 'không có', 'XColor', 'không có', 'YColor', 'không có')% Xóa cửa sổ biểu đồ của các trục và biểu đồ

y = 0,5; % đặt vị trí y của văn bản trong cửa sổ vẽ đồ thị

x = 0,06; % đặt vị trí x của văn bản trong cửa sổ vẽ đồ thị

title ('FROM MARS ROOMBA', 'fontsize', 32)% Thêm tiêu đề vào cửa sổ vẽ đồ thị

quadeqtxt = 'LAVA NGUY HIỂM'; % Đặt biến 'quadeqtxt' thành đầu ra 0

văn bản (x, y, quadeqtxt, 'thông dịch viên', 'cao su', 'kích thước phông chữ', 36); % hiển thị văn bản quadeq trong cửa sổ vẽ đồ thị

r.moveDistance (-0,2, 0,2)% đảo ngược roomba 0,2m

r.turnAngle (180, 0,5)% xoay roomba 180 độ nhanh nhất có thể

r.setLEDCenterColor (128, 128); % đặt đèn LED trung tâm roomba thành màu cam

đóng tất cả% đóng các cửa sổ đang mở còn lại

elseif blue_mean> 175% Câu lệnh if khiến các chức năng khác nhau của roomba xảy ra nếu máy ảnh nhìn thấy màu xanh lam trung bình lớn hơn 175

r.stop% dừng roomba

r.setLEDCenterColor (255)% đặt vòng tròn thành màu đỏ

r.setLEDDigits (); % xóa màn hình

f = waitbar (0, '* TIN NHẮN THU NHẬP *'); % tạo một thanh chờ cho một tin nhắn đang tải

r.setLEDDigits ('NHÌN'); % đặt màn hình LED để xuất ra 'LOOK'

tạm dừng (0,5)% Tạm dừng ngắn để đọc thông tin bị tạm dừng

r.setLEDDigits ('WATR'); % đặt màn hình LED để xuất 'WATR'

tạm dừng (0,5)

thanh chờ (.33, f, '* THÔNG ĐIỆP THU NHẬP *'); % tạo ra sự gia tăng trong thanh chờ

r.setLEDDigits ('NHÌN');

tạm dừng (0,5)

r.setLEDDigits ('WATR');

tạm dừng (0,5)

thanh chờ (.67, f, '* THÔNG ĐIỆP THU NHẬP *'); % tạo ra sự gia tăng trong thanh chờ

r.setLEDDigits ('NHÌN');

tạm dừng (0,5)

r.setLEDDigits ('WATR');

thanh chờ (1, f, '* THÔNG ĐIỆP THU NHẬP *'); % hoàn thành thanh chờ

tạm dừng (1)

close (f)% đóng thanh chờ

r.setLEDDigits (); % xóa màn hình LED

đóng tất cả% Đóng tất cả các cửa sổ trước đó

trục ('Màu', 'không có', 'XColor', 'không có', 'YColor', 'không có')% Xóa cửa sổ biểu đồ của các trục và biểu đồ

y = 0,5; % đặt vị trí y của văn bản trong cửa sổ vẽ đồ thị

x = 0,06; % đặt vị trí x của văn bản trong cửa sổ vẽ đồ thị

title ('FROM MARS ROOMBA', 'fontsize', 32)% Thêm tiêu đề vào cửa sổ vẽ đồ thị

quadeqtxt = 'NỀN TẢNG NƯỚC'; % Đặt biến 'quadeqtxt' thành đầu ra 0

văn bản (x, y, quadeqtxt, 'thông dịch viên', 'cao su', 'kích thước phông chữ', 36); % hiển thị văn bản quadeq trong cửa sổ vẽ đồ thị

r.moveDistance (-0,2, 0,2)% đảo ngược roomba 0,2m

r.turnAngle (180, 0,5)% xoay roomba 180 độ nhanh nhất có thể

r.setLEDCenterColor (128, 128); % đặt đèn LED trung tâm roomba thành màu cam

đóng tất cả% đóng các cửa sổ đang mở còn lại

end% kết thúc câu lệnh if 'red_mean'

end% kết thúc câu lệnh if 'chất lỏng'

end% đóng vòng lặp while vô hạn

end% kết thúc chức năng 'LiquidCheck'

Bước 4: Chạy mã

Sau khi bạn đã sao chép và dán mã vào MATLAB, bạn phải kết nối với Roomba. Khi Roomba được kết nối, bạn phải đặt tên cho biến là r. Các hàm sử dụng biến r khi tham chiếu đến Roomba, vì vậy Roomba phải được định nghĩa là biến r. Sau khi chạy mã, Roomba sẽ chạy theo hướng dẫn.

Đề xuất: