شبیه سازی
نرم افزار شبیه ساز که اصطلاحا به آن سرور شبیه سازی می گویند در حقیقت مسئول شبیه سازی تمامی عوامل دخیل در یک مسابقه فوتبال واقعی مانند وزن توپ، وزن بازیکنان، شرایط محیطی مانند وزش باد و… است. این نرم افزار مسئول شبیه سازی یک محیط زمان حقیقی و خطادار است به نحوی که دو تیم از روبات های نرم افزاری را قادر به رقابت در برابر هم می سازد. سیستم شبیه سازی دو بعدی یک سیستم چند عامله ارزشمند برای تحقیق در همکاری توزیع شده اعضای تیم ها، یادگیری ماشین و … است اما به علت دوبعدی بودن، نتایج حاصل قابل به آسانی انتقال به جهان واقعی نمی باشد به همین منظور در سال 2003 یک سیستم شبیه سازی سه بعدی و نزدیک به جهان واقعی به نام سیمسپارک پیشنهاد شد و برای اولین بار در سال 2004 مورد استفاده قرار گرفت.
سرور شبیه ساز سه بعدی Rcssserver3D یک شبیه ساز سه بعدی بر اساس اسپارک و موتور پویای آزاد (ODE) است. اسپارک قادر به انجام محاسبات و پردازش های توزیع شده چند عاملی می باشد[8]. این سیستم یک شبیه ساز بر مبنای اجزای عمومی سیستم شبیه سازی چند عاملی فیزیکی است که در این پایان نامه اساس کار قرار می گیرد. برای روی آوردن به شبیه سازی و دست کشیدن از ساخت روبات دلایل بسیاری می توان برشمرد، از جمله اینکه ساخت یک روبات از لحاظ زمانی و تجهیزات هزینه بر است و احتیاج به احاطه بر مسائل سخت افزاری دارد، روبات واقعی بر اثر استفاده مداوم دچار عیوب سخت افزاری می شود که بر هزینه زمانی و مالی می افزاید و… که تمامی این مسائل خصوصا ساخت روبات و درگیری با مسائل سخت افزاری فرصت را از محققین برای پرداختن به مسائل نرم افزاری و پیاده سازی و ارتقای الگوریتم ها می-گیرد. شبیه سازی با فراهم آوردن بستری مهیا، این فرصت را فراهم آورده است که بدون درگیری با مسائل جانبی، تمام توجه خود را بر روی ابداع، پیاده سازی و بهبود و ارتقای الگوریتم های مورد نیاز متمرکز کنیم. البته شبیه سازی با تمام مزایایی که دارد، مشکلاتی نیز دارد که از جمله می-توان به خطاهای رخ داده در مدل سازی ها، مشکلاتی در پیاده سازی الگوریتم های شبیه سازی شده در محیط واقعی و… اشاره کرد. اما با وجود این مشکلات، مزایای شبیه سازی به حدی مهم و با ارزش هستند که کماکان شبیه سازی در بسیاری از موارد گزینه نخست است. همین مسائل، مسابقات شبیه سازی خصوصا شبیه سازی فوتبال را در زمره جذاب ترین بخش های مسابقات روبوکاپ قرار داده است.
1-4-2- مدل روبات
روبات مورد استفاده در شبیه سازی فوتبال سه بعدی، در حال حاضر روبات انسان نمای نائو می باشد. این روبات که هم اکنون بازیگر اصلی صحنه مسابقات روباتیک خصوصا شبیه سازی فوتبال سه بعدی است، در سال 2008 به بازار معرفی شد دلیل اصلی جذابیت این روبات، نزدیکی قابلیت های حرکتی این روبات به انسان است. این روبات همان گونه که در جدول 1-1 مشخص شده است، یک روبات انسان نمای با 22 درجه آزادی است که برای هر پا 6 تا، هر دست 4 تا و سر 2 درجه آزادی وجود دارد. همچنین این روبات دارای یک حسگر همه جهته ، موتورها و حسگر های زاویه سنج جداگانه برای هر مفصل، یک سنسو زیروسکوپ ، یک ابزار ارتباطی ویک حسگر نیرو در هر پا می باشد. علاوه بر فوتبال، این روبات با استفاده از چهار میکروفن تعبیه شده در سر و سیستم پردازش صوتش قادر به برقراری ارتباط و صحبت کردن است. در نسخه شبیه سازی شده این روبات، تمامی مفاصل و سیستم مکانیکی روبات، موتورها و محرک های روبات و حسگرهای آن توسط سیستم شبیه ساز پیاده سازی می شود و تنها قسمت باقی مانده مغز روبات می باشد که بایستی توسط برنامه نویس، برنامه ریزی شود و به طور قطع الگوریتم های پیاده سازی شده بایستی با شبیه ساز و معماری آن سازگاری داشته باشند.
جدول 1-1 : مشخصات روبات نائو
نام روبات ارتفاع وزن تعداد درجات آزادی
نائو 57سانتی متر 5/4 کیلوگرم 22-25 درجه آزادی
رقابت های شبیه سازی فوتبال سه بعدی در حال حاضر در زمینی به ابعاد 21 در 14 متر بین دو تیم که هر یک دارای 9 بازیکن (عامل ) هستند انجام می شود. هر تیم بر روی یک کامپیوتر جداگانه اجرا می شود و مسابقه شامل دو نیمه 5 دقیقه ای می باشد[7]. محیط شبیه ساز فوتبال سه بعدی با تمامی ویژگی ها و محدودیت ها، زمینه مناسبی برای فعالیت در حیطه علوم روباتیک و هوش مصنوعی فراهم آورده است. در این پایان نامه از روبات نائو به عنوان روبات مورد آزمایش و از محیط شبیه ساز فوتبال سه بعدی به عنوان بستری برای ارزیابی روش ها استفاده می کنیم.
1-4-3- کد پایه
کد های پایه در زمینه مسابقات روبوکاپ در واقع بستری هستند به منظور فراهم آوردن امکانات لازم جهت پیاده سازی الگوریتم ها و روش ها. در زمینه فوتبال سه بعدی کد پایه ارتباط بین سرور شبیه سازی و عامل های بازی را فراهم می آورد، و معمولا برخی از توانایی های پایه ای لازم برای روبات فوتبالیست را در خود دارد به این ترتیب کد پایه احتیاج برنامه نویس برای درگیر شدن با جزئیات را بر طرف می کند و به او این امکان را می دهد که بدون توجه به جزئیات، به پیاده سازی توانایی های متنوع بپردازد. در زمینه شبیه سازی فوتبال سه بعدی، اکثر تیم ها کدهای پایه مربوط به خود را منتشر کرده اند که برای تیم های دیگر قابل استفاده است. این کار در این مورد نیز مانند سایر پروژه های متن باز باعث رفع خطاهای منطقی موجود در کد ها و بهینه تر شدن کد های منتشر شده، شده است. بسیاری از این کدها را می توان از پایگاه اینترنتی پروژه های متن باز sourceforge.net دریافت کرد. یکی از معروفترین کدهای پایه در شبیه سازی فوتبال سه بعدی، کد پایه تیم Nexusاز دانشگاه فردوسی مشهد است. بعد از دریافت کد و استخراج آن، مشاهده می شود که کد پایه به دسته های doc و lib، src تقسیم می شود که به ترتیب حاوی کد منبع تیم، کتابخانه های مورد استفاده و مستندات تولید شده توسط Doxygenاست. به منظور کامپایل کردن کد، به نرم افزار CMake جهت ایجاد پیش نیازهای کامپایل کد نیاز داریم. کد تیم از نظر تئوری در تمامی پلتفرم هایی که از g++ و Cmake پشتیبانی می کنند قابل استفاده می باشد.
برای کامپایل کردن کد کافیست شاخه ای به عنوان نمونه با نام build در ریشه ی کد ایجاد کرده و با اجرای دستور cmake نسبت به ایجاد فایل های مورد نیاز جهت کامپایل و اجرای کد اقدام نماییم. با این کار فایل هایی از جمله start.sh(اسکریپت موجود برای اجرا کردن تیم) ایجاد می شوند و با اجرای دستور make کد تیم کامپایل شده و فایل nexus3D به عنوان فایل اجرایی تیم تولید می گردد. جدول 1-2 به طور خلاصه به محتویات شاخه های موجود در کد پایه می پردازد.
جدول 1-2 : محتویات شاخه های موجود در کد پایه
کاربرد نام شاخه
محل قرار گرفتن فایل اجرایی تیم به همراه اسکریپت ها و فایل های مورد نیاز /bin
محل قرار گرفتن فایل های مورد نیاز جهت کامپایل کد پایه /build
محل قرار گرفتن مستند سازیهای موجود در کد پایه /doc
محل نگهداری از کتابخانه های مورد استفاده /lib
محل قرار گرفتن کدهای تیم /src
کد پایه تیمNexus مانند سایر کدهای پایه ای بر اساس معماری لایه ای از سه لایه ی اصلی ارتباطی، داده و تصمیم گیری تشکیل شده. لایه ی ارتباطی وظیفه ی برقراری ارتباط با کارگزار شبیه سازی، لایه ی داده وظیفه ی پردازش داده های خام ورودی از لایه ی قبل و لایه ی تصمیم گیری وظیفه ی تصمیم گیری با استفاده از اطلاعات ورودی از لایه ی قبل را بر عهده دارد که شکل 1-9 ساختار لایه ای آن را نشان می دهد.
شکل 1-9 : ساختار لایه ای کد پایه