فهرست مطالب:

با GiggleBot یک ربات با راهنمای Lidar بسازید: 8 مرحله
با GiggleBot یک ربات با راهنمای Lidar بسازید: 8 مرحله

تصویری: با GiggleBot یک ربات با راهنمای Lidar بسازید: 8 مرحله

تصویری: با GiggleBot یک ربات با راهنمای Lidar بسازید: 8 مرحله
تصویری: ساخت بازی با میکروبیت 2024, نوامبر
Anonim
با GiggleBot یک ربات با راهنمای Lidar بسازید
با GiggleBot یک ربات با راهنمای Lidar بسازید
با GiggleBot یک ربات با راهنمای Lidar بسازید
با GiggleBot یک ربات با راهنمای Lidar بسازید
با GiggleBot یک ربات با راهنمای Lidar بسازید
با GiggleBot یک ربات با راهنمای Lidar بسازید

در این آموزش ، ما داریم GiggleBot را با مشکلات پیچ و خم مقابله می کنیم.

در حال نصب سروو بر روی GiggleBot هستیم که سنسور فاصله را روی آن متصل می کنیم. در حین کار ، سروو به جلو و عقب می چرخد تا سنسور فاصله بتواند فاصله را تا هر مانع اندازه گیری کند. این شبیه به یک سنسور LIDAR عمل می کند که معمولاً بسیار گرانتر است.

در همان زمان ، GiggleBot این داده ها را به میکرو بی بی سی از راه دور ارسال می کند: بیتی که روی ماتریس 5 در 5 LED خود موقعیت نسبی آن را با موانع نشان می دهد.

وظیفه شما این است که بتوانید GiggleBot را تنها با مشاهده آنچه در دیگر میکرو BBC: bit نشان داده شده است حرکت کنید. برای کنترل GiggleBot ، از دکمه های میکرو BBC: bit از راه دور استفاده می شود.

به نظر می رسد سرگرم کننده است! بیایید به موضوع بپردازیم ، نه؟

مرحله 1: اجزای مورد نیاز

قطعات مورد نیاز
قطعات مورد نیاز

ما نیاز داریم:

  1. GiggleBot.
  2. یک بسته باتری برای میکرو بی بی سی: بیت. این بسته به همراه میکرو BBC: bit در بسته آن ارائه می شود.
  3. x3 باتری AA برای GiggleBot.
  4. کابل Grove برای اتصال سنسور فاصله به GiggleBot.
  5. کیت سرو از DexterIndustries.
  6. x3 BBC میکرو: بیت. یکی برای GiggleBot و دیگری برای کنترل ربات از راه دور.
  7. سنسور فاصله از DexterIndustries.

ربات GiggleBot را برای میکرو بی بی سی تهیه کنید: کمی اینجا!

مرحله 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 - قسمت اول

ابتدا اجازه دهید اسکریپت GiggleBot را تنظیم کنیم. این اسکریپت باعث می شود GiggleBot موتور سروو خود را 160 درجه (در هر جهت 80 درجه) بچرخاند در حالی که در هر نوبت 10 قرائت از سنسور فاصله می گیرد.

هنگامی که روشن است ، GiggleBot تا زمانی که فرمان را از کنترل از راه دور دریافت نکند ، در حالت ایستاده است. فقط 3 فرمان می تواند وجود داشته باشد: حرکت به جلو ، به چپ یا راست.

توجه: در اسکریپت زیر ممکن است فضاهای خالی وجود داشته باشد و به نظر می رسد این به دلیل مشکل در نمایش GitHub Gists باشد. روی اصل مطلب کلیک کنید تا شما را به صفحه GitHub منتقل کند ، جایی که می توانید کد را کپی و جایگذاری کنید.

GiggleBot مبتنی بر LIDAR از راه دور

از واردات gigglebot*
from distance_sensor وارد کردن DistanceSensor
از خواب واردات microbit
از utime import ticks_us ، sleep_us
ustruct وارد کنید
وارد کردن رادیو
اگر روبات در حال حرکت است # متوقف کنید
متوقف کردن()
# فعال کردن رادیو
radio.on ()
# شیء حسگر فاصله
ds = DistanceSensor ()
ds.start_continuous ()
زمان چرخش = 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
رادار = bytearray (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)
# منطق چرخاندن سروو از چپ به راست را انجام دهید
if 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)
راندن()
onlyTypeError:
عبور

مشاهده rawgigglebot_lidar_robot.py میزبانی شده توسط ❤ توسط GitHub

مرحله 6: برنامه نویسی از راه دور - قسمت دوم

آنچه باید انجام شود برنامه نویسی دومین میکرو بی بی سی است: بیتی که به عنوان یک کنترل از راه دور عمل می کند.

از راه دور برای نمایش فاصله نسبی موانع بر روی صفحه نمایش 5 در 5 پیکسلی آن استفاده می شود. حداکثر 10 پیکسل روشن می شود.

در عین حال ، کنترل از راه دور به شما این امکان را می دهد که GiggleBot را با فشار دادن 2 دکمه کنترل کنید: حرکت به جلو ، به چپ و راست.

توجه: در اسکریپت زیر ممکن است فضاهای خالی وجود داشته باشد و به نظر می رسد این به دلیل مشکل در نمایش GitHub Gists باشد. روی اصل مطلب کلیک کنید تا شما را به صفحه GitHub منتقل کند ، جایی که می توانید کد را کپی و جایگذاری کنید.

GiggleBot مبتنی بر LIDAR از راه دور - کد از راه دور

از واردات microbit خواب ، صفحه نمایش ، button_a ، button_b
ustruct وارد کنید
وارد کردن رادیو
واردات ریاضی
radio.on ()
rotate_steps = 10
rotate_span = 160# درجه
rotate_step = rotate_span / rotate_steps
max_distance = 50# در سانتی متر
side_length_leds = 3 # در # پیکسل اندازه گیری می شود
رادار = bytearray (rotate_steps)
xar = bytearray (rotate_steps)
yar = bytearray (rotate_steps)
save_xar = bytearray (rotate_steps)
save_yar = bytearray (rotate_steps)
سرعت موتور = 50
whileTrue:
وضعیت = radio.receive_bytes_into (رادار)
اگر وضعیت نیست هیچکدام:
# display.clear ()
برای c ، val inenumerate (رادار):
اگر رادار [c] <= max_distance:
# مختصات دو بعدی هر فاصله را محاسبه کنید
angle = 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
یار [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)))
stateA = button_a. فشرده شده است ()
stateB = button_b.is_pressed ()
if stateA و stateB:
radio.send_bytes (ustruct.pack ('bb'، motor_speed، motor_speed))
چاپ ('جلو')
if stateA و نه stateB:
radio.send_bytes (ustruct.pack ('bb'، motor_speed، -motor_speed))
چاپ ("چپ")
ifnot حالت A و stateB:
radio.send_bytes (ustruct.pack ('bb'، -motor_speed، motor_speed))
چاپ ("راست")
ifnot حالت یک و نه stateB:
radio.send_bytes (ustruct.pack ('bb'، 0، 0))
چاپ ("توقف")

مشاهده rawgigglebot_lidar_remote.py میزبانی شده توسط ❤ توسط GitHub

مرحله 7: تفسیر صفحه از راه دور

"loading =" lazy "GiggleBot را کنترل می کنید ، گزینه های زیر را دارید:

  1. دکمه A و B را فشار دهید تا GiggleBot به جلو حرکت کند.
  2. دکمه A را فشار دهید تا GiggleBot به چپ بچرخد.
  3. دکمه B را فشار دهید تا GiggleBot به سمت راست بچرخد.

برای مشاهده نزدیکترین موانع به کدام سمت ، فقط به صفحه کنترل از راه دور (میکرو بی بی سی از راه دور: بیتی که در دست دارید) نگاه کنید. شما باید بتوانید GiggleBot را از راه دور بدون نگاه کردن به آن کنترل کنید.

توصیه شده: