Оглавление:

Создание робота с лидаром с помощью GiggleBot: 8 шагов
Создание робота с лидаром с помощью GiggleBot: 8 шагов

Видео: Создание робота с лидаром с помощью GiggleBot: 8 шагов

Видео: Создание робота с лидаром с помощью GiggleBot: 8 шагов
Видео: Простой робот с камерой | Orange pi | Raspberry pi | OpenCV 2024, Ноябрь
Anonim
Создайте робота с лидаром с помощью GiggleBot
Создайте робота с лидаром с помощью GiggleBot
Создайте робота с лидаром с помощью GiggleBot
Создайте робота с лидаром с помощью GiggleBot
Создайте робота с лидаром с помощью GiggleBot
Создайте робота с лидаром с помощью GiggleBot

В этом уроке мы заставляем GiggleBot преодолевать трудности лабиринта.

Мы устанавливаем сервопривод на GiggleBot, к которому прикрепляем датчик расстояния. Во время работы сервопривод будет вращаться вперед и назад, чтобы датчик расстояния мог измерить расстояние до каждого препятствия. Он работает так же, как датчик LIDAR, который обычно намного дороже.

В то же время GiggleBot отправляет эти данные на удаленный BBC micro: bit, который отображает на своей матрице светодиодов 5 на 5 свое положение относительно препятствий.

Ваша задача - иметь возможность перемещаться по GiggleBot, только глядя на то, что он показывает на другом micro: bit BBC. Для управления GiggleBot используются кнопки на пульте BBC micro: bit.

Это звучит забавно! Давайте приступим к этому, не так ли?

Шаг 1. Необходимые компоненты

Обязательные компоненты
Обязательные компоненты

Нам понадобятся:

  1. GiggleBot.
  2. Аккумулятор для BBC micro: bit. Он поставляется вместе с BBC micro: bit в упаковке.
  3. x3 батарейки AA для GiggleBot.
  4. Кабель Grove для подключения датчика расстояния к GiggleBot.
  5. Сервопривод от DexterIndustries.
  6. x3 BBC micro: бит. Один для GiggleBot, другой для управления роботом издалека.
  7. Датчик расстояния от 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, у вас есть следующие возможности:

  1. Нажмите кнопку A и кнопку B, чтобы переместить GiggleBot вперед.
  2. Нажмите кнопку A, чтобы повернуть GiggleBot влево.
  3. Нажмите кнопку B, чтобы повернуть GiggleBot вправо.

Чтобы увидеть, в каком направлении обнаруживаются ближайшие препятствия, просто посмотрите на экран пульта дистанционного управления (удаленный микробит BBC, который вы держите). Вы должны иметь возможность управлять GiggleBot издалека, не глядя на него.

Рекомендуемые: