Mục lục:

Một robot 4WD điều khiển thông qua USB Gamepad từ xa: 6 bước
Một robot 4WD điều khiển thông qua USB Gamepad từ xa: 6 bước

Video: Một robot 4WD điều khiển thông qua USB Gamepad từ xa: 6 bước

Video: Một robot 4WD điều khiển thông qua USB Gamepad từ xa: 6 bước
Video: Arduino | Lập trình Robot Điều Khiển Từ xa - Demo 2024, Tháng sáu
Anonim
Image
Image

Đối với dự án robot tiếp theo của mình, tôi buộc phải kiến trúc / thiết kế nền tảng robot của riêng mình do những trường hợp không lường trước được.

Mục tiêu là để nó có thể tự lái, nhưng trước tiên, tôi cần phải kiểm tra khả năng lái cơ bản của nó, vì vậy tôi nghĩ rằng đó sẽ là một dự án phụ thú vị nếu có hành vi và được điều khiển như thể nó là một chiếc xe RC (điều khiển bằng sóng radio)., nhưng thay vào đó hãy sử dụng Gamepad USB.

Kết quả đã tốt hoặc tốt hơn tôi mong đợi.

Lợi thế của việc sử dụng USB Gamepad, với rất nhiều chương trình, là tôi có thể tùy chỉnh nó và thêm vào những gì tôi đã làm. Tôi không có bất kỳ kinh nghiệm thực tế nào về việc chế tạo một chiếc xe RC, nhưng tôi tưởng tượng rằng một chiếc xe bị mắc kẹt khá nhiều với bất kỳ bộ phát RC nào (cần điều khiển / nút bấm, v.v.) và bộ thu RC đi kèm.

Ví dụ: tôi đã thêm một số nhận dạng rằng robot đã va vào tường, chỉ bằng cách phần mềm phát hiện dòng điện cao và giá trị tốc độ bộ mã hóa thấp.

Theo tùy chọn, người ta có thể thêm một số webcam USB vào rô bốt, tùy thuộc vào số lượng và vị trí của chúng, người ta có thể lái rô bốt xung quanh khu vực sinh hoạt và vào phòng khác, trong khi ngồi ở một nơi khác trước máy tính có USB Gamepad được kết nối nó.

Có thể hướng dẫn này sẽ không phải là cách thực hiện đúng, chi tiết, bao gồm tất cả, từng bước nhưng tôi sẽ cố gắng cung cấp nhiều chi tiết nhất có thể.

Quân nhu

Các bộ phận được đề xuất: Hầu hết những thứ này tôi thu được từ Thành phố Servo (Actobotics).

Các kênh chữ U 2 - 13,5 , dành cho các cạnh của khung cơ sở. Các động cơ được gắn vào cái này. Tôi đã sử dụng một thứ gì đó ngắn hơn và các động cơ của tôi được gắn ở các góc, và điều này gây khó khăn cho việc lắp chúng.

2 - 12 kênh chữ U cho mặt trước và mặt sau của khung cơ sở.

2 - 15 kênh chữ U cho cản trước và sau

2 - 7 (hay là 7,5 ?) Kênh chữ U cho các cột phía trước. Điều này không quá quan trọng, độ dài có thể khác nhau. Nó phụ thuộc vào chiều cao của các cột phía sau và độ cao bạn chọn để đặt góc Kênh chữ U kết nối giữa chúng.

2 - (chiều dài?) Các kênh chữ U cho thành viên có góc cạnh, từ trước ra sau, kết nối các cột thẳng đứng. Điều này rất quan trọng, bởi vì Servo City / Actobotics bán các bảng hoặc giá đỡ góc 45 độ cho mục đích này, nhưng bạn sẽ phải thực hiện một số phép toán / trig để đảm bảo bạn có được độ dài chính xác.

2 - (độ dài?) Các kênh chữ U để đóng vai trò là các thanh cản bên cấp cao hơn, một lần nữa, các kênh này phụ thuộc vào những gì bạn làm với đế

2 - (độ dài?) Các kênh chữ U để dùng làm cản trước và cản sau ở cấp độ cao hơn, vấn đề ditto ở trên.

1 - (chiều dài?) Kênh chữ U để đóng vai trò là thành viên trên cùng, kéo dài qua các cột phía sau. Cái này có thể không quá quan trọng, vì bạn có thể gắn trên đầu hoặc phía trước / phía sau các cột thẳng đứng.

12 (khoảng) kênh chữ L hoặc giá đỡ. Chúng phục vụ nhiều mục đích nhưng về cơ bản cung cấp tính toàn vẹn / độ bền của cấu trúc cho các góc của khung cơ sở VÀ các cột thẳng đứng.

4 (+?) Kênh phẳng 3 lỗ đến 5 lỗ. Những thứ này cũng cung cấp sức mạnh cấu trúc cho robot.

ServoCity bán hai loại tấm phẳng diện tích lớn chính, hữu ích để sử dụng làm khay trượt dưới cùng hoặc trên cùng nơi đặt pin và hoặc bộ điều khiển của bạn, hoặc thậm chí là bề mặt nâng cao hơn cho cảm biến.

Có một bảng điều khiển 4 (4,5?) "X 12" và tôi nghĩ bảng còn lại là bảng điều khiển 9 (9,5?) "X 12.

Bây giờ đây là lúc mọi thứ trở nên thú vị, và có thể khó hiểu và đắt tiền (các phần nhỏ cộng lại). Tất cả các kênh, v.v., có thể được gắn với nhau thông qua các phần kết nối này, trong đó có SEVERAL. Đây là nơi tôi rất tiếc vì tôi không có danh sách các bộ phận cụ thể, chi tiết, đầy đủ.

Và vấn đề là.. bạn không thực sự biết bạn có thể cần cái nào, hoặc bao nhiêu cái.. bởi vì có rất nhiều cách để bạn có thể lắp những phần này lại với nhau.

Tôi có thể liệt kê những gì tôi đã sử dụng:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

Hai thứ sau rất tiện dụng và tôi chỉ dự trữ những thứ này:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Tiếp theo là tất cả các ốc vít (bu lông). Tôi bắt đầu với một gói có kích thước MỖI NGƯỜI, và tôi đã xem qua hầu hết chúng. Tôi đã sử dụng vít dài hơn mà kích thước không quan trọng và dành những vít ngắn hơn cho nơi chúng ĐƯỢC BẮT BUỘC vì không có chiều dài nào khác hoạt động.

Cuối cùng, bạn nên lấy 1 túi sau:

www.servocity.com/6-32-nylock-nuts-pack

Tôi đã không sử dụng nhiều như vậy, nhưng chúng (tôi nghĩ) rất quan trọng để đảm bảo động cơ của bạn không bị rung khỏi khung theo thời gian. Chỉ có hai hoạt động cho mỗi động cơ, do kênh U

Bạn sẽ cần ít nhất 4 cái trong số này, bạn có thể nhận được thêm một cái hoặc hơn thế trong trường hợp bạn gây ra thiệt hại cho một cái (tin tôi đi, bạn có thể phải lắp / tháo động cơ một vài lần):

www.servocity.com/heavy-duty-clamping-shaf…

Thông thường, trục động cơ là 6mm và trục là 1/4 (0,25in).

Tôi sẽ nhận được một số vít màu đen, được cho là chắc chắn hơn, và sử dụng chúng cho các kẹp ở trên, và KHÔNG sử dụng các vít đi kèm với kẹp:

(Tôi nghĩ đây là những cái):

Vòng bi có đường kính 4 - 1/4 "(0,25")

1 - túi miếng đệm 1/4 màu đen

4 - Kẹp D-Hub

www.servocity.com/0-770-clamping-d-hubs

4 - Trục D (# 6340621.375 "(1-3 / 8")

Bánh xe hạng nặng 4 - 6"

www.servocity.com/6-heavy-duty-wheel

Lưu ý rằng tôi thích những bánh xe này nhưng chúng có một cạnh cao su cứng. Chúng dường như hoạt động tốt trên sàn cứng, thảm, và có thể là lối đi bằng bê tông cứng. Sẽ không tốt trên cỏ, cát, v.v.

CŨNG CÓ, chúng sẽ có xu hướng làm bẩn tấm thảm của bạn !!!

4 - động cơ:

www.servocity.com/motors-actuators/gear-mo…

Tôi đã đi với 223 RPM, tốc độ tối đa trong nhà, cũng có thể di chuyển robot của tôi (nặng với 2 pin SLA 12V) khá dễ dàng trong chuyển động chậm.

2 - bộ mã hóa động cơ cho động cơ. (Roboclaw của Thành phố Servo chỉ xử lý 2 bộ mã hóa)

1 - Bộ điều khiển động cơ Roboclaw 2X45A, hãy đảm bảo bạn nhận được bộ điều khiển có các khối thiết bị đầu cuối màu xanh lá cây trên đó, không phải các chân…. Welll… mỗi loại đều có lợi thế của chúng. Nhận thức sâu sắc.. Tôi có thể đã nhận được các ghim.

Tôi nghĩ đó là từ Thành phố Servo.

SparkFun bán Arduino Uno (đó là những gì tôi đã sử dụng) và cũng có Redboard Artemis làm trình quản lý ổ đĩa của bạn.

Bạn sẽ muốn một Raspberry Pi 3 (hoặc 4?) Làm "bộ não" và giao diện cấp cao cho bạn.

Bạn sẽ cần hệ thống dây điện, công tắc, cầu chì và một diode "flyback" rất mạnh mẽ.

Tôi đã sử dụng pin SLA chu kỳ sâu Duracell 12V 14AH, nhưng bạn có thể sử dụng bất cứ thứ gì.

CẢNH BÁO! Thiết kế của rô bốt này (NHỎ và RỘNG nhưng NGẮN), giả định một loại trọng tâm nặng, chẳng hạn như pin SLA sẽ cung cấp. Nó có thể không hoạt động tốt với những loại pin công nghệ mới hơn. LiPo, Lion, v.v. Nó có thể dễ dàng lật đổ.

Từ Pololu, tôi có một vài bộ điều hợp cắm thùng, để tôi có thể cấp nguồn độc lập cho Arduino và / hoặc Bảng đỏ, mặc dù chúng sẽ được kết nối với Raspberry qua USB, vì tôi không muốn phải phụ thuộc vào nguồn của Raspberry. (Đặc biệt là gắn camera, cảm biến, v.v.)

Bạn sẽ cần một bộ điều chỉnh điện áp bước xuống từ 12 đến 5V, tối thiểu 5A (?) Cho Raspberry. Những người khác có thể xử lý bất cứ thứ gì từ 7 đến 15V để trực tiếp vào pin SLA.

Đó là về nó cho các bộ phận.

Điều tôi sẽ KHÔNG làm - bánh răng vát 90 độ.

Một lần nữa, có rất nhiều video trong danh sách phát trên youtube về Robotics của tôi trình bày chi tiết hầu hết các điều ở trên.

Bước 1: Thi công

Thành thật mà nói, tất cả các bước xây dựng của tôi đã ở dạng youtuber. Bạn có thể xem những thứ đó trong danh sách phát Robotics của tôi, bắt đầu từ "Wallace Robot 4". Những cái trước (Wallace II, Wallace III) cũng có chất liệu tốt

www.youtube.com/playlist?list=PLNKa8O7lX-w…

Bước 2: Kiểm tra Roboclaw, Động cơ và Bộ mã hóa

Các nhà sản xuất Roboclaw (BasicMicro) có một ứng dụng Windows mà bạn có thể sử dụng để đảm bảo rằng bạn đã kết nối chính xác các động cơ và bộ mã hóa với Roboclaw. Bạn sẽ kết nối các động cơ cùng phía song song với Roboclaw. Bạn có thể chọn sử dụng dây bộ mã hóa, chỉ trên động cơ phía sau hoặc động cơ phía trước, hoặc thậm chí có thể tốt hơn - CHẨN ĐOÁN.

Lý do cho đề xuất của tôi liên quan đến (sau) kiểm tra một robot bị mắc kẹt. Có trạng thái theo đường chéo là nếu bánh trước / sau đang / không quay có thể tốt hơn là chỉ bánh trước hoặc chỉ bánh sau.

LƯU Ý: những gì tôi CHƯA làm là sử dụng Arduino để kết nối (thông qua các chân GPIO) với các bộ mã hóa - nếu bạn đã làm điều đó, bạn có thể để Roboclaw xử lý 2 bộ mã hóa và sau đó để Arduino xử lý hai bộ mã hóa kia, và chỉ truy vấn Roboclaw để biết hai giá trị bộ mã hóa (và tốc độ).

LƯU Ý: Tôi đã sử dụng ứng dụng của BasicMicro để định cấu hình trước Roboclaw cho Ramping Up / Ramping Down. Điều này tốt cho việc bảo vệ phần cứng và thiết bị điện tử. Có một video về điều đó trong danh sách phát Robotics của tôi.

Tôi gần như quên mất: Tôi cũng đã mua một số cáp đầu nối đạn đi giữa cáp động cơ và Roboclaw. LƯU Ý: nếu bạn làm điều này, bạn sẽ nhận thấy rằng tổng chiều dài cáp THỰC SỰ DÀI. Nhưng tôi không muốn phải cắt bất cứ thứ gì nếu tôi không cần thiết. Tôi đã làm (đối với các bước sau) gặp phải sự cố giao tiếp với USB giữa Raspberry và Arduino, có thể là do nhiễu EMI.. nhưng tôi đã giải quyết vấn đề đó bằng phần mềm.

Nếu nó trở thành vấn đề, bạn có thể cắt ngắn dây - bạn cũng có thể mua tấm chắn kim loại (từ Amazon, đường kính 1 ).

Điều cuối cùng: Điều này tôi vẫn chưa làm --- để Roboclaw tự động cấu hình hoặc tự động điều chỉnh (sử dụng bộ mã hóa) để cả động cơ bên trái và bên phải di chuyển cùng tốc độ và robot đi thẳng.

Của tôi hơi cong hơn khoảng 12 feet nhưng không đủ để tôi cảm thấy cần phải làm bất cứ điều gì với nó.

Bước 3: Thêm và lập trình Arduino

Bạn sẽ cần phích cắm thùng và một số dây dẫn, cũng như cáp USB. Đảm bảo bạn chọn đúng đầu nối Arduino.

Bạn sẽ cần tải xuống Arduino IDE.

Đây tại Github là bản phác thảo mới nhất xử lý việc điều khiển robot:

github.com/elicorrales/wallace.robot.ardui…

Bạn sẽ kết nối Arduino với máy tính của mình đang chạy IDE và dựa trên cách viết phác thảo, bạn sẽ sử dụng các chân 10 và 11 trên Arduino để giao tiếp nối tiếp (Software Serial) với Roboclaw.

Tôi đã phát triển một giao thức liên lạc đơn giản giữa Raspberry Pi và Arduino.

Nó dựa trên ký tự ASCII, giúp dễ dàng gỡ lỗi và kiểm tra hơn chỉ bằng cách sử dụng cửa sổ "giám sát nối tiếp" của Arduino IDE.

Các lệnh bắt đầu từ số "0" (không) và chỉ tăng lên khi cần

Các lệnh bắt đầu trong số "20" là lệnh Roboclaw trực tiếp và các lệnh bên dưới số đó là các lệnh hoàn toàn liên quan đến Arduino.

Do nhiễu EMI, tôi đã cải thiện chuỗi lệnh để bao gồm tổng kiểm tra.

Vì vậy, bất kỳ chuỗi nào sẽ bao gồm:

# số lượng mã thông báo trong chuỗi bao gồm mã này

tổng kiểm tra

Ví dụ, giả sử bạn muốn Arduino phản hồi với menu lệnh của nó:

4 0 12 16

"4" là bốn mã thông báo trong chuỗi.

"0" là lệnh MENU.

"12" là số ngẫu nhiên tôi đã chọn.

"16" là tổng của 4 + 0 + 12.

Cùng một lệnh MENU đó có thể khác:

4 0 20 24

Bởi vì tôi đã chọn một số ngẫu nhiên khác, tổng kiểm tra cũng khác.

Ví dụ, giả sử bạn muốn di chuyển về phía trước với tốc độ 100%:

5 29 0 134 100

"5" năm mã thông báo

"29" lệnh FORWARD

"0" số ngẫu nhiên

"134" tổng kiểm tra

"100" tham số 1 (tốc độ trong trường hợp này)

Nếu Arduino không thể xác minh chuỗi đến đó, nó chỉ thả nó / bỏ qua nó, không có phản hồi.

Nếu Arduino không nhận được lệnh chuyển động tiếp theo với X mili giây, nó sẽ gửi động cơ DỪNG đến Roboclaw.

Arduino khởi động và bắt đầu gửi trạng thái tự động đến cổng USB… trừ khi được yêu cầu ngừng làm điều đó.

Tại thời điểm này, bạn đã sẵn sàng để thử điều khiển Roboclaw và xem động cơ quay, chỉ bằng cách sử dụng "Serial Monitor" trên IDE.

Bước 4: Thêm và lập trình Raspberry Pi (node.js)

Một lần nữa, nếu bạn xem danh sách phát Robotics của tôi, ngay từ đầu, tôi đã thực hiện từng bước để khởi động và chạy Raspberry.

Một điều tôi có thể đã đề cập đến là bạn sẽ cần một bộ điều chỉnh 5V và bằng cách nào đó, xây dựng, cắt / sửa đổi cáp USB cho nó hoặc cấp nguồn cho Raspberry theo cách khác.

Ở đây tại Github là mọi thứ bạn cần trong Raspberry để giao tiếp với Arduino qua USB.

github.com/elicorrales/wallace.robot.raspb…

Thậm chí còn có các kịch bản thử nghiệm.

Bạn có thể xem qua mã máy chủ node.js và bạn sẽ thấy cách Raspberry chuyển đổi các hướng dẫn dạng số ngắn gọn, thành các chuỗi url kiểu REST. Bạn có thể sử dụng "curl" để gửi các lệnh kiểm tra.

Thí dụ:

địa chỉ IP RP3 của bạn: 8084 / arduino / api / forward / 50

sẽ làm cho các động cơ quay các bánh xe về phía trước trong giây lát.

Nếu bạn đặt nó trong một vòng lặp kịch bản shell, bạn sẽ thấy các bánh xe tiếp tục quay.

Mã node.js (server.js) bao gồm tính năng kết nối lại trong trường hợp các kết nối nối tiếp bị mất với Arduino. Bạn có thể kiểm tra điều này bằng cách rút Arduino khỏi Raspberry và cắm lại.

Đảm bảo rằng bạn khớp với tốc độ truyền nối tiếp giữa cả hai.

Do Arduino làm rơi các gói dữ liệu xấu và vì ở cấp node.js và ở cấp javascript của trình duyệt, mọi thứ đều được mã hóa để gửi nhiều lệnh "ổ đĩa", tôi đã có thể chạy cao tới 2 000 000 baud (2 Mbps).

Nếu bạn chạy tập lệnh thử nghiệm và thấy bánh xe quay, thì bạn đã sẵn sàng cho bước tiếp theo.

Bước 5: Bước cuối cùng - Lập trình / Sử dụng Máy khách Trang Web

Bao gồm trong liên kết Github đến phần Raspberry của tất cả những điều này, là các tệp khách hàng.

index.html. index.js. p5.min.js.

Họ xử lý Gamepad USB thông qua API Gamepad (dựa trên trình duyệt) và bạn sẽ thấy các nút và thanh trượt khác nhau cũng có sẵn trên trang web.

Mã javascript truy vấn (thăm dò) các giá trị trục X và Y cho một trong các cần điều khiển.. (tùy thuộc vào cần điều khiển / gamepad bạn có, bạn có thể phải chỉnh sửa mã). Nó thăm dò ý kiến rất nhanh và truyền tải tất cả các giá trị đó đến máy chủ node.js đang lắng nghe ở 8084.

Giá trị trục X và Y thô của các cần điều khiển nằm trong khoảng từ 0 đến 1.

Nhưng chức năng thư viện bộ điều khiển động cơ Roboclaw đang được sử dụng trong Arduino để điều khiển động cơ, mong đợi giá trị từ -100 đến 0 (lùi) hoặc (0 đến 100) tiến.

Soo…. đó là mục đích của việc bao gồm p5.min.js. Nó chỉ xảy ra với hàm map () rất đẹp và tiện lợi này, nơi bạn cung cấp cho nó giá trị thô, đó là phạm vi thô (hiện tại) và phạm vi mới, mong muốn. Và nó chuyển đổi giá trị thô thành giá trị tại phạm vi được ánh xạ mới.

Một điểm khác: Ở tốc độ 100, robot có thể rất khôn lanh. Tôi đã liên tục gặp phải một cái gì đó. Nhưng ngay cả khi bạn đã giỏi hơn, nó vẫn còn cảm ứng khi xoay sang trái hoặc phải.

Một cái gì đó để bạn thêm sẽ tương tự như thanh trượt Tốc độ tối đa hiện tại trên trang web. Thanh trượt đó xác định giá trị cao nhất hoặc tối đa mà bạn sẽ ánh xạ các cần điều khiển X và Y tới là gì.

Thí dụ:

Giả sử bạn đang ánh xạ 0 -> 1 đến 0 -> 100. Khi bạn nhấn hết phím điều khiển, bạn đang ở mức 100. Cảm động. Có thể là quá nhanh.

Tuy nhiên, nếu bạn trượt thanh trượt Tốc độ tối đa đó trở lại một chút, bây giờ bạn đang ánh xạ 0 -> 1 đến 0 -> 80 hoặc 70.

Điều đó có nghĩa là bạn có nhiều thời gian hơn để di chuyển cần điều khiển của mình mà không có sự thay đổi lớn về tốc độ được gửi đến node.js (và tới Arduino).

Và ngoài ra, bạn có thể làm là tách chữ X (xoay trái hoặc phải) khỏi chữ Y (tiến hoặc lùi) thành tốc độ có sẵn tối đa của riêng chúng.

Do đó, bạn có thể để Y ở 0 đến 100, 0 đến -100 để chuyển động thẳng nhanh, nhưng giảm tốc độ tối đa Xs để chuyển động quay được kiểm soát nhiều hơn. Tốt nhất của cả hai thế giới.

Bước 6: Tùy chọn: Điều khiển Robot bằng tính năng Kéo chuột và / hoặc Chạm vào Sự kiện

Nếu bạn hiểu được điều này, bạn biết rằng các lớp phần mềm bắt đầu từ trình duyệt và đi sâu qua Javascript và đến máy chủ Raspberry node.js, cuối cùng là arduino, đang chuyển đổi cần điều khiển Gamepad X- và Y-tọa độ thành " lệnh chuyển tiếp "(hoặc" lùi ", v.v.) (và giá trị tốc độ của chúng).

Hơn nữa, bạn biết rằng trong khi các X và Y của cần điều khiển là âm 1, đến 0, đến cộng 1, chúng phải được chuyển đổi từ 0 đến 100. Vâng, giá trị tối đa phụ thuộc vào cài đặt tốc độ tối đa trên trang web.

Soo… điều duy nhất cần làm để sử dụng chuột hoặc chạm vào các sự kiện (như trên điện thoại thông minh), là nắm bắt các sự kiện đó, lấy Xs và Y.

NHƯNG ---- những X và Y đó KHÔNG nằm giữa âm 1 và 1. Chúng bắt đầu bằng 0 và tăng dương, vì về cơ bản chúng là pixel hoặc tọa độ màn hình tương đối của một số phần tử HTML (chẳng hạn như bảng bootstrap) hoặc canvas.

Vì vậy, một lần nữa, hàm "map ()" của thư viện Js của P5 rất tiện dụng để ánh xạ lại những gì chúng ta cần.

Tôi đã cấu trúc lại mã để có hai trang web khác nhau, một trang dành cho máy tính để bàn sử dụng Gamepad, một trang khác dành cho thiết bị di động, sử dụng các sự kiện cảm ứng.

Ngoài ra, khi X và Y được ánh xạ lại, chúng sẽ được đưa vào cùng một chuỗi mã, v.v., cũng như X và Y từ Gamepad.

Đề xuất: