برنامه ریزی حرکت برای خودروهای خودران

يک خودرو خودران نیازمند بخش های مختلفی به منظور کارکرد صحیح است. یکی از مهم ترین بخش ها، بخش Motion Planning است. هدف اصلی این مقاله نیز برسی این بخش است.اما قبل از بررسی این بخش لازم است که ساختار کلی بخش نرم افزاری خودرو های خودران را بررسی کنیم تا جایگاه بخش Motion Planning مشخص شود. پس لطفا با چیتاگرام همراه باشید تا با جزئیات بیشتری به بررسی بخش مذکور بپردازیم.ساختار بخش نرم افزاریدر تصویر زیر میتوانید بلوک های مختلف تشکیل دهنده ساختار نرم افزاری خودرو های خودران را مشاهده کنید. به صورت کلی میتوان ساختار های مختلفی را مطرح کرد، ساختاری که در اینجا مطرح میکنیم یکی از ساختار های موجود است که بسیار پرکاربرد است.در ادامه در مورد هر کدام از بلوک های تصویر بالا توضیح مختصری ارائه میدهیم.درک محیط (Environment Perception):یک خودرو دارای سنسور مختلفی برای تشخیص و جمع آوری اطلاعات از محیط اطراف خود است. داده های این سنسور ها داده های خامی هستند که نیاز است به بلوک درک محیط داده شوند تا پردازش شده و اطلاعات لازم از آنها استحراج شود تا برای یک کامپیوتر قابل فهم باشد.به صورت کلی این بلوک دو وظیف اصلی دارد، یکی تعیین موقعیت فعلی خودرو در فضا، دومی تشخیص المان های مهم محیط اطراف، مانند تشخیص جاده، علائم راهنمایی و رانندگی، خودرو های دیگر، موانع، … و همچنين پيش بيني حرکت اشيا اطراف خودرو است.نقشه برداری از محیط (Environment Mapping):این بلوک وظیفه فراهم کردن یک نقشه از محیط اطراف خودرو دارد که درآن موقعیت هر کدام از اشیا مشخص است. این نقشه بدست آمده میتواند برای موارد مختلفی مثل امتناع از برخورد، برنامه ریزی حرکت، … کاربرد داشته باشد.برنامه ریزی حرکت (Motion Planning):این بلوک با استفاده از اطلاعات بدست آمده از دو بلوک قبلی همه تصمیات را راجع به اینکه چه کار هایی باید انجام شود و خودرو در چه مسیری حرکت کند را می‌گیرد.خروجی این بلوک باید یک مسیر ایمن، بهینه و راحت باشد که خودرو در راستای آن حرکت میکند تا به مقصد خود برسد. بعد از توضیح بلوک های مختلف، این بلوک را با جزئیات بیشتری بررسی خواهیم کرد.کنترل کننده (Controller):مسیر تعیین شده توسط بلوک Motion Planning به کنترل کننده داده میشود. بلوک کنترل کننده با تعیین زاویه فرمان، موقعیت پدال گاز و ترمز و تعیین وضعیت دنده، خودرو را به نحوی کنترل میکند که بتواند مسیر تعیین شده را بپیماید.نظارت بر سیستم (System Supervisor):این بلوک نیز همان طور که از نامش پیداست وظیفه نظارت بر سیستم های مختلف را دارد. خود بلوک شامل دو بخش نظارت بر قسمت های نرم افزاری (بلوک های مختلفی که قبل تر توضیح داده شد) و سخت افزاری می‌باشد.بررسی اختصاصی بلوک Motion Planningدر این قسمت به بررسی بلوک برنامه ریزی حرکت (Motion Planning) با جزئیات بیشتر می‌پردازیم.به صورت کلي تسک Motion Planning يک تسک پيچيده و دشوار است که لازم است آن را به لايه هاي مختلفي تقسيم بندي کرد. در شکل زير ميتوانيد اين لايه ها را مشاهده کنيد. در ادامه به بررسي اين هر کدام از اين لايه ها ميپردازيم.لايه اول Mission Planner نام دارد که يک لايه high level است و مسير کلي حرکت خودرو بر روي نقشه را مشخص ميکند. بسياري از اپليکشين هاي موجود مانند waze و google map و … غيره اين امر را محقق ميسازند. يکي از راه هاي موجود در اين بخش معادل سازي مسير هاي موجود در نقشه به صورت گراف است. در ادامه الگوريتم هاي مختلفي مثل و Dijkstra به منظور پيدا کردن کوتاه ترين مسير روي گراف پياده ميشوند تا مسير کلي حرکت مشخص شود. به اصطلاح ميگويند اين لايه بخش long term planning را مديريت ميکند.لايه بعدي که Behavior Planner نام دارد، کار مديريت short term planning را بر عهده دارد. اين لايه مسئول تعيين فعاليت ها و مانور هاي مختلف خودرو است که در حين طي کردن مسير تعيين شده توسط لايه قبل، انجام شود. همچنين اين لايه مسئول تعيين يک سري از قيود براي انجام هر کدام از فعاليت ها و مانور هاي خودرو است. يکي از مثال هاي عملکرد اين لايه اين است که باتوجه به سرعت تعيين شده و رفتار پيش بيني شده خودرو هاي اطراف، آيا بايد خودرو تغيير مسير دهد يا خير.يکي از روش هاي مهم هوش مصنوعي به نام يادگيري تقويتي (Reinforcement Learning) ميتواند در اين بخش مورد استفاده قرار گيرد.در نهايت لايه سوم (Local Planner) مسئول برنامه ريزي (planning) در لحظه (immediate) و واکنشي (reactive) است. و عملا مسئول مشخص کردن يک مسير خاص و مشخص (Path Planner) و يک مجموعه از سرعت (Velocity Profile) در يک محدوده زماني کوتاه است. خروجي اين لايه بايد نرم، بهينه و ايمن باشد و همچنين بايد قيود مشخص شده توسط لايه قبل در آن اعمال شده باشد.اين لايه اطلاعات اشيا ثابت و متحرک، محدوده عملکردي، خروجي لايه قبل را درنظر ميگيرد تا بتواند خروجي مطلوب را توليد کند.