1-     مقدمه

به دلیل بررسی عملی روش‏های هوش مصنوعی، تعیین مکان و هدایت، ربات متحرک اتوماتیک در مؤسسه‏ی اتوماسیون و انفورماتیک، ساخته شده است. این ربات را در شکل 1 می‏توانیم مشاهده نماییم. این ربات می‏تواند در زمینه‏ی انجام وظایف میکروموس مورد استفاده قرار گیرد. قسمت اعظم این مقاله بر روی طراحی ربات‏های اتوماتیک کوچک برای بررسی عملی روش‏های هوش مصنوعی به خصوص در کار میکروموس تمرکز یافته است.

1-     ربات میکروموس

در یک نگاه ساختمان ربات با قیمت بسیار پایینی ساخته شده است. اصل آن بر روی دو موتور راه‏انداز پله‏ایی بنا نهاده شده است. آن‏ها، حرکت‏های رو به جلو، رو به عقب و هدایت برمبنای اصول کنترلی را تأمین می‏نمایند. جهت تغییر حرکت به وسیله‏ی سرعت چرخش چرخ‏های مختلف تشخیص داده می‏شود. در ربات دو گوی وجود دارد که از واژگون شدن آن جلوگیری می‏نماید. مهم‏ترین پارامترهای فنی ربات به صورت خلاصه در جدول شماره‏ی 1 آمده است.

این ربات به چهار قسمت تقسیم شده است: برد CPU اصلی، برد حس‏گرها، برد کنترل موتور و برد عملیاتی با نمایشگر LCD. بلوک دیاگرام میکروموس در شکل 2 آمده است. منبع تغذیه‏ی تمامی بردها به وسیله‏ی 4 باتری Li-Ion CGR 18650/4.2V که به صورت متوالی به هم وصل شده‏اند تأمین می‏گردد. ولتاژ کلی ربات 16.8 ولت است. ولتاژ بالا برای تأمین و تغذیه‏ی موتورها به خاطر رسیدن به گشتاور ژیروسکوپی بالاتر به کار برده می‏شود.

3-ذخیره‏سازی Maze

یکی از مفیدترین ویژگی‏های Maze اندازه‏ی آن می‏باشد. برای یک Maze به اندازه‏ی کامل، باید 16 ردیف در 16 ردیف ستون داشته باشیم که به یک سلول 256 تایی برسیم. بنابراین برای ذخیره‏سازی مقادیر فاصله برای یک Maze کامل به 256 بایت فضا احتیاج داریم. یک بایت برای نمایش وجود یا عدم وجود یک دیواره در Maze می‏تواند به کار برده شود. 4 بیت اول برای ارائه‏ی دیواره‏ها به کار برده می‏شوند. بایت سلولی رایج به شکل زیر است:

هنگامی که ما از مقدار بایت دودویی برای هر یک از موقعیت‏های دیوار استفاده می‏کنیم، ما دارای شمال=1، شرق=2، جنوب=4 و غرب=8 هستیم. حال هر ترکیبی از دیواره‏ها در یک سلول به وسیله‏ی یک شماره در محدوده‏‏ی صفر تا 15 ارائه می‏گردد. به عنوان مثال اگر برخی از سلول‏ها دارای دیواره‏ای بر روی موقعیت غربی و شرقی باشند این سلول به وسیله‏ی مقدار 10 ارائه می‏گردد که به صورت دودویی 00001010 می‏باشد.

هر دیواره‏ی داخلی به وسیله‏ی 2 سلول تقسیم شده است؛ بنابراین ما مقدار دیواره را برای یک سلول به روز رسانی می‏کنیم. سپس باید مقدار دیواره را برای همسایگان و سلول‏های مجاور به روز رسانی کنیم.

4-الگوریتم Flood-fill

ایده‏ی الگوریتم flood-fill برای شروع رسیدن به یک هدف طراحی شده است (مرکز maze). از این الگوریتم برای پر کردن maze با استفاده از مقادیری که ارائه کننده‏ی فاصله از هر سلول تا هدف، استفاده می‏شود. در شکل شماره‏ی 4 نحوه‏یflood شدن maze دیده می‏شود. این maze به صورت کامل نقشه‏بندی شده است و ما می‏دانیم که تمامی دیواره‏ها در کجا قرار دارند. ما می‏توانیم به صورت واضح مشاهده کنیم که زمانی که بیش از یک راه از طریق maze وجود دارد چه اتفاقی می‏افتد.

برای یک maze با سایز کامل، ما احتمالا 16 ردیف در 16 ستون خواهیم داشت که این مقدار برابر با مقدار 256 سلول است. بنابراین، به 256 بایت فضا برای ذخیره‏سازی مقدار فاصله برای یک maze کامل داریم. از آنجا که میکروموس‏‏ها نمی‏توانند به صورت اریب حرکت کنند، مقدار برای یک maze، با ابعاد 5x5 بدون دیواره‏ها به شکل زیر خواهد بود.

هنگامی که این واحد آماده حرکت می‏شود، ربات باید تمامی تنظیمات سلول‏هایی که به وسیله‏ی دیواره‏ها جداسازی نشده‏اند و با پایین‏ترین مقدار فاصله انتخاب شده‏‏‏اند را، آزمایش کند، در مثال ما و در شکل شماره‏ی 5، ربات هر سلولی را به سمت غرب حرکت خواهد داد چراکه در آنجا دیواره وجود دارد و می‏تواند به مقادیر فاصله‏ی سلول‏ها تا شمال، دید داشته باشد، این کار به سمت شرق و غرب نیز صورت می‏گیرد و این کار از زمانی که آن‏ها دیواره‏بندی نشده‏اند صورت می‏گیرد. سلول شمالی دارای مقدار 2، سلول غربی دارای عدد 2 و سلول جنوبی دارای عدد 4 می‏باشد. این بدین معنی است که ربات می‏تواند به سمت شمال و غرب حرکت کند و برخی از سلول‏ها را در مسیر خودشان به سلول مقصد، انتقال دهد. از آنجا که چرخش زمان‏بر است، ربات در حرکت رو به جلو سلول شمالی را انتخاب می‏کند، هنگامی که یک دیواره‏ی جدید یافت می‏شود، مقدار فاصله‏ی سلول‏ها مورد تأثیر قرار می‏گیرد و باید آن‏ها را به روز رسانی کنیم. به مثال در شکل 6 توجه کنید.

در سومین مرحله ربات، دیواره را پیدا می‏کند، ما به سمت شرق و غرب نمی‏توانیم حرکت کنیم، ما تنها به سمت شمال و جنوب حرکت می‏کنیم، حرکت به سمت شمال و جنوب بدین معنی است که ما به سمت فواصلی می‏رویم که مایل نیستیم، پس احتیاج داریم تا مقادیر سلول‏ها را به روز رسانی کنیم، مقادیری که نمی‏خواهیم آن‏ها را داشته باشیم. برای این منظور باید maze را با یک مقدار جدید، flood کنیم. مورد مشابه به این حالت را می‏توانیم در هفتمین و هشتمین مرحله و در جایی که ربات یک دیواره‏ی جدید یافت می‏‏کند و مقادیر فواصل باید تغییر کنند، مشاهده کنیم.

 

5- نتیجه‏گیری

ما یک الگوریتم flood-fillمنظم تعبیر شده در ربات را در اختیار داریم. این الگوریتم در زمانی که maze شامل جزایر واحد است، بسیار کاربردی است. این الگوریتم یک مسیر و روش خوب در پیدا کردن مسیر از سلول آغازین تا سلول هدف است. اما سرعت آن بسیار کم است.