چالش اول خودرو خودران: هدایت تاکسی خودران

یک چالش جذاب در کنترل خودروهای خودران

سلام دوستان خوبم! به بخش جدید و باحال چالشهای طراحی خودروهای خودران خوش اومدید

.در این پستها یا بخش ها چالشهایی در طراحی و کنترل خودروهای خودران مطرح می کنیم و از شما می خواهیم به اون پاسخ بدید(هرچند خودمون هم، حل و تحلیلشون می کنیم )!

لطفا طرح ها و نظرات خودتون رو برای ما ارسال کنید

“طرح چالش اول”

هدایت یک تاکسی خودران

به تصویر زیر نگاه کنید

عکس ۱: نمای کلی از چالش شماره یک

فرض کنید خودرو خودران شما یک تاکسی است که در تصویر بالا مشاهده می کنید و قرار است در یک محیط شهری با ترافیک روان از نقطه A به نقطه B هدایت شود. حال چالش اولی که مطرح می شود گذشتن از ناحیه ۱ است که با رنگ سبز نشان داده شده .که در تصویر زیر واضح تر میشه اونو دید.

عکس ۲: نمای نزدیک از چالش شماره یک

سوال: فرض کنید به عنوان یک مهندس نرم افزار، الکترونیک، کنترل، کامپیوتر، هوش مصنوعی یا … از شما بخوان از چالش ۱ عبور کنید. شما برای این کار چه الگوریتم هوشمندی را پیشنهاد می کنید؟

برای اینکه چهارچوبی برای الگوریتم شما تعیین بشه، یک لیست از سنسورهایی که بر روی خودرو نصب هست هم بهتون ارائه داده میشه.

لیست سنسورها به شرح زیر است:

۱- خودرو دارای سنسور اولتراسونیک ۳۶۰ درجه ای (سنسور هشدار برخورد با مانع با رنج ۵ متر) : یعنی تمامی موانعی که در ناحیه ۳۶۰ درجه ای خودرو قرار دارند توسط این سنسورها تشخیص داده شده و فاصله خودرو شما با تمام آنها به شما اطلاع داده میشود.

۲- دارای دو دوربین نصب شده در جلو و عقب خودرو هرکدام با شعاع دید ۱۲۰ درجه

حالا با توجه به امکاناتی که در اختیار دارید، بدون در نظر گرفتن نوع پردازنده و قابلیت های نرم افزاری فقط یک الگوریتم کنترلی ارائه بدید!

راه حل پیشنهادی

خب در این بخش به ارائه راه حل پیشنهادی می پردازیم.البته ممکن است شما یک راه حل دیگر در ذهن خود داشته باشید! به یاد داشته باشید برای حل یک چالش در خودروهای خودران ممکن است روش های مختلفی بسته به امکانات و شرایط وجود داشته باشد.

ما راه حل خودمون را به صورت قدم به قدم به ترتیب اولویت بررسی می کنیم. و سعی می کنیم در اون دو مولفه سرعت و دقت در حل چالش را لحاظ کنیم!

قدم اول: خودمان را جای خودروی خودران می گذاریم (فرض کنید شما پشت فرمان نشسته اید) در هنگام قرار گرفتن در وضعیت شماره ۱ دقیقا اولین کاری که انجا میدین چی هست؟

جواب: به سه چیز نگاه می کنیم:

  • ماشینی که از روبروی می آید،
  • به حاشیه ماشینمان از جدول کنار خیابان
  • به روبرو و مسیر پیش رویمان

در شکل زیر این سه نوع نگاه در تصویر نشان داده شده اند.(خودرو در حال وارد شدن به ناحیه چالش ۱ است.)

عکس ۳: نمای نزدیک از چالش شماره یک

حالا با چه ابزاری (بدون وجود راننده) می توانیم این دید سه طرفه را داشته باشیم؟ اگر دوباره به ابزارالات و امکاناتی که در دسترس ما هستند توجه کنید می بینید که این خودرو به یک دوربین با زاویه ۱۲۰ درجه مجهز شده است. و اگر خوب به تصویر بالا نگاه کنید می بینید که این زاویه دید برای ما مناسب است و می توانیم با یک دوربین هرسه موقعیت را رصد کنیم!

اما سوال اینجاست این قابلیت دیداری سه جهته (ماشین روبرو، جدول کناری، مسیر روبرو) چه کمکی به ما می کند؟

جواب ساده: میتونه از برخورد ما با موانع اطراف جلوگیری کنه!

اما همانطور که می دونید دیدن موانع کافی نیست و ما باید فاصله اونها با خودمون رو هم بدونیم پس به همین دلیل از سنسورهای اولتراسونیک برای اندازه گیری فاصله خودرو تا موانع استفاده می کنیم. حالا با دیدن موانع و دونستن فاصله اونها می تونیم یک الگوریتم کنترلی برای عبور از ناحیه ۱ بنویسیم

به تصویر زیر توجه کنید:

عکس۴ : نواحی کم خطر و پرخطر اطراف خودرو

در عکس ۴ نواحی کم خطر و پرخطر اطراف خودرو با سه رنگ سبز، نارنجی و قرمز مشخص شده اند. همانطور که می بینید یک مانع و یا یک شی می تواند در یکی از سه ناحیه و یا خارج آن قرار داشته باشد. به طور کلی:

  • اگر مانعی در خارج از ناحیه سبز رنگ قرار بگیرد در ناحیه امن قرار دارد
  • اگر مانعی در بین ناحیه سبز و نارنجی قرار بگیرد در ناحیه هشدار قرار دارد
  • اگر مانعی در بین ناحیه زرد و قرمز قرار بگیرد در ناحیه پر خطر قرار دارد

حالا این مانع یا شی می تواند یک خودرو، جدول کنار خیابان، درخت، خط بین خیابان، خط عابر پیاده، عابر و یا هر چیز دیگری باشد. همانطور که از تصویر ۴ می توان استنباط کرد خودرو در یک ناحیه امن در حال حرکت است و هیچ مانعی به آن نزدیک نیست پس برای حل چالش شماره یک نیز باید ما بتوانیم خودروی تاکسی را در ناحیه امن حرکت دهیم.

البته این نواحی کاملا منعطف هستند و با توجه به نوع قوانین راهنمایی و رانندگی و شرایط جاده ای می توانند عوض شوند. مثلا طبق قوانین راهنمایی رانندگی فاصله یک خودرو تا خودروی جلویی ممکن است ۵ متر تعیین شده باشد بنابرین قسمت جلویی ناحیه سبز رنگ باید در فاصله پنج متری قرار بگیرد.

بعد از اینکه تصمیم گرفتیم نواحی بالارو مشخص کنیم حالا باید از ابزارهای اندازه گیری برای تشخیص موانع اطراف استفاده کنیم. مهمترین ابزار همون سنسورهای اولتراسونیک هستند که یک نمونه از این سنسورهارو در تصویر زیر میتونید ببینید

عکس۵: یک نمونه سنسور اولتراسونیک خودرویی

با استفاده از نصب این سنسورها در اطراف خودرو میشه فواصل از موانع رو تشخیص داد. البته خب میدونید که ما برای اینکه یک سنجش ۳۶۰ درجه ای دور خودرو داشته باشیم منطقی نیست همه طرف ماشین از این سنسورها بزاریم به همین خاطر از سنسورهای جدید و مخصوصی به نام Lidar استفاده میشه که در واقع سنسورهایی از جنس رادار و لیزر هستند که در تصویر زیر میتونید ببینید

عکس ۵: سنسور Lidar

این سنسورها دارای دقت، زاویه و رنج اندازه گیری مسیع تری هستند مثلا در تصویر زیر یک نمونه اندازه گیری توسط این سنسورهارو ببینید

عکس ۶: نمونه اندازه گیری سنسور Lidar

اما همونقدر که این سنسورها مناسب هستند همونقدر هم گرون هستند. ولی ما فرض می کنیم که خودروی تاکسی ما مجهز به سنسورهای Lidar با زاویه ۳۶۰ درجه است و میتونه تمام موانع اطراف رو شناسایی و فاصله خودرو تا اون مانع رو محاسبه کنه

خب با این فرض کار ما خیلی ساده میشه و به راحتی میتونیم چالش عبور از ناحیه ۱ رو حل کنیم به این صورت که هر مانعی اگر از طرفین وارد ناحیه سبز شد (مثلا نزدیک شدن به جدول کنار خیابون یا ماشینی که از روبرو سمت ما میاد) با چرخاندن فرمون در جهت مخالف مانع رو از به خارج از ناحیه سبز هدایت کنیم و یا اگر از جلو وارد ناحیه سبز شد ترمز بگیریم و اگر از پشت نزدیک شد هم در صورت لزوم گاز بدیم و فاصله بگیریم.

اما سوال اینجاست وجود دوربین برای عبور از این چالش به چه درد میخوره؟

به نظر شما دوربین به چه درد میخوره؟؟؟

جواب:

دوباره خوب به تصویر زیر نگاه کنید

عکس۵ : نواحی اطراف خودرو

اگر خوب به عکس بالا دقت کنید میبینید که خط های سفید میانه ی خیابان هم از اهمیت بالایی برخوردار هستند و قرار گرفتن خودرو روی این خطها غیر قانونیه و نباید خودرو از این خطها حین حرکت عادی در مسیر عبور کنه (مگه اینکه بخواد سبقت بگیره یا گردش به چپ یا راست داشته باشه) پس ما باید بتونیم این خطها رو هم تشخیص بدیم و حالا بنظرتون میتونیم از سنسورهای اولتراسونیک برای اینکار استفاده کنیم؟ پاسخ قطعا خیر هست و این سنسورها فقط برای تشخیص موانع کاربرد دارند و اینجاست که وجود دوربین در خودرو اهمیت پیدا میکنه و در واقع ما باید به کمک پردازش تصویر بتونیم خطوط جاده رو تشخیص بدیم.

روشها و الگوریتم های زیادی برای تشخیص خطوط جاده به وسیله پردازش تصویر وجود داره که ما در آموزش ساخت خودروهای خودران به اونها پرداختیم. به عنوان مثال ما یک تصویر جاده رو به الگوریتممون دادیم و اون خطوط خیابون را تشخیص داده

عکس ۶: تشخیص خطوط خیابان

خب بعد از اینکه سیستم سنسورینگ ما راه افتاد (تشخیص مانع و پردازش تصویر) حالا باید یک الگوریتم کنترلی بنویسیم (به نمونه کد زیر توجه کنید:)

/**Created By WWW.AMOKH.ir 
  * @brief  The Self Driving Car Algorithm entry point.
  * @retval int
  */
  /* Main Structure BEGIN */   
int main(void)
{
  /* CPU BEGIN Initialize  */
  CPU_Init();
  /* CPU END Initialize  */
  
  /* Sensors BEGIN Init */
  Distance_Sensor_Init();
  Camera_Init();
  /* Sensors END Init */

  /* Infinite loop BEGIN */  
  while (1)
  {
    /* Distance Sensor Algorithm BEGIN */
	///Green Area		
	get_Distance_Sensor_Data_Green_Area();	
    ///Yellow Area			
    get_Distance_Sensor_Data_Yellow_Area();
    ///Red Area		
	get_Distance_Sensor_Data_Red_Area();

    if (get_Distance_Sensor_Data_Green_Area_occure==1)
	{
       switch(get_Distance_Sensor_Data_Green_Area_occure_side)
	   {
		  case west:
             steering wheel = steering wheel+1;
		  case East:
             steering wheel = steering wheel-1;
		  case North:
             Gas_Pedal = Gas_Pedal-1;
		  case South:
             Gas_Pedal = Gas_Pedal+1;			 			 
	   }
	}
    if (get_Distance_Sensor_Data_Yellow_Area_occure==1)
	{
       switch(get_Distance_Sensor_Data_Yellow_Area_occure_side)
	   {
		  case west:
             steering wheel = steering wheel+5;
		  case East:
             steering wheel = steering wheel-5;
		  case North:
             Gas_Pedal = Gas_Pedal-5;
		  case South:
             Gas_Pedal = Gas_Pedal+5;			 			 
	   }
    if (get_Distance_Sensor_Data_Red_Area_occure==1)
	{
       switch(get_Distance_Sensor_Data_Red_Area_occure_side)
	   {
		  case west:
             steering wheel = steering wheel+10;
		  case East:
             steering wheel = steering wheel-10;
		  case North:
             Gas_Pedal = Gas_Pedal-10;
		  case South:
             Gas_Pedal = Gas_Pedal+10;			 			 
	   }	   
	   
	}    
    /* Distance Sensor Algorithm END */	
  }
  /* USER CODE END 3 */
 }
  /* Infinite loop END */  
}
  /* Main Structure END */   

کد بالا بخشی از الگوریتم کنترلی هست که برای خودرو خودران نوشته شده که مربوط به بخش جلوگیری از برخورد به موانع هست. با این الگوریتم ساده خودرو به موانع برخورد نمیکنه! البته این یک کد سادست و باید تغییراتی با توجه به دینامیک خودرو وشرایط آب و هوایی و استثناعاتی که ممکنه حین حرکت خودرو پیش بیاد در اون ایجاد بشه.

قدم دوم: حالا مجددا خودمان را جای خودروی خودران می گذاریم (فرض کنید شما پشت فرمان نشسته اید) در هنگام قرار گرفتن در وضعیت شماره ۲ دقیقا اولین کاری که انجا میدین چی هست؟

وضعیت شماره دو در واقع یک پیچ است که باید از اون عبور کنیم.

ادامه دارد…

پارت های منتشر شده در حوزه خودرو خودران:

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت اول)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت دوم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت سوم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت چهارم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت پنجم)

چگونه یک خودرو خودران و هوشمند بسازیم؟ (پارت ششم)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...