Мазмуну:

GiggleBot менен Лидар жетектеген робот жасаңыз: 8 кадам
GiggleBot менен Лидар жетектеген робот жасаңыз: 8 кадам

Video: GiggleBot менен Лидар жетектеген робот жасаңыз: 8 кадам

Video: GiggleBot менен Лидар жетектеген робот жасаңыз: 8 кадам
Video: Загадка Титаника : Как они могли не заметить айсберг?! Самая подробная история! 2024, Ноябрь
Anonim
GiggleBot менен Лидар башкарган робот жасаңыз
GiggleBot менен Лидар башкарган робот жасаңыз
GiggleBot менен Лидар башкарган робот жасаңыз
GiggleBot менен Лидар башкарган робот жасаңыз
GiggleBot менен Лидар башкарган робот жасаңыз
GiggleBot менен Лидар башкарган робот жасаңыз

Бул үйрөткүчтө биз GiggleBotту лабиринттин кыйынчылыктары менен күрөшүүгө мажбур кылабыз.

Биз GiggleBotко сервону орнотуп жатабыз, ага аралык сенсорун тиркеп жатабыз. Чуркап жүргөндө, servo алдыга жана артка айланат, ошондо аралык сенсор ар бир тоскоолдукка чейинки аралыкты өлчөй алат. Бул LIDAR сенсоруна окшош, ал көбүнчө кымбатыраак.

Ошол эле учурда, GiggleBot бул маалыматты алыскы Би-Би-Си микро: битине жөнөтөт, ал 5-тен 5-ге чейинки LED диоддоруна тоскоолдуктарга салыштырмалуу позициясын көрсөтөт.

Сиздин жумушуңуз - бул GiggleBotту башка Би -Би -Си микро: битинде көрсөтүлгөн нерсеге карап гана навигациялоо. GiggleBotту көзөмөлдөө үчүн, алыскы BBC micro: bit баскычтары колдонулат.

Бул кызыктуу окшойт! Келгиле, буга кирели, туурабы?

1 -кадам: Керектүү компоненттер

Керектүү компоненттер
Керектүү компоненттер

Бизге керек болот:

  1. A GiggleBot.
  2. BBC микро: бит үчүн батарейка. Бул пакетте BBC микро: бит менен кошо келет.
  3. GiggleBot үчүн x3 AA батареялары.
  4. Алыстык сенсорун GiggleBotко туташтыруу үчүн Grove кабели.
  5. DexterIndustriesтен келген Servo комплект.
  6. x3 BBC микро: бит. Бирөө GiggleBot үчүн, экинчиси роботту алыстан башкарып турган.
  7. DexterIndustriesтен алыстык сенсору.

BBC микро үчүн GiggleBot роботун алыңыз: бул жерде!

2 -кадам: Роботту чогултуу

Роботту чогултуу
Роботту чогултуу
Роботту чогултуу
Роботту чогултуу

GiggleBotту программалоого даяр кылуу үчүн, биз аны чогултушубуз керек, бирок анча деле көп нерсе кылуунун кажети жок.

3 AA батарейкасын GiggleBotтун астындагы бөлүмүнө салыңыз.

Серво пакетин чогултуп алыңыз. Сервонун айлануучу колуна сервону GiggleBotтун алдыңкы туташтыргычтарына бекитүү үчүн анын акыркы тешигин колдонуңуз. Сиз бураманы жана/же кандайдыр бир зымды колдонуп, анын ордуна туруктуу болушу мүмкүн. Же тактайга ысык желим менен чаптасаңыз болот. Менин учурда, мен бурама жана кыска зым менен GiggleBot тактасына servo колун байлап.

Серво колун servoго орнотуп жатканда, servo мурунтан эле 80 позициясына коюлганын текшериңиз. Муну gigglebot.set_servo (gigglebot. RIGHT, 80) чалуу менен жасай аласыз. Бул жерде бул тууралуу көбүрөөк биле алабыз.

Андан кийин, аралык сенсорун servo пакеттин алдыңкы жагына коюп, жогорудагы мисалда көрсөтүлгөндөй оңдоңуз.

Акыр -аягы, аралык сенсорун Grove кабели менен 2 I2C портторунун бирине жана servo моторун GiggleBotто отурган оң портко туташтырыңыз - анда туура порт айтылган.

3 -кадам: Өз лабириниңизди түзүңүз - Милдеттүү эмес

Өз лабиринтиңизди түзүңүз - Милдеттүү эмес
Өз лабиринтиңизди түзүңүз - Милдеттүү эмес

Бул учурда, мен NASCARге окшош жабык цикл трегин түзүү үчүн көптөгөн кутучаларды колдондум.

Бул кадамда сиз чындап чыгармачылыкка жетип, аны каалагандай бура аласыз же супер узун кыла аласыз, анткени бул чынында сизге байланыштуу.

Же такыр тректи каалабасаңыз, мисалы, GiggleBotту ашканага же конок бөлмөсүнө койсоңуз болот - бул жетишерлик жакшы болушу керек, анткени сиз дагы эле качышыңыз керек болгон дубалдар жана тоскоолдуктар көп.

4 -кадам: Айлана -чөйрөнү орнотуу

Айлана -чөйрөнү орнотуу
Айлана -чөйрөнү орнотуу

MicroPythonдо BBC микро: битин программалай алышыңыз үчүн, ага редакторду (Mu Editor) орнотуп, GiggleBot MicroPython Runtime'ди анын иштөө убактысы катары коюңуз. Ал үчүн бул беттеги көрсөтмөлөрдү аткарышыңыз керек. Ушул учурга карата, иштөө убактысынын v0.4.0 версиясы колдонулат.

5 -кадам: GiggleBotту программалоо - I бөлүм

Биринчиден, GiggleBotтун сценарийин орнотолу. Бул сценарий GiggleBotтун серво моторун 160 градуска (ар бир багытта 80 градус) айлантууга мажбур кылат, ошол эле учурда бир аралыкта сенсордон 10 окууну алат.

Күйгүзүлгөндө, GiggleBot алыстан башкаруудан буйрук алганга чейин турат. Болгону 3 буйрук болушу мүмкүн: алдыга, солго же оңго.

Эскертүү: Төмөнкү скриптте боштуктар жок болушу мүмкүн жана бул GitHub Gistsти көрсөтүүдөгү кандайдыр бир көйгөйдөн улам келип чыккан окшойт. Сизди GitHub баракчасына алып баруу үчүн, маңызын чыкылдатыңыз, анда сиз кодду көчүрүп-чаптай аласыз.

Алыстан башкарылуучу LIDAR негизделген GiggleBot

gigglebot импортунан*
from distance_sensor импорттоо DistanceSensor
microbit импорттук уйкудан
utime импорттоодо ticks_us, sleep_us
структураны импорттоо
радио импорттоо
# эгер робот кыймылда болсо, аны токтотуңуз
токтотуу ()
# радиону иштетүү
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
радар = байтрейр (rotate_steps)
servo_rotate_direction = 0# 0 өйдө чыгуу үчүн (0-> 160) жана башка 1
radar_index = 0
set_servo (ОҢ, 0)
whileTrue:
# радардан окуу
if 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 (ОҢГО, айлануу_алакасы)
servo_rotate_direction = 0
башка:
radar_index += 1if servo_rotate_direction == 0else-1
# жана радар баалуулуктарын жөнөтүңүз
radio.send_bytes (радар)
аракет кыл:
# роботтун буйруктарын окуу
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# жана моторлорду иштеткиле, кандайдыр бир буйруктар болушу керек
set_speed (lmotor, rmotor)
айдоо ()
exceptTypeError:
өтүү

GitHub тарабынан ❤ уюштурулган rawgigglebot_lidar_robot.py көрүү

6 -кадам: Алыстан башкарууну программалоо - II бөлүм

Эмне кылыш керек, алыстан башкаруучу катары иштеген 2 -Би -Би -Си микро: битин программалоо.

Алыстан башкаруу 5-тен 5 пикселге чейинки экранда тоскоолдуктарга салыштырмалуу аралыкты көрсөтүү үчүн колдонулат. Көбүнчө 10 пиксел күйгүзүлөт.

Ошол эле учурда, пульт сизге GiggleBotту 2 баскычын басуу аркылуу башкарууга мүмкүнчүлүк берет: алдыга, солго жана оңго.

Эскертүү: Төмөнкү скриптте боштуктар жок болушу мүмкүн жана бул GitHub Gistsти көрсөтүүдөгү кандайдыр бир көйгөйдөн улам келип чыккан окшойт. Сизди GitHub баракчасына алып баруу үчүн, маңызын чыкылдатыңыз, анда сиз кодду көчүрүп-чаптай аласыз.

Алыстан башкарылуучу LIDAR негизделген GiggleBot - Remote Code

микробиттен импорттук уйку, дисплей, 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 # пикселдин саны менен өлчөнөт
радар = байтрейр (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = байтрейр (rotate_steps)
save_yar = bytearray (rotate_steps)
motor_speed = 50
whileTrue:
статус = radio.receive_bytes_into (радар)
эгер статус жок болсо:
# display.clear ()
c, val unenumerate (радар) үчүн:
эгер радар [c] <= max_distance:
# ар бир аралыктын 2d координаттарын эсептөө
бурч = rotate_steps / (rotate_steps -1) * rotate_step * c
бурч += (180- rotate_span) /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
# тегерек координаттар так LED кайда
эгер 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
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))
басып чыгаруу ("алдыга")
эгер мамлекетA жана мамлекеттик эмес Б:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
басып чыгаруу ("сол")
ifA эмес stateA жана stateB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
басып чыгаруу ("оң")
ifnot эмесA жана stateB эмес:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
басып чыгаруу ('токтоо')

GitHub тарабынан ❤ уюштурулган rawgigglebot_lidar_remote.py көрүү

7 -кадам: Алыстан экранды чечмелөө

"loading =" жалкоо "GiggleBotту көзөмөлдөйт, сизде төмөнкү параметрлер бар:

  1. GiggleBotту алдыга жылдыруу үчүн А жана B баскычтарын басыңыз.
  2. GiggleBotту солго айландыруу үчүн А баскычын басыңыз.
  3. G баскычын басыңыз GiggleBot оңго.

Эң жакын тоскоолдуктар кайсы багытта аныкталганын билүү үчүн, жөн гана пульттун (алыскы BBC микро: сиз кармап турган бит) экранын караңыз. Сиз GiggleBotту алыстан эле көзөмөлдөп турушуңуз керек.

Сунушталууда: