حسگر دیوار در روبی: «جلوی من مانع است؟»
حسگر دیوار اولین چشم ربات روبی است. با آن روبی قبل از قدم برداشتن میفهمد راه بسته است یا نه.
حسگر دیوار چه کار میکند؟
این حسگر یک جواب بله یا خیر میدهد. frontIsWall وقتی بله است که خانهی جلوی روبی بیرون از نقشه باشد یا یکی از مانعهای سفت را داشته باشد: دیوار، درخت، برف، جعبه یا سنگ. leftIsWall و rightIsWall همین پرسش را دربارهی خانهی سمت چپ و راست روبی، نسبت به جهت نگاهش، میپرسند.
آب مانع سفت حساب نمیشود؛ پس جلوی آب، frontIsWall جواب خیر میدهد. برای آب حسگر جداگانهی frontIsWater هست. اسمهای frontIsObstacle یا جلو_مانع دقیقا همان حسگر frontIsWall هستند. حسگر جداگانهای برای دیوار پشت سر وجود ندارد؛ برای آن از فاصلهسنج distanceBack استفاده میشود.
شکل بلوکی و شکل کد
در فهرست کشویی بلوکهای «❓ اگر» و «♾️ تا_وقتی» این حسگر با اسمهای جلو_مانع، راست_مانع و چپ_مانع آمده و جلو_مانع پیشفرض بلوک اگر است. در کد، بزرگی و کوچکی حروف و خط زیر مهم نیست؛ frontIsWall، front_is_wall و frontiswall یکیاند.
- ✅ جلو: frontIsWall، frontIsObstacle، wall_ahead، جلو_دیوار، جلو_مانع
- ✅ چپ: leftIsWall، leftIsObstacle، چپ_دیوار، چپ_مانع
- ✅ راست: rightIsWall، rightIsObstacle، راست_دیوار، راست_مانع
یک مثال کوچک با ربات روبی
الگوریتم سادهی دست روی دیوار برای هزارتو: while not onTarget: و داخلش if not rightIsWall: right و forward، elif not frontIsWall: forward، else: left. روبی همیشه دست راستش را روی دیوار نگه میدارد و در بسیاری از هزارتوها به هدف میرسد، بدون اینکه شما خانهها را بشمارید.
اشتباههای رایج
حسگرها نسبت به روبی جهت دارند، نه نسبت به صفحه. leftIsWall یعنی سمت چپ خود روبی.
- ✅ انتظار اینکه frontIsWall جلوی آب بله بگوید
- ✅ یکی گرفتن چپ روبی با چپ صفحه
- ✅ پرسیدن حسگر یک بار بیرون حلقه و انتظار بهروز شدن آن
در کدام درسها و لیگها استفاده میشود؟
frontIsWall حسگر اصلی درس ۱۶ «اولین تصمیم» است و در درس ۱۷ «اگر... وگرنه» دو مسیر میسازد. در درس ۲۱ «هزارتو» همراه leftIsWall و rightIsWall و حلقهی while الگوریتم حل خودکار هزارتو را شکل میدهد.
نکته برای والدین و معلم
با چشم بسته در یک راهرو راه بروید و فقط با دست دیوار را لمس کنید. کودک بهسرعت میفهمد حسگر یعنی «اطلاعات از محیط» و ربات بدون آن کور است.
سوالهای پرتکرار
frontIsWall با frontIsObstacle چه فرقی دارد؟
هیچ؛ هر دو یک حسگرند و جلو_دیوار و جلو_مانع هم اسم فارسی همان هستند.
آیا لبهی نقشه هم دیوار حساب میشود؟
بله، بیرون از نقشه برای این حسگر مثل دیوار است.
آیا آب دیوار حساب میشود؟
نه. برای آب از frontIsWater استفاده کنید.