Mục lục:

Điều chỉnh người theo dõi dòng GiggleBot - Nâng cao: 7 bước
Điều chỉnh người theo dõi dòng GiggleBot - Nâng cao: 7 bước

Video: Điều chỉnh người theo dõi dòng GiggleBot - Nâng cao: 7 bước

Video: Điều chỉnh người theo dõi dòng GiggleBot - Nâng cao: 7 bước
Video: |GIVEAWAY| BODY TRẮNG MỊN- THƠM THO VỚI CÁCH TẮM ĐƠN GIẢN VÀ TIẾT KIỆM! 2024, Tháng mười một
Anonim
Điều chỉnh Người theo dõi dòng GiggleBot - Nâng cao
Điều chỉnh Người theo dõi dòng GiggleBot - Nâng cao

Trong phần Hướng dẫn rất ngắn này, bạn sẽ điều chỉnh GiggleBot của riêng mình theo một đường màu đen. Trong hướng dẫn khác này GiggleBot Line Follower, chúng tôi đã mã hóa cứng các giá trị điều chỉnh để hoạt động theo kịch bản đó. Bạn có thể muốn làm cho nó hoạt động tốt hơn bằng cách đưa ra những lợi ích khác.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn 2 tập lệnh có thể được tải trên các micro BBC khác nhau: các bit để một trong số chúng được đưa vào GiggleBot và với tập lệnh còn lại, 2 nút được sử dụng để đi qua menu và điều chỉnh khác nhau thông số. Việc gửi các thông số cập nhật này được thực hiện qua radio.

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

Bạn sẽ cần những thứ sau:

  1. Một robot GiggleBot cho micro: bit.
  2. x3 Pin AA
  3. x2 BBC micro: bit - một cho GiggleBot và một cho hoạt động như một điều khiển từ xa để điều chỉnh các thông số.
  4. Pin cho BBC micro: bit - giống như pin đi kèm trong gói BBC micro: bit.

Tải xuống Robot GiggleBot cho BBC micro: bit tại đây

Bước 2: Thiết lập Đường đi & Môi trường

Thiết lập Đường đi & Môi trường
Thiết lập Đường đi & Môi trường
Thiết lập Đường đi & Môi trường
Thiết lập Đường đi & Môi trường

Bạn cũng phải thực sự xây dựng các bản nhạc của mình (tải xuống, in, cắt và dán các ô) và sau đó thiết lập môi trường (IDE và thời gian chạy).

Vì hướng dẫn này rất liên quan đến hướng dẫn khác có tên GiggleBot Line Follower, bạn chỉ cần đến đó và làm theo các bước 2 và 3 rồi quay lại đây.

Đối với IDE, bạn có thể sử dụng trình chỉnh sửa Mu và đối với thời gian chạy, bạn cần tải xuống GiggleBot MicroPython Runtime. Thời gian chạy có thể được tải xuống từ tài liệu của nó tại đây. Đi tới chương Bắt đầu của tài liệu và làm theo các hướng dẫn về cách thiết lập môi trường. 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 3: Thiết lập GiggleBot

Trước khi nhấp nháy thời gian chạy cho GiggleBot, hãy đảm bảo bạn đã chọn tốc độ và tốc độ cập nhật mong muốn cho GiggleBot: theo mặc định, tốc độ được đặt thành 100 (biến base_speed) và tốc độ cập nhật được đặt thành 70 (biến update_rate).

Với việc triển khai hiện tại, tốc độ cập nhật cao nhất có thể đạt được là 70 và nếu run_neopixels được đặt thành True, thì chỉ có thể đạt được 50. Vì vậy, theo một cách nào đó, bạn có thể nói rằng tốc độ cập nhật mặc định nằm ngay bên cạnh những gì mà vi BBC: bit có thể làm.

Chỉ đối với bản ghi, cảm biến theo dõi dòng có thể trả lại các bản cập nhật 100 lần một giây.

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 PID Line Follower Tuner (yêu cầu điều khiển từ xa) - xjfls23

từ nhập microbit *
từ nhập gigglebot *
từ utime import sleep_ms, ticks_us
nhập radio
nhập khẩu
# khởi tạo radio và neopixels GB
radio.on ()
neo = init ()
# thời gian
update_rate = 70
# giá trị tăng mặc định
Kp = 0,0
Ki = 0,0
Kd = 0,0
điểm đặt = 0,5
trigger_point = 0.0
min_speed_percent = 0,2
base_speed = 100
last_position = điểm đặt
tích phân = 0,0
run_neopixels = Sai
center_pixel = 5 # nơi đặt pixel chính giữa của nụ cười trên GB
# turquoise = tuple (map (lambda x: int (x / 5), (64, 224, 208))) # color để sử dụng để vẽ lỗi với neopixel
# turquoise = (12, 44, 41) # chính xác là màu ngọc lam ở trên đã nhận xét ở trên
error_width_per_pixel = 0.5 / 3 # lỗi tối đa chia cho số phân đoạn giữa mỗi neopixel
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, small_motor_power, high_motor_power):
base_speed toàn cầu
nếu abs_error> = trigger_point:
# x0 = 0.0
# y0 = 0,0
# x1 = upper_bound - trigger_point
# y1 = 1,0
# x = abs_error - trigger_point
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)
# giống như
y = (abs_error - trigger_point) / (upper_bound - trigger_point)
motor_power = base_speed * (small_motor_power + (1- y) * (high_motor_power - small_motor_power))
trả lại motor_power
khác:
trả về base_speed * cao nhất_motor_power
run = Sai
before_error = 0
total_time = 0.0
total_counts = 0
whileTrue:
# nếu nút a được nhấn thì bắt đầu làm theo
if button_a.is_pressed ():
run = Đúng
# nhưng nếu nút b được nhấn thì dừng người theo dõi dòng
if button_b.is_pressed ():
run = Sai
tích phân = 0,0
before_error = 0.0
display.scroll ('{} - {}'. format (total_time, total_counts), delay = 100, wait = False)
total_time = 0.0
total_counts = 0
pixel_off ()
ngừng lại()
sleep_ms (500)
nếu chạy isTrue:
# đọc các cảm biến dòng
start_time = ticks_us ()
# kiểm tra xem chúng tôi đã cập nhật mức tăng Kp / Kd bằng điều khiển từ xa chưa
cố gắng:
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ())
set_eyes ()
exceptionTypeError:
đi qua
right, left = read_sensor (LINE_SENSOR, BOTH)
# dòng ở bên trái khi vị trí <0,5
# dòng ở bên phải khi vị trí> 0,5
# dòng ở giữa khi vị trí = 0,5
# đó là một trung bình cộng có trọng số
cố gắng:
position = right / float (left + right)
trừZeroDivisionError:
vị trí = 0,5
nếu vị trí == 0: vị trí = 0,001
nếu vị trí == 1: vị trí = 0,999
# sử dụng bộ điều khiển PD
error = position - setpoint
tích phân + = lỗi
sửa = Kp * lỗi + Ki * tích phân + Kd * (lỗi - lỗi_trước)
before_error = error
# tính toán tốc độ động cơ
motor_speed = upper_bound_linear_speed_reducer (abs (lỗi), setpoint * trigger_point, setpoint, min_speed_percent, 1,0)
leftMotorSpeed = motor_speed + chỉnh sửa
rightMotorSpeed = motor_speed - hiệu chỉnh
# thắp sáng các neopixel để cho biết GiggleBot phải đi về hướng nào
nếu run_neopixels isTrueand total_counts% 3 == 0:
cho tôi inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08':
neo = (0, 0, 0)
cho tôi inb '\ x00 / x01 / x02 / x03':
ifabs (error)> error_width_per_pixel * i:
nếu lỗi <0:
neo [center_pixel + i] = (12, 44, 41)
khác:
neo [center_pixel - i] = (12, 44, 41)
khác:
phần trăm = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel
# làm sáng pixel hiện tại
nếu lỗi <0:
# neo [center_pixel + i] = tuple (bản đồ (lambda x: int (x * phần trăm), màu ngọc lam))
neo [center_pixel + i] = (int (12 * phần trăm), int (44 * phần trăm), int (41 * phần trăm))
khác:
# neo [center_pixel - i] = tuple (bản đồ (lambda x: int (x * phần trăm), màu ngọc lam))
neo [center_pixel - i] = (int (12 * phần trăm), int (44 * phần trăm), int (41 * phần trăm))
nghỉ
neo.show ()
cố gắng:
# kẹp động cơ
nếu leftMotorSpeed> 100:
leftMotorSpeed = 100
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100
nếu đúngMotorSpeed> 100:
rightMotorSpeed = 100
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100
nếu leftMotorSpeed <-100:
leftMotorSpeed = -100
nếu phảiMotorSpeed <-100:
rightMotorSpeed = -100
# kích hoạt động cơ
set_speed (leftMotorSpeed, rightMotorSpeed)
lái xe()
# print ((error, motor_speed))
ngoại trừ:
# trong trường hợp chúng tôi gặp một số vấn đề không thể khắc phục
đi qua
# và duy trì tần số vòng lặp
end_time = ticks_us ()
delay_diff = (end_time - start_time) / 1000
total_time + = delay_diff
total_counts + = 1
if1.0 / update_rate - delay_diff> 0:
ngủ (1.0 / update_rate - delay_diff)

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

Bước 4: Thiết lập bộ dò (Điều khiển từ xa)

Điều tiếp theo chúng ta phải làm là flash thời gian chạy + script sang vi thứ 2 của BBC: bit. Micro: bit thứ hai này sẽ hoạt động như một điều khiển từ xa đối với GiggleBot, được sử dụng để điều chỉnh các thông số sau:

  1. Kp = độ lợi tỷ lệ cho bộ điều khiển PID.
  2. Ki = độ lợi tích phân cho bộ điều khiển PID.
  3. Kd = độ lợi đạo hàm cho bộ điều khiển PID.
  4. trigger_point = điểm được biểu thị bằng tỷ lệ phần trăm giữa tốc độ tối thiểu và tối đa của GiggleBot tại đó tốc độ bắt đầu giảm tuyến tính cho đến khi đạt đến tốc độ tối thiểu.
  5. min_speed_percent = tốc độ tối thiểu được biểu thị bằng phần trăm của tốc độ tối đa.

2 biến còn lại có thể được điều chỉnh được mã hóa trực tiếp trong tập lệnh nằm trên GiggleBot: update_rate và base_speed đại diện cho tốc độ tối đa. Như được mô tả trong tài liệu, tốc độ tối đa có thể được đặt cho GiggleBot là 100, đây cũng là giá trị mặc định cho GiggleBot của chúng tô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 Remote PID Line Follower Tuner (yêu cầu phần khác) - xjfls23

từ nhập microbit *
từ utime import sleep_ms
nhập radio
nhập khẩu
# Yếu tố đầu tiên là Kp đạt được
Yếu tố thứ 2 là Ki gain
Yếu tố thứ 3 là độ lợi Kd
# Phần tử thứ 4 là trigger_point để động cơ giảm tốc độ (0 -> 1)
# Phần tử thứ 5 là tốc độ tối thiểu của động cơ được biểu thị bằng phần trăm (0 -> 1)
lợi nhuận = [0.0, 0.0, 0.0, 1.0, 0.0]
stepSize = 0,1
# 0 và 1 cho phần tử thứ nhất
# 2 và 3 cho phần tử thứ 2
currentSetting = 0
defshowMenu ():
display.scroll ('{} - {}'. format (currentSetting, gains [int (currentSetting / 2)]), delay = 100, wait = False)
radio.on ()
showMenu ()
whileTrue:
cập nhật = Sai
if button_a.is_pressed ():
currentSetting = (currentSetting +1)% (2 * 5)
cập nhật = Đúng
if button_b.is_pressed ():
nếu hiện tại Đặt% 2 == 0:
# tăng mức tăng khi hiện tại Đặt bằng 0 hoặc 2 hoặc..
ifint (currentSetting / 2) trong [0, 2]:
lợi nhuận [int (currentSetting / 2)] + = 10 * stepSize
khác:
lợi nhuận [int (currentSetting / 2)] + = stepSize
khác:
# tăng mức tăng khi hiện tại Đặt là 1 hoặc 3 hoặc..
ifint (currentSetting / 2) trong [0, 2]:
lợi nhuận [int (currentSetting / 2)] - = 10 * stepSize
khác:
lợi nhuận [int (currentSetting / 2)] - = stepSize
radio.send_bytes (ustruct.pack ('fffff', * gains))
cập nhật = Đúng
nếu được cập nhật:
showMenu ()
sleep_ms (200)

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

Bước 5: Điều chỉnh GiggleBot

Điều chỉnh GiggleBot
Điều chỉnh GiggleBot

Đặt GiggleBot trên đường đua, bật nó lên và để nó chạy. Trong thời gian chờ đợi, bạn sẽ liên tục phải đặt nó trở lại theo dõi và điều chỉnh mức tăng / thông số bằng micro BBC: bit khác mà bạn đang cầm trên tay.

Để khởi động GiggleBot, hãy nhấn nút A trên micro BBC: bit của GiggleBot và để dừng nó và do đó đặt lại trạng thái của nó, nhấn vào nút B.

Trên điều khiển từ xa BBC micro: bit, nhấn nút A sẽ đưa bạn qua mọi tùy chọn trong menu của nó và nút B tăng / giảm giá trị tương ứng. Nó giống như việc đặt đồng hồ trên bảng điều khiển của một chiếc ô tô cũ. Các tùy chọn như sau:

  1. Các tùy chọn 0-1 dành cho độ lợi Kp.
  2. 2-3 tùy chọn là Ki tăng.
  3. 4-5 tùy chọn dành cho độ lợi Kd.
  4. 6-7 tùy chọn là để thiết lập điểm đặt tại thời điểm khi động cơ bắt đầu chậm lại.
  5. 8-9 tùy chọn là để thiết lập tốc độ tối thiểu.

Hãy nhớ rằng các số chẵn trong menu là để tăng các giá trị tương ứng và đối với các số lẻ thì hoàn toàn ngược lại.

Ngoài ra, khi nhấn nút B trên micro BBC: bit của GiggleBot, bạn sẽ thấy trên màn hình làm bằng Neopixel của nó số mili giây đã trôi qua kể từ lần đặt lại cuối cùng và số chu kỳ mà rô bốt đã trải qua - với 2 điều này, bạn có thể tính toán tỷ lệ cập nhật của rô bốt.

Cuối cùng và quan trọng nhất, tôi đã đưa ra 2 cách điều chỉnh cho GiggleBot. Một trong số đó là khi đèn LED Neopixel tắt và cái còn lại là khi nào thì tắt. Đèn LED Neopixel được sử dụng để hiển thị lỗi đã tích tụ theo hướng nào.

Bộ điều chỉnh thông số đầu tiên (với đèn LED NeoPixel tắt)

  1. Kp = 32,0
  2. Ki = 0,5
  3. Kd = 80,0
  4. trigger_setpoint = 0,3 (là 30%)
  5. min_speed_percent = 0.2 (là 20%)
  6. base_speed = 100 (còn gọi là tốc độ tối đa)
  7. update_rate = 70 (chạy @ 70Hz)

Bộ điều chỉnh thông số thứ 2 (với đèn LED NeoPixel bật)

  1. Kp = 25,0
  2. Ki = 0,5
  3. Kd = 35,0
  4. trigger_setpoint = 0,3 (là 30%)
  5. min_speed_percent = 0.3 (là 30%)
  6. base_speed = 70 (còn gọi là tốc độ tối đa)
  7. update_rate = 50 (chạy @ 50Hz)
  8. Ngoài ra, biến run_neopixels phải được đặt thành True trong tập lệnh được tải trên vi BBC: bit của GiggleBot. Điều này sẽ làm cho đèn LED NeoPixel nhấp nháy theo cách mà chúng cho biết lỗi được tích lũy theo hướng nào.

Bước 6: Chạy GiggleBot với NeoPixels bị tắt

Đây là một ví dụ về việc chạy GiggleBot với các tham số điều chỉnh đầu tiên được tìm thấy trong bước trước. Ví dụ này đã tắt đèn LED NeoPixel.

Bước 7: Chạy GiggleBot với Neopixels được bật

Đây là ví dụ về việc chạy GiggleBot với bộ thông số điều chỉnh thứ 2 được tìm thấy trong bước 5. Ví dụ này đã bật đèn LED NeoPixel.

Lưu ý rằng trong ví dụ này, GiggleBot gặp khó khăn hơn trong việc theo dõi dòng - đó là bởi vì các đèn LED Neopixel đang "ăn" thời gian CPU của vi BBC: bit. Đó là lý do tại sao chúng tôi phải giảm tỷ lệ cập nhật từ 70 xuống 50.

Đề xuất: