شاحنة الوحش GAZ66 ذاتية القيادة 1/16

هبر ، مرحباً!

أريد أن أخبركم عن كيف فعلت وقمت بصنع آلة ذاتية الإدارة :)

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

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

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

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




سيتبع التاريخ هذا السيناريو.


  • لماذا اريدها
  • كيف تعمل آلة القيادة الذاتية (منظر علوي)
  • العمر 1 - Gelendwagen من عالم الأطفال + كاميرا Raspberry Pi Zero W +
  • العمر 2 - GAZ66 + NVIDIA Jetson Nano + Camera for RaspberryPi
  • العمر 3 - Remo Hobby SMAX
  • العمر 4 - اتصال SMAX و GAZ66
  • العمر 5 - تركيب المكونات على شاحنة الوحش
  • سن 6 - تركيب سيارة حمار والمناطق المحيطة بها
  • العمر 7 - تتبع التجميع والرحلات
  • العمر 8 - السفر بعصا التحكم
  • العمر 9 - تدريب العصبون
  • العمر 10 - كل شيء يعمل ، أخيرًا!
  • ماذا بعد؟
  • معركة التحدي
  • تواصل اجتماعي
  • صورة بطاقة sd للآلة الكاتبة

صب القهوة ، سنغادر!

لماذا اريدها


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

لا ، حسنًا ، إنه رائع حقًا - السيارات ذاتية القيادة) سبيكة ممتازة من الميكانيكا والخوارزميات :)

استمر الإحباط حتى جمعت في رأسي حقائق مختلفة عن نفسي ، وهي:

  • يمكنني الكتابة في بيثون
  • أفهم (تقريبًا) كيفية عمل التعلم الآلي
  • أعرف كيفية العمل مع Linux على وحدة التحكم
  • قضيت طفولتي مع حديد لحام
  • لدي صندوق كامل مع مكونات DIY (التوت بي ، اردوينو ، وأجهزة استشعار ، وما إلى ذلك)

عندما نجح كل شيء في رأسي ، قررت أن تكون سيارة القيادة الذاتية (sdc)!

بادئ ذي بدء ، قررت ، أنه من المفيد معرفة كيفية عمل sdc ، وسيكون هذا القسم التالي.

كيف تعمل آلة القيادة الذاتية (منظر علوي)


لكي تسير السيارة بمفردها ، فإنها تحتاج إلى أربعة مكونات - عربة ، وأجهزة استشعار ، وكمبيوتر ، وخوارزمية.

دعونا نكتشف ذلك


عربة

ما سيقود في الواقع. عجلات ، محركات ، بطارية تشغلها كلها.

هناك مجموعتان شرطيتان من السيارات التي أسميتها لنفسي - سيارات من عالم الأطفال ، وسيارات لهواية.

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

سيارات من عالم الهوايات هي ما تحتاجه. لديهم محركات قوية ، وبطاريات جيدة ، ومكابح العجلات الأمامية للدوران. اعتبر هذا عتبة دخول. أرخص شيء عادي يمكن أن أجده كان Remo Hobby SMAX.



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

يجمع بعض المعلومات حول العالم من حوله وينقله إلى جهاز كمبيوتر لاتخاذ القرار.

في الأساس ، فإن مجموعة SDC المحترمة هي:

  • الة تصوير. أساس أساسيات SDC. ينظر إلى قطعة أمامه ، وينقل الصورة إلى جهاز كمبيوتر يتعرف على ما يحدث ، ويقرر ما يجب القيام به. يبدو أنني لم أر تطبيقات SDC بدون كاميرا.
  • مستشعر IMU. قطعة تظهر التسارع وزاوية الميل على طول المحاور. من المفيد أن نفهم إلى أين نتجه بالفعل ، وكيف تغير موقعنا بالنسبة إلى نقطة البداية. تستخدم في جميع المروحيات تقريبا.
  • . , , , . , SDC, , . , 75$, SDC Velodyne 4K$. , 3D , 2D.
  • GPS. , , , SDC .
  • . — , . 3D .



الكمبيوتر الذي

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

في عالم أجهزة الكمبيوتر للإلكترونيات المدمجة ، ومعالجات ARM الموفرة للطاقة (كما هو الحال في هاتفك) ، وأجهزة الكمبيوتر ذات اللوحة الواحدة المستندة إليها ، تحكم الكرة.

يوجد اليوم خياران من أكثر ألواح اللوحة الفردية شيوعًا - RaspberryPi و NVIDIA Jetson.
يتميز RaspberryPi بسعره المنخفض ومجموعة متنوعة من المشاريع ومجتمع كبير.

تتمتع NVIDIA بسعر أعلى ، ومشاريع أقل ، ولكن إنتاجية أكبر في مهام التعلم الآلي. يحتوي على 128 نواة CUDA مدمجة (كما هو الحال في بطاقة رسومات NVIDIA الكبيرة) ، والتي تُستخدم لتسريع خوارزميات التعلم الآلي.

هناك ثلاث قطع من Raspberry Pi (ZeroW ، 3 ، 4) و NVIDIA Jetson Nano في مجموعتي. قررت بالطبع تجميع الآلة على Jetson.



الخوارزمية

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

إذا كنت تريد تحديث كيفية عمل الشبكة العصبية ، فإنني أقترح عليك مشاهدة هذا الفيديو:


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

إذا كان مستوى عالٍ جدًا ، فهذا كل ما في الأمر.

يبقى فقط:

  • تجميع عربة
  • تعليق أجهزة الاستشعار
  • توصيل الكمبيوتر
  • رسم العلامات
  • يركب عليها
  • لتدريب شبكة عصبية
  • توجو

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

العمر 1 - Gelendwagen من عالم الأطفال + كاميرا Raspberry Pi Zero W +


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

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

قبل الانتقال إلى الحكم الذاتي ، قررت ركوب وحدة التحكم من أجل المتعة ، ومطاردة قطة ، وبث الصورة من الكاميرا إلى جهاز الكمبيوتر المحمول الخاص بي.

عندها انتظرني فشلان.

أولاً ، Raspberry Pi Zero W ضعيف جدًا من حيث الأداء.

ثانيًا - قابلية جيلك من عالم الأطفال تكاد تكون معدومة ، وقد تم إيقافه تقريبًا بأي عقبة طفيفة.

بالفعل أصبح من الواضح الآن أن المشروع ولد ميتًا ، ولكن من أجل الاهتمام ، حاولت تجميع رؤية الكمبيوتر (OpenCV) لـ Raspberry Pi Zero مباشرة عليه. استغرق الأمر ، دون نكات ، أكثر من يوم ، وكان المسمار الأخير في غطاء التابوت من تنفيذ SDC.
أصبح من الواضح أنك بحاجة إلى تغيير كل من الكمبيوتر للحصول على أداء أفضل ، والعربة ، لمزيد من القدرة عبر البلاد.

اتضح مضحك جدا:



2 — 66 + NVIDIA Jetson Nano + RaspberryPi


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

وصلت الشاحنة ، واصلت الانتظار ل Jetson ، ركب بفارغ الصبر شيشيغا حول المنزل ، دحرجت القطط التي أنجبتها القطة المذكورة أعلاه. كي لا نقول أن القطط كانت تحبها - يجب أن تتوقف.

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

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

حان الوقت لجمع! ولكن أولا ، تحتاج إلى القيام بها ، لول. تفكيك shishigu ، ورميت أدمغتها الأصلية ، وتليين الآليات ، وبدأت في التجمع بالفعل على أساس جهاز كمبيوتر.

لقد قمت بتوصيل الكاميرا ، وحدة تحكم المحرك ، المحرك الدوار ، محرك الغاز / الفرامل ، وبدأت نصوص Python للاختبار - مرة أخرى!

هذه المرة القصة هي: شيشيغي يستخدم محركًا تقليديًا للدوران ، وليس محرك سيرفو. لذلك ، ليس لديه أي ملاحظات. لذلك ، لا يمكنني التحكم فيها بالتأكيد ، مما يعني أنها غير مناسبة لـ SDC.

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





العمر 3 - Remo Hobby SMAX


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

عدت إلى المنزل ، وحصلت على شيشيغو ، وخلعت كل شيء منه ، وجلست للتواصل مع SMAX. وما رأيك؟ هذا صحيح - الفشل مرة أخرى!

بشكل أساسي ، تم تصميم سيارات RC بحيث يتصل المحرك بوحدة التحكم في المحرك ، وهذا بدوره يتصل بوحدة الراديو التي تتصل بجهاز التحكم عن بعد. وقد تم تصميم SMAX بحيث تم دمج وحدة تحكم المحرك ووحدة الراديو - لم تتح لي الفرصة حرفياً للاتصال بوحدة تحكم المحرك بدلاً من وحدة الراديو.

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

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

هذه المرة لم يعمل ذلك ، لكي يستيقظ محرك SMAX ، يجب أن ترسل وحدة التحكم إليه قيمة معينة (360) من خلال وحدة الراديو. لكنني لم أكن أعرف ذلك ، وأدخلت قيم غاز الفرامل مباشرة. ولم يرد المحرك ، انطلاقاً من المنطق الذي لم يطلب منه أحد أن يستيقظ.

في وقت ما ، جلست لفرز كل شيء على التوالي حرفيا ، متوقعا أن يتفاعل مع شيء على الأقل.

في البداية ذهبت أكثر من 100 سنة. ثم 50 بحلول. وعندما وصلت إلى البحث عن 10 ، سمعت صرخة ترحيب في 360 - هتاف! يعمل!

اختبرت الغاز / عكس / يسار / يمين من وحدة التحكم ، كل شيء يعمل. هذه نار هنا انا مبرمج =)

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

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

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

حسنًا ، تذكر Donkey Car ، ثم سنأخذ إطار عمل برمجياتها ، ولكن في الوقت الحالي نحن بحاجة إلى التفكير في الأجهزة.

ذات يوم ، أدرت رأسي في شقتي ، نظرت إلى شيشيغو المفككة ، في SMAX بدون الجزء العلوي ، وفكرت - هممم ، ويبدو أنهم من نفس المقياس (1/16). لقد أخذ شيشيغا ، وأخذ SMAX ، ووضع واحدًا تلو الآخر على الآخر - وهو حقًا يفعل! ويبدو باردا! حسنًا ، يجب أن أفعل ذلك! ننتقل إلى الحقبة القادمة.







العمر 4 - اتصال SMAX و GAZ66


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

مع هذه الفكرة ، مشيت لمدة شهرين تقريبًا ، معتقدة أنني على وشك الجلوس لفهم أنظمة CAD. هههههه لا. بعد أن اعترفت لنفسي أنني لا أريد أن أفهم أنظمة CAD ، بدأت أفكر في الخيارات الأخرى.

عدت إلى عالم الأطفال ، وقررت رؤية المصممين ، وفجأة ساعدوني بطريقة ما. اشتريت منشئًا معدنيًا كلاسيكيًا ، كان معي عندما كنت في المدرسة (مدرسة الرماد القديمة مجتمعة).

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

بدأت في القيام به. قضيت أكثر من يوم مع وجع الطفل ، والمكسرات ، والتفكير المكاني.

أثناء الاتصال ، تعلمت حفر البلاستيك باستخدام مفك البراغي ، وتمزيق الأجزاء الزائدة بعناية حتى لا تتلف الحالة ، وقفل المكسرات بالمكسرات الأخرى (ولكن بدون غسالات على أي حال). بشكل عام ، سيكون Trudovik فخوراً بي.

بعد حوالي ثلاثة تعديلات وثلاثة أيام ، رأيت هذه الشاحنة الوحشية أمامي - إصدار GAZ66 SMAX من بيسلان.

لذا ، يبدو أن قاعدة الأجهزة جاهزة ، انتقل إلى الحقبة التالية.





العمر 5 - تركيب المكونات على شاحنة الوحش


أخيرا:

  • لدي عربة بمكونات جيدة
  • لديّ جمالية وفسيحة
  • يعمل الغاز / الفرامل / المنعطفات بشكل طبيعي على هذه العربة
  • أعلى وأسفل متصلين معًا =)

حان الوقت لتركيب المكونات على هذا الجمال.

مسلحًا بمفك البراغي كحفر للبلاستيك ، وشريط مزدوج الوجه كحامل عالمي لكل شيء ، بدأت في العمل.

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

بالإضافة إلى Jetson ، استقر الأشخاص التاليون في الظهر:

  • باوربانك لتشغيل الكمبيوتر (تبرع به الرئيسي ، بارد ، مع تسليم طاقة USB حتى لا يفشل جيتسون في الطاقة)
  • PCA9685 (تحكم PWM) للتحكم في المحرك
  • بطارية لتشغيل محرك الجهاز

نظرًا لأن المشروع قد اعتبر بالفعل طويل الأجل في تلك اللحظة ، فقد قررت عدم العبث مع lidar حتى الآن وجعل MVP على الأقل على الكاميرا والبرامج من Donkey Car.

من أجل المتعة قمت بتوصيل المصابيح الأمامية الأصلية من GAZ66 لجعلها أكثر جمالا وأكثر ثقة في الظلام.

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





سن 6 - تركيب سيارة حمار والمناطق المحيطة بها


لحسن الحظ ، في المراحل الأخيرة ، وجدت مشروع Donkey Car ، وجعلت حياتي أسهل كثيرًا ، وفرتني من كتابة كل شيء بنفسي. ببساطة ، DonkeyCar هو إطار يحتوي بالفعل على كل ما تحتاجه لـ SDC. ولديهم أدلة حول كيفية تثبيت البرنامج. ولكن ، كما هو الحال عادةً مع OpenSource ، فإن الأدلة قديمة وتتعارض مع بعضها البعض في لحظات.

حسنًا ، يجب أن تفهم الأمر. للتشغيل العادي للإطار ، هناك حاجة إلى المكتبات التالية:

  • Opencv
  • tensorflow-gpu (gpu هو ل jetson ، لأن هناك نواة cuda. ​​ل rpi هناك tensorflow-lite)
  • tensorrt (مكتبة لتسريع استنتاج الخلايا العصبية)
  • وكل ذلك يتم تعيينه تلقائيًا بناءً على قائمة البيئة

لنبدأ بـ OpenCV.

يقول دليل DonkeyCar أنك بحاجة إلى بنائه من المصدر نفسه ، لأنه بالنسبة لـ ARM لا يوجد OpenCV في النقطة. حتى فعلت ذلك ، جمعت OpenCV ، ولكن قبل تثبيته قررت التحقق ، فجأة يحتوي النظام على إصدار قديم من OpenCV ، ويجب تدميره. دعوت بايثون ، cv2 المستوردة ، طلبت نسخة ، لكنها بام ، وذات صلة. تم البحث بسرعة ووجدت أنه في أحدث إصدارات linux4tegra (الموجودة في jetson) ، بدأ الرجال من NVIDIA بتثبيت OpenCV. رائع ، لدي القليل لأفعله. أحسنت ، يمكنني تجميع نفسي :)

التالي ، tensorflow-gpu.

يشير دليل DonkeyCar ، أولاً ، إلى فرع إصدار قديم (1.xx) ، وثانيًا ، ولا حتى أحدث إصدار من الإصدارات القديمة. قررت عدم الاستماع إليهم ، ووضع أحدث إصدار حالي (2.0).

الخطوة التالية هي الشد.

تمت كتابة دليل تثبيت tensrort على jetson في صفحة wiki منفصلة ، ويوضح أن المؤلف لم يقرأ الدليل الرئيسي =) لأن دليل tensorrt يعيد تعيين متغيرات البيئة ويتوقف OpenCV عن العمل. لقد قمت بلفها بهذه الطريقة ، وبتدحرج كل شيء إلى الوراء ، وقررت أن تطرق على متغيرات البيئة والبيئة - تدحرجتها مباشرة في البيئة الرئيسية.

راضيًا عن نفسه ، قام بفتح الثعبان ، وبدوره يسمى cv2 ، tensorflow ، tensorrt ، ثم طلب من الثعبان إصدارهم - تم استيرادهم جميعًا ، وأظهرت جميع الإصدارات الأخيرة. رائع!

عملية التثبيت لسيارة الحمار نفسها بسيطة للغاية ، لن أصفها ، أقترح قراءة دليلهم. الشيء الوحيد الذي سألاحظه الآن هو أنه في تكوين سيارة الحمار يمكنك زيادة دقة الصورة من 86x86 لـ RPi إلى 224x224 لـ Jetson (لأنه سيكون هناك المزيد من الأداء والدقة ستكون أعلى).

لذا ، كل شيء جاهز ، حان وقت الجري والاختبار!

يتم تشغيل جهازي حقًا ، فهو يبدأ خادم الويب على ذلك IP ، الذي أصدر جهاز التوجيه الجهاز إليه. ويمكنك الذهاب إلى هناك حقًا ، ومن المتصفح يقود عصا التحكم ، وينظر إلى الصورة من الكاميرا.

اضطررت أيضًا إلى معايرة القيم التي تم توفيرها لـ PWM (PCA9685) للعثور على الانعطاف للأمام الكامل ، للخلف بالكامل ، والحد الأقصى للانعطاف إلى الجانبين.

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

رائع ، لقد حان الوقت للانتقال إلى إعداد المسار!

العمر 7 - تتبع التجميع والرحلات


تم تصميم خوارزمية Donkey Car بحيث يكون هناك خلية عصبية تم تدريبها من قبل المعلم. وهذا يعني أن الصورة من الكاميرا يتم تعقبها ، ويظهر ملف json بجوار كل صورة مكتوب فيها اسم الصورة ، والتسارع ، والتدوير ، والطابع الزمني. ومن أجل تدريب الخلايا العصبية ، تحتاج أزواج الصور + json إلى 5K على الأقل.

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

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

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

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

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

أدخلت السيارة ، وقمت بتشغيلها ، وحاولت القيادة - على عجل ، فهي تدخل في المنعطفات ، واضطررت إلى الحد من السرعة إلى 80 ٪ فقط.



العمر 8 - السفر بعصا التحكم


لذا ، لدي مسار ، ولدي سيارة ، وأحتاج إلى 5 أزواج صورة + json.

تجريبيا ، اكتشفت أن دورة واحدة من المسار الخاص بي هي 250 زوجًا من photo + json ، مما يعني أنني بحاجة إلى ترك 20 لفة على الأقل.

يفضل على التوالي. يمكنك ، بالطبع ، على فترات متقطعة ، ولكن بعد ذلك يتم طرح الغاز الملقي من قبل النموذج ، ويمكن أن يبدأ في التباطؤ ، لكنني لا أريد ذلك.

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

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

حسنًا ، تحتاج إلى التأكد من أن الاتصال من الجهاز الذي أذهب إليه بنفسي إلى الآلة الكاتبة عندما أقود. وهذا يعني أنك بحاجة إلى القيادة من متصفح الهاتف.

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

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

ولكن ، نجحت :) مع هذا الشيء تمكنت من ترك 20 لفة. ولكن في الواقع ، حتى 25 ، لأنني حصلت على طعم في مكان ما حول 15 دائرة.

داتشوند ، جاهز ، لدي مجموعة بيانات لتدريب الخلايا العصبية ، حان الوقت للتدريب!

العمر 9 - تدريب العصبون


في هذه اللحظة لدي سيارة ، مسار ، مجموعة بيانات - نعم ، أنا على بعد خطوة واحدة من النتيجة!
في المنزل ، كان الكمبيوتر يدور في وضع الخمول ، مع NVIDIA RTX 2070 ، الذي خططت للدراسة عليه. لحسن الحظ ، بالنسبة للمنزل الذكي ، لديّ عنوان IP خارجي ، وكان علي فقط الحصول على المنفذ 22 من الإنترنت إلى جهاز الكمبيوتر. من الجيد أن هناك مساعدين قاموا بذلك من أجلي عندما كنت في المكتب.

لذا ، أذهب إلى ssh إلى الكمبيوتر باستخدام أوبونتو ، أراقب المجلد الرئيسي لـ sshfs ، وقم بتحميل الملفات. يبدو أن 40 ميغابايت فقط ، لكنها استمرت حوالي 30 دقيقة. حدث ذلك ، كما أفهمه ، لأنه كان هناك الكثير منهم.

الملفات على جهاز الكمبيوتر الخاص بك ، تثبيت tensorflow-gpu ، برنامج DonkeyCar مثبت ، حان الوقت للتدريب.
إنني أدعو برنامج نصي من DonkeyCar لتدريب عصبون ، وأشير إليه إلى المجلدات مع مجموعة البيانات - تم تشغيله.
أثناء تشغيل العصبون ، يُظهر استخدام nvtop (مراقب تحميل بطاقة الفيديو) استخدامًا بنسبة 1406٪ ، ويظهر htop العادي حمولة وحدة المعالجة المركزية بنسبة 100٪ لجميع النوى الـ 16 ، سيحدث

بعد حوالي 20 دقيقة ، لدي نموذج مدرب لقيادة السيارة. يبدو ، خذها ، استخدمها. ولكن لا :)

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

وهذا يعني ما أحتاج إليه:

  • تجميد النموذج (تحتاج إلى حزم كل شيء للنموذج في ملف واحد)
  • تحويل نتيجة إفريز إلى تنسيق موتر

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

ولدت الفرضية القائلة بأن هذا لأنني أخذت خطأ tensorflow الذي كان لدى DonkeyCar. حسنًا ، أنا أسحب tensorflow 2.0 ، وضعت 1.15 ، أحاول مرة أخرى - النجاح ، هتاف!

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

أدعو النص من ذلك المكان ، والحقيقة تستجيب. ولكن ، يقول ، لا ثعبان ثالث لك ، يأتي في المرتبة الثانية.

حسنًا ، أنا أدعو الثعبان الثاني. قال لي - ليس لدي tensorflow. حسنًا ، أطلب منه وضع tensorflow-gpu 1.15 ، وقال لي أنه لا يوجد مثل هذا الإصدار ، هناك 1.14 فقط. حسنًا ، أوافق ، دعنا ننتهز الفرصة ونضع الإصدارات المختلفة في بيئات بيثون مختلفة. ضع tensorflow في الثعبان الثاني ، ودعا للتحويل - هتاف ، نجح!

حسنًا ، لدي نماذج للتوتر ونسخة عادية من tensorflow-gpu ، أسقطها في الجهاز.

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

أبدأ الخطأ المعتاد مرة أخرى ، ولكن هذه المرة يكون واضحًا جدًا - حجم صورتك هو 224X224 ، في حين يتوقع 86X86. تذكر ، في مكان ما أعلى بكثير كتبت أن قواعد التكوين ، غيرت دقة الصورة من الكاميرا؟

لذا ، في الآلة الكاتبة قمت بتصحيحها ، ولكن ليس على الكمبيوتر المضيف.

أعود إلى الكمبيوتر المضيف ، وأصحح التكوينات هناك ، وأعيد التدريب ، وأعيد إنتاج الإفريز ، وأعيد التحويل ، وأرمي.



أقوم بتشغيل الجهاز بنموذج للتوتر ، و ...

العمر 10 - كل شيء يعمل ، أخيرًا!


مرحى! ذهبت سيارتي! نفسها ، بدوني. رائع جدا. أنا سعيد للغاية)


لمدة عام تقريبًا فعلت كل هذا والآن)

ماذا بعد؟


هناك عدد من الخطط لمزيد من التطوير ؛ سأنتقل من البسيط إلى المعقد.

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

معركة التحدي


إذا كنت أنت ، أو مع شركة من الأصدقاء ، تشعر أنك تريد السباق ، ثم اكتب إلي ، دعنا نرتب مسابقات =)

تواصل اجتماعي


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

صورة بطاقة sd للآلة الكاتبة


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

All Articles