Mục lục:

Rover điều khiển trên web: 14 bước (có hình ảnh)
Rover điều khiển trên web: 14 bước (có hình ảnh)

Video: Rover điều khiển trên web: 14 bước (có hình ảnh)

Video: Rover điều khiển trên web: 14 bước (có hình ảnh)
Video: 3 TÍNH NĂNG phải bật ngay trên iPhone 14 Pro #shorts 2024, Tháng mười một
Anonim
Rover điều khiển trên web
Rover điều khiển trên web
Rover điều khiển trên web
Rover điều khiển trên web

Xây dựng và chơi với robot là thú vui tội lỗi chính của tôi trong cuộc sống. Những người khác chơi gôn hoặc trượt tuyết, nhưng tôi chế tạo rô bốt (vì tôi không thể chơi gôn hoặc trượt tuyết:-). Tôi thấy nó thư giãn và vui vẻ! Để tận dụng hầu hết các bot của mình, tôi sử dụng bộ khung. Sử dụng bộ dụng cụ giúp tôi làm những gì tôi thích hơn, phần mềm và thiết bị điện tử, đồng thời cũng tạo ra một khung máy tốt hơn cho bản thân tôi.

Trong phần Có thể hướng dẫn này, chúng ta sẽ xem xét những gì cần thiết để tạo ra một thiết bị di chuyển được điều khiển bằng Wi-Fi / web đơn giản nhưng mạnh mẽ. Khung xe được sử dụng là Actobotics Gooseneck. Tôi đã chọn nó vì kích thước, khả năng mở rộng và chi phí nhưng bạn có thể sử dụng bất kỳ khung gầm nào khác mà bạn lựa chọn.

Đối với một dự án như thế này, chúng tôi sẽ cần một máy tính bảng mạch đơn tốt và đối với bot này, tôi đã chọn sử dụng Raspberry Pi (RPI) một máy tính chạy hệ điều hành Linux. RPI (và Linux) cung cấp cho chúng ta nhiều tùy chọn mã hóa và Python sẽ được sử dụng cho phía mã hóa. Đối với giao diện web, tôi sử dụng Flask, một khuôn khổ web nhẹ cho Python.

Để điều khiển động cơ, tôi đã chọn RoboClaw 2x5a. Nó cho phép giao tiếp nối tiếp đơn giản để chỉ huy nó và hoạt động tốt với RPI và các động cơ trên Gooseneck.

Cuối cùng, nó có một webcam cho phản hồi video loại POV để điều khiển nó từ xa. Tôi sẽ trình bày chi tiết hơn từng chủ đề sau.

Bước 1: Phần cứng cần thiết

Phần cứng cần thiết
Phần cứng cần thiết
Phần cứng cần thiết
Phần cứng cần thiết
Phần cứng cần thiết
Phần cứng cần thiết
Phần cứng cần thiết
Phần cứng cần thiết
  • Khung xe Actobotics Gooesneck hoặc sự thay thế phù hợp mà bạn lựa chọn
  • Raspberry Pi mà bạn chọn (hoặc sao chép) - Mô hình RPI B được sử dụng trên bot này, nhưng bất kỳ loại nào có ít nhất hai cổng USB sẽ hoạt động
  • Tấm Servo tiêu chuẩn B x1
  • Giá đỡ kênh một góc 90 ° x1
  • Trình điều khiển động cơ RoboClaw 2x5a
  • S3003 hoặc servo kích thước tiêu chuẩn tương tự
  • Breadboard nhỏ hoặc breadboard mini
  • Dây nhảy từ nữ đến nữ
  • Dây nhảy từ nam đến nữ
  • Web cam (tùy chọn) - Tôi sử dụng Logitech C110 và đây là danh sách các cam được hỗ trợ cho RPI
  • Nguồn 5v-6v cho nguồn servo
  • Pin 7.2v-11.1v để cấp nguồn cho động cơ truyền động
  • Ngân hàng điện USB 5v 2600mah (hoặc cao hơn) cho RPI
  • Bộ chuyển đổi Wifi USB

Trên bot của tôi, tôi sử dụng bánh xe 4 để làm cho nó trở nên Đa địa hình-Trong nhà hơn một chút. Đối với tùy chọn này, bạn sẽ cần:

  • Bánh xe hạng nặng 4 "x2
  • Hub trục vít bộ có lỗ 4mm (0,770 inch) x2

Bước 2: Lắp ráp khung xe

Lắp ráp khung xe
Lắp ráp khung xe
Lắp ráp khung xe
Lắp ráp khung xe
Lắp ráp khung xe
Lắp ráp khung xe

Đầu tiên lắp ráp khung theo hướng dẫn kèm theo khung hoặc video. Sau khi hoàn thành, bạn sẽ có một cái gì đó giống như hình ảnh. LƯU Ý: Khi lắp ráp phần Cổ, chỉ cần rời khỏi khung lắp.

Trên bot của mình, tôi đã chọn thay thế các bánh xe đi kèm với khung xe cho các bánh xe tải nặng 4 . Điều này là tùy chọn và không cần thiết trừ khi bạn muốn làm như vậy.

Bước 3: Gắn thiết bị điện tử

Gắn các thiết bị điện tử
Gắn các thiết bị điện tử
Gắn các thiết bị điện tử
Gắn các thiết bị điện tử
Gắn các thiết bị điện tử
Gắn các thiết bị điện tử

Gooseneck có rất nhiều chỗ và tùy chọn để gắn thiết bị điện tử của bạn. Tôi cung cấp cho bạn những hình ảnh này như một dòng hướng dẫn, nhưng bạn có thể chọn cách bạn muốn trình bày tất cả. Bạn có thể sử dụng chân đế, băng dính hai mặt, Velcro hoặc băng servo để gắn bo mạch và pin.

Bước 4: Thêm Webcam

Thêm Webcam
Thêm Webcam
Thêm Webcam
Thêm Webcam
Thêm Webcam
Thêm Webcam

Lấy giá đỡ 90 độ, trung tâm servo nhẹ và bốn (4) vít.3125 cho bước này:

  • Lấy trung tâm servo và đặt nó vào một bên của giá đỡ và cố định chúng với nhau bằng các vít.2125 "như trong hình
  • Tiếp theo, gắn servo vào giá đỡ servo
  • Gắn giá đỡ 90 độ với còi servo vào cột sống servo và sử dụng vít còi đi kèm với servo để kết nối chúng với nhau
  • Bây giờ hãy gắn Servo vào giá đỡ lên trên đỉnh của cổ ngỗng bằng các vít còn lại
  • Gắn máy ảnh bằng dây zip hoặc băng dính hai mặt vào giá đỡ 90 độ

Sử dụng hình ảnh để làm hướng dẫn nếu cần.

Bước 5: Kết nối tất cả

Kết nối tất cả
Kết nối tất cả
Kết nối tất cả
Kết nối tất cả
Kết nối tất cả
Kết nối tất cả
Kết nối tất cả
Kết nối tất cả

Hệ thống dây điện khá hẹp về phía trước đối với robot này.

Động cơ:

Hàn dẫn trên cả hai động cơ nếu bạn chưa làm như vậy

Với phía trước rô-bốt (phần cuối có hình cái cổ ngỗng) quay mặt ra xa bạn:

  • Kết nối các dây động cơ trên động cơ bên trái với kênh M1A và M1B
  • Kết nối các dây động cơ trên động cơ bên phải với kênh M2A và M2B

Kết nối mặt đất (GND):

  • Kết nối một chốt nối đất trên RoboClaw với bảng đấu nối tiếp đất. Đường chân đất trên RoboClaw gần tâm nhất (Xem ảnh)
  • Kết nối mã PIN 6 trên RPI với bảng jumper. Xem pic tiêu đề RPI để biết các chỉ định pin.
  • Kết nối GND từ bộ pin servo với một trong các chân trên bảng jumper.
  • Chạy dây jumper từ board jumper đến dây GND của servo.

RPI đến RoboClaw:

Kết nối chân RPI GPIO14 TXD với chân RoboClaw S1

Quyền lực:

  • Kết nối dây POS từ pin servo với dây dẫn POS servo
  • Kết nối dây POS từ pin động cơ với POS (+) của đầu vào nguồn động cơ RoboClaw. Chúng tôi sẽ để thiết bị đầu cuối GND bị ngắt kết nối ngay bây giờ.

Bước 6: Thiết lập RPI

Thiết lập RPI
Thiết lập RPI

Tôi cho rằng người dùng ở đây biết một số về Linux và RPI. Tôi không trình bày cách thiết lập hoặc kết nối với một. Nếu bạn cần trợ giúp về điều đó, hãy sử dụng các trang bên dưới.

Để thiết lập RPI của bạn, hãy xem các trang sau:

  • Thiết lập cơ bản RPI
  • RPI Hướng dẫn bắt đầu nhanh
  • Bang hội thiết lập NOOBS

Đối với các trang khởi động chung, Trang chính RPI và các trang eLinux là những nơi tuyệt vời để bắt đầu.

Xem liên kết này để biết thiết lập Wifi chung RPI.

Nếu bạn định sử dụng một số loại camera hoặc web cam trên bot, hãy xem các trang này để lấy các tệp cơ bản cần thiết.

  • Thiết lập cam RPI
  • Thiết lập cam eLinix RPI

Phát trực tuyến video:

Có một số cách để phát trực tuyến video hoạt động trên RPI, nhưng phương pháp tôi thích là sử dụng Chuyển động.

Để cài đặt nó trên RPI của bạn, hãy chạy cái này: sudo apt-get install motion

Hướng dẫn này cũng sẽ thiết lập nó để phát trực tuyến.

Bước 7: Định cấu hình Cổng nối tiếp RPI

Chúng tôi sẽ cần tắt chế độ bảng điều khiển Linux để sử dụng RX và TX khi chúng tôi muốn nói chuyện với bộ điều khiển động cơ RoboClaw từ cổng này. Để làm điều này, bạn có thể sử dụng phương pháp này hoặc công cụ này. Sự lựa chọn là của bạn về phương pháp vì cuối cùng cả hai đều làm cùng một điều.

Bước 8: Cài đặt các mô-đun Python

Bạn sẽ cần cài đặt python trên RPI cũng như pip của trình cài đặt gói python.

Để cài đặt pip, hãy làm:

  1. sudo apt-get install python-setuptools
  2. sudo easy_install pip

Sau đó:

  1. sudo pip cài đặt bình
  2. sudo pip cài đặt pyserial
  3. sudo pip cài đặt RPIO

Đây sẽ là tất cả các mô-đun cần thiết để mã chạy.

Bước 9: Thiết lập RoboClaw

Tôi có mã rô bốt nói chuyện với RoboClaw ở Chế độ nối tiếp tiêu chuẩn ở 19200 baud.

Để thiết lập RoboClaw cho việc này, hãy làm:

  1. Nhấn nút "MODE" trên RoboClaw
  2. Nhấn nút thiết lập cho đến khi đèn LED nhấp nháy 5 (năm) lần giữa các lần trì hoãn
  3. Nhấn nút "LIPO" để lưu trữ
  4. Tiếp theo nhấn nút "SET" cho đến khi đèn LED nhấp nháy 3 (ba) lần giữa các lần trì hoãn
  5. Nhấn nút LIPO để lưu trữ

Đó là nó để thiết lập bộ điều khiển động cơ. Xem bản pdf được liên kết ở trên để biết thêm thông tin nếu cần.

Bước 10: Cài đặt chương trình Rover / tệp

Tải xuống và sao chép tệp rover.zip vào RPI của bạn trong thư mục người dùng pi của bạn.

Nếu bạn đang chạy Linux hoặc Mac, bạn có thể sử dụng 'scp' để làm điều đó:

scp ~ / location / of / the / file / rover.zip pi @ your_rpi_ip: / ~

Đối với Windows, bạn có thể tải xuống và sử dụng pscp, sau đó thực hiện:

pscp /location/of/the/file/rover.zip pi @ your_rpi_ip: / ~

Sau khi tệp zip được sao chép sang RPI, hãy đăng nhập vào tệp đó với tư cách người dùng pi.

Bây giờ chạy:

giải nén rover.zip

Thao tác này sẽ giải nén các tệp vào một thư mục có tên 'rover' và có những thứ sau trong thư mục đó:

  • restrover.py (Mã python cho rô bốt)
  • static (giữ các tệp hình ảnh cho các nút trên trang điều khiển)
  • các mẫu (chứa tệp index.htlm, trang web điều khiển)

Nếu bạn đang sử dụng web cam, hãy sửa đổi dòng gần cuối tệp index.html trong thư mục mẫu. Thay đổi URL trong dòng IFRAME để khớp với URL src cho luồng video của bạn.

Bước 11: Khởi động Bot Up

Khởi động Bot Up
Khởi động Bot Up

Kết nối nguồn USB với RPI.

Để bắt đầu mã bot, hãy đăng nhập với tư cách người dùng pi và chạy:

  • cd rover
  • sudo python restrover.py

Nếu tất cả đều ổn, bạn sẽ thấy một màn hình tương tự như hình ảnh trong bước này

Nếu bạn thấy bất kỳ lỗi hoặc sự cố nào, bạn sẽ phải sửa chúng trước khi tiếp tục.

Bây giờ, kết nối dây GND (-) với đầu cuối NEG (-) trên đầu vào nguồn động cơ RoboClaw.

Bước 12: Truy cập Trang kiểm soát Bot

Truy cập Trang kiểm soát Bot
Truy cập Trang kiểm soát Bot
Truy cập Trang kiểm soát Bot
Truy cập Trang kiểm soát Bot

Sau khi tập lệnh python của robot đang chạy, hãy kích hoạt RoboClaw và sau đó điều hướng đến ip của RPI của bạn như:

your_rpi_ip

Bạn sẽ thấy trang điều khiển Web bật lên giống như trong hình ảnh. Nếu không, hãy kiểm tra thiết bị đầu cuối đầu ra RPI của bạn và tìm bất kỳ lỗi nào và sửa chúng.

Khi vào trang, bạn đã sẵn sàng để kiểm soát bot.

Robot sẽ bắt đầu trong cài đặt "Med run" và ở tốc độ Trung bình.

Bot có thể được điều khiển thông qua các nút trên trang hoặc bằng các phím trên bàn phím.

Chìa khóa là:

  • w - chuyển tiếp
  • z - đảo ngược / lùi lại
  • a - rẽ trái dài
  • s - rẽ phải dài
  • q - rẽ trái ngắn
  • e - rẽ phải ngắn
  • 1 - xoay camera sang trái
  • 2 - xoay camera sang phải
  • 3 - xoay toàn bộ bên trái
  • 4 - xoay toàn bộ bên phải
  • / - camera gia đình / trung tâm
  • h - dừng / dừng rô bốt

Có một bộ đệm trễ nửa giây giữa các lệnh được gửi. Tôi đã làm điều này để loại bỏ các lệnh lặp lại không mong muốn. Tất nhiên, bạn có thể xóa điều này khỏi mã nếu bạn muốn (trong index.html)

Phần còn lại của các kiểm soát và kiểm soát nó nên được tự giải thích.

Bước 13: Mã Python / Flask

Bot này sử dụng Python và khuôn khổ web Flask. Bạn có thể tìm hiểu thêm về Flask tại đây nếu bạn quan tâm.

Sự khác biệt lớn so với ứng dụng Flask và tập lệnh Python bình thường là lớp / phương thức @ app.route được sử dụng để xử lý URI. Ngoài ra, nó là một Python khá bình thường đối với hầu hết các phần.

#! / usr / bin / env python

# # Wifi / Web điều khiển Rover # # Viết bởi Scott Beasley - 2015 # # Sử dụng RPIO, pyserial và Flask # nhập nối tiếp thời gian nhập từ RPIO nhập PWM từ flask nhập Flask, render_template, request app = Flask (_name_, static_url_path = '') # Kết nối với cổng comm để nói chuyện với bộ điều khiển động cơ Roboclaw thử: # Thay đổi tốc độ truyền ở đây nếu khác với 19200 roboclaw = serial. Serial ('/ dev / ttyAMA0', 19200) ngoại trừ IOError: print ("Comm port not found ") sys.exit (0) # Biến điều khiển tốc độ và biến tần last_direction = -1 speed_offset = 84 turn_tm_offset = 0,166 run_time = 0,750 # Vị trí trung lập của Servo (nhà) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Một chút thời gian để giải quyết thời gian thời gian.) def index (): return render_template ('index.html', name = None) @ app.route ("/ forward") def forward (): global last_direction, run_ti tôi in "Chuyển tiếp" go_ntic () last_direction = 0 # sleep 100ms + run_time time.sleep (0,100 + run_time) # Nếu không liên tục, thì dừng sau độ trễ nếu run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/ back") def back (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0,100 + run_time) # Nếu không liên tục thì tạm dừng sau khi trì hoãn if run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/ left") def left (): global last_direction, turn_tm_offset in "Left" go_left () last_direction = -1 # sleep @ 1 / 2 giây lần.sleep (0,500 - turn_tm_offset) # stop halt () time.sleep (0,100) return "ok" @ app.route ("/ right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # sleep @ 1/2 giây lần.sleep (0,500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0,100) return "ok" @ app.route ("/ ltosystem") def ltionary (): global last_direction, turn_t m_offset print "Rẽ về phía trước bên trái" go_left () # sleep @ 1/8 giây lần.sleep (0,250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0,100) return "ok" @app.route ("/ rtosystem") def rtionary (): global last_direction, turn_tm_offset print "Quay về phía trước" go_right () # sleep @ 1/8 giây lần.sleep (0,250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) trả về "ok" @ app.route ("/ stop") def stop (): global last_direction print "Stop" halt () last_direction = -1 # sleep 100ms time.sleep (0.100) return "ok" @ app.route ("/ panlt") def panlf (): global servo_pos print "Panlt" servo_pos - = 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # thời gian ngủ 150ms. sleep (0.150) return "ok" @ app.route ("/ home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # thời gian ngủ 150ms.sleep (0.150) return" ok "@ app.route (" / panfull_rt ") def panfull_rt (): global servo_pos print" Xoay toàn bộ bên phải "servo_pos = 2500 servo.set_servo (18, servo_pos) # thời gian ngủ 150ms.sleep (0,150) trả về "ok" @ app.route ("/ speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0,001 # Cập nhật hướng hiện tại để có tốc độ mới nếu last_direction == 0: go_ntic () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Cập nhật hướng hiện tại để có tốc độ mới nếu last_direction == 0: go_ntic () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) return "ok" @ app.route ("/ speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # Cập nhật hướng hiện tại để có tốc độ mới nếu last_direction == 0: go_ntic () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0,150) trả về "ok" @ app.route ("/ liên tục ") def liên tục (): global run_time print" Liên tục chạy "run_time = 0 # sleep 100ms time.sleep (0.100) return" ok "@ app.route (" / mid_run ") def mid_run (): global run_time print" Mid run "run_time = 0,750 halt () # sleep 100ms time.sleep (0,100) return" ok "@ app.route (" / short_time ") def short_time (): global run_time print" Short run "run_time = 0,300 halt () # sleep 100ms time.sleep (0.100) trả về "ok" # # Chức năng ổ đĩa động cơ # def go_ntic (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset nếu speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Nếu bạn không muốn hoặc cần thông tin gỡ lỗi từ Flask, hãy đặt gỡ lỗi thành 'false' trên dòng app.run.

nếu _name_ == "_main_":

app.run (host = '0.0.0.0', port = 80, debug = False)

Bạn cũng có thể thay đổi cổng mà máy chủ Flask http nghe tại đây.

Bước 14: Sử dụng phần cứng khác

Nếu bạn muốn sử dụng phần cứng khác, như một loại SBC khác (Máy tính bảng đơn), bạn sẽ gặp ít vấn đề khi Python và Flask chạy trên các bảng khác như Beagle Bone, PCDuino, v.v. Bạn sẽ phải thay đổi mã để phù hợp với GPIO bố trí và sử dụng khả năng dẫn động servo của bo mạch mới.

Để sử dụng trình điều khiển động cơ loại khác, bạn chỉ cần sửa đổi các hàm go_ntic, go_backward, go_left, go_right và halt để thực hiện những gì mà trình điều khiển động cơ thay thế cần để làm cho động cơ thực hiện chức năng cụ thể đó.

Đề xuất: