Բովանդակություն:

GiggleBot- ով պատրաստեք Lidar- ով առաջնորդվող ռոբոտ ՝ 8 քայլ
GiggleBot- ով պատրաստեք Lidar- ով առաջնորդվող ռոբոտ ՝ 8 քայլ

Video: GiggleBot- ով պատրաստեք Lidar- ով առաջնորդվող ռոբոտ ՝ 8 քայլ

Video: GiggleBot- ով պատրաստեք Lidar- ով առաջնորդվող ռոբոտ ՝ 8 քայլ
Video: Big hero 6 2024, Նոյեմբեր
Anonim
Ստեղծեք Lidar- ով առաջնորդվող ռոբոտ GiggleBot- ով
Ստեղծեք Lidar- ով առաջնորդվող ռոբոտ GiggleBot- ով
Ստեղծեք Lidar- ով առաջնորդվող ռոբոտ GiggleBot- ով
Ստեղծեք Lidar- ով առաջնորդվող ռոբոտ GiggleBot- ով
GiggleBot- ով պատրաստեք Lidar- ով առաջնորդվող ռոբոտ
GiggleBot- ով պատրաստեք Lidar- ով առաջնորդվող ռոբոտ

Այս ձեռնարկում մենք GiggleBot- ին ստիպում ենք լուծել լաբիրինթոսի դժվարությունները:

Մենք սերվո ենք տեղադրում GiggleBot- ի վրա, որի վրա մենք կցում ենք հեռավորության տվիչ: Վազելիս servo- ն պատրաստվում է պտտվել այս ու այն կողմ, որպեսզի հեռավորության սենսորը կարողանա չափել հեռավորությունը մինչև յուրաքանչյուր խոչընդոտ: Սա շատ նման է LIDAR սենսորին, որը սովորաբար շատ ավելի թանկ է:

Միևնույն ժամանակ, GiggleBot- ն այս տվյալները ուղարկում է BBC- ի հեռավոր միկրո.

Ձեր խնդիրն այն է, որ կարողանաք նավարկել GiggleBot- ում ՝ միայն նայելով այն, ինչ ցուցադրված է BBC- ի մյուս միկրո -բիտում: bit: GiggleBot- ը վերահսկելու համար օգտագործվում են հեռակա BBC micro: bit կոճակները:

Դա շատ զվարճալի է թվում! Եկեք անցնենք դրան, այնպես չէ՞:

Քայլ 1: Պահանջվող բաղադրիչներ

Պահանջվող բաղադրիչներ
Պահանջվող բաղադրիչներ

Մեզ պետք կլինի.

  1. GiggleBot:
  2. BBC մարտկոցի մարտկոց ՝ բիթ: Այն գալիս է BBC- ի միկրո.
  3. x3 AA մարտկոցներ GiggleBot- ի համար:
  4. Grove մալուխ ՝ հեռավորության սենսորը GiggleBot- ին միացնելու համար:
  5. Servo հավաքածու DexterIndustries- ից:
  6. x3 BBC միկրո. բիթեր: Մեկը GiggleBot- ի համար, իսկ մեկը օգտագործվում էր ռոբոտին հեռվից կառավարելու համար:
  7. Հեռավորության սենսոր DexterIndustries- ից:

Ձեռք բերեք GiggleBot ռոբոտը BBC- ի միկրոյի համար. Քիչ այստեղ:

Քայլ 2: Ռոբոտի հավաքում

Ռոբոտի հավաքում
Ռոբոտի հավաքում
Ռոբոտի հավաքում
Ռոբոտի հավաքում

Որպեսզի GiggleBot- ը պատրաստ լինի ծրագրավորման, մենք պետք է հավաքենք այն, չնայած որ շատ բան պետք չէ անել:

Տեղադրեք 3 AA մարտկոցներ իր խցիկում ՝ GiggleBot- ի ներքևում:

Հավաքեք servo փաթեթը: Servo- ի պտտվող թևի համար օգտագործեք դրա վերջին անցքը `servo- ն ամրացնելու GiggleBot- ի առջևի միակցիչների վրա: Դուք կարող եք օգտագործել պտուտակ և (կամ) մի մետաղալար `այն իր տեղում ավելի կայուն դարձնելու համար: Կամ կարող եք տաք սոսնձել այն տախտակին: Իմ դեպքում ես պտուտակով և կարճ մետաղալարով կապեցի սերվոյի թևը GiggleBot տախտակին:

Servo թևը servo- ի վրա ամրացնելիս համոզվեք, որ servo- ն արդեն դրված է 80 դիրքի վրա: Դա կարող եք անել `զանգահարելով gigglebot.set_servo (gigglebot. RIGHT, 80): Այդ մասին ավելին կարող եք կարդալ այստեղ:

Հաջորդը, տեղադրեք հեռավորության սենսորը servo փաթեթի առջևի մասում և ամրացրեք այն, ինչպես վերը նշված օրինակում:

Ի վերջո, 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- ին պտտել իր servo շարժիչը 160 աստիճանով (յուրաքանչյուր ուղղությամբ 80 աստիճան), մինչդեռ միաժամանակ յուրաքանչյուր հեռավորության սենսորից վերցնում է 10 ընթերցում:

Երբ միացված է, GiggleBot- ը կանգնած կլինի մինչև հեռակառավարման վահանակից հրաման չստանա: Կարող է լինել ընդամենը 3 հրաման ՝ առաջ շարժվել ՝ ձախ կամ աջ:

Նշում. Հետևյալ սցենարի վրա կարող են բաց թողնվել սպիտակ տարածքներ, և դա, ըստ երևույթին, պայմանավորված է GitHub Gists- ի ցուցադրման որոշ խնդիրներով: Կտտացրեք բովանդակությունը ՝ ձեզ GitHub էջ տանելու համար, որտեղ կարող եք պատճենել-տեղադրեք ծածկագիրը:

Հեռակառավարվող LIDAR- ի վրա հիմնված GiggleBot

gigglebot ներմուծումից*
distance_sensor ներմուծումից DistanceSensor
microbit ներմուծման քնից
ծայրահեղ ներմուծումից ticks_us, sleep_us
ներմուծել ustruct
ռադիո ներմուծել
# կանգնեցրեք ռոբոտին, եթե այն արդեն շարժվում է
կանգ առնել ()
# միացնել ռադիոն
radio.on ()
# հեռավորության սենսորային օբյեկտ
ds = DistanceSensor ()
ds.start_continuous ()
rotate_time = 0.7# չափվում է վայրկյաններով
պտտել_սպան = 160# չափված աստիճաններով
պտտվող_քայլեր = 10
overhead_compensation = 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 այլ դեպքում
ռադիոտեղորոշիչ = 0
set_servo (Աջ, 0)
իսկ ճշմարիտ:
# կարդալ ռադարից
եթե 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
այլ:
ռադիոտեղորոշիչ += 1 եթե servo_rotate_direction == 0else-1
# և ուղարկեք ռադիոտեղորոշիչ արժեքները
radio.send_bytes (ռադար)
փորձել:
# կարդալ ռոբոտների հրամաններ
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ())
# և գործարկեք շարժիչները, եթե կան ստացված հրամաններ
set_speed (lmotor, rmotor)
քշել ()
përjashtTypeError:
անցնել

դիտել rawgigglebot_lidar_robot.py- ն, որը տեղակայված է it -ի կողմից GitHub- ի կողմից

Քայլ 6. Հեռակառավարման ծրագրավորում - Մաս II

Մնում է անելը BBC- ի 2 -րդ միկրո ծրագրավորումն է. Բիթը, որը գործում է որպես հեռակառավարիչ:

Հեռակառավարիչը օգտագործվում է իր 5-ից 5 պիքսելներով պատրաստված էկրանին խոչընդոտների հարաբերական հեռավորությունը ցուցադրելու համար: Առավելագույնը միացված 10 պիքսել կլինի:

Միևնույն ժամանակ, հեռակառավարիչը ձեզ հնարավորություն է տալիս հեռակառավարել GiggleBot- ը ՝ սեղմելով նրա 2 կոճակները ՝ առաջ շարժվել ՝ ձախ և աջ:

Նշում. Հետևյալ սցենարի վրա կարող են բաց թողնվել սպիտակ տարածքներ, և դա, ըստ երևույթին, պայմանավորված է GitHub Gists- ի ցուցադրման որոշ խնդիրներով: Կտտացրեք բովանդակությունը ՝ ձեզ GitHub էջ տանելու համար, որտեղ կարող եք պատճենել-տեղադրեք ծածկագիրը:

Հեռակառավարվող LIDAR- ի վրա հիմնված GiggleBot - Հեռակա կոդ

microbit ներմուծման քուն, ցուցադրում, button_a, button_b
ներմուծել ustruct
ռադիո ներմուծել
ներմուծել մաթեմատիկա
radio.on ()
պտտվող_քայլեր = 10
պտտել_սպան = 160# աստիճան
պտտել_քայլ = պտտել_սպան / պտտել_քայլեր
max_distance = 50# սանտիմետր
side_length_leds = 3 # չափված պիքսելների # -ով
ռադար = բայթերեյ (պտտել_քայլեր)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = բայթերեյ (պտտել_քայլեր)
փրկված_յար = բայթերեյ (պտտել_քայլեր)
շարժիչի_արագություն = 50
իսկ ճշմարիտ:
կարգավիճակ = radio.receive_bytes_into (ռադար)
եթե կարգավիճակը ոչ մեկը չէ
# ցուցադրում: հստակ ()
c- ի համար, val inenumerate (ռադար):
եթե ռադար [c] <= max_distance:
# հաշվեք յուրաքանչյուր հեռավորության 2 դ կոորդինատները
անկյուն = պտտել_քայլեր / (պտտել_քայլեր -1) * պտտել_քայլ * գ
անկյուն += (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) / առավելագույն_հեռավորություն
y_c = y_c * (side_length_leds +1) / առավելագույն_հեռավորություն
# փոխատեղման կոորդինատներ
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 = մաթեմատիկա. հարկ (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
ցուցադրում: հստակ ()
x, y inzip- ի համար (xar, yar):
display.set_pixel (x, y, 9)
# տպել (ցուցակ (zip (xar, yar, radar)))
վիճակ A = button_a. սեղմված է ()
վիճակ B = button_b. սեղմված ()
եթե stateA և stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
տպել («առաջ»)
եթե վիճակ Ա և ոչ վիճակ Բ:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
տպել («ձախ»)
եթե ոչ վիճակ Ա և վիճակ Բ:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
տպել («աջ»)
եթե ոչ վիճակ Ա և ոչ վիճակ Բ:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
տպել («կանգառ»)

դիտել rawgigglebot_lidar_remote.py- ն, որը տեղակայված է it -ի կողմից GitHub- ի կողմից

Քայլ 7: Հեռակա էկրանը մեկնաբանելը

"loading =" lazy "վերահսկել GiggleBot- ը, դուք ունեք հետևյալ ընտրանքները.

  1. Սեղմեք A և B կոճակները ՝ GiggleBot- ն առաջ տանելու համար:
  2. Սեղմեք A կոճակը ՝ GiggleBot- ը ձախ պտտելու համար:
  3. Սեղմեք B կոճակը ՝ GiggleBot- ը աջ պտտելու համար:

Տեսնելու համար, թե որ ուղղությամբ են հայտնաբերվում ամենամոտ խոչընդոտները, պարզապես նայեք հեռակառավարման վահանակի (հեռավոր BBC միկրո. Դուք պետք է կարողանաք վերահսկել GiggleBot- ը հեռվից ՝ առանց դրան նայելու:

Խորհուրդ ենք տալիս: