Оглавление:
- Шаг 1. Необходимые компоненты
- Шаг 2: Настройте треки
- Шаг 3: Настройка среды
- Шаг 4: Программирование GiggleBot
- Шаг 5: Дайте ему поработать
Видео: Последователь линии GiggleBot с использованием Python: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
На этот раз мы программируем в MicroPython Dexter Industries GiggleBot, чтобы он следил за черной линией, используя встроенный датчик следящего за линией.
GiggleBot должен быть сопряжен с BBC micro: bit для надлежащего управления.
Если этот учебник слишком сложен для вас и программировать GiggleBot пока слишком сложно, вы всегда можете просмотреть начальное руководство, которое покажет вам, как можно запрограммировать робота в MakeCode, здесь. Связанное руководство проведет вас через самые основы.
Шаг 1. Необходимые компоненты
Требуются следующие аппаратные компоненты:
- x3 батарейки AA - в моем случае я использую аккумуляторные батареи, которые в целом имеют более низкое напряжение.
- Робот Dexter Industries GiggleBot для micro: bit.
- Микро: бит BBC.
Конечно, вам также понадобится кабель micro USB для программирования BBC micro: bit - этот кабель обычно входит в комплект BBC micro: bit, или вы всегда можете использовать тот, который используется для зарядки (Android) смартфонов.
Получите GiggleBot для micro: bit здесь
Шаг 2: Настройте треки
Вам придется распечатать несколько плиток и создать свои собственные треки. Вы можете использовать наши собственные плитки, чтобы быть на 100% уверенным, что вы повторяете наши условия. Или, если вы любите приключения, вы можете использовать черную ленту и сделать свою собственную. Вот PDF-файл с плитками, которые мы использовали.
Вышеуказанная дорожка состоит из следующего количества различных плиток:
- 12 плиток типа №1.
- 5 плиток типа №2.
- 3 шаблона типа плитки №5.
- 3 шаблона типа плитки №6 - здесь вы получите одну дополнительную плитку.
Затем распечатайте их и вырежьте. Попробуйте разместить их, как на фотографии выше, и имейте в виду, что в правой верхней части дорожки 2 плитки должны перекрывать друг друга - это ожидается на тот случай, если вам интересно, что вы делаете не так.
Шаг 3: Настройка среды
Чтобы вы могли программировать BBC micro: bit в MicroPython, вам необходимо настроить для него редактор (Mu Editor) и установить GiggleBot MicroPython Runtime в качестве среды выполнения. Для этого вы должны следовать инструкциям на этой странице. На данный момент используется версия v0.4.0 среды выполнения.
Шаг 4: Программирование GiggleBot
Прежде чем приступить к делу, среда выполнения GiggleBot MicroPython содержит классическую среду выполнения для BBC micro: bit и других библиотек для поддержки GiggleBot и других датчиков Dexter Industries.
После настройки откройте следующий скрипт в редакторе Mu и нажмите Flash. Это запустит GiggleBot MicroPython Runtime и скрипт, который вы только что открыли для своего micro: bit BBC. Сценарий также показан ниже.
После завершения процесса прошивки сложите BBC micro: bit в GiggleBot так, чтобы неопиксели платы были обращены вперед, поместите его на дорожку и включите.
Обратите внимание, что в сценарии уже установлены ПИД-регулятор и две другие константы (заданное значение скорости и константы минимальной скорости).
Примечание. В следующем скрипте могут отсутствовать пробелы, и это, по-видимому, связано с некоторой проблемой при отображении GitHub Gists. Нажмите на суть, чтобы перейти на страницу GitHub, где вы можете скопировать и вставить код.
GiggleBot PID Line Follower - настроен с NeoPixels
из микробитового импорта * |
из импорта gigglebot * |
из utime импортировать sleep_ms, ticks_us |
импортное устройство |
# инициализировать неопиксели ГБ |
neo = init () |
# тайминги |
update_rate = 50 |
# усиления / константы (при напряжении батареи около 4,0 вольт) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
trigger_point = 0,3 |
min_speed_percent = 0,3 |
base_speed = 70 |
уставка = 0,5 |
last_position = заданное значение |
интеграл = 0,0 |
run_neopixels = Правда |
center_pixel = 5 # где центральный пиксель улыбки расположен на ГБ |
# turquoise = tuple (map (lambda x: int (x / 5), (64, 224, 208))) # цвет для отображения ошибки с помощью неопикселей |
# turquoise = (12, 44, 41) # это именно та бирюза, которая прокомментирована выше |
error_width_per_pixel = 0.5 / 3 # максимальная ошибка, деленная на количество сегментов между каждым неопикселем |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, smallest_motor_power, high_motor_power): |
глобальная base_speed |
если abs_error> = точка_пуска: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = upper_bound - точка_пуска |
# y1 = 1.0 |
# x = abs_error - точка_пуска |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# такой же как |
y = (abs_error - точка_пуска) / (верхняя граница - точка_пуска) |
мощность_двигателя = базовая_скорость * (наименьшая_мощность_двигателя + (1- год) * (наибольшая_мощность_двигателя - наименьшая_мощность_двигателя)) |
вернуть motor_power |
еще: |
вернуть base_speed * high_motor_power |
run = False |
previous_error = 0 |
whileTrue: |
# если нажата кнопка a, то начинаем подписку |
если button_a.is_pressed (): |
run = True |
# но если кнопка b нажата, останавливает следящий за строкой |
если button_b.is_pressed (): |
run = False |
интеграл = 0,0 |
previous_error = 0,0 |
Pixel_off () |
останавливаться() |
sleep_ms (500) |
если запустить isTrue: |
# считываем линейные датчики |
start_time = ticks_us () |
справа, слева = read_sensor (LINE_SENSOR, BOTH) |
# строка слева при позиции <0,5 |
# строка справа при позиции> 0,5 |
# строка находится посередине, когда position = 0.5 |
# это взвешенное среднее арифметическое |
пытаться: |
позиция = вправо / плавающее (влево + вправо) |
exceptZeroDivisionError: |
позиция = 0,5 |
# диапазон должен быть (0, 1), а не [0, 1] |
если позиция == 0: позиция = 0,001 |
если позиция == 1: позиция = 0,999 |
# использовать контроллер PD |
error = position - уставка |
интеграл + = ошибка |
исправление = Kp * ошибка + Ki * интеграл + Kd * (error - previous_error) |
previous_error = ошибка |
# вычислить скорости двигателя |
motor_speed = upper_bound_linear_speed_reducer (абс (ошибка), заданное значение * значение триггера, заданное значение, min_speed_percent, 1.0) |
leftMotorSpeed = motor_speed + коррекция |
rightMotorSpeed = motor_speed - коррекция |
# засветить неопиксели в соответствии с заданной ошибкой |
если run_neopixels истинно и total_counts% 3 == 0: |
для i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0, 0, 0) |
для i inb '\ x00 / x01 / x02 / x03': |
ifabs (ошибка)> error_width_per_pixel * i: |
если ошибка <0: |
# neo [center_pixel + i] = бирюзовый |
neo [center_pixel + i] = (12, 44, 41) |
еще: |
# neo [center_pixel - i] = бирюзовый |
neo [center_pixel + i] = (12, 44, 41) |
еще: |
процент = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# загораем текущий пиксель |
если ошибка <0: |
# neo [center_pixel + i] = кортеж (map (lambda x: int (x * процент), бирюзовый)) |
neo [center_pixel + i] = (int (64 * процентов / 5), int (224 * процентов / 5), int (208 * процентов / 5)) |
еще: |
# neo [center_pixel - i] = tuple (map (lambda x: int (x * процент), бирюзовый)) |
neo [center_pixel - i] = (int (64 * проценты / 5), int (224 * проценты / 5), int (208 * проценты / 5)) |
перерыв |
neo.show () |
пытаться: |
# зафиксировать скорость двигателя |
если leftMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
если rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
если leftMotorSpeed <-100: |
leftMotorSpeed = -100 |
если rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# запустить моторы |
set_speed (leftMotorSpeed, rightMotorSpeed) |
водить машину() |
# print ((ошибка, скорость_двигателя)) |
Кроме: |
# на случай, если мы столкнемся с какой-то неустранимой проблемой |
проходить |
# и поддерживать частоту контура |
end_time = ticks_us () |
delay_diff = (end_time - start_time) / 1000 |
if1000.0 / update_rate - delay_diff> 0: |
сон (1000.0 / update_rate - delay_diff) |
просмотреть rawgigglebot_tuned_line_follower.py, размещенный на ❤ на GitHub
Шаг 5: Дайте ему поработать
На BBC micro: bit: две кнопки: кнопка A и кнопка B:
- Нажатие на кнопку A заставляет GiggleBot следовать линии (если она есть).
- Нажатие на кнопку B останавливает GiggleBot и сбрасывает все, чтобы вы могли использовать его снова.
Настоятельно рекомендуется не поднимать GiggleBot, пока он следует по линии, а затем снова ставить его на него, потому что вычисляемая ошибка может накапливаться и полностью испортить маршрут робота. Если вы хотите поднять его, нажмите кнопку B, а затем, когда вы положите его обратно, снова нажмите A.
Рекомендуемые:
Простой последователь линии с использованием Arduino: 5 шагов
Простой следящий за линией с использованием Arduino: Робот-следящий за линией Arduino В этом уроке мы обсудим работу робота, следующего за линией Arduino, который будет следовать за черной линией на белом фоне и делать правильный поворот всякий раз, когда он достигает кривых на своем пути. Последователь линии Arduino Co
Часть 3: GPIO: Сборка ARM: Последователь линии: TI-RSLK: 6 шагов
Часть 3: GPIO: Сборка ARM: Последователь линии: TI-RSLK: Здравствуйте. Это следующий выпуск, в котором мы продолжаем использовать сборку ARM (вместо языка более высокого уровня). Вдохновением для этого Instructable послужила лаборатория 6 из набора для обучения робототехнической системе Texas Instruments, или TI-RSLK. Мы будем использовать микрофон
Последователь линии GoPiGo3: 8 шагов
Последователь линии GoPiGo3: в этом уроке мы берем последователя линии и используем его на GoPiGo3, чтобы он следовал за черной линией
Автономный дрон-последователь линии с Raspberry Pi: 5 шагов
Автономный беспилотный летательный аппарат с Raspberry Pi: в этом руководстве показано, как в конечном итоге сделать беспилотный летательный аппарат с линейным следователем. Этот дрон будет иметь «автономный режим». переключатель, который переведет дрон в режим. Таким образом, вы все еще можете управлять своим дроном, как и раньше. Имейте в виду, что он будет
Последователь линии с использованием Arduino - Простой проект DIY: 6 шагов
Последователь линии с использованием Arduino | Easy DIY Project: в этом уроке мы создадим последователь линии, используя ArduinoParts Needed: Chasis: BO Motors and Wheels: https://amzn.to/2Yjh9I7 Драйвер двигателя L298n: https://amzn.to/2IWNMWF IR sensor : https://amzn.to/2FFtFu3 Arduino Uno: https://amzn.to/2FyTrjF J