 حس ششم ربات
اين بار به سراغ سنسور ها (حسگر ها) و دستورات حسي روبورو مي رويم و با الگوريتم و فلو چارت آشنا مي شويم. . . ديگر داريم حسابي راه مي افتيم ها! مگر نه؟ يک توضيح هم در مورد تيتر مطلب بدهم، درست است که روبوروي ما سه حس بيشتر ندارد اما چون ديدم اين هفتمين مطلب سري جديد آموزش روبوتيک تبيان است همين جوري الکي عنوان "حس ششم روبات" را براي اين هفته انتخاب کردم!! ... خيلي دارم به خودم فشار مي آورم که بامزه باشم ها. نه؟! اما قبل از آن هم يک عکس از روبوروي جاسوس که هفته پيش نحوه ساختن آن را توضيح داديم:(شکل 1 را ببينيد) حالا اين که چيزي نيست ... فيلم هايي را که مي گيرد نديده ايد ... هفته پيش برنامه اي نوشتيم که به شکل بامزه اي روبورو را درست در کنار ديوار حرکت ميداد و به ما امکان مي داد تا به اتاق ها سر کشي کنيم. راستي مي دانستيد که يکي از روش هاي حل ماز همين کار است؟ اينکه شما يکي از ديوار ها را بگيريد و تا آخر برويد، با اين کار به احتمال قوي شما موفق به حل ماز خواهيد شد( و البته به احتمال ضعيف هم موفق نخواهيد شد!). ديديم که چطور مي توانيم از دستور if sensor و end if استفاده کنيم. با اين دو دستور ما مي توانيم يک بلوک شرطي بسازيم. بلوک شرطي در حقيقت يک سري دستور است که در صورت برقرار بودن شرط اجرا مي شود و در صورت برقرار نبودن شرط اجرا نمي شود:(شکل 2) همانطور که در تصوير هم مي بينيد روبورو وقتي به يک دستور if مي رسد با توجه به نتيجه آن يا دستورات درون بلوک شرطي را اجرا مي کند يا به دستور end if پرش مي کند و برنامه را ادامه مي دهد. توجه کرديد که اين تصوير چه قدر به روشن شدن موضوع کمک کرد؟ اين شکلک ها و خط و خطوط "فلوچارت" ناميده مي شود. اصولا آدم بايد از دستاورد هاي ديگران استفاده مطلوب کند. چند ده سال پيش دانشمنداني که توي علوم کامپيوتر کار مي کردند براي فهماندن حرف هاي خودشان به داشمنداني که در زمينه هاي ديگر کار مي کردند با مشکل مواجه شدند و آمدند و روشي اختراع کردند تا بتوانند حرف دلشان را بيان کنند. اين روش شماتيک ( شماتيک= شکلک دار!) براي نشان دادن الگوريتم فلوچارت نام دارد. فلو چارت براي خودش قوانيني دارد؛ دستور هاي شرطي را بايد در يک لوزي نشان بدهيد، همانطور که ما نشان داده ايم، دستورات محاسباتي و عملياتي را در مستطيل و دستورات خروجي را در متواضي الاضلاع. حتما هم الگوريتم بايد داراي يک شروع و يک پايان باشد. براي نمونه الگوريتم هفته پيش را با فلو چارت رسم مي کنم تا ببينيد:(شکل 3)
به ايده اي که براي حل مسئله مي دهيم الگوريتم مي گويند و براي نشان دادن آن به بقيه از فلوچارت استفاده مي کنند. در حقيقت فلوچارت نقاشي الگوريتم است! راستي يادتان هست که الگوريتم چه بود؟ در سري اول مطالب ربوتيک تبيان همان اوايل مطرح شد... خوب ... ايرادي ندارد ... مي دانم يادتان نيست! ... يک بار ديگر مفيد و مختصر توضيح مي دهم: الگوريتم روش حل يک مسئله است با استفاده از گامهاي ساده. مثلا الگوريتمي که در بالا فلوچارتش را کشيديم در نظر بگيريد، گام اول اين است که موتور ها را روشن کنيم و جلو برويم، گام دوم بررسي سنسور تماسي سمت راست است، گام بعدي اجراي بلوک شرطي است يا پرش از روي آن و تکرار همين کارها براي سنسور تماسي سمت چپ. خصوصيت ديگر الگوريتم در برنامه نويسي، علاوه بر گام به گام بودنش، اين است که بايد تنها از دستورات محدودي که در دسترس هست استفاده کنيم. مي بينيد که ما در فلوچارت بالا، توي بلوک هاي شرطي اين کار را نکرده ايم. اما عيبي ندارد ترجمه آن را به زبان روبورو برايتان مي نويسم:
Motor R DOWN Motor L UP Wait for 500 MilliSecond
و
Motor R UP Motor L DOWN Wait for 500 MilliSecond
مي بينيد که تمام چيز هايي که ما در فلوچارتمان کشيده ايم قابل ترجمه به زبان روبورو است، اين نشان مي دهد که ما در خورد کردن کار ها به گام هاي متوالي خوب عمل کرده ايم و الگوريتم درستي نوشته ايم ( و البته نه الزاما الگوريتم صحيح!) بياييد يک الگوريتم براي دنبال کردن نور بنويسيم و فلو چارت آن را هم بکشيم:
الگوريتم: 1 – شروع 2 – اگر سنسور سمت راست نور روشن بود به سمت راست برو 3 – اگر سنسور سمت چپ روشن بود به سمت چپ برو 4 – اگر هر دو سنسور روشن بود به جلو برو 5 – اگر هيچ سنسور نوري روشن نبود بايست 6 – برو به 1
اين الگوريتم را ساده تر هم مي شود نوشت، دقت کنيد: 1 – شروع 2 – اگر سنسور سمت چپ روشن بود موتور سمت راست رو به جلو 3 – اگر سنسور سمت راست روشن بود موتور سمت چپ رو به جلو 4 – اگر هيچ سنسوري روشن نبود موتور ها خاموش 5 – برو به 1
نکته جالب اين دو الگوريتم مي دانيد در کجا است؟ اينکه دومي چون از خود دستورات موتور استفاده کرده يک خط کمتر از اولي دارد، چون متوجه شده است که برقراري هر دو شرط خود به خود باعث به جلو رفتن روبورو مي شود چون هر دو موتور روشن مي شود! اين هم يکي از خصوصيت هاي نوشتن الگوريتم با زبان نزديک به اصل!
آرمين سنقري (نويسنده مقالات رباتيک سايت تبيان: www.Tebyan.ir)
Asonghori@gmail.com
|