Оглавление:
- Шаг 1. Необходимые компоненты
- Шаг 2: Сборка робота
- Шаг 3. Создайте свой собственный лабиринт - необязательно
- Шаг 4: Настройка среды
- Шаг 5: Программирование GiggleBot - Часть I
- Шаг 6: Программирование пульта - Часть II
- Шаг 7: интерпретация удаленного экрана
Видео: Создание робота с лидаром с помощью GiggleBot: 8 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
В этом уроке мы заставляем GiggleBot преодолевать трудности лабиринта.
Мы устанавливаем сервопривод на GiggleBot, к которому прикрепляем датчик расстояния. Во время работы сервопривод будет вращаться вперед и назад, чтобы датчик расстояния мог измерить расстояние до каждого препятствия. Он работает так же, как датчик LIDAR, который обычно намного дороже.
В то же время GiggleBot отправляет эти данные на удаленный BBC micro: bit, который отображает на своей матрице светодиодов 5 на 5 свое положение относительно препятствий.
Ваша задача - иметь возможность перемещаться по GiggleBot, только глядя на то, что он показывает на другом micro: bit BBC. Для управления GiggleBot используются кнопки на пульте BBC micro: bit.
Это звучит забавно! Давайте приступим к этому, не так ли?
Шаг 1. Необходимые компоненты
Нам понадобятся:
- GiggleBot.
- Аккумулятор для BBC micro: bit. Он поставляется вместе с BBC micro: bit в упаковке.
- x3 батарейки AA для GiggleBot.
- Кабель Grove для подключения датчика расстояния к GiggleBot.
- Сервопривод от DexterIndustries.
- x3 BBC micro: бит. Один для GiggleBot, другой для управления роботом издалека.
- Датчик расстояния от DexterIndustries.
Получите робота GiggleBot для BBC micro: bit здесь!
Шаг 2: Сборка робота
Чтобы подготовить GiggleBot к программированию, нам нужно его собрать, хотя делать здесь особо нечего.
Вставьте 3 батарейки AA в соответствующий отсек под GiggleBot.
Соберите сервопакет. К его вращающемуся рычагу сервопривода используйте последнее отверстие, чтобы закрепить сервопривод на передних разъемах GiggleBot. Вы можете использовать винт и / или какой-нибудь провод, чтобы сделать его более устойчивым на своем месте. Или вы можете приклеить его к доске горячим способом. В моем случае я использовал винт и короткий провод, чтобы привязать сервомеханизм к плате GiggleBot.
При установке сервомеханизма на сервопривод, убедитесь, что сервопривод уже установлен в положение 80. Вы можете сделать это, вызвав gigglebot.set_servo (gigglebot. RIGHT, 80). Вы можете прочитать об этом здесь.
Затем поместите датчик расстояния на лицевую сторону сервокомплекта и закрепите его, как в приведенном выше примере.
Наконец, подключите датчик расстояния с помощью кабеля Grove к любому из 2 портов I2C, а серводвигатель - к правому порту на GiggleBot - правый порт указан на нем.
Шаг 3. Создайте свой собственный лабиринт - необязательно
В этом случае я использовал кучу коробок, чтобы создать замкнутую трассу, похожую на трек NASCAR.
На этом этапе вы можете проявить творческий подход и сделать его так, как вы хотите, или сделать его очень длинным, потому что это действительно зависит от вас.
Или, если вам вообще не нужна дорожка, вы можете поставить GiggleBot, например, на кухне или в гостиной - этого должно быть достаточно, потому что есть много стен и препятствий, которых вам все еще нужно избегать.
Шаг 4: Настройка среды
Чтобы вы могли программировать BBC micro: bit в MicroPython, вам необходимо настроить для него редактор (Mu Editor) и установить GiggleBot MicroPython Runtime в качестве среды выполнения. Для этого вы должны следовать инструкциям на этой странице. На данный момент используется версия v0.4.0 среды выполнения.
Шаг 5: Программирование GiggleBot - Часть I
Для начала настроим скрипт GiggleBot. Этот скрипт заставит GiggleBot поворачивать свой серводвигатель на 160 градусов (80 градусов в каждом направлении), одновременно снимая 10 показаний с датчика расстояния за один оборот.
При включении GiggleBot будет ждать, пока не получит команду от пульта дистанционного управления. Может быть всего 3 команды: двигаться вперед, влево или вправо.
Примечание. В следующем скрипте могут отсутствовать пробелы, и это, по-видимому, связано с некоторой проблемой при отображении GitHub Gists. Нажмите на суть, чтобы перейти на страницу GitHub, где вы можете скопировать и вставить код.
GiggleBot на основе LIDAR с дистанционным управлением
из импорта gigglebot * |
from Distance_sensor импорт DistanceSensor |
из микробита импорт сна |
из utime импорта ticks_us, sleep_us |
импортное устройство |
импортное радио |
# остановите робота, если он уже движется |
останавливаться() |
# включить радио |
radio.on () |
# объект датчика расстояния |
ds = DistanceSensor () |
ds.start_continuous () |
rotate_time = 0.7 # измеряется в секундах |
rotate_span = 160 # измеряется в градусах |
rotate_steps = 10 |
overhead_compensation = 1.05 # определяется в процентах |
time_per_step = 10 ** 6 * rotate_time / (rotate_steps * overhead_compensation) |
last_read_time = 0 |
радар = bytearray (rotate_steps) |
servo_rotate_direction = 0 # 0 для движения вверх (0-> 160) и 1 в противном случае |
radar_index = 0 |
set_servo (ВПРАВО, 0) |
whileTrue: |
# читать с радара |
если ticks_us () - last_read_time> time_per_step: |
# читать с датчика расстояния |
радар [radar_index] = int (ds.read_range_continuous () / 10) |
last_read_time = ticks_us () |
печать (radar_index) |
# выполняем логику вращения сервопривода слева направо |
если radar_index == rotate_steps -1 и servo_rotate_direction == 0: |
set_servo (ВПРАВО, 0) |
servo_rotate_direction = 1 |
elif radar_index == 0 и servo_rotate_direction == 1: |
set_servo (RIGHT, rotate_span) |
servo_rotate_direction = 0 |
еще: |
radar_index + = 1, если servo_rotate_direction == 0else-1 |
# и отправляем значения радара |
radio.send_bytes (радар) |
пытаться: |
# читать команды робота |
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()) |
# и приведите в действие двигатели при получении каких-либо команд |
set_speed (lmotor, rmotor) |
водить машину() |
exceptTypeError: |
проходить |
просмотреть rawgigglebot_lidar_robot.py, размещенный на ❤ на GitHub
Шаг 6: Программирование пульта - Часть II
Что осталось сделать, так это запрограммировать второй бит BBC micro: bit, который действует как пульт.
Пульт используется для отображения на своем экране размером 5 на 5 пикселей относительного расстояния до препятствий. Максимум будет включено 10 пикселей.
В то же время пульт дает вам возможность удаленно управлять GiggleBot, нажимая его 2 кнопки: двигаться вперед, влево и вправо.
Примечание. В следующем скрипте могут отсутствовать пробелы, и это, по-видимому, связано с некоторой проблемой при отображении GitHub Gists. Нажмите на суть, чтобы перейти на страницу GitHub, где вы можете скопировать и вставить код.
GiggleBot на основе LIDAR с дистанционным управлением - удаленный код
из микробита импорт сна, дисплея, button_a, button_b |
импортное устройство |
импортное радио |
импортная математика |
radio.on () |
rotate_steps = 10 |
rotate_span = 160 # в градусах |
rotate_step = rotate_span / rotate_steps |
max_distance = 50 # в сантиметрах |
side_length_leds = 3 # измеряется в количестве пикселей |
радар = bytearray (rotate_steps) |
xar = bytearray (rotate_steps) |
яр = bytearray (rotate_steps) |
save_xar = массив байтов (rotate_steps) |
save_yar = массив байтов (rotate_steps) |
motor_speed = 50 |
whileTrue: |
status = radio.receive_bytes_into (радар) |
если статус notNone: |
# display.clear () |
для c, val inenumerate (радар): |
если радар [c] <= max_distance: |
# вычисляем 2d координаты каждого расстояния |
angle = rotate_steps / (rotate_steps -1) * шаг_поворота * c |
угол + = (180- интервал поворота) /2.0 |
x_c = math.cos (угол * math.pi /180.0) * радар [c] |
y_c = math.sin (угол * math.pi /180.0) * радар [c] |
# масштабируйте расстояния, чтобы они соответствовали микробитному дисплею 5x5 |
x_c = x_c * (side_length_leds -1) / max_distance |
y_c = y_c * (side_length_leds +1) / max_distance |
# изменить координаты |
x_c + = (side_length_leds -1) |
y_c = (side_length_leds +1) - y_c |
# круглые координаты, где находятся светодиоды |
если x_c - math.floor (x_c) <0,5: |
x_c = math.floor (x_c) |
еще: |
x_c = math.ceil (x_c) |
если y_c - math.floor (y_c) <0,5: |
y_c = math.floor (y_c) |
еще: |
y_c = math.ceil (y_c) |
xar [c] = x_c |
яр [c] = y_c |
еще: |
xar [c] = 0 |
яр [c] = 0 |
display.clear () |
для 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 () |
если stateA и stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed)) |
печать ('вперед') |
если stateA, а не stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed)) |
печать ('влево') |
если не stateA и stateB: |
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed)) |
печать ('право') |
если не stateA и not stateB: |
radio.send_bytes (ustruct.pack ('bb', 0, 0)) |
печать ('стоп') |
просмотреть rawgigglebot_lidar_remote.py, размещенный на ❤ на GitHub
Шаг 7: интерпретация удаленного экрана
"loading =" lazy "управлять GiggleBot, у вас есть следующие возможности:
- Нажмите кнопку A и кнопку B, чтобы переместить GiggleBot вперед.
- Нажмите кнопку A, чтобы повернуть GiggleBot влево.
- Нажмите кнопку B, чтобы повернуть GiggleBot вправо.
Чтобы увидеть, в каком направлении обнаруживаются ближайшие препятствия, просто посмотрите на экран пульта дистанционного управления (удаленный микробит BBC, который вы держите). Вы должны иметь возможность управлять GiggleBot издалека, не глядя на него.
Рекомендуемые:
Сделай сам -- Как сделать робота-паука, которым можно управлять с помощью смартфона с помощью Arduino Uno: 6 шагов
Сделай сам || Как сделать робота-паука, которым можно управлять с помощью смартфона с помощью Arduino Uno: Создавая робота-паука, можно многое узнать о робототехнике. Например, создание роботов - это не только увлекательно, но и сложно. В этом видео мы покажем вам, как сделать робота-паука, которым мы можем управлять с помощью нашего смартфона (Androi
КАК СОБРАТЬ ВПЕЧАТЛЯЮЩУЮ ДЕРЕВЯННУЮ РУКОЯТКУ РОБОТА (ЧАСТЬ 3: РУКОЯТКА РОБОТА) - НА ОСНОВЕ МИКРО: BITN: 8 шагов
КАК СОБРАТЬ ВПЕЧАТЛЯЮЩУЮ ДЕРЕВЯННУЮ РУКОЯТКУ РОБОТА (ЧАСТЬ 3: РУКОЯТКА РОБОТА) - НА ОСНОВЕ МИКРО: BITN: Следующий процесс установки основан на завершении режима избегания препятствий. Процесс установки в предыдущем разделе такой же, как и процесс установки в режиме отслеживания строк. Тогда давайте посмотрим на окончательную форму A
[Робот Arduino] Как сделать робота захвата движения - Большой палец руки робота - Серводвигатель - Исходный код: 26 шагов (с изображениями)
[Робот Arduino] Как сделать робота захвата движения | Большой палец руки робота | Серводвигатель | Исходный код: Thumbs Robot. Использовал потенциометр серводвигателя MG90S. Это очень весело и просто! Код очень простой. Это всего около 30 строк. Это похоже на захват движения. Пожалуйста, оставьте любой вопрос или отзыв! [Инструкция] Исходный код https: //github.c
Создание робота, подключенного к Интернету (примерно за 500 долларов) (с помощью Arduino и нетбука): 6 шагов (с изображениями)
Создание робота, подключенного к Интернету (примерно за 500 долларов) (с использованием Arduino и нетбука): в этой инструкции вы узнаете, как создать собственного робота, подключенного к Интернету (с помощью микроконтроллера Arduino и Asus eee pc). Подключенный робот? Конечно, чтобы поиграть. Управляйте своим роботом через комнату или через счет
Создайте очень маленького робота: сделайте самого маленького в мире колесного робота с захватом: 9 шагов (с изображениями)
Создайте очень маленького робота: создайте самого маленького в мире колесного робота с захватом. Создайте робота объемом 1/20 куб. Дюйма с захватом, который может поднимать и перемещать мелкие предметы. Он управляется микроконтроллером Picaxe. На данный момент я считаю, что это может быть самый маленький в мире колесный робот с захватом. Без сомнения, ч