Mục lục:
- Bước 1: Các thành phần bắt buộc
- Bước 2: Thiết lập Đường đi & Môi trường
- Bước 3: Thiết lập GiggleBot
- Bước 4: Thiết lập bộ dò (Điều khiển từ xa)
- Bước 5: Điều chỉnh GiggleBot
- Bước 6: Chạy GiggleBot với NeoPixels bị tắt
- Bước 7: Chạy GiggleBot với Neopixels được bật
Video: Điều chỉnh người theo dõi dòng GiggleBot - Nâng cao: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
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:
- Một robot GiggleBot cho micro: bit.
- x3 Pin AA
- 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ố.
- 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
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:
- Kp = độ lợi tỷ lệ cho bộ điều khiển PID.
- Ki = độ lợi tích phân cho bộ điều khiển PID.
- Kd = độ lợi đạo hàm cho bộ điều khiển PID.
- 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.
- 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
Đặ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:
- Các tùy chọn 0-1 dành cho độ lợi Kp.
- 2-3 tùy chọn là Ki tăng.
- 4-5 tùy chọn dành cho độ lợi Kd.
- 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.
- 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)
- Kp = 32,0
- Ki = 0,5
- Kd = 80,0
- trigger_setpoint = 0,3 (là 30%)
- min_speed_percent = 0.2 (là 20%)
- base_speed = 100 (còn gọi là tốc độ tối đa)
- update_rate = 70 (chạy @ 70Hz)
Bộ điều chỉnh thông số thứ 2 (với đèn LED NeoPixel bật)
- Kp = 25,0
- Ki = 0,5
- Kd = 35,0
- trigger_setpoint = 0,3 (là 30%)
- min_speed_percent = 0.3 (là 30%)
- base_speed = 70 (còn gọi là tốc độ tối đa)
- update_rate = 50 (chạy @ 50Hz)
- 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:
Người theo dõi dòng trên Tinkercad: 3 bước
Người theo dòng trên Tinkercad: Robot Người theo dòng A, như tên cho thấy, là một phương tiện được dẫn đường tự động, đi theo một đường trực quan được nhúng trên sàn nhà hoặc trần nhà. Thông thường, đường trực quan là con đường mà robot theo dõi đường đi và nó sẽ là một đường màu đen trên
Người theo dõi dòng PID Atmega328P: 4 bước
Người theo dõi dòng PID Atmega328P: GIỚI THIỆU Tài liệu hướng dẫn này nói về việc tạo ra một người theo dòng hiệu quả và đáng tin cậy với Điều khiển PID (đạo hàm theo tỷ lệ-tích phân) (Toán học) chạy bên trong não của nó (Atmega328P). Người theo dõi đường dây là một robot tự động tuân theo một
Người theo dõi dòng đơn giản bằng Arduino: 5 bước
Người theo dòng đơn giản sử dụng Arduino: Robot theo đường Arduino Trong hướng dẫn này, chúng ta sẽ thảo luận về hoạt động của một robot theo đường Arduino sẽ đi theo một đường màu đen trên nền trắng và rẽ chính xác bất cứ khi nào nó đến các đường cong trên đường của nó. Công ty theo dõi dòng Arduino
Bảng trắng lớp học của người theo dõi dòng Arduino: 8 bước (có hình ảnh)
Arduino Line Follower Wallrides Classroom Whiteboard: Đi theo dòng trên mặt đất là quá nhàm chán! Chúng tôi đã cố gắng xem xét những người theo dõi dòng ở một góc độ khác và đưa họ đến một bình diện khác - lên bảng trắng của trường
Người theo dõi dòng GiggleBot bằng Python: 5 bước
Người theo dõi dòng GiggleBot sử dụng Python: Lần này, chúng tôi đang lập trình trong MicroPython của Dexter Industries GiggleBot để theo dõi một đường màu đen bằng cách sử dụng cảm biến người theo dõi dòng tích hợp của nó. GiggleBot phải được ghép nối với BBC micro: bit để nó có thể được kiểm soát một cách thích hợp. Nếu