Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
На этот раз мы программируем в 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
