جدول المحتويات:

اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot: 8 خطوات
اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot: 8 خطوات

فيديو: اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot: 8 خطوات

فيديو: اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot: 8 خطوات
فيديو: كيف تصنع جهاز انذار يعمل بالليزر | How to make a laser light security alarm | modhesh tv 2024, شهر نوفمبر
Anonim
اصنع روبوتًا موجهًا بواسطة Lidar باستخدام GiggleBot
اصنع روبوتًا موجهًا بواسطة Lidar باستخدام GiggleBot
اصنع روبوتًا موجهًا بواسطة Lidar باستخدام GiggleBot
اصنع روبوتًا موجهًا بواسطة Lidar باستخدام GiggleBot
اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot
اصنع روبوتًا موجهًا باستخدام Lidar باستخدام GiggleBot

في هذا البرنامج التعليمي ، نجعل GiggleBot يعالج صعوبات المتاهة.

نحن نقوم بتركيب جهاز مؤازر على GiggleBot والذي نعلق عليه مستشعر المسافة. أثناء التشغيل ، ستدور المؤازرة للخلف وللأمام حتى يتمكن مستشعر المسافة من قياس المسافة حتى كل عقبة. هذا يشبه إلى حد كبير مستشعر LIDAR الذي عادة ما يكون أكثر تكلفة.

في الوقت نفسه ، يرسل GiggleBot هذه البيانات إلى BBC micro: bit البعيد الذي يعرض على مصفوفة 5 × 5 من LED موقعه النسبي للعقبات.

مهمتك هي أن تكون قادرًا على التنقل في GiggleBot فقط من خلال النظر إلى ما يتم عرضه على BBC micro: bit الآخر. للتحكم في GiggleBot ، يتم استخدام الأزرار الموجودة على BBC micro: bit البعيد.

هذا يبدو ممتع! دعنا ننزل إلى ذلك ، نحن العرب؟

الخطوة 1: المكونات المطلوبة

المكونات المطلوبة
المكونات المطلوبة

سنحتاج:

  1. A GiggleBot.
  2. حزمة بطارية لـ BBC micro: bit. يأتي مع BBC micro: bit في عبوته.
  3. عدد 3 بطاريات مقاس AA لجهاز GiggleBot.
  4. كابل Grove لتوصيل مستشعر المسافة بجهاز GiggleBot.
  5. مجموعة مؤازرة من DexterIndustries.
  6. x3 بي بي سي مايكرو: بت. واحد لـ GiggleBot والآخر يستخدم للتحكم في الروبوت من بعيد.
  7. جهاز استشعار المسافة من DexterIndustries.

احصل على الروبوت GiggleBot الخاص بـ BBC micro: bit هنا!

الخطوة الثانية: تجميع الروبوت

تجميع الروبوت
تجميع الروبوت
تجميع الروبوت
تجميع الروبوت

لجعل GiggleBot جاهزًا للبرمجة ، نحتاج إلى تجميعه ، على الرغم من عدم وجود الكثير مما يتعين القيام به.

أدخل 3 بطاريات AA في حجرتها أسفل GiggleBot.

قم بتجميع حزمة المؤازرة. إلى ذراعه الدوار من المؤازرة ، استخدم الفتحة الأخيرة منه لإصلاح المؤازرة على موصلات GiggleBot الأمامية. يمكنك استخدام برغي و / أو سلك لجعله أكثر ثباتًا في مكانه. أو يمكنك لصقها بالغراء الساخن على السبورة. في حالتي ، استخدمت برغيًا وسلكًا قصيرًا لربط ذراع المؤازرة بلوحة GiggleBot.

عند تركيب ذراع المؤازرة على المؤازرة ، تأكد من ضبط المؤازرة بالفعل على الموضع 80. يمكنك القيام بذلك عن طريق استدعاء gigglebot.set_servo (gigglebot. RIGHT، 80). يمكنك قراءة المزيد عن هذا الموضوع هنا.

بعد ذلك ، ضع مستشعر المسافة على الجانب الأمامي من حزمة المؤازرة وقم بإصلاحه كما في المثال أعلاه.

أخيرًا ، قم بتوصيل مستشعر المسافة بكابل Grove بأي من منفذي I2C ومحرك سيرفو بالمنفذ الأيمن الموجود على GiggleBot - المنفذ الأيمن مذكور عليه.

الخطوة 3: إنشاء المتاهة الخاصة بك - اختياري

قم بإنشاء المتاهة الخاصة بك - اختياري
قم بإنشاء المتاهة الخاصة بك - اختياري

في هذه الحالة ، لقد استخدمت مجموعة من الصناديق لإنشاء مسار حلقة مغلقة ، على غرار مسار NASCAR.

في هذه الخطوة ، يمكنك أن تكون مبدعًا حقًا وتجعله ملتويًا كما تريد أو تجعله طويلًا جدًا لأن الأمر متروك لك حقًا.

أو إذا كنت لا تريد مسارًا على الإطلاق ، فيمكنك وضع GiggleBot في المطبخ أو غرفة المعيشة على سبيل المثال - يجب أن يكون ذلك جيدًا بما يكفي لأن هناك الكثير من الجدران والعقبات التي لا تزال بحاجة إلى تجنبها.

الخطوة 4: تهيئة البيئة

تهيئة البيئة
تهيئة البيئة

لكي تتمكن من برمجة BBC micro: bit في MicroPython ، يجب عليك إعداد محرر لها (محرر Mu) وتعيين GiggleBot MicroPython Runtime كوقت تشغيله. لذلك ، عليك اتباع التعليمات الواردة في هذه الصفحة. اعتبارًا من هذه اللحظة ، يتم استخدام الإصدار v0.4.0 من وقت التشغيل.

الخطوة 5: برمجة GiggleBot - الجزء الأول

أولاً ، لنقم بإعداد نص GiggleBot. سيجعل هذا البرنامج النصي GiggleBot يدور محرك سيرفو 160 درجة (80 درجة في كل اتجاه) بينما يأخذ في نفس الوقت 10 قراءات من مستشعر المسافة لكل دورة.

عند تشغيله ، سيكون GiggleBot في وضع الاستعداد حتى يتلقى أمرًا من جهاز التحكم عن بُعد. يمكن أن يكون هناك 3 أوامر فقط: تحرك للأمام أو لليسار أو لليمين.

ملاحظة: قد يحتوي البرنامج النصي التالي على مسافات بيضاء ويبدو أن هذا يرجع إلى بعض المشكلات في عرض GitHub Gists. انقر فوق الجوهر ليأخذك إلى صفحة GitHub الخاصة به حيث يمكنك نسخ الرمز ولصقه.

GiggleBot المستندة إلى LIDAR يتم التحكم فيها عن بعد

من استيراد gigglebot *
من مسافة استيراد مستشعر المسافة
من النوم استيراد microbit
من استيراد utime ticks_us، sleep_us
ustruct الاستيراد
استيراد الراديو
# أوقف الروبوت إذا كان يتحرك بالفعل
قف()
# تمكين الراديو
radio.on ()
# كائن استشعار المسافة
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
الرادار = bytearray (rotate_steps)
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 == 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 + = 1if servo_rotate_direction == 0 آخر -1
# وإرسال قيم الرادار
radio.send_bytes (رادار)
محاولة:
# قراءة أوامر الروبوت
lmotor ، rmotor = ustruct.unpack ('bb' ، radio.receive_bytes ())
# وقم بتشغيل المحركات في حالة وجود أي أوامر مستلمة
set_speed (lmotor ، rmotor)
قائد()
باستثناء نوع الخطأ:
يمر

عرض rawgigglebot_lidar_robot.py مستضاف مع ❤ بواسطة GitHub

الخطوة 6: برمجة جهاز التحكم عن بعد - الجزء الثاني

ما يتبقى هو برمجة ثاني بي بي سي ميكرو: بت الذي يعمل كجهاز تحكم عن بعد.

يُستخدم جهاز التحكم عن بُعد لعرض المسافة النسبية بين العوائق على شاشته المكونة من 5 × 5 بكسل. على الأكثر ، سيكون هناك 10 بكسل قيد التشغيل.

في نفس الوقت ، يمنحك جهاز التحكم عن بعد إمكانيات التحكم عن بعد في GiggleBot بالضغط على زريها: التحرك للأمام واليسار واليمين.

ملاحظة: قد يحتوي البرنامج النصي التالي على مسافات بيضاء ويبدو أن هذا يرجع إلى بعض المشكلات في عرض GitHub Gists. انقر فوق الجوهر ليأخذك إلى صفحة GitHub الخاصة به حيث يمكنك نسخ الرمز ولصقه.

GiggleBot - رمز التحكم عن بعد القائم على LIDAR

من استيراد microbit sleep ، والعرض ، و 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
احيانا صحيح:
الحالة = radio.receive_bytes_into (رادار)
إذا كانت الحالة ليست
# display.clear ()
لـ c ، val inenumerate (الرادار):
إذا كان الرادار [ج] <= أقصى مسافة:
# احسب الإحداثيات ثنائية الأبعاد لكل مسافة
زاوية = rotate_steps / (rotate_steps -1) * rotate_step * c
الزاوية + = (180- rotate_span) /2.0
x_c = math.cos (زاوية * math.pi /180.0) * رادار [ج]
y_c = math.sin (زاوية * math.pi /180.0) * رادار [c]
# قم بقياس المسافات لتناسب شاشة 5x5 microbit
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 [ج] = x_c
yar [c] = y_c
آخر:
xar [ج] = 0
سنة [ج] = 0
display.clear ()
بالنسبة إلى x ، y inzip (xar ، yar):
display.set_pixel (س ، ص ، 9)
# print (list (zip (xar، yar، radar)))
الدولة أ = button_a.is_pressed ()
stateB = button_b.is_pressed ()
إذا كانت الحالة أ والحالة ب:
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 مستضاف مع ❤ بواسطة GitHub

الخطوة 7: تفسير شاشة التحكم عن بعد

"تحميل =" كسول "يتحكم في GiggleBot ، لديك الخيارات التالية:

  1. اضغط على الزر A والزر B لتحريك GiggleBot للأمام.
  2. اضغط على الزر A لتدوير GiggleBot إلى اليسار.
  3. اضغط على الزر B لتدوير GiggleBot إلى اليمين.

لمعرفة الاتجاه الذي يتم فيه اكتشاف أقرب العوائق ، ما عليك سوى إلقاء نظرة على شاشة جهاز التحكم عن بُعد (جهاز البي بي سي الصغير الصغير: بت الذي تمسكه). يجب أن تكون قادرًا على التحكم في GiggleBot من بعيد دون النظر إليه.

موصى به: