Mục lục:
Video: Dự án Mars Roomba UTK: 4 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
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:
Biến Roomba của bạn thành Mars Rover: 5 bước
Biến Roomba của bạn thành Mars Rover:
Dự án Robot UTK 2017: 3 bước
Dự án Robot UTK 2017: Sứ mệnh: Đội ngũ kỹ sư của chúng tôi đã được Froogle, một tổ chức Phi lợi nhuận về phát triển công nghệ nguồn mở, thuê để phát triển nhóm Mars Rover.-Out hỗ trợ con người sáng tạo " rover " là một roomba mà chúng tôi đã viết mã để thực hiện một chuỗi o
Mars Rover sử dụng Raspberry Pi: 5 bước
Mars Rover Sử dụng Raspberry Pi: Kính gửi tất cả các Great Learner, tôi luôn tò mò muốn biết về Mars rover, Có 6 bánh xe có thể đi khắp bề mặt sao Hỏa và khám phá mọi thứ từ Trái đất. Tôi cũng muốn khám phá mọi thứ bằng cách ngồi trên máy tính xách tay của mình. Vì vậy, bây giờ tôi đã chọn đúng thời điểm để thực hiện nó và
Mars Roomba: 6 bước
Mars Roomba: Có thể hướng dẫn này sẽ hướng dẫn bạn các hướng vận hành bot chân không Roomba được điều khiển bằng Raspberry Pi. Hệ điều hành chúng tôi sẽ sử dụng là thông qua MATLAB
Dự án UTK EF 230 MarsRoomba mùa thu 2018: 5 bước
Dự án UTK EF 230 MarsRoomba mùa thu 2018: Hiện tại, tàu lặn trên 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. Rovers chủ yếu sử dụng các công cụ phân tích đất và nhiếp ảnh để lấy dữ liệu c