Სარჩევი:

შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით: 8 ნაბიჯი
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით: 8 ნაბიჯი

ვიდეო: შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით: 8 ნაბიჯი

ვიდეო: შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით: 8 ნაბიჯი
ვიდეო: შექმენით ეფექტური პრეზენტაცია 2024, ნოემბერი
Anonim
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით
შექმენით ლიდარზე ორიენტირებული რობოტი GiggleBot– ით

ამ გაკვეთილში ჩვენ ვაკეთებთ GiggleBot– ს დაძლიოს ლაბირინთის სირთულეები.

ჩვენ ვამონტაჟებთ სერვოს GiggleBot– ზე, რომელზედაც ჩვენ ვამაგრებთ დისტანციის სენსორს. მუშაობის დროს, სერვო ბრუნავს წინ და უკან ისე, რომ მანძილის სენსორს შეუძლია გაზომოთ მანძილი თითოეულ დაბრკოლებამდე. ეს მუშაობს ისევე როგორც LIDAR სენსორი, რომელიც ჩვეულებრივ ბევრად უფრო ძვირია.

ამავდროულად, GiggleBot აგზავნის ამ მონაცემებს BBC– ს დისტანციურ მიკრო: ბიტში, რომელიც აჩვენებს მისი LED– ების 5–5 მატრიცაზე მის ნათესავ პოზიციას დაბრკოლებებთან.

თქვენი ამოცანაა შეძლოთ GiggleBot– ზე ნავიგაცია მხოლოდ იმის გათვალისწინებით, თუ რა არის ნაჩვენები BBC– ის სხვა მიკრო: ბიტში. GiggleBot– ის გასაკონტროლებლად გამოიყენება BBC– ის დისტანციური მიკრო: ბიტის ღილაკები.

ეს გასართობად ჟღერს! მოდით გადავიდეთ ამაზე, არა?

ნაბიჯი 1: საჭირო კომპონენტები

საჭირო კომპონენტები
საჭირო კომპონენტები

ჩვენ დაგვჭირდება:

  1. გიგლბოტი.
  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– ის ქვეშ.

შეიკრიბეთ სერვო პაკეტი. სერვოს მბრუნავი მკლავისთვის გამოიყენეთ მისი ბოლო ხვრელი, რათა დააინსტალიროთ სერვერი GiggleBot– ის წინა კონექტორებზე. თქვენ შეგიძლიათ გამოიყენოთ ხრახნი და/ან მავთული, რათა ის უფრო სტაბილური იყოს მის ადგილას. ან შეგიძლიათ ცხელი წებო დაფაზე. ჩემს შემთხვევაში, მე გამოვიყენე ხრახნიანი და მოკლე მავთული, რათა სერგო მკლავი მიმეკრა GiggleBot დაფაზე.

სერვოს მხრის სერვოზე დამონტაჟებისას დარწმუნდით, რომ სერვო უკვე დაყენებულია 80 პოზიციაზე. ამის გაკეთება შეგიძლიათ gigglebot.set_servo (gigglebot. RIGHT, 80) დარეკვით. ამის შესახებ მეტი შეგიძლიათ წაიკითხოთ აქ.

შემდეგი, განათავსეთ მანძილის სენსორი სერვო პაკეტის წინა მხარეს და გაასწორეთ როგორც ზემოთ მოყვანილ მაგალითში.

დაბოლოს, დააკავშირეთ დისტანციის სენსორი Grove კაბელით ნებისმიერ I2C პორტთან და სერვო ძრავა GiggleBot– ზე მჯდომარე მარჯვენა პორტთან - მასზე მითითებულია მარჯვენა პორტი.

ნაბიჯი 3: შექმენით თქვენი საკუთარი ლაბირინთი - სურვილისამებრ

შექმენით თქვენი საკუთარი ლაბირინთი - სურვილისამებრ
შექმენით თქვენი საკუთარი ლაბირინთი - სურვილისამებრ

ამ შემთხვევაში, მე გამოვიყენე რამოდენიმე ყუთი დახურული მარყუჟის შესაქმნელად, NASCAR– ის მსგავსი.

ამ ეტაპზე, თქვენ შეგიძლიათ გახდეთ მართლაც შემოქმედებითი და გახადოთ ის რაც გნებავთ, ან გახადოთ ის სუპერ გრძელი, რადგან ეს ნამდვილად თქვენზეა დამოკიდებული.

ან თუ საერთოდ არ გსურთ ტრეკი, შეგიძლიათ განათავსოთ GiggleBot სამზარეულოში ან მისაღებში, მაგალითად - ეს უნდა იყოს საკმარისად კარგი, რადგან არსებობს უამრავი კედელი და დაბრკოლება, რომელთა თავიდან აცილებაც მაინც გჭირდებათ.

ნაბიჯი 4: გარემოს შექმნა

გარემოს შექმნა
გარემოს შექმნა

იმისათვის, რომ შეძლოთ BBC– ს მიკროპროგრამის დაპროგრამება MicroPython– ში, თქვენ უნდა შექმნათ მისი რედაქტორი (Mu რედაქტორი) და დააყენოთ GiggleBot MicroPython Runtime, როგორც მისი გაშვების დრო. ამისათვის თქვენ უნდა მიყევით ამ გვერდზე მითითებებს. ამ მომენტისთვის გამოიყენება გაშვების დროის ვერსია v0.4.0.

ნაბიჯი 5: პროგრამირება GiggleBot - ნაწილი I

პირველი, მოდით შევქმნათ GiggleBot სკრიპტი. ეს სკრიპტი აიძულებს GiggleBot- ს მისი სერვო ძრავის როტაცია 160 გრადუსით (თითოეული მიმართულებით 80 გრადუსი), ხოლო ამავდროულად მიიღოს 10 კითხვა დისტანციის სენსორიდან ერთ შემობრუნებაზე.

როდესაც ჩართულია, GiggleBot იდგება მანამ, სანამ არ მიიღებს ბრძანებას დისტანციური მართვისგან. შეიძლება იყოს მხოლოდ 3 ბრძანება: წინსვლა, მარცხნივ ან მარჯვნივ.

შენიშვნა: მომდევნო სკრიპტს შეიძლება დაკარგული ჰქონდეს თეთრი სივრცეები და ეს, როგორც ჩანს, გამოწვეულია GitHub Gists– ის ჩვენების პრობლემით. დააწკაპუნეთ არსზე, რათა მიგიყვანოთ მის GitHub გვერდზე, სადაც შეგიძლიათ დააკოპიროთ-ჩასვით კოდი.

დისტანციური მართვის LIDAR დაფუძნებული GiggleBot

gigglebot იმპორტიდან*
distance_sensor იმპორტიდან DistanceSensor
მიკრობიტის იმპორტის ძილიდან
უმეტესი იმპორტიდან ticks_us, sleep_us
ustruct იმპორტი
რადიოს იმპორტი
# გააჩერე რობოტი, თუ ის უკვე მოძრაობს
გაჩერება ()
# რადიოს ჩართვა
რადიო. ()
# დისტანციის სენსორის ობიექტი
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
რადარი = ბაიტერაი (rotate_steps)
servo_rotate_direction = 0# 0 ზემოთ ასვლისთვის (0-> 160) და 1 სხვაგვარად
სარადარო_ინდექსი = 0
set_servo (RIGHT, 0)
მართალია:
# წაიკითხე რადარიდან
თუ ticks_us () - last_read_time> time_per_step:
# წაიკითხე დისტანციის სენსორიდან
რადარი [radar_index] = int (ds.read_range_continuous () /10)
last_read_time = ticks_us ()
ბეჭდვა (სარადარო_ინდექსი)
# გააკეთე ლოგიკა, რომ სერვო გადაატრიალო მარცხნიდან მარჯვნივ
თუ radar_index == rotate_steps -1 და servo_rotate_direction == 0:
set_servo (RIGHT, 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)
წამყვანი ()
përjashtTypeError:
ჩაბარება

rawgigglebot_lidar_robot.py- ს ნახვა GitHub– ით hosted

ნაბიჯი 6: დისტანციური მართვის პროგრამირება - ნაწილი II

გასაკეთებელი არის BBC– ის მე -2 მიკრო პროგრამირება: ბიტი, რომელიც მოქმედებს როგორც დისტანციური მართვა.

დისტანციური მართვის სისტემა გამოიყენება 5-დან 5 პიქსელით დამზადებულ ეკრანზე დაბრკოლებებთან შედარებით მანძილზე. მაქსიმუმ, იქნება 10 პიქსელი ჩართული.

ამავდროულად, დისტანციური მართვის საშუალება გაძლევთ GiggleBot– ის დისტანციური მართვის შესაძლებლობას მისი 2 ღილაკის დაჭერით: წადით წინ, მარცხნივ და მარჯვნივ.

შენიშვნა: მომდევნო სკრიპტს შეიძლება დაკარგული ჰქონდეს თეთრი სივრცეები და ეს, როგორც ჩანს, გამოწვეულია GitHub Gists– ის ჩვენების პრობლემით. დააწკაპუნეთ არსზე, რათა მიგიყვანოთ მის GitHub გვერდზე, სადაც შეგიძლიათ დააკოპიროთ-ჩასვით კოდი.

დისტანციური მართვის LIDAR დაფუძნებული GiggleBot - დისტანციური კოდი

მიკრობიტიდან იმპორტის ძილი, ჩვენება, ღილაკი_ა, ღილაკი_ბ
ustruct იმპორტი
რადიოს იმპორტი
მათემატიკის იმპორტი
რადიო. ()
rotate_steps = 10
rotate_span = 160# გრადუსში
rotate_step = როტაცია_სპანი / როტაცია_ ნაბიჯები
მაქსიმალური_ მანძილი = 50# სანტიმეტრში
side_length_leds = 3 # იზომება # პიქსელებში
რადარი = ბაიტერაი (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = ბაიტერაი (rotate_steps)
შენახული_ იარი = ბაიტერაი (ბრუნვის_ ნაბიჯები)
ძრავის სიჩქარე = 50
მართალია:
სტატუსი = radio.receive_bytes_into (რადარი)
თუ სტატუსი არ არის არცერთი:
# ჩვენება. ნათელი ()
c, val inenumerate (რადარი):
თუ რადარი [c] <= მაქსიმალური_ მანძილი:
# გამოთვალეთ თითოეული მანძილის 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) / max_distance
# გადაადგილების კოორდინატები
x_c += (side_length_leds -1)
y_c = (side_length_leds +1) - y_c
# მრგვალი კოორდინატებს ზუსტად იქ, სადაც არის LED- ები
თუ x_c - მათემატიკა. სართული (x_c) <0.5:
x_c = მათემატიკა. სართული (x_c)
სხვა:
x_c = math.ceil (x_c)
თუ y_c - მათემატიკა. სართული (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 = ღილაკი_ა.პრესილია ()
მდგომარეობა B = ღილაკი_ბ.პრესილია ()
თუ stateA და stateB:
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed))
ბეჭდვა ("წინ")
თუ მდგომარეობაA და არა სახელმწიფო B:
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed))
ბეჭდვა ("მარცხნივ")
თუ არა სახელმწიფო და მდგომარეობა B:
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed))
ბეჭდვა ("მარჯვნივ")
თუ არა მდგომარეობა და არა მდგომარეობა ბ:
radio.send_bytes (ustruct.pack ('bb', 0, 0))
ბეჭდვა ("გაჩერება")

rawgigglebot_lidar_remote.py იხილეთ hosted ერთად GitHub

ნაბიჯი 7: დისტანციური ეკრანის ინტერპრეტაცია

"loading =" lazy "აკონტროლებს GiggleBot- ს, თქვენ გაქვთ შემდეგი პარამეტრები:

  1. დააჭირეთ ღილაკს A და B ღილაკს GiggleBot– ის წინსვლისთვის.
  2. დააჭირეთ ღილაკს A GiggleBot მარცხნივ დასატრიალებლად.
  3. დააჭირეთ ღილაკს B GiggleBot მარჯვნივ დასატრიალებლად.

იმისათვის, რომ ნახოთ რომელი მიმართულებით არის აღმოჩენილი უახლოესი დაბრკოლებები, უბრალოდ შეხედეთ დისტანციურ (BBC დისტანციური მიკრო: ცოტათი, რომელსაც თქვენ გეჭიროთ) ეკრანზე. თქვენ უნდა შეგეძლოთ გააკონტროლოთ GiggleBot შორიდან, მისი შეხედვის გარეშე.

გირჩევთ: