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

مركبة مستقلة: 7 خطوات (بالصور)
مركبة مستقلة: 7 خطوات (بالصور)

فيديو: مركبة مستقلة: 7 خطوات (بالصور)

فيديو: مركبة مستقلة: 7 خطوات (بالصور)
فيديو: توقيف السياره بأمان _ How to stop car safely 2024, شهر نوفمبر
Anonim
مركبة مستقلة
مركبة مستقلة
مركبة مستقلة
مركبة مستقلة

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

سوف يتحرك الروبوت بواسطة عجلتين تعملان بمحرك DC وعجلتين متحركتين. سيتم توصيل المحركات بأسفل منصة دائرية. سيتم التحكم في المحركات بواسطة اثنين من السائقين. سيتلقى سائقو المحركات أوامر PWM من معالج Zynq. تُستخدم جميع أجهزة التشفير الموجودة على كل محرك لتتبع وضع المركبات واتجاهها. سيتم تزويد النظام بأكمله ببطارية LiPo.

الخطوة 1: تجميع السيارة

تجميع السيارة
تجميع السيارة
تجميع السيارة
تجميع السيارة
تجميع السيارة
تجميع السيارة
تجميع السيارة
تجميع السيارة

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

كان المحرك المحدد عبارة عن محرك Port Escap 12V DC مع ترميز مدمج. يمكن شراء هذا المحرك على موقع ئي باي بسعر معقول جدًا (انظر فاتورة المواد). كلمات البحث "12V Escap 16 Coreless Geared DC Motor with Encoders" على موقع ئي باي للعثور على المحرك. عادة ما يكون هناك عدد لا بأس به من البائعين للاختيار من بينهم. يتم عرض المواصفات والدبابيس للمحركات في الرسوم البيانية أدناه.

بدأ تجميع الروبوت بنموذج CAD لتصميم الهيكل. يُظهر النموذج أدناه المنظر العلوي لملف تعريف الشكل ثنائي الأبعاد المصمم للهيكل.

يُقترح أن يتم تصميم الهيكل كملف تعريف ثنائي الأبعاد بحيث يمكن تصنيعه بسهولة. قمنا بقص لوح من الألومنيوم مقاس 12 بوصة × 12 بوصة في شكل الهيكل باستخدام قاطع بنفث الماء. يمكن أيضًا قطع منصة الهيكل بمنشار شريطي.

الخطوة 2: تركيب المحركات

تصاعد المحركات
تصاعد المحركات
تصاعد المحركات
تصاعد المحركات

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

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

بعد ذلك ، يتم وضع Pololu Motor Hub (انظر قائمة المواد) على عمود المحرك ويتم إحكام ربطه بمسمار التثبيت المزود ومفتاح Allen. لا يتطابق نمط الفتحة لمحور محرك Pololu مع نمط الفتحة لعجلة VEX ، لذا يجب عمل قارنة وسيطة مخصصة. يُقترح أن يتم استخدام صفائح الألمنيوم المعدنية الخردة المستخدمة في صنع منصة الهيكل في صنع قارنة التوصيل. يظهر نمط الثقب وأبعاد هذين الزوجين في الشكل أدناه. لا يهم القطر الخارجي والشكل (لا يلزم أن يكونا دائرة) لمقرنة الألمنيوم المخصصة طالما أن جميع الثقوب مناسبة للجزء.

الخطوة 3: إنشاء تصميم Vivado Block

إنشاء Vivado Block Design
إنشاء Vivado Block Design
إنشاء Vivado Block Design
إنشاء Vivado Block Design

- ابدأ بإنشاء مشروع Vivado جديد وحدد Zybo Zynq 7000 Z010 كجهاز مستهدف.

- انقر بعد ذلك على إنشاء تصميم كتلة جديد ، وأضف Zynq IP. انقر نقرًا مزدوجًا على Zynq IP واستورد إعدادات XPS المتوفرة لـ Zynq. ثم قم بتمكين UART0 مع MIO 10..11 ضمن علامة تبويب تكوينات MIO ، وتأكد أيضًا من تمكين Timer 0 و Watchdog timer.

- إضافة اثنين من AXI GPIOS لتصميم الكتلة. بالنسبة لـ GPIO 0 ، قم بتمكين القناة المزدوجة واضبط كلاهما على جميع المخرجات. اضبط عرض GPIO للقناة من 1 إلى 4 بتات وللقناة 2 إلى 12 بت ، ستُستخدم هذه القنوات لضبط اتجاه المحرك وإرسال كمية العلامات التي يقيسها المشفر إلى المعالج. بالنسبة إلى GPIO 1 ، اضبط قناة واحدة فقط على جميع المدخلات بعرض قناة 4 بت. سيتم استخدام هذا لتلقي البيانات من أجهزة التشفير. اجعل جميع منافذ GPIO خارجية.

- بعد ذلك أضف مؤقتين من AXI. اجعل منافذ pwm0 على كلا المؤقتين خارجيين. ستكون هذه هي pwms التي تتحكم في السرعة التي تدور بها المحركات.

- أخيرًا ، قم بتشغيل أتمتة الكتلة وأتمتة الاتصال. تحقق من أن تصميم الكتلة لديك يطابق التصميم المقدم.

الخطوة 4: التواصل مع LiDAR

يستخدم هذا LiDAR بروتوكول SCIP 2.0 للتواصل من خلال UART ، يصف الملف المرفق البروتوكول بأكمله.

للتواصل مع LiDAR سنستخدم UART0. يُرجع LiDAR 682 نقطة بيانات تمثل كل منها المسافة إلى كائن في تلك الزاوية. يقوم LiDAR بالمسح بعكس اتجاه عقارب الساعة من -30 درجة إلى 210 درجة بخطوة 0.351 درجة.

- يتم إجراء جميع الاتصالات إلى LiDAR بأحرف ASCI ، راجع بروتوكول SCIP للتنسيق المستخدم. نبدأ بإرسال أمر QT لتشغيل LiDAR. نرسل بعد ذلك الأمر GS عدة مرات ونطلب 18 نقطة بيانات في وقت واحد للقدم في UARTS 64 بايت FIFO. يتم بعد ذلك تحليل البيانات التي يتم إرجاعها من LiDAR وتخزينها في مجموعة SCANdata العالمية.

- كل نقطة بيانات مخزنة هي 2 بايت من البيانات المشفرة. سيؤدي تمرير هذه البيانات إلى وحدة فك التشفير إلى إرجاع مسافة بالمليمترات.

ستجد في ملف main_av.c الوظائف التالية للتواصل مع LiDAR

sendLIDARcmd (أمر)

- سيؤدي هذا إلى إرسال سلسلة الإدخال إلى LiDAR عبر UART0

recvLIDARdata ()

- سيستقبل هذا البيانات بعد إرسال أمر إلى LiDAR وتخزين البيانات في RECBuffer

requestDistanceData ()

- سترسل هذه الوظيفة سلسلة من الأوامر لاسترداد جميع نقاط البيانات البالغ عددها 682. بعد تلقي كل مجموعة من 18 نقطة بيانات ، يتم استدعاء parseLIDARinput () لتحليل البيانات وتخزين نقاط البيانات بشكل متزايد في بيانات SCAN.

الخطوة 5: ملء الشبكة بالعقبات

ملء الشبكة بالعقبات
ملء الشبكة بالعقبات
ملء الشبكة بالعقبات
ملء الشبكة بالعقبات

GRID المخزن عبارة عن صفيف ثنائي الأبعاد حيث تمثل كل قيمة فهرس موقعًا. البيانات المخزنة في كل فهرس هي إما 0 أو 1 ، لا توجد عقبة وعقبة على التوالي. يمكن تغيير المسافة المربعة بالمليمترات التي يمثلها كل فهرس بتعريف GRID_SCALE في ملف vehicle.h. يمكن أيضًا تغيير حجم المصفوفة ثنائية الأبعاد للسماح للمركبة بمسح مساحة أكبر عن طريق تعديل تعريف GRID_SIZE.

بعد مسح مجموعة جديدة من بيانات المسافة من تحديث LiDAR ، يتم استدعاء الشبكة (). سيؤدي ذلك إلى تكرار كل نقطة بيانات مخزنة في مصفوفة بيانات المسح الضوئي لتحديد الفهارس الموجودة في الشبكة التي بها عوائق. باستخدام الاتجاه الحالي للسيارة ، يمكننا تحديد الزاوية التي تتوافق مع كل نقطة بيانات. لتحديد مكان وجود العائق ، اضرب ببساطة المسافة المقابلة في cos / sin الزاوية. ستؤدي إضافة هاتين القيمتين إلى موقع المركبات الحالي x و y إلى إرجاع الفهرس في شبكة العائق. سيسمح لنا تقسيم المسافة التي تم إرجاعها بواسطة هذه العملية بواسطة GRID_SCALE بتغيير حجم المسافة المربعة لكل مؤشر.

توضح الصور أعلاه البيئة الحالية للمركبة والشبكة الناتجة.

الخطوة السادسة: التواصل مع المحركات

للتواصل مع المحركات ، نبدأ بتهيئة GPIOs للتحكم في الاتجاه الذي يدور فيه المحرك. ثم تتيح لنا الكتابة مباشرة إلى العنوان الأساسي لـ PWMs في AXI Timer تعيين أشياء مثل الفترة ودورة العمل التي تتحكم مباشرة في السرعة التي يدور بها المحرك.

الخطوة 7: تخطيط المسار

سيتم تنفيذها في المستقبل القريب.

باستخدام وظيفة الشبكة والمحرك الموصوفة سابقًا ، من السهل جدًا تنفيذ خوارزميات مثل A *. أثناء تحرك السيارة ، ستستمر في فحص المنطقة المحيطة وتحديد ما إذا كان المسار الذي تسير عليه لا يزال صالحًا

موصى به: