حسگر مانع و تصمیمگیری شرطی
با ساختار «اگر... وگرنه...» رفتار ربات را به محیط وابسته میکنی و آستانهٔ ایمن حسگر را حساب میکنی.
در پایان این درس میتوانید
- ساختار شرطی «اگر ... وگرنه ...» را در برنامهٔ ربات به کار ببری.
- آستانهٔ ایمن حسگر مانع را از روی سرعت و دورهٔ حلقه حساب کنی.
- تعداد حالتهای ورودی چند حسگر دودویی را بشماری.
- جدول تصمیم بسازی و تعداد جدولهای ممکن را حساب کنی.
تا اینجا برنامهٔ ربات یک فهرست ثابت بود: هر بار که اجرا میشد، دقیقاً همان کار را انجام میداد. اما ربات واقعی در دنیایی زندگی میکند که سرِ جایش نمیماند؛ گاهی دیوار جلوی راه است و گاهی نیست. برای همین به دستوری نیاز داریم که بگوید «اگر جلو مانع بود چنین کن، وگرنه چنان». به این ساختار «تصمیمگیری شرطی» میگویند و همان چیزی است که ربات را از یک اسباببازی کوکی جدا میکند.
حسگر مانع و آستانهٔ تصمیم
حسگر فاصله یک عدد پیوسته میدهد، اما تصمیم دودویی است: یا مانع هست یا نیست. برای تبدیل عدد به تصمیم، یک آستانه تعریف میکنیم: اگر فاصلهٔ خواندهشده کمتر از آستانه بود، مانع را نزدیک میشماریم. انتخاب آستانه دلبخواه نیست. بین دو نمونهبرداری پیاپیِ حسگر، ربات به اندازهٔ سرعت ضربدر دورهٔ حلقه جلو میرود و پس از تصمیم هم مسافتی برای ترمز لازم دارد. پس آستانه باید دستکم برابر مجموع این دو مسافت باشد.
از حالتها به جدول تصمیم
اگر ربات n حسگر دودویی داشته باشد، تعداد حالتهای ورودی برابر ۲ به توان n است؛ با ۲ حسگر چهار حالت و با ۳ حسگر هشت حالت. برای هر حالت باید یک کنش انتخاب کنی؛ فهرست این انتخابها را جدول تصمیم مینامیم. اگر a کنش ممکن داشته باشی، تعداد جدولهای متفاوتی که میتوان ساخت برابر a به توان (۲ به توان n) است — عددی که خیلی زود بزرگ میشود و نشان میدهد چرا طراحی رفتار ربات کار سادهای نیست.
مثال عددی حلشده
ربات با سرعت ۲۵ سانتیمتر بر ثانیه حرکت میکند و حلقهٔ کنترلش با بسامد ۲۰ هرتز اجرا میشود، پس دورهٔ حلقه ۱ ÷ ۲۰ = ۰٫۰۵ ثانیه است. بین دو خواندنِ پیاپی حسگر، ربات ۲۵ × ۰٫۰۵ = ۱٫۲۵ سانتیمتر جلو میرود. آزمایش نشان داده که مسافت ترمز این ربات در این سرعت ۴ سانتیمتر است. پس کمینهٔ آستانهٔ ایمن برابر ۱٫۲۵ + ۴ = ۵٫۲۵ سانتیمتر است. در عمل آستانه را روی ۸ سانتیمتر میگذاریم تا ۸ − ۵٫۲۵ = ۲٫۷۵ سانتیمتر حاشیهٔ اطمینان برای نوفهٔ حسگر و لغزش چرخ باقی بماند.
حالا رفتار را طراحی کنیم. ربات دو حسگر دارد: یکی رو به جلو و یکی رو به راست. پس ۲ به توان ۲ یعنی ۴ حالت ورودی دارد. اگر برای هر حالت یکی از سه کنشِ «جلو»، «چرخش به راست» و «چرخش به چپ» را انتخاب کنیم، تعداد جدولهای تصمیم ممکن برابر ۳ به توان ۴ یعنی ۸۱ جدول است. تنها تعداد کمی از این ۸۱ رفتار، ربات را از هزارتو بیرون میبرند؛ یکی از آنها قانون معروف «دست راست روی دیوار» است.
اگر آستانه را خیلی کوچک بگیری ربات به دیوار میخورد، و اگر خیلی بزرگ بگیری ربات از مانعهای خیالی میترسد و در راهروهای باریک قفل میشود. آستانهٔ خوب همیشه یک مصالحه است، نه یک عدد مقدس.
یک کاربرد واقعی
سامانهٔ ترمز اضطراری خودروها دقیقاً همین منطق را دارد: رادار فاصلهٔ خودروی جلویی را میخواند، پردازنده آستانهای را که به سرعت لحظهای وابسته است حساب میکند و اگر فاصله از آستانه کمتر شد، فرمان ترمز صادر میشود. چون سرعت بالاتر یعنی مسافت ترمز بیشتر، آستانه ثابت نیست و در هر دورهٔ حلقه از نو محاسبه میشود.
در شبیهساز چه میبینی
در میدان چهارم، برنامهٔ پیشفرض را اجرا کن و بعد یک دستور F اضافی به آن بچسبان. جایی که ربات به دیوار میرسد، حرکت انجام نمیشود؛ این همان کاری است که یک شرطِ «اگر مانع هست جلو نرو» بهصورت خودکار انجام میدهد.
رابطههای کلیدی
مأموریت شبیهسازی
برنامه را در هزارتوی چهارم اجرا کن و ببین ربات وقتی دیوار جلویش قرار میگیرد چه واکنشی نشان میدهد.
- برنامهٔ پیشفرض را اجرا کن و خانهای را که ربات در آن متوقف میشود یادداشت کن.
- به انتهای برنامه دو دستور F اضافه کن و ببین آیا ربات به دیوار میرسد یا نه.
- برنامه را به F,F,F,F,F,F,F تغییر بده و بشمار پیش از برخورد با دیوار چند گام موفق برداشته میشود.
- با تغییر جای دستورهای R و L برنامهای بنویس که ربات از کنار همان دیوار عبور کند.
آزمون این درس
۵ پرسش چهارگزینهای. پس از ثبت، پاسخ درست و توضیح هر پرسش را میبینید. میتوانید هر چند بار که خواستید تلاش کنید؛ بهترین نمره در کارنامه ثبت میشود.