در قسمت قبلی (لینک) در مورد این که چرا پروژه خودران رو آغاز کردم و این که چند فاز و چند مرحله داره، نوشتم. در این قسمت، در مورد پیادهسازی صحبت میکنم و صد البته، مشکلی که این خودرو در تشخیص مسیر داشت. لازمه به ذکره که این قسمت، آخرین قسمت از مطالبم در مورد این پروژه نخواهد بود و در آینده؛ قطعا باز هم ازش مینویسم. اما در حال حاضر، ترجیح دادم که پروژه خودران رو به حالت Hold در بیارم. در ادامه در این مورد هم توضیحات لازم رو خواهم داد.
بگذریم، در قسمت قبلی پلن رو توضیح دادم، بعدش هم گفتم که قراره چطوری خودروی خودران رو بسازیم و چی کارا بکنیم. کمی هم در مورد سختافزارش توضیح دادم. در این قسمت، قراره که در مورد نرمافزار و هوش مصنوعیای که در این پروژه استفاده شده، صحبت کنم. در نهایت هم یک ویدئو ازش آپلود میکنم که ببینید چقدر هنوز مشکل داره 😁
اتصال دوربین به شبکه جهت عکسبرداری
همونطوری که پیشتر در مطلبی در همین وبلاگ گفتم (لینک) یکی از بهترین ابزارها برای جمعآوری داده مرتبط با پروژههایی مثل همین خودروی خودران، دوربین یا میکروفن خود شماست. نکته مهم و قابل توجه اینه که در پروژه خودران، نمیشه به دادههای خارجی اتکا کرد چرا که خیلیهاشون اصلا اونطوری که ما پلن چیدیم، نیستن. به همین خاطر، من گوشی قدیمی خودم (سامسونگ گلکسی J7 که شاید حدود ۴ سال گوشی من بود) رو به عنوان دوربین در این پروژه انتخاب کردم.
بعد از این که گوشی رو شارژ کردم و به عبارتی به زندگی برش گردوندم، نرمافزار Droid Cam رو روش نصب کردم. با کمک این نرمافزار، به سادگی میشه گوشی رو به یک دوربین تحت شبکه تبدیل کرد و این یعنی این که حجم زیادی از دردسرهای مرتبط با اتصال دوربین به بوردهایی مثل آردوینو و ESP اینجا کنار رفته. بعد از این که این نرمافزار نصب شد و گوشی هم روی شاسی قرار گرفت، کدی نوشتم که به گوشی وصل شه و بتونه در حالات مختلف، عکسبرداری کنه. کد مرتبط از این لینک در دسترسه.
عکسبرداری و آموزش مدل هوش مصنوعی
برای این که پروژه هوش مصنوعی به خوبی بتونه از پس کاری که میخواهیم بربیاد، نیازمند دادههای زیادی هستیم. اصولا این دید وجود داره که «هرچی داده بیشتر، بهتر». این دید گرچه بعضی جاها میتونه خطرناک باشه (مثل زمانی که overfit میشیم و …) اما عموما دید درستیه. به همین خاطر، ماشین رو راه انداختم و با استفاده از اون کدی که نوشته بودم، شروع کردم عکس برداری. نمونهای از این عکسها رو در اینجا میبینید:
بعد از این که این عکسها گرفته شد، نیاز بود یک مدل هوش مصنوعی درست بشه. حقیقت اینه که به جای کد زدن برای درست کردن مدل، از «ماشین قابل آموزش» گوگل (لینک) استفاده کردم و یه مدل تشخیص تصویر درست کردم و اون رو در یک کد وارد کردم (لینک کد). بعد از این که از عملکرد نسبی این قضیه مطمئن شدم، یک کد دیگر نوشتم که دستورات خودران رو اجرا کنه (لینک کد خودران) که البته خیلی هم خوب نبود :))
نمونه عملکرد خودران
جمعبندی
همونطوری که دیدید، این پروژه هنوز زیادی جوانه و هنوز هم مشکلاتی داره. کدهایی که تا الان براش زدم، همه در گیتهاب شخصی من موجودند (لینک) و میتونید خودتون برای پروژههاتون ازش استفاده کنید. همچنین اگر ایدهای برای بهبود عملکرد کد دارید هم ممنون میشم Pull Request ارسال کنید. در آینده هم احتمالا کمی بیشتر روی این پروژه کار خواهم کرد و ایدههای بیشتری رو به آزمایش خواهم گذاشت. در نهایت، از این که وقت میذارید و این وبلاگ رو میخونید، ازتون ممنونم 🙂