Съдържание:

Направете робот, ръководен от Lidar, с GiggleBot: 8 стъпки
Направете робот, ръководен от Lidar, с GiggleBot: 8 стъпки

Видео: Направете робот, ръководен от Lidar, с GiggleBot: 8 стъпки

Видео: Направете робот, ръководен от Lidar, с GiggleBot: 8 стъпки
Видео: EVIL IN ANTARCTICA (and UFOs in Alaska) Eric J Hecker 2024, Ноември
Anonim
Направете робот, ръководен от Lidar, с GiggleBot
Направете робот, ръководен от Lidar, с GiggleBot
Направете робот, ръководен от Lidar, с GiggleBot
Направете робот, ръководен от Lidar, с GiggleBot
Направете робот, ръководен от Lidar, с GiggleBot
Направете робот, ръководен от Lidar, с GiggleBot

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

Монтираме серво на GiggleBot, към което прикрепяме сензор за разстояние. Докато работи, сервото ще се върти напред -назад, така че сензорът за разстояние може да измери разстоянието до всяко препятствие. Това работи много като сензор LIDAR, който обикновено е много по -скъп.

В същото време GiggleBot изпраща тези данни до отдалечен микробит на BBC, който показва върху своята матрица 5 на 5 светодиоди относителното си положение спрямо препятствията.

Вашата работа е да можете да навигирате в GiggleBot само като гледате какво е показано на другия BBC micro: bit. За да управлявате GiggleBot, се използват бутоните на отдалечения BBC micro: bit.

Това звучи забавно! Нека да се заемем с това, нали?

Стъпка 1: Необходими компоненти

Задължителни компоненти
Задължителни компоненти

Ще ни трябва:

  1. A 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 import*
от distance_sensor import DistanceSensor
от микробитов импорт сън
от utime import ticks_us, sleep_us
ustruct за импортиране
внос на радио
# спрете робота, ако вече се движи
Спри се()
# активирайте радиото
radio.on ()
# обект на сензор за разстояние
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# измерено в секунди
rotate_span = 160# измерено в градуси
rotate_steps = 10
компенсация за режийни разходи = 1.05# дефинирано в проценти
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation)
last_read_time = 0
радар = байтов ред (завъртане на стъпки)
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)
задвижване ()
с изключение наTypeError:
пропуск

вижте rawgigglebot_lidar_robot.py, хоствано с ❤ от GitHub

Стъпка 6: Програмиране на дистанционното - Част II

Остава да се направи програмирането на втория BBC micro: bit, който действа като дистанционно.

Дистанционното се използва за показване на неговия екран с размери 5 на 5 пиксела относителното разстояние до препятствията. Най -много ще има включени 10 пиксела.

В същото време дистанционното ви дава възможности за дистанционно управление на GiggleBot чрез натискане на неговите 2 бутона: придвижете се напред, наляво и надясно.

Забележка: В следния скрипт може да липсват интервали и това изглежда се дължи на някакъв проблем при показването на GitHub Gists. Щракнете върху същността, за да ви отведе до страницата на GitHub, където можете да копирате и поставите кода.

Дистанционно управляван LIDAR базиран GiggleBot - Код за дистанционно управление

от microbit импортиране на сън, дисплей, button_a, button_b
ustruct за импортиране
внос на радио
внос на математика
radio.on ()
завъртане на стъпки = 10
rotate_span = 160# в градуси
rotate_step = завъртане_span / rotate_steps
max_distance = 50# в сантиметри
side_length_leds = 3 # измерено в # пиксела
радар = байтов ред (завъртане на стъпки)
xar = байтов ред (завъртане на стъпки)
yar = bytearray (rotate_steps)
записан_xar = байтов масив (завъртане на стъпки)
записан_годишен = байтов масив (завъртане на стъпки)
скорост на двигателя = 50
whileTrue:
status = radio.receive_bytes_into (радар)
ако състоянието не е Няма:
# display.clear ()
за c, val безброй (радар):
ако радар [c] <= max_distance:
# изчислете 2d координати на всяко разстояние
ъгъл = завъртане на стъпки / (завъртане на стъпки -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 - математически етаж (x_c) <0,5:
x_c = математически етаж (x_c)
иначе:
x_c = math.ceil (x_c)
ако y_c - математически етаж (y_c) <0,5:
y_c = math.floor (y_c)
иначе:
y_c = math.ceil (y_c)
xar [c] = x_c
yar [c] = y_c
иначе:
xar [c] = 0
yar [c] = 0
display.clear ()
за x, y inzip (xar, yar):
display.set_pixel (x, y, 9)
# печат (списък (zip (xar, yar, радар)))
stateA = button_a.is_pressed ()
stateB = button_b.is_pressed ()
ако stateA и stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
print ('напред')
ако stateA, а не stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
печат ('вляво')
ако не е състояние A и състояние B:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
печат ('вдясно')
ifnot stateA andnot stateB:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
печат ('стоп')

вижте rawgigglebot_lidar_remote.py, хоствано с ❤ от GitHub

Стъпка 7: Тълкуване на отдалечения екран

"loading =" lazy "контролира GiggleBot, имате следните опции:

  1. Натиснете бутон A и бутон B, за да преместите GiggleBot напред.
  2. Натиснете бутон А, за да завъртите GiggleBot наляво.
  3. Натиснете бутон B, за да завъртите GiggleBot надясно.

За да видите в коя посока са открити най -близките препятствия, просто погледнете екрана на дистанционното управление (дистанционното BBC micro: bit, което държите). Трябва да можете да контролирате GiggleBot от далеч, без да го гледате.

Препоръчано: