Mục lục:

Roomba được kiểm soát MATLAB: 5 bước
Roomba được kiểm soát MATLAB: 5 bước

Video: Roomba được kiểm soát MATLAB: 5 bước

Video: Roomba được kiểm soát MATLAB: 5 bước
Video: Nhúng Matlab cho Arduino điều khiển PID nhiệt độ 2024, Tháng bảy
Anonim
Roomba được kiểm soát MATLAB
Roomba được kiểm soát MATLAB
Roomba được kiểm soát MATLAB
Roomba được kiểm soát MATLAB

Mục tiêu của dự án này là sử dụng MATLAB cũng như một robot có thể lập trình iRobot đã được sửa đổi. Nhóm của chúng tôi đã kết hợp các kỹ năng mã hóa của mình để tạo ra một tập lệnh MATLAB sử dụng nhiều chức năng của iRobot, bao gồm cảm biến vách đá, cảm biến cản, cảm biến ánh sáng và máy ảnh. Chúng tôi đã sử dụng các chỉ số cảm biến và camera này làm đầu vào, cho phép chúng tôi tạo các đầu ra nhất định mà chúng tôi muốn bằng cách sử dụng các chức năng và vòng lặp mã MATLAB. Chúng tôi cũng sử dụng thiết bị di động MATLAB và con quay hồi chuyển như một cách để kết nối với iRobot và điều khiển nó.

Bước 1: Các bộ phận và vật liệu

Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu
Bộ phận và Vật liệu

MATLAB 2018a

- Phiên bản 2018 của MATLAB là phiên bản được ưa thích nhất, chủ yếu là vì nó hoạt động tốt nhất với mã kết nối với thiết bị di động. Tuy nhiên, hầu hết mã của chúng tôi có thể được thông dịch trong phần lớn các phiên bản MATLAB.

iRobot Tạo thiết bị

-Thiết bị này là một thiết bị được chế tạo đặc biệt với mục đích duy nhất là để lập trình và mã hóa. (Nó không phải là chân không thực tế)

Raspberry Pi (có máy ảnh)

- Đây là một bo mạch máy tính không đắt tiền, hoạt động như bộ não của iRobot. Nó có thể nhỏ, nhưng có khả năng làm được nhiều thứ. Máy ảnh là một tiện ích bổ sung. Nó cũng sử dụng raspberry pi để lấy tất cả các chức năng và lệnh của nó. Máy ảnh trong hình trên được gắn trên một giá đỡ in 3D, được tạo ra bởi các khoa Cơ bản về Kỹ thuật tại Đại học Tennessee

Bước 2: Tệp cơ sở dữ liệu Roomba

Tệp cơ sở dữ liệu Roomba
Tệp cơ sở dữ liệu Roomba

Có một tệp chính mà bạn sẽ cần để sử dụng các chức năng và lệnh thích hợp cho roomba của bạn. Tệp này là nơi bạn viết mã rút ra các chức năng để giúp việc vận hành roomba của bạn dễ quản lý hơn.

Bạn có thể tải file tại link này hoặc file tải về bên dưới

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Bước 3: Kết nối với Roomba

Trước tiên, bạn phải đảm bảo rằng rô bốt của bạn được kết nối với bảng pi mâm xôi của bạn bằng cách sử dụng phích cắm micro USB. Sau đó, bạn cần kết nối đúng cách máy tính và rô bốt của mình với cùng một WiFi. Sau khi hoàn tất việc này, bạn có thể bật nguồn rô-bốt của mình và kết nối với rô-bốt bằng lệnh đã cho trong tệp cơ sở dữ liệu rô-bốt. (Luôn thiết lập lại cứng rô bốt của bạn trước và sau khi bạn sử dụng). Ví dụ: chúng tôi sử dụng lệnh "r.roomba (19)" để kết nối với rô bốt của chúng tôi, gán biến r cho thiết bị của chúng tôi. Điều này đề cập đến tệp cơ sở dữ liệu, tệp này thiết lập biến của chúng ta như một cấu trúc mà chúng ta có thể tham chiếu vào bất kỳ thời điểm nào.

Bước 4: Mã

Mật mã
Mật mã
Mật mã
Mật mã

Chúng tôi đã đính kèm mã đầy đủ bên dưới, nhưng đây là tổng quan ngắn gọn làm nổi bật các yếu tố quan trọng trong tập lệnh của chúng tôi. Chúng tôi đã sử dụng tất cả các cảm biến, cũng như máy ảnh để phát huy hết tiềm năng của robot. Chúng tôi cũng bao gồm mã cho phép chúng tôi kết nối thiết bị di động với rô bốt của mình và sử dụng kính gryoscope để điều khiển thủ công.

Chúng tôi bắt đầu bằng lệnh đơn giản "r.setDriveVelocity (.06)" để đặt vận tốc chuyển động của robot thành 0,06 m / s. Điều này chỉ để làm cho robot di chuyển trước

Sau đó, tập lệnh chính của chúng tôi được bắt đầu bằng một vòng lặp while lấy dữ liệu của rô bốt đã cho bằng cách tạo các cấu trúc mà chúng tôi có thể tham chiếu và sử dụng trong các câu lệnh điều kiện bên dưới, do đó cho phép chúng tôi yêu cầu rô bốt thực hiện một lệnh nhất định dựa trên dữ liệu cấu trúc robot đọc bằng các cảm biến của nó. Chúng tôi thiết lập nó để robot đọc các cảm biến vách đá của nó và đi theo một con đường đen

trong khi true% while vòng lặp diễn ra cho đến khi có điều gì đó "sai" xảy ra (trong trường hợp này là vô hạn) data = r.getCliffSensors; data2 = r.getBumpers;% truy xuất dữ liệu liên tục về các giá trị của cảm biến vách đá và gán chúng cho một biến% img = r.getImage; % Chụp ảnh từ máy ảnh được gắn% image (img); % Hiển thị hình ảnh được chụp% red_mean = mean (mean (img (:,:, 1)));% Lấy giá trị trung bình cho màu xanh lục nếu data.rightFront <2000 r.turnAngle (-2); % biến Roomba xấp xỉ 0,2 độ CW khi giá trị cho các cảm biến vách đá phía trước bên phải giảm xuống dưới 2000 r.setDriveVelocity (0,05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); % cho biết Roomba tiếp tục đi về phía trước với tốc độ xấp xỉ 0,2 m / s nếu cả hai giá trị từ cảm biến phía trước bên phải và bên trái phía trước giảm xuống dưới 2000% r.turnAngle (0); % yêu cầu Roomba không biến nếu các điều kiện được đề cập ở trên là đúng

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Sau vòng lặp while này, chúng tôi nhập một vòng lặp while khác để kích hoạt dữ liệu thu được qua máy ảnh. Và chúng tôi sử dụng câu lệnh if bên trong vòng lặp while này để nhận dạng hình ảnh bằng một chương trình cụ thể (alexnet) và khi nó nhận dạng hình ảnh, nó sẽ ngay lập tức kích hoạt điều khiển từ xa của thiết bị di động

anet = alexnet; % Gán học sâu alexnet cho một biến trong khi true% Infinite while loop img = r.getImage; img = imresize (img, [227, 227]); label = phân loại (anet, img); nếu nhãn == "khăn giấy" || nhãn == "tủ lạnh" label = "nước"; hình ảnh kết thúc (img); tiêu đề (char (nhãn)); drawnow;

Vòng lặp while cho phép chúng tôi điều khiển thiết bị bằng điện thoại của mình lấy dữ liệu đó từ con quay hồi chuyển của điện thoại và chúng tôi cắm nó vào một ma trận liên tục truyền dữ liệu trở lại MATLAB trên máy tính. Chúng tôi sử dụng câu lệnh if đọc dữ liệu của ma trận và đưa ra kết quả di chuyển thiết bị dựa trên các giá trị nhất định của con quay hồi chuyển của điện thoại. Điều quan trọng cần biết là chúng tôi đã sử dụng cảm biến Định hướng của thiết bị di động. Ma trận từng phần được đề cập ở trên được phân loại theo từng phần tử của cảm biến định hướng của điện thoại, đó là góc phương vị, cao độ và cạnh. Câu lệnh if tạo ra các điều kiện nêu rõ khi bên vượt quá các giá trị 50 hoặc giảm xuống dưới -50, thì rô bốt sẽ di chuyển một khoảng nhất định về phía trước (dương 50) hoặc lùi (âm 50). Và tương tự với giá trị cao độ. Nếu giá trị cao độ vượt quá giá trị 25 của giảm xuống dưới -25, rô bốt sẽ quay theo góc 1 độ (dương 25) hoặc âm 1 độ (âm 25)

trong khi true pause (.1)% Tạm dừng 0,5 giây trước khi mỗi giá trị được thực hiện Controller = iphone. Orientation; % Gán ma trận cho các giá trị của hướng của iPhone cho một biến Azimuthal = Controller (1); % Gán giá trị đầu tiên của ma trận cho một biến Pitch = Controller (2); % Gán giá trị thứ hai của ma trận cho một biến (nghiêng về phía trước và phía sau khi iPhone được giữ sang một bên) Side = Controller (3); % Gán giá trị thứ ba của ma trận cho một biến (nghiêng trái và phải khi iPhone được giữ sang một bên)% Gây ra kết quả dựa trên hướng của điện thoại nếu Cạnh> 130 || Mặt 25 r.turnDistance (-. 1)% Di chuyển Roomba về phía sau khoảng 0,1 mét nếu iPhone nghiêng về phía sau ít nhất 25 độ lệch nếu Mặt 25 r.turnAngle (-1)% Xoay Roomba khoảng 1 độ CCW nếu iPhone nghiêng sang trái ít nhất 25 độ nếu khác Pitch <-25 r.turnAngle (1)% Xoay Roomba xấp xỉ 1 độ CW nếu iPhone nghiêng ít nhất 25 độ.

Đây chỉ là những điểm nổi bật của các phần chính trong mã của chúng tôi, chúng tôi đã đưa vào nếu bạn cần nhanh chóng sao chép và dán một phần vì lợi ích của mình. Tuy nhiên, toàn bộ mã của chúng tôi được đính kèm bên dưới nếu cần

Bước 5: Kết luận

Mã mà chúng tôi đã viết này được thiết kế đặc biệt cho rô bốt cũng như tầm nhìn tổng thể của chúng tôi về dự án. Mục tiêu của chúng tôi là sử dụng tất cả các kỹ năng mã hóa MATLAB của mình để tạo ra một kịch bản thiết kế tốt sử dụng hầu hết các tính năng của rô bốt. Sử dụng bộ điều khiển điện thoại không khó như bạn nghĩ và chúng tôi hy vọng mã của chúng tôi có thể giúp bạn hiểu rõ hơn về khái niệm đằng sau việc mã hóa một iRobot.

Đề xuất: