Агуулгын хүснэгт:

GiggleBot ашиглан Лидар удирддаг робот хий: 8 алхам
GiggleBot ашиглан Лидар удирддаг робот хий: 8 алхам

Видео: GiggleBot ашиглан Лидар удирддаг робот хий: 8 алхам

Видео: GiggleBot ашиглан Лидар удирддаг робот хий: 8 алхам
Видео: Возведение перегородок санузла из блоков. Все этапы. #4 2024, Арваннэгдүгээр
Anonim
GiggleBot ашиглан Лидар удирддаг робот хий
GiggleBot ашиглан Лидар удирддаг робот хий
GiggleBot ашиглан Лидар удирддаг робот хий
GiggleBot ашиглан Лидар удирддаг робот хий
GiggleBot ашиглан Лидар удирддаг робот хий
GiggleBot ашиглан Лидар удирддаг робот хий

Энэхүү гарын авлагад бид GiggleBot -ийг төөрдөг байшингийн бэрхшээлийг даван туулахад туслах болно.

Бид GiggleBot дээр зайны мэдрэгчийг холбосон servo суурилуулж байна. Гүйлтийн үеэр servo нь нааш цааш эргэлдэх бөгөөд ингэснээр зайны мэдрэгч нь саад тус бүр хүртэлх зайг хэмжих боломжтой болно. Энэ нь ихэвчлэн илүү үнэтэй LIDAR мэдрэгчтэй адил ажилладаг.

Үүний зэрэгцээ, GiggleBot нь энэхүү өгөгдлийг 5-аас 5-ийн LED матриц дээр саад бэрхшээлтэй харьцангуй байр сууриа харуулдаг BBC-ийн алслагдсан микро: бит рүү илгээдэг.

Таны даалгавар бол GiggleBot дээр зөвхөн BBC -ийн нөгөө микро: бит дээр үзүүлсэн зүйлийг хараад л удирдах боломжтой байх явдал юм. GiggleBot -ийг хянахын тулд алсын BBC микро: битийн товчлууруудыг ашигладаг.

Энэ хөгжилтэй санагдаж байна! Энэ асуудалд оръё, тийм үү?

Алхам 1: Шаардлагатай бүрэлдэхүүн хэсгүүд

Шаардлагатай бүрэлдэхүүн хэсгүүд
Шаардлагатай бүрэлдэхүүн хэсгүүд

Бидэнд хэрэгтэй болно:

  1. GiggleBot.
  2. BBC микро: битийн батерейны багц. Энэ нь BBC micro: bit -тэй хамт ирдэг.
  3. GiggleBot -д зориулсан x3 АА батерей.
  4. GiggleBot руу зайны мэдрэгчийг холбох Grove кабель.
  5. DexterIndustries -ийн Servo хэрэгсэл.
  6. x3 BBC микро: бит. Нэг нь GiggleBot -д зориулагдсан, нөгөө нь роботыг алсаас удирддаг байв.
  7. DexterIndustries -ийн зайн мэдрэгч.

BBC micro -ийн GiggleBot роботыг эндээс аваарай!

Алхам 2: Робот угсрах

Робот угсрах
Робот угсрах
Робот угсрах
Робот угсрах

GiggleBot -ийг програмчлахад бэлэн болгохын тулд бид үүнийг угсрах хэрэгтэй, гэхдээ тийм ч их зүйл хийх шаардлагагүй.

3 АА батерейг GiggleBot -ийн доор байрлах тасалгаандаа оруулна уу.

Серво багцыг угсарна уу. Серво эргэдэг гартаа сүүлчийн нүхийг ашиглан servo -ийг GiggleBot -ийн урд талын холбогч дээр бэхлээрэй. Түүнийг илүү тогтвортой байлгахын тулд та шураг ба/эсвэл зарим утсыг ашиглаж болно. Эсвэл та үүнийг самбар дээр халуун цавуугаар хийж болно. Миний хувьд, би шураг, богино утас ашиглан servo гарыг GiggleBot самбар дээр уяв.

Servo гарыг servo дээр холбохдоо servo аль хэдийн 80 -р байрлалд тохируулагдсан эсэхийг шалгаарай. Та gigglebot.set_servo (gigglebot. RIGHT, 80) руу залгаж үүнийг хийж болно. Та эндээс илүү ихийг уншиж болно.

Дараа нь зайны мэдрэгчийг servo багцын урд талд байрлуулж дээрх жишээн дээрх шиг засна.

Эцэст нь, зайны мэдрэгчийг Grove кабелиар 2 I2C порт болон servo моторыг GiggleBot дээр сууж буй зөв порт руу холбоно уу.

Алхам 3: Өөрийнхөө лабиринтийг үүсгээрэй - заавал биш

Өөрийнхөө лабиринтийг үүсгээрэй - заавал биш
Өөрийнхөө лабиринтийг үүсгээрэй - заавал биш

Энэ тохиолдолд би олон хайрцгийг ашиглан NASCAR -тай төстэй хаалттай гогцоо үүсгэсэн.

Энэ үе шатанд та үнэхээр бүтээлч байж, хүссэн хэмжээгээрээ мушгин гуйвуулж эсвэл супер урт болгож чадна, учир нь энэ нь танд хамаарна.

Эсвэл хэрэв та зам огт хүсэхгүй байгаа бол GiggleBot -ийг гал тогоо эсвэл зочны өрөөнд байрлуулж болно - энэ нь хангалттай сайн байх ёстой, учир нь та зайлсхийх хэрэгтэй олон хана, саад бэрхшээлтэй хэвээр байна.

Алхам 4: Хүрээлэн буй орчныг тохируулах

Байгаль орчныг тохируулах
Байгаль орчныг тохируулах

Та BBC micro: bit -ийг MicroPython -д програмчлах боломжтой байхын тулд түүнд зориулж редактор (Mu Editor) тохируулж, GiggleBot MicroPython Runtime -ийг ажлын цаг болгон тохируулах ёстой. Үүнийг хийхийн тулд та энэ хуудсан дээрх зааврыг дагаж мөрдөх ёстой. Одоогийн байдлаар ажлын цагийн v0.4.0 хувилбарыг ашиглаж байна.

Алхам 5: GiggleBot програмчлах - I хэсэг

Эхлээд GiggleBot -ийн скриптийг тохируулъя. Энэхүү скрипт нь GiggleBot -ийг servo мотороо 160 градус (чиглэл бүрт 80 градус) эргүүлэх бөгөөд нэг ээлжинд зайны мэдрэгчээс 10 уншилт авах болно.

Асаах үед GiggleBot алсын удирдлагаас тушаал хүлээн авах хүртэл зогсож байх болно. Зөвхөн 3 тушаал байж болно: урагш, зүүн эсвэл баруун тийш.

Тэмдэглэл: Дараах скриптэд хоосон зай байхгүй байж магадгүй бөгөөд энэ нь GitHub Gists -ийг харуулахад гарсан зарим асуудлаас үүдэлтэй юм шиг байна. Голыг нь дарж кодоо GitHub хуудас руу аваачна уу, та кодыг хуулж буулгах боломжтой.

Алсын удирдлагатай LIDAR дээр суурилсан GiggleBot

gigglebot импортоос*
from distance_sensor import DistanceSensor
микробит импортлох нойрноос
utks импортоос 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 / (эргүүлэх_ алхмууд* нэмэлт төлбөр)
last_read_time = 0
радар = bytearray (эргүүлэх_ алхам)
servo_rotate_direction = 0# 0 дээшээ (0-> 160), өөрөөр 1
radar_index = 0
set_servo (ЗӨВ, 0)
whileTrue:
# радараас уншсан
if ticks_us () - last_read_time> step_per_step:
# зайны мэдрэгчээс уншина уу
радар [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
хэвлэх (radar_index)
# servo -ийг зүүнээс баруун тийш эргүүлэх логикийг хий
хэрэв 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 += 1 хэрэв 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 дахь BBC микро: битийг програмчлах явдал юм.

Алсын удирдлага нь 5-аас 5 пикселийн дэлгэц дээр саад бэрхшээлийг харьцангуй алслагдсан зайд харуулахад ашиглагддаг. Хамгийн ихдээ 10 пикселийг асаах болно.

Үүний зэрэгцээ алсын удирдлага нь GiggleBot -ийг урагш, зүүн, баруун тийш 2 товчлуур дээр дарж алсаас удирдах боломжийг танд олгож байна.

Тэмдэглэл: Дараах скриптэд хоосон зай байхгүй байж магадгүй бөгөөд энэ нь GitHub Gists -ийг харуулахад гарсан зарим асуудлаас үүдэлтэй юм шиг байна. Голыг нь дарж кодоо GitHub хуудас руу аваачна уу, та кодыг хуулж буулгах боломжтой.

Алсын удирдлагатай LIDAR дээр суурилсан GiggleBot - Алсын код

микробит импортлох унтах, дэлгэц, button_a, button_b
бүтцийг импортлох
радио импортлох
математик импортлох
radio.on ()
rotate_steps = 10
rotate_span = 160# градусаар
rotate_step = rotate_span / rotate_steps
хамгийн их_зай = 50# сантиметр
side_length_leds = 3 # пикселийн тоогоор хэмжигддэг
радар = bytearray (эргүүлэх_ алхам)
xar = bytearray (rotate_steps)
yar = bytearray (эргүүлэх_ алхам)
save_xar = bytearray (эргүүлэх_ алхам)
аварсан_яр = байтраатай (эргүүлэх_ алхам)
хөдөлгүүрийн хурд = 50
whileTrue:
байдал = radio.receive_bytes_into (радар)
хэрэв статус байхгүй бол:
# дэлгэц.луу ()
c, val тоо томшгүй (радар):
хэрэв радар [c] <= хамгийн их_зай:
# зай бүрийн 2d координатыг тооцоолох
өнцөг = эргүүлэх_ алхам / (эргүүлэх_ алхам -1) * эргүүлэх_ алхам * c
өнцөг += (180- эргүүлэх_спан) /2.0
x_c = math.cos (өнцөг * математик.pi /180.0) * радар [c]
y_c = math.sin (өнцөг * математик.pi /180.0) * радар [c]
# 5x5 микробит дэлгэц дээр багтах зайг хэмжих
x_c = x_c * (хажуугийн урт_лэд -1) / хамгийн их_зай
y_c = y_c * (хажуугийн урт_лэдс +1) / хамгийн их_зай
# координатын байршлыг өөрчлөх
x_c += (хажуугийн урт_лэд -1)
y_c = (хажуугийн урт_лэд +1) - y_c
# дугуй координатууд нь яг л LED -ийг хаана байна
хэрэв x_c - math.floor (x_c) <0.5:
x_c = математикийн шал (x_c)
өөр:
x_c = math.ceil (x_c)
хэрэв y_c - math.floor (y_c) <0.5:
y_c = математикийн шал (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)
# хэвлэх (жагсаалт (zip (xar, yar, radar))))
төлөвA = button_a.is_pressed ()
төлөвB = button_b.is_pressed ()
хэрэв төлөвA ба муж Б:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
хэвлэх ("урагш")
хэрэв төлөвA бол төлөв биш бол B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
хэвлэх ("зүүн")
Хэрэв төлөв биш болA ба төлөвB:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
хэвлэх ("баруун")
хэрэв төлөв бишA ба төлөв биш бол B:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
хэвлэх ('зогсоох')

GitHub -аас ❤ -тай зохион байгуулагдсан rawgigglebot_lidar_remote.py -г үзэх

Алхам 7: Алсын дэлгэцийг тайлбарлах

"loading =" залхуу "нь GiggleBot -ийг удирддаг бол танд дараах сонголтууд байна.

  1. GiggleBot -ийг урагшлуулахын тулд А товч, В товчийг дарна уу.
  2. GiggleBot -ийг зүүн тийш эргүүлэхийн тулд А товчийг дарна уу.
  3. G товчлуурыг дарж GiggleBot -ийг баруун тийш эргүүлнэ үү.

Хамгийн ойрхон саад тотгорыг аль чиглэлд илрүүлэхийг харахын тулд алсын удирдлагын дэлгэцийг (BBC -ийн алсын зайны микро: таны барьж буй бит) харна уу. Та GiggleBot -ийг харахгүйгээр холоос удирдах боломжтой байх ёстой.

Зөвлөмж болгож буй: