Mục lục:

Tạo một robot có hướng dẫn bằng Lidar với GiggleBot: 8 bước
Tạo một robot có hướng dẫn bằng Lidar với GiggleBot: 8 bước

Video: Tạo một robot có hướng dẫn bằng Lidar với GiggleBot: 8 bước

Video: Tạo một robot có hướng dẫn bằng Lidar với GiggleBot: 8 bước
Video: Agv robot mô hình robot điều hướng dẫn đường tự động ứng dụng lidar 2024, Tháng mười một
Anonim
Làm một robot có sự hướng dẫn của Lidar với GiggleBot
Làm một robot có sự hướng dẫn của Lidar với GiggleBot
Làm một robot có sự hướng dẫn của Lidar với GiggleBot
Làm một robot có sự hướng dẫn của Lidar với GiggleBot
Làm một robot có sự hướng dẫn của Lidar với GiggleBot
Làm một robot có sự hướng dẫn của Lidar với GiggleBot

Trong hướng dẫn này, chúng tôi đang làm cho GiggleBot giải quyết những khó khăn của một mê cung.

Chúng tôi đang gắn một servo trên GiggleBot trên đó chúng tôi gắn một cảm biến khoảng cách. Trong khi chạy, servo sẽ quay qua lại để cảm biến khoảng cách có thể đo khoảng cách đến từng chướng ngại vật. Điều này hoạt động giống như một cảm biến LIDAR thường đắt hơn nhiều.

Đồng thời, GiggleBot đang gửi dữ liệu này tới một vi điều khiển BBC từ xa: bit hiển thị trên ma trận 5 x 5 đèn LED của nó vị trí tương đối của nó với các chướng ngại vật.

Công việc của bạn là có thể điều hướng GiggleBot chỉ bằng cách xem những gì nó được hiển thị trên micro BBC: bit khác. Để điều khiển GiggleBot, các nút trên micro: bit BBC từ xa được sử dụng.

Nghe có vẻ như thú vị! Chúng ta hãy đi xuống nó, phải không?

Bước 1: Các thành phần bắt buộc

Các thành phần bắt buộc
Các thành phần bắt buộc

Chúng tôi sẽ cần:

  1. Một GiggleBot.
  2. Một bộ pin cho BBC micro: bit. Nó đi kèm với một micro: bit BBC trong gói của nó.
  3. x3 pin AA cho GiggleBot.
  4. Cáp Grove để kết nối cảm biến khoảng cách với GiggleBot.
  5. Một bộ Servo từ DexterIndustries.
  6. x3 BBC vi mô: bit. Một cho GiggleBot và một dùng để điều khiển robot từ xa.
  7. Một cảm biến khoảng cách từ DexterIndustries.

Nhận robot GiggleBot cho BBC micro: bit tại đây!

Bước 2: Lắp ráp Robot

Lắp ráp Robot
Lắp ráp Robot
Lắp ráp Robot
Lắp ráp Robot

Để làm cho GiggleBot sẵn sàng được lập trình, chúng ta cần phải lắp ráp nó, mặc dù không cần phải làm gì nhiều.

Lắp 3 pin AA vào ngăn bên dưới GiggleBot.

Lắp ráp gói servo. Đối với cánh tay quay của servo, hãy sử dụng lỗ cuối cùng của nó để cố định servo vào các đầu nối phía trước của GiggleBot. Bạn có thể sử dụng vít và / hoặc một số dây để làm cho nó ổn định hơn ở vị trí của nó. Hoặc bạn có thể dán keo nóng vào bảng. Trong trường hợp của tôi, tôi đã sử dụng vít và dây ngắn để buộc cánh tay servo vào bảng GiggleBot.

Khi lắp cánh tay servo vào servo, hãy đảm bảo rằng servo đã được đặt ở vị trí 80. Bạn có thể thực hiện việc đó bằng cách gọi gigglebot.set_servo (gigglebot. RIGHT, 80). Bạn có thể đọc về điều ấy nhiều hơn tại đây.

Tiếp theo, đặt cảm biến khoảng cách ở mặt trước của gói servo và sửa nó như trong ví dụ trên.

Cuối cùng, kết nối cảm biến khoảng cách bằng cáp Grove với bất kỳ cổng nào trong số 2 cổng I2C và động cơ servo với cổng bên phải trên GiggleBot - cổng bên phải được đề cập trên đó.

Bước 3: Tạo mê cung của riêng bạn - Tùy chọn

Tạo mê cung của riêng bạn - Tùy chọn
Tạo mê cung của riêng bạn - Tùy chọn

Trong trường hợp này, tôi đã sử dụng một loạt các hộp để tạo một đường dẫn vòng kín, tương tự như một đường dẫn NASCAR.

Ở bước này, bạn có thể thực sự sáng tạo và làm cho nó xoắn như thế nào bạn muốn hoặc làm cho nó siêu dài vì điều đó thực sự tùy thuộc vào bạn.

Hoặc nếu bạn không muốn theo dõi, bạn có thể đặt GiggleBot trong nhà bếp hoặc phòng khách chẳng hạn - điều đó đủ tốt vì có rất nhiều bức tường và chướng ngại vật mà bạn vẫn cần phải tránh.

Bước 4: Thiết lập môi trường

Thiết lập môi trường
Thiết lập môi trường

Để bạn có thể lập trình BBC micro: bit trong MicroPython, bạn phải thiết lập một trình chỉnh sửa cho nó (Mu Editor) và đặt GiggleBot MicroPython Runtime làm thời gian chạy của nó. Đối với điều đó, bạn phải làm theo hướng dẫn trên trang này. Tại thời điểm này, phiên bản v0.4.0 của thời gian chạy được sử dụng.

Bước 5: Lập trình GiggleBot - Phần I

Đầu tiên, hãy thiết lập tập lệnh của GiggleBot. Tập lệnh này sẽ làm cho GiggleBot quay động cơ servo của nó 160 độ (mỗi hướng 80 độ) trong khi đồng thời lấy 10 giá trị đọc từ cảm biến khoảng cách mỗi lượt.

Khi được bật, GiggleBot sẽ ở chế độ chờ cho đến khi nhận được lệnh từ điều khiển từ xa. Chỉ có thể có 3 lệnh: di chuyển về phía trước, sang trái hoặc sang phải.

Lưu ý: Tập lệnh sau có thể thiếu khoảng trắng và điều này có vẻ là do một số vấn đề khi hiển thị GitHub Gists. Nhấp vào ý chính để đưa bạn đến trang GitHub nơi bạn có thể sao chép và dán mã.

GiggleBot dựa trên LIDAR được điều khiển từ xa

từ nhập gigglebot *
from distance_sensor import DistanceSensor
từ chế độ ngủ nhập microbit
từ utime nhập ticks_us, sleep_us
nhập khẩu
nhập radio
# dừng robot nếu nó đang di chuyển
ngừng lại()
# bật đài
radio.on ()
# đối tượng cảm biến khoảng cách
ds = DistanceSensor ()
ds.start_continuous ()
xoay_time = 0,7 # đo bằng giây
xoay_span = 160 # đo bằng độ
xoay_ bước = 10
overhead_compensation = 1,05 # được xác định theo tỷ lệ phần trăm
time_per_step = 10 ** 6 * xoay_giờ / (xoay_bước * chi phí_phân_phục)
last_read_time = 0
radar = bytearray (bước quay)
servo_rotate_direction = 0 # 0 để đi lên (0-> 160) và 1 ngược lại
radar_index = 0
set_servo (RIGHT, 0)
whileTrue:
# đọc từ radar
nếu ticks_us () - last_read_time> time_per_step:
# đọc từ cảm biến khoảng cách
radar [radar_index] = int (ds.read_range_continuous () / 10)
last_read_time = ticks_us ()
print (radar_index)
# thực hiện logic để xoay servo từ trái sang phải
nếu radar_index == xoay_ bước -1 và servo_rotate_direction == 0:
set_servo (RIGHT, 0)
servo_rotate_direction = 1
elif radar_index == 0 và servo_rotate_direction == 1:
set_servo (RIGHT, xoay_span)
servo_rotate_direction = 0
khác:
radar_index + = 1if servo_rotate_direction == 0else-1
# và gửi các giá trị radar
radio.send_bytes (radar)
cố gắng:
# đọc lệnh rô bốt
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# và khởi động động cơ nếu có bất kỳ lệnh nào nhận được
set_speed (lmotor, rmotor)
lái xe()
exceptionTypeError:
đi qua

xem rawgigglebot_lidar_robot.py được lưu trữ với ❤ bởi GitHub

Bước 6: Lập trình điều khiển từ xa - Phần II

Những gì còn lại phải làm là lập trình vi BBC thứ hai: bit hoạt động như một điều khiển từ xa.

Điều khiển từ xa được sử dụng để hiển thị trên màn hình 5 x 5 pixel của nó khoảng cách tương đối với chướng ngại vật. Tối đa, sẽ có 10 pixel được bật.

Đồng thời, điều khiển từ xa cung cấp cho bạn khả năng điều khiển GiggleBot từ xa bằng cách nhấn 2 nút của nó: di chuyển về phía trước, sang trái và sang phải.

Lưu ý: Tập lệnh sau có thể thiếu khoảng trắng và điều này có vẻ là do một số vấn đề khi hiển thị GitHub Gists. Nhấp vào ý chính để đưa bạn đến trang GitHub nơi bạn có thể sao chép và dán mã.

GiggleBot dựa trên LIDAR được điều khiển từ xa - Mã từ xa

từ chế độ ngủ nhập microbit, hiển thị, button_a, button_b
nhập khẩu
nhập radio
nhập toán
radio.on ()
xoay_ bước = 10
xoay_span = 160 # độ
xoay_step = xoay_span / xoay_ bước
max_distance = 50 # tính bằng cm
side_length_leds = 3 # được đo bằng # pixel
radar = bytearray (bước quay)
xar = bytearray (bước quay)
yar = bytearray (bước quay)
save_xar = bytearray (bước quay)
save_yar = bytearray (bước quay)
motor_speed = 50
whileTrue:
status = radio.receive_bytes_into (radar)
nếu trạng thái isnotNone:
# display.clear ()
đối với c, val inenumerate (radar):
nếu radar [c] <= max_distance:
# tính toán tọa độ 2d của mỗi khoảng cách
angle = xoay_ bước / (xoay_ bước -1) * xoay_bước * c
góc + = (180- xoay_sải) /2.0
x_c = math.cos (angle * math.pi /180.0) * radar [c]
y_c = math.sin (angle * math.pi /180.0) * radar [c]
# chia tỷ lệ khoảng cách để vừa với màn hình 5x5 microbit
x_c = x_c * (side_length_leds -1) / max_distance
y_c = y_c * (side_length_leds +1) / max_distance
# tọa độ định vị lại
x_c + = (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# vòng tọa độ chính xác nơi các đèn LED được tìm thấy
nếu x_c - math.floor (x_c) <0,5:
x_c = math.floor (x_c)
khác:
x_c = math.ceil (x_c)
nếu y_c - math.floor (y_c) <0,5:
y_c = math.floor (y_c)
khác:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
khác:
xar [c] = 0
yar [c] = 0
display.clear ()
cho x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# print (list (zip (xar, yar, radar)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
nếu stateA và stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
print ('chuyển tiếp')
if stateA and not stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
print ('left')
ifnot stateA và stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
print ('right')
ifnot stateA andnot stateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
print ('stop')

xem rawgigglebot_lidar_remote.py được lưu trữ với ❤ bởi GitHub

Bước 7: Thông dịch màn hình từ xa

"loading =" lazy "điều khiển GiggleBot, bạn có các tùy chọn sau:

  1. Nhấn nút A và nút B để di chuyển GiggleBot về phía trước.
  2. Nhấn nút A để quay GiggleBot sang trái.
  3. Nhấn nút B để quay GiggleBot sang phải.

Để xem các chướng ngại vật gần nhất được phát hiện ở hướng nào, chỉ cần nhìn trên màn hình của điều khiển từ xa (micro: bit BBC từ xa mà bạn đang cầm). Bạn sẽ có thể điều khiển GiggleBot từ xa mà không cần nhìn vào nó.

Đề xuất: