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

Rpibot - حول تعلم الروبوتات: 9 خطوات
Rpibot - حول تعلم الروبوتات: 9 خطوات

فيديو: Rpibot - حول تعلم الروبوتات: 9 خطوات

فيديو: Rpibot - حول تعلم الروبوتات: 9 خطوات
فيديو: دورة مجانية في تعليم الروبوت للاطفال والمبتدئين| روبوتكس | ماهو الروبوت؟ | الدرس 1 الجزء 1 2024, يوليو
Anonim
Rpibot - حول تعلم الروبوتات
Rpibot - حول تعلم الروبوتات

أنا مهندس برمجيات مضمن في شركة سيارات ألمانية. لقد بدأت هذا المشروع كمنصة تعليمية للأنظمة المدمجة. تم إلغاء المشروع مبكرًا لكنني استمتعت به كثيرًا لدرجة أنني واصلت وقت فراغي. هذه هي النتيجة …

كان لدي المتطلبات التالية:

  • أجهزة بسيطة (التركيز هو البرنامج)
  • أجهزة رخيصة الثمن (حوالي 100 يورو)
  • قابل للتوسيع (بعض الخيارات هي بالفعل جزء من الوصف)
  • امدادات التيار الكهربائي لجميع المكونات من مصدر 5V واحد (powerbank)

لم يكن هناك حقًا هدف سوى التعلم. يمكن استخدام المنصة للتعلم والمراقبة والمسابقات الآلية ، …

إنه ليس برنامج تعليمي مبتدئ. أنت بحاجة إلى بعض المعرفة الأساسية حول:

  • البرمجة (بايثون)
  • الإلكترونيات الأساسية (لتوصيل الوحدات معًا بالجهد المناسب)
  • نظرية التحكم الأساسية (PID)

أخيرًا ، من المحتمل أن تواجه مشكلات كما فعلت أنا. ببعض الفضول والقدرة على التحمل ، ستخوض المشروع وتحل التحديات. الكود الخاص بي بسيط قدر الإمكان ويتم التعليق على أسطر الكود الهامة لإعطاء تلميحات.

يتوفر كود المصدر الكامل والملفات هنا:

اللوازم:

علم الميكانيكا

  • 1x لوح خشب رقائقي (مقاس A4 ، بسمك 4 مم)
  • 3x M4 x 80 برغي وصمولة
  • 2x محركات تروس مع عمود إخراج ثانوي لجهاز التشفير. عجلات.
  • عجلة حرة 1x

1x عموم وإمالة تركيب الكاميرا (اختياري)

إلكترونيات

  • 1x Raspberry Pi Zero مع رأس وكاميرا
  • 1x PCA 9685 جهاز تحكم مؤازر
  • 2x عجلة ودائرة التشفير البصري
  • 1x أسلاك توصيل أنثى
  • 1x USB powerbank
  • 1x DRV8833 محرك مزدوج
  • 2x Micro servos SG90 لتحريك الكاميرا والإمالة (اختياري)
  • 1x MPU9250 IMU (اختياري)
  • 1x HC-SR04 مستشعر المسافة بالموجات فوق الصوتية (اختياري)
  • 1x لوحة مثقبة وأسلاك لحام ، رؤوس ، …

الخطوة 1: بناء الهيكل

بناء الهيكل
بناء الهيكل
بناء الهيكل
بناء الهيكل
بناء الهيكل
بناء الهيكل

أنا لست مصمم ميكانيكي جيد. كما أن هدف المشروع هو عدم قضاء الكثير من الوقت في الهيكل. على أي حال ، حددت المتطلبات التالية:

  • مواد رخيصة الثمن
  • التجميع والتفكيك السريع
  • قابلة للتوسيع (مثل مساحة لأجهزة الاستشعار المضافة)
  • مواد خفيفة لتوفير الطاقة للإلكترونيات

يمكن صنع هيكل سهل ورخيص من الخشب الرقائقي. من السهل تصنيعها باستخدام منشار فريك ومثقاب يدوي. يمكنك لصق الأجزاء الخشبية الصغيرة لإنشاء مقتنيات لأجهزة الاستشعار والمحركات.

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

العجلة الحرة أخيرًا خفيفة جدًا وسهلة التركيب. كانت جميع البدائل ثقيلة أو مليئة بالاحتكاك (جربت اثنين منها قبل العثور على آخرها). لم يكن علي سوى قطع مباعد خشبي لتسوية العجلة الخالية من الذيل بعد تركيب العجلات الرئيسية.

خصائص العجلة (لحسابات البرامج)

محيط: 21 ، 5 سم النبضات: 20 نبضة / دورة الحل: 1 ، 075 سم (أخيرًا النبضة الواحدة حوالي 1 سم ، وهو أمر سهل لحسابات البرامج)

الخطوة الثانية: الإلكترونيات والأسلاك

الالكترونيات والأسلاك
الالكترونيات والأسلاك
الالكترونيات والأسلاك
الالكترونيات والأسلاك
الالكترونيات والأسلاك
الالكترونيات والأسلاك

يستخدم المشروع وحدات مختلفة كما هو موضح في الرسم التخطيطي.

Raspberry Pi Zero هو جهاز التحكم الرئيسي. إنه يقرأ أجهزة الاستشعار ويتحكم في المحركات بإشارة PWM. وهو متصل بجهاز كمبيوتر بعيد عن طريق wifi.

DRV8833 عبارة عن جسر H بمحرك مزدوج. إنه يوفر تيارًا كافيًا للمحركات (وهو ما لا يستطيع Raspberry Pi القيام به لأن المخرجات يمكن أن توفر بعض مللي أمبير فقط).

يوفر المشفر البصري إشارة مربعة الشكل في كل مرة يمر فيها الضوء عبر عجلات التشفير. سنستخدم مقاطعات HW لـ Raspberry Pi للحصول على المعلومات في كل مرة يتم فيها تبديل الإشارة.

لوحة التحكم pca9695 هي لوحة تحكم مؤازرة. يتم الاتصال بواسطة ناقل تسلسلي I2C. توفر هذه اللوحة إشارات PWM وجهد الإمداد الذي يتحكم في الماكينات من أجل عموم وإمالة الكاميرا.

MPU9265 عبارة عن تسارع ثلاثي المحاور وسرعة دوران زاوي بثلاثة محاور ومستشعر تدفق مغناطيسي ثلاثي المحاور. سنستخدمه بشكل أساسي للحصول على عنوان البوصلة.

جميع الوحدات المختلفة متصلة ببعضها البعض بواسطة سلك توصيل. تعمل اللوح كمرسل ويوفر جهد إمداد (5 فولت و 3.3 فولت) وأرضيات. تم وصف جميع التوصيلات في جدول التوصيل (انظر المرفق). من المحتمل أن يؤدي توصيل 5 فولت بمدخل 3.3 فولت إلى تدمير الشريحة الخاصة بك. كن حذرًا وتحقق من جميع الأسلاك الخاصة بك مرتين قبل التزويد (هنا يجب مراعاة المشفر بشكل خاص). يجب عليك قياس الفولتية الرئيسية للإمداد على لوحة الإرسال بمقياس متعدد قبل توصيل جميع اللوحات. تم تثبيت الوحدات بواسطة براغي نايلون في الهيكل. هنا أيضًا ، كنت سعيدًا بإصلاحها ولكن أيضًا قابلة للإزالة في حالة حدوث عطل.

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

الخطوة 3: البنية التحتية للبرمجيات

البنية التحتية للبرمجيات
البنية التحتية للبرمجيات
البنية التحتية للبرمجيات
البنية التحتية للبرمجيات

بعد تحقيق الآليات ، سنقوم بإنشاء بعض البنية التحتية للبرامج للحصول على ظروف تطوير مريحة.

شخص سخيف

هذا نظام تحكم في الإصدار مجاني ومفتوح المصدر. يتم استخدامه لإدارة المشاريع الكبيرة مثل Linux ، ولكن يمكن استخدامه بسهولة في المشاريع الصغيرة (انظر Github و Bitbucket).

يمكن تتبع تغييرات المشروع محليًا ودفعها أيضًا إلى خادم بعيد لمشاركة البرامج مع المجتمع.

الأوامر الرئيسية المستخدمة هي:

git clone https://github.com/makerobotics/RPIbot.git [احصل على الكود المصدري وتهيئة git]

git pull origin master [الحصول على الأحدث من المستودع البعيد]

git status [الحصول على حالة المستودع المحلي. هل تم تغيير أي ملفات؟] git log [الحصول على قائمة الالتزامات] git add. [إضافة جميع الملفات التي تم تغييرها إلى المرحلة ليتم النظر فيها للالتزام التالي] git الالتزام -m "تعليق للالتزام" [تنفيذ التغييرات في المستودع المحلي] git push origin master [دفع جميع الالتزامات إلى المستودع البعيد]

تسجيل

توفر Python بعض وظائف التسجيل المضمنة. يجب أن تحدد بنية البرنامج بالفعل كل إطار عمل التسجيل قبل البدء في مزيد من التطوير.

يمكن تكوين المسجل للتسجيل بتنسيق محدد في الجهاز أو في ملف السجل. في مثالنا ، تم تكوين المسجل بواسطة فئة خادم الويب ولكن يمكننا أيضًا القيام بذلك بمفردنا. هنا نقوم فقط بتعيين مستوى التسجيل على DEBUG:

المسجل = logging.getLogger (_ name_)

logger.setLevel (logging. DEBUG)

القياس والتخطيط

لتحليل الإشارات بمرور الوقت ، من الأفضل رسمها في مخطط. نظرًا لأن Raspberry Pi يحتوي على وحدة تحكم طرفية فقط ، فسوف نتتبع البيانات في ملف csv مفصول بفاصلة منقوطة ونرسمها من جهاز الكمبيوتر البعيد.

يتم إنشاء ملف التتبع المنفصل بفاصلة منقوطة بواسطة كود Python الرئيسي ويجب أن يحتوي على رؤوس مثل هذا:

timestamp؛ yawCorr؛ encoderR؛ I_L؛ odoDistance؛ ax؛ encoderL؛ I_R؛ yaw؛ eSpeedR؛ eSpeedL؛ pwmL؛ speedL؛ CycleTimeControl؛ wz؛ pwmR؛ speedR؛ Iyaw؛ hdg؛ m_y؛ m_x؛ eYaw؛ cycleTimeSense؛

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

يحتوي العمود الأول على الطابع الزمني. الأعمدة التالية مجانية. يتم استدعاء البرنامج النصي للتخطيط بقائمة من الأعمدة المراد رسمها:

remote @ pc: ~ / python rpibot_plotter -f trace.csv -p speedL، speedR، pwmL، pwmR

البرنامج النصي للرسم متاح في مجلد الأداة: https://github.com/makerobotics/RPIbot/tree/master/t …

الراسمة تستخدم mathplotlib في بايثون. يجب عليك نسخه إلى جهاز الكمبيوتر الخاص بك.

لمزيد من الراحة ، يتم استدعاء نص Python بواسطة برنامج bash النصي (plot.sh) والذي يتم استخدامه لنسخ ملف تتبع Raspberry Pi إلى جهاز الكمبيوتر البعيد واستدعاء الراسمة مع تحديد إشارة. إذا كان الملف المراد نسخه. كان هذا أكثر ملاءمة بالنسبة لي بدلاً من النسخ يدويًا في كل مرة. يستخدم "sshpass" لنسخ الملف من Raspberry Pi إلى الكمبيوتر البعيد عبر scp. إنه قادر على نسخ ملف دون طلب كلمة المرور (يتم تمريره كمعامل).

أخيرًا يتم فتح نافذة مع قطعة الأرض كما هو موضح في الصورة.

الاتصال عن بعد

واجهة التطوير لـ Raspberry Pi هي SSH. يمكن تحرير الملفات مباشرة على الهدف ، أو نسخها بواسطة scp.

للتحكم في الروبوت ، يعمل خادم الويب على Pi ، مما يوفر التحكم عبر Websockets. يتم وصف هذه الواجهة في الخطوة التالية.

قم بإعداد Raspberry Pi

يوجد ملف يصف إعداد Raspberry Pi في مجلد "doc" الخاص بكود المصدر (setup_rpi.txt). لا توجد تفسيرات كثيرة ولكن هناك العديد من الأوامر والروابط المفيدة.

الخطوة 4: واجهة المستخدم

واجهة المستخدم
واجهة المستخدم

نستخدم خادم الويب Tornado خفيف الوزن لاستضافة واجهة المستخدم. إنها وحدة Python التي نسميها عندما نبدأ برنامج التحكم في الروبوت.

هيكلة البرمجيات

تم إنشاء واجهة المستخدم من خلال الملفات التالية: gui.html [وصف عناصر التحكم في صفحة الويب والتخطيط] gui.js [يحتوي على كود جافا سكريبت للتعامل مع عناصر التحكم وفتح اتصال مقبس الويب بالروبوت] gui.css [يحتوي على أنماط ضوابط أتش تي أم أل. يتم تحديد مواقع الضوابط هنا]

الاتصال websocket

واجهة المستخدم ليست هي الأفضل ، لكنها تقوم بالمهمة. ركزت هنا على التقنيات التي كانت جديدة بالنسبة لي مثل Websockets.

يقوم موقع الويب بالاتصال بخادم الويب الخاص بالروبوت عن طريق Websockets. هذه قناة اتصال ثنائية الاتجاه ستبقى مفتوحة عند بدء الاتصال. نرسل أوامر الروبوت عبر Websocket إلى Raspberry Pi ونحصل على المعلومات (السرعة والموضع ودفق الكاميرا) مرة أخرى للعرض.

تخطيط الواجهة

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

الخطوة الخامسة: برمجة منصة الروبوت

برمجة منصة الروبوت
برمجة منصة الروبوت
برمجة منصة الروبوت
برمجة منصة الروبوت
برمجة منصة الروبوت
برمجة منصة الروبوت

كان هذا الجزء هو الهدف الرئيسي للمشروع. لقد أعدت هيكلة الكثير من البرامج عندما قدمت الهيكل الجديد بمحركات DC ، واستخدمت Python كلغة برمجة لأسباب مختلفة:

  • إنها لغة Raspberry Pi الرئيسية
  • إنها لغة عالية المستوى بها العديد من الميزات والإضافات المضمنة
  • إنه موجه للكائنات ولكن يمكن استخدامه أيضًا للبرمجة المتسلسلة
  • لا يلزم تجميع أو سلسلة أدوات. قم بتحرير الكود وتشغيله.

هندسة البرمجيات الرئيسية

البرنامج موجه للكائنات ، مقسم إلى عدة كائنات. كانت فكرتي هي تقسيم الكود إلى 3 كتل وظيفية:

فكر في تنشيط الحس

Sense.py

الحصول على أجهزة الاستشعار الرئيسية ومعالجتها. يتم تخزين البيانات في قاموس لاستخدامها في المرحلة التالية.

Control.py

تتحكم فئة التشغيل الفرعية في المحركات وأجهزة التشغيل بعد بعض التجريد. يتعامل كائن التحكم الرئيسي مع أوامر المستوى العالي وكذلك خوارزميات التحكم (PID) للمحرك.

rpibot.py

هذا الكائن الرئيسي هو إدارة خادم الويب Tornado وإنشاء مثيل لفئات التحكم والشعور في سلاسل رسائل منفصلة.

يمكن تشغيل كل وحدة بمفردها أو كجزء من المشروع بأكمله. يمكنك فقط استشعار معلومات المستشعر وطباعتها للتحقق من توصيل المستشعرات بشكل صحيح وتقديم المعلومات الصحيحة.

التحكم PID

المهمة الأولى هي معرفة ما نريد التحكم فيه. بدأت بمحاولة السيطرة على المنصب ، والذي كان معقدًا للغاية ولا يساعد كثيرًا.

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

لزيادة التعقيد خطوة بخطوة ، يجب التحكم في الروبوت:

حلقة مفتوحة (بقوة ثابتة)

pwm = ك

ثم أضف خوارزمية الحلقة المغلقة

pwm = Kp.speedError + Ki. Integration (speedError)

وأخيرًا أضف التحكم في الاتجاه كخطوة أخيرة.

للتحكم في السرعة ، استخدمت عنصر تحكم "PI" و "P" فقط للانعراج. أقوم بتعيين المعلمات يدويًا عن طريق التجربة. ربما يمكن استخدام معلمات أفضل بكثير هنا. كان هدفي مجرد خط مستقيم وكدت أفهمه. لقد قمت بإنشاء واجهة في البرنامج لكتابة بعض المتغيرات بواسطة واجهة المستخدم. يحتاج تعيين المعلمة Kp إلى 1.0 إلى اتباع الأمر في واجهة المستخدم:

ضبط ؛ Kp ؛ 1.0

يمكنني ضبط المعلمة P منخفضة بما يكفي لتجنب أي تجاوز. يتم تصحيح الخطأ المتبقي بواسطة المعلمة I (خطأ متكامل)

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

تم إرفاق مخطط التحكم المستخدم. يظهر فقط الجانب الأيسر من عنصر تحكم الروبوت.

الخطوة السادسة: معايرة المستشعرات

معايرة أجهزة الاستشعار
معايرة أجهزة الاستشعار
معايرة أجهزة الاستشعار
معايرة أجهزة الاستشعار
معايرة أجهزة الاستشعار
معايرة أجهزة الاستشعار

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

يجب معايرة إشارات مستشعر IMU قبل استخدامها. تعتمد بعض إشارات المستشعر على زاوية التركيب والموضع.

معايرة سرعة التسارع والدوران

أسهل معايرة للتسارع الطولي (A_x). في حالة التوقف التام ، يجب أن يكون هناك حوالي 0 م / ث². إذا قمت بتدوير المستشعر بشكل صحيح ، يمكنك قياس الجاذبية (حوالي 9 ، 8 م / ث²). لمعايرة a_x ، عليك فقط تركيبه بشكل صحيح ثم تحديد الإزاحة للحصول على 0 م / ث² في حالة توقف تام. تمت معايرة A_x الآن ، ويمكنك الحصول على تعويضات سرعات الدوران بطريقة مماثلة عند التوقف التام.

معايرة مقياس المغناطيسية للبوصلة

المعايرة الأكثر تعقيدًا ضرورية لمستشعرات المجال المغناطيسي. سنستخدم m_x و m_y للحصول على المجال المغناطيسي في المستوى الأفقي. يمنحنا وجود m_x و m_y الفرصة لحساب عنوان البوصلة.

لغرضنا البسيط سنقوم فقط بمعايرة انحراف الحديد الصلب. يجب إجراء ذلك لأن المستشعر في الموضع النهائي لأنه يعتمد على اضطرابات المجال المغناطيسي.

نسجل m_x و m_y بينما ندير الروبوت حول المحور z. نرسم m_x مقابل m_y في مخطط XY. النتيجة في علامة القطع كما هو موضح في الصورة. يجب أن تتمحور علامة القطع على الأصل. هنا نأخذ في الاعتبار القيم القصوى والدنيا لـ m_x و m_y للحصول على الإزاحة في كلا الاتجاهين. أخيرًا ، نتحقق من المعايرة ونرى أن علامة الحذف تتمحور الآن.

تعني معايرة الحديد الناعم أننا نغير الصورة من علامة القطع إلى دائرة. يمكن القيام بذلك عن طريق إضافة عامل على كل قيمة senor.

يمكن الآن ترميز روتين اختبار لإعادة المعايرة أو على الأقل للتحقق من أن المستشعرات لا تزال مُعايرة.

عنوان البوصلة

سيتم الآن استخدام بيانات مقياس المغناطيسية لحساب عنوان البوصلة. لهذا ، علينا تحويل إشارات m_x و m_y إلى زاوية. تقدم Python مباشرة دالة math.atan2 التي لها هذا الهدف. يتم تحديد الحساب الكامل في ملف mpu9250_i2c.py ("calcHeading (mx ، my ، mz)").

الخطوة 7: تصاميم بديلة

تصاميم بديلة
تصاميم بديلة
تصاميم بديلة
تصاميم بديلة
تصاميم بديلة
تصاميم بديلة

استغرق المشروع الكثير من الوقت حيث كان التصميم مفتوحًا تمامًا. لكل مكون قمت بتنفيذ بعض النموذج الأولي واختبرت حدود النظام.

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

مؤازرة الدوران المستمر متصلة بـ PCA 9695

لتجنب جسر H إضافي لمحرك DC ، بدأت أولاً بمضاعفات دوران مستمرة. تم تشغيل هذه بواسطة برنامج التشغيل المؤازر pca 9695 الموجود بالفعل. كانت جميع ميكانيكا الدفع والإلكترونيات المتوافقة أبسط بكثير. كان لهذا التصميم عيبان:

  • نطاق التحكم الضعيف في الماكينات.
  • موقع التشفير المفقود

تبدأ الماكينات في التحرك بنسبة 50٪ من وزن الجسم وتتمتع بأقصى سرعة عند حوالي 55٪. هذا نطاق تحكم ضعيف للغاية.

بدون وجود جهاز تشفير ، كان من الصعب جدًا العثور على جهاز تشفير جاهز للعمل. لقد اختبرت 3 مشفر انعكاس مختلف تم تثبيته على الهيكل المعدني. قمت بتسجيل عجلة تشفير ذاتية الصنع على الجزء الخارجي من العجلة بأقسام سوداء وبيضاء. لقد استخدمت مستشعرات QTR-1RC التي تحتاج إلى الكثير من معالجة الإشارات للحصول على الإشارة الصحيحة. لم يكن Raspberry Pi قادرًا على أداء هذا النوع من المعالجة في الوقت الفعلي. لذلك قررت إضافة NodeMCU D1 mini كوحدة تحكم في الوقت الفعلي إلى الروبوت. تم توصيله بـ Raspberry Pi بواسطة UART التسلسلي لتقديم بيانات المستشعر المعالجة. كانت NodeMCU تدير أيضًا مستشعر HC-SR04 ، حيث كانت الميكانيكا صعبة وليست قوية جدًا ، وكان الخط التسلسلي يحصل على ضوضاء من خط I2C والمحركات ، لذلك قمت أخيرًا ببناء الإصدار الثاني من الهيكل باستخدام محركات DC ذات تروس بسيطة. جسر H. تحتوي هذه المحركات على عمود إخراج ثانوي لوضع مشفر ضوئي.

الخطوة 8: معالجة الصور

معالجة الصورة
معالجة الصورة
معالجة الصورة
معالجة الصورة
معالجة الصورة
معالجة الصورة
معالجة الصورة
معالجة الصورة

لتحسين القيادة الذاتية ، يمكننا إجراء بعض معالجة الصور.

مكتبة opencv هي مرجع لذلك. يمكن استخدامه بواسطة Python لتنفيذ اكتشاف العوائق بسرعة.

نلتقط صورة ونطبق بعض مهام معالجة الصور:

تم إجراء الاختبارات الأولى باستخدام تحولات Canny و Sobel. يمكن أن يكون الحكيم مرشحًا جيدًا ولكنه ليس معقولًا بما فيه الكفاية. سوبل معقول للغاية (تم اكتشاف الكثير من الأشياء).

أخيرًا ، صنعت مرشحًا خاصًا لخلط جميع التدرجات الأفقية والرأسية (اكتشاف الأثاث):

  • قم بتحويل الصورة الملونة إلى صورة ذات مستوى رمادي
  • طمس الصورة لإزالة الضوضاء الصغيرة
  • حدد الصورة إلى صورة بالأبيض والأسود
  • الآن نكتشف التدرجات الأفقية والعمودية لاكتشاف الأشياء مثل الجدران والأثاث
  • نقوم بتصفية الخطوط الكبيرة المتبقية فقط (انظر الملامح الملونة في الصورة)

الآن يمكننا استخدام هذه المعلومات الجديدة لاكتشاف العوائق …

الخطوة 9: الخطوات التالية …

الخطوات التالية…
الخطوات التالية…
الخطوات التالية…
الخطوات التالية…

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

  • اندماج حساس للانعراج وإشارات الاتجاه المغناطيسي
  • معالجة صور الكاميرا (وحدة المعالجة المركزية منخفضة فقط متاحة لذلك)
  • كشف الاصطدام (المسافة بالموجات فوق الصوتية والكاميرا)
  • بناء الخريطة أو الاتجاه

اذهب الآن وقم بإنشاء تحدياتك أو أهدافك …

موصى به: