مکانیابی و نقشهبرداری همزمان (SLAM) چیست؟
💡 این متن «بازنویسی آزاد» است: ایدهها و مفاهیم مطلب اصلی با نگارش کاملاً مستقل فارسی و مثالهای تازه بازگو شدهاند و ترجمهٔ کلمهبهکلمه نیست. بخشهای افزودهٔ مترجم در جعبهٔ منبع مشخص شدهاند. ترجمه و بازنویسی این متن با کمک هوش مصنوعی انجام شده است.
اپ یک فروشگاه مبلمان را باز میکنید و یک مبل مجازی وسط پذیرایی میگذارید. دور مبل راه میروید، از پشت نگاهش میکنید و مبل سر جایش میماند. انگار واقعاً آنجاست. بعد گوشی را به سمت دیوار سفید راهرو میچرخانید و برمیگردید. حالا مبل نیم متر جابهجا شده و آرام روی فرش سر میخورد.
هر دو لحظه کار یک فناوری است. لحظهٔ اول وقتی است که کارش را درست انجام میدهد. لحظهٔ دوم وقتی است که نمیتواند. اسم این فناوری SLAM است، و هر طراحی که با واقعیت افزوده کار میکند، دیر یا زود باید با هر دو لحظه کنار بیاید.
SLAM چیست؟
مکانیابی و نقشهبرداری همزمان (Simultaneous Localization and Mapping) روشی است که دستگاه با آن هم نقشهٔ محیط اطرافش را میسازد و هم جای خودش را روی همان نقشه پیدا میکند. دوربین و حسگرها ورودی را میدهند. نرمافزار از آنها نقشه و موقعیت را بیرون میکشد.
کلمهٔ مهم «همزمان» است، چون مسئله شبیه مرغ و تخممرغ است. برای اینکه بدانید کجای یک اتاق هستید، نقشهٔ اتاق را لازم دارید. برای کشیدن نقشهٔ اتاق، باید بدانید از کجا به آن نگاه میکنید. هیچکدام بدون دیگری به دست نمیآید. پس دستگاه هر دو را با هم حدس میزند و با هر فریم تازه، هر دو حدس را کمی اصلاح میکند.
این مسئله از واقعیت افزوده قدیمیتر است. پژوهشگران رباتیک از دههٔ ۱۹۸۰ با آن کلنجار میرفتند. رباتی که در یک ساختمان ناآشنا راه میافتد، دقیقاً همین مشکل را دارد. نام SLAM در میانهٔ دههٔ ۱۹۹۰ در همین جامعهٔ رباتیک جا افتاد. چیزی که بعدها تغییر کرد این بود که دوربین و پردازندهٔ کافی برای حل آن به جیب ما رسید.
دوربین چه میبیند
منبع سازوکار را در چند قدم توضیح میدهد و من آن را با زبان سادهتری بازگو میکنم.
پیدا کردن ویژگیها. دستگاه در هر تصویر دنبال نقطههایی میگردد که بتواند در تصویر بعدی دوباره پیدایشان کند. گوشهٔ یک قاب، لبهٔ یک کتاب، نقش یک فرش. این نقطهها را «ویژگی» مینامند. نمودار بالای صفحه همین نقطهها را در چهار محیط مختلف نشان میدهد.
تخمین عمق. وقتی گوشی کمی جابهجا میشود، همان ویژگی از زاویهٔ تازهای دیده میشود. از اختلاف این دو زاویه میشود فاصله را حساب کرد. این همان کاری است که دو چشم ما میکنند. دستگاههایی که حسگر لیزری عمق دارند، فاصله را مستقیمتر اندازه میگیرند و کارشان دقیقتر است.
بهروزرسانی حدس. با هر حرکت، دستگاه حدس میزند کجا رفته و آن را با ویژگیهایی که میبیند مقایسه میکند. روشهای آماری مثل فیلتر کالمن این حدسها را با هم ترکیب میکنند. روشی به نام RANSAC هم نقطههایی را که با بقیه نمیخوانند، کنار میگذارد.
یک قدم دیگر هم هست که منبع به آن نپرداخته و برای فهمیدن رفتار اپ مهم است: بستن حلقه. خطای کوچک هر قدم روی هم جمع میشود. اگر دور اتاق بچرخید، وقتی به نقطهٔ شروع برمیگردید، نقشه کمی کج شده است. سیستم خوب لحظهای که جای آشنایی را دوباره میبیند، میفهمد که «اینجا را قبلاً دیدهام» و کل نقشه را با آن اصلاح میکند. مبلی که بعد از برگشتن شما کمی جا میپرد، معمولاً همین اصلاح را نشان میدهد.
کجا میشکند
منبع صریح میگوید که SLAM بینقص نیست. چهار قاب نمودار بالا چهار حالت رایج شکستن را نشان میدهند.
دیوار سفید. سطح بینقش چیزی برای گرفتن ندارد. دوربین نمیتواند تشخیص دهد جابهجا شده یا نه، چون همهجای تصویر شبیه هم است. سقف صاف، میز سفید و کف یکدست هم همین مشکل را دارند. نور کم هم اثر مشابهی دارد، چون جزئیات در تاریکی گم میشوند.
آینه و شیشه. سطح بازتابنده ویژگیهایی نشان میدهد که آنجا نیستند. ردیاب تصویر داخل آینه را بخشی از اتاق فرض میکند و نقشهای میسازد که در آن اتاق دو برابر بزرگتر است.
محیط پرتحرک. SLAM فرض میکند دنیا ثابت است و فقط دوربین حرکت میکند. در یک راهروی شلوغ، بخشی از ویژگیها همراه آدمها راه میروند و ردیاب گیج میشود. منبع از الگوریتمهایی نام میبرد که برای محیطهای پویا ساخته شدهاند، ولی مشکل هنوز کاملاً حل نشده است.
نقش تکراری. کاشیهای یکشکل، قفسههای مشابه یا نرده. ویژگیها زیادند، ولی همه شبیه هماند. ردیاب نمیداند کدام کاشی همان کاشی قبلی است.
برای طراح، نتیجهٔ این بخش ساده است. محیط کاربر را شما انتخاب نمیکنید. اپ شما در اتاق کمنور، کنار پنجره و روی کف یکدست هم اجرا میشود. پس شکست را باید طراحی کرد، نه فقط امیدوار بود که پیش نیاید.
طراحی برای ردیابی ناپایدار
منبع چند اصل طراحی پیشنهاد میدهد: بازخورد روشن وقتی ردیابی از دست میرود، راه ساده برای بازیابی، و آگاهی از محدودیتهای محیط. من این اصلها را در قالب چهار حالت مرتب کردهام. پلتفرمهای واقعیت افزوده هم وضعیت ردیابی را کمابیش به همین شکل به اپ گزارش میدهند.
آغاز. ردیاب هنوز نقشهای ندارد و به چند ثانیه حرکت نیاز دارد. بیشتر کاربران این را نمیدانند و گوشی را ثابت نگه میدارند. یک پویانمایی کوتاه از دستی که گوشی را آرام میچرخاند، از هر متن توضیحی مؤثرتر است. اصول کلی طراحی این تجربهها را در واقعیت افزوده مرور کردهایم.
ردیابی محدود. ردیاب کار میکند، ولی مطمئن نیست. این حالت مهمترین و نادیدهگرفتهترین حالت است. اگر رابط هیچ فرقی نشان ندهد، کاربر شیئی را میگذارد که چند ثانیه بعد لیز میخورد. بهتر است اشیای مجازی کمی کمرنگ شوند، دکمهٔ «گذاشتن» غیرفعال شود و دلیلش، مثلاً «نور کم است»، کوتاه گفته شود.
ردیابی کامل. اشیا روی سطح لنگر انداختهاند. اینجا رابط باید تا حد ممکن کنار برود. منبع یادآوری میکند که اشیای مجازی باید پشت اشیای واقعی پنهان شوند، روی سطح بنشینند و در محدودهٔ راحت دید قرار بگیرند. هر چیزی که این توهم را بشکند، غوطهوری را میشکند.
از دست رفت. دوربین پوشانده شده یا کاربر تند چرخیده است. بدترین واکنش این است که اشیا با ردیاب سرگردان شوند و در فضا پرواز کنند. بهتر است اشیا همانجا که بودند بمانند و پیام کوتاهی بگوید «به جایی که بودید برگردید». بستن حلقه همینجا به کمک میآید. وقتی دوربین جای آشنا را دوباره دید، همهچیز سر جایش برمیگردد.
یک قاعده هم برای همهٔ حالتها هست. اطلاعات حیاتی را هیچوقت فقط به دنیای سهبعدی وابسته نکنید. دکمهٔ خروج، قیمت کالا و پیام خطا باید روی صفحه ثابت بمانند، نه روی شیئی که ممکن است لیز بخورد.
فراتر از واقعیت افزوده
منبع یادآوری میکند که SLAM فقط مال گوشی نیست. جاروبرقی رباتی که نقشهٔ خانه را میکشد و اتاقها را جدا تمیز میکند، از آن استفاده میکند. پهپادی که در فضای بسته پرواز میکند، و خودرویی که بدون راننده میراند، هم همینطور. هدستهای واقعیت مجازی با آن مرز امن اتاق را میسازند تا کاربر به دیوار نخورد. در واقعیت ترکیبی هم پایهٔ کار است.
هرچه پیامد شکست جدیتر باشد، وظیفهٔ طراح سنگینتر است. منبع برای کاربردهای پرخطر، مثل جراحی با کمک واقعیت افزوده یا وسایل خودران، یک اصل روشن دارد. وقتی اطمینان سیستم پایین میآید، رابط باید کنترل را آشکارا به انسان برگرداند. پنهان کردن تردید ماشین در این موقعیتها خطای طراحی است، نه سادگی. این بحث را از زاویهٔ کلیتر در تعامل انسان و ربات باز کردهایم.
نقشهٔ خانهٔ شما مال کیست؟
این بخش افزودهٔ من است. منبع به آن نپرداخته، ولی به نظرم برای طراح مهمترین پرسش اخلاقی این فناوری است.
نقشهای که SLAM میسازد، یک اسکن سهبعدی از فضای خصوصی کاربر است. اندازهٔ اتاقها، جای مبلمان، تعداد اتاق خواب. گاهی حتی اشیایی که روی میز است. جاروبرقی رباتی که هر روز خانه را نقشه میکشد، بعد از چند هفته تصویر دقیقی از زندگی ساکنانش دارد. اگر این نقشه به سرور برود، به دادهٔ تبلیغاتی یا ابزاری برای نظارت تبدیل میشود.
بعضی ویژگیها واقعاً به ذخیره در سرور نیاز دارند. «لنگرهای ابری» مثلاً اجازه میدهند دو نفر یک شیء مجازی را در یک جا ببینند. ولی بیشتر وقتها نقشه میتواند روی خود دستگاه بماند و بعد از بستن اپ پاک شود. سه پرسش را پیش از طراحی هر ویژگی بپرسید. آیا این نقشه باید از دستگاه بیرون برود؟ کاربر میداند که میرود؟ میتواند پاکش کند؟
در بافت فارسی
چند نکته برای تیمهایی که اپ واقعیت افزوده برای کاربر فارسیزبان میسازند.
یک: فرش و کاشی تکراری را جدی بگیرید. فرش دستباف پر از جزئیات است و ردیاب معمولاً آن را دوست دارد. ولی نقشهای قرینه و تکرارشونده میتوانند ردیاب را گیج کنند، و کاشی یکدست آشپزخانه و حمام هم همینطور. در آزمون، اتاق واقعی کاربران ایرانی را امتحان کنید، نه فقط دفتر کار را. اگر ردیابی ضعیف شد، از کاربر بخواهید یک شیء دیگر یا لبهٔ فرش را هم در کادر بیاورد.
دو: برای گوشی بیپشتیبانی، راه دوم بسازید. بخش بزرگی از گوشیهای اندرویدی ارزان از پلتفرمهای واقعیت افزوده پشتیبانی نمیکنند. منبع هم به تفاوت عملکرد دستگاهها اشاره میکند. اگر تنها راه دیدن کالا واقعیت افزوده باشد، این کاربران کنار گذاشته میشوند. یک نمای سهبعدی ساده یا گذاشتن کالا روی عکس اتاق، راه دوم معقولی است.
سه: کمبود نور را پیش از شکست بگویید. خیلیها شب و زیر نور زرد و کم یک لامپ اپ را باز میکنند. اگر ردیاب ضعیف است، پیام «نور کافی نیست» باید پیش از لیز خوردن اشیا بیاید. پیامی که بعد از شکست بیاید، کاربر را فقط گیجتر میکند.
چهار: برچسب فارسی را در فضای سهبعدی آزمون کنید. بعضی موتورهای سهبعدی متن راستبهچپ را درست شکل نمیدهند. حروف فارسی جدا از هم یا وارونه نمایش داده میشوند. برچسب قیمت یا نام کالا را که در فضا مینشیند، روی چند دستگاه واقعی ببینید.
پنج: نقشهٔ خانه دادهٔ حساس است. همان نکتهٔ بخش قبل، با وزن بیشتر. اعتماد کاربر به اپها دربارهٔ دادهٔ شخصی شکننده است. اسکن اتاق را بی اجازهٔ صریح به سرور نفرستید، و روشن بگویید کجا و تا کی نگه داشته میشود.
جمعبندی
SLAM روشی است که دستگاه با آن همزمان نقشهٔ محیط را میسازد و جای خودش را روی آن پیدا میکند. این کار با پیدا کردن ویژگیها، حساب کردن عمق از زاویههای مختلف، و اصلاح مداوم حدسها انجام میشود. همین فناوری پشت واقعیت افزوده، جاروبرقی رباتی، پهپاد و هدست واقعیت مجازی است.
ولی SLAM روی دیوار سفید، در نور کم، جلوی آینه و در شلوغی میلغزد. کار طراح این است که این لغزش را پیشبینی کند. حالتهای ردیابی را به کاربر نشان دهد، اشیا را در حالت نامطمئن قفل کند و راه برگشت را باز نگه دارد. نقشهای هم که ساخته میشود، اسکنی از خانهٔ کاربر است و باید مثل دادهٔ حساس با آن رفتار شود.
اگر بخواهم یک پرسش بگذارم: وقتی اپ شما در یک اتاق کمنور ردیابی را از دست میدهد، کاربر دقیقاً چه میبیند؟
منبع
این نوشته «بازنویسی آزاد» است از موضوع What is Simultaneous Localization and Mapping (SLAM)? منتشرشده در وبسایت بنیاد طراحی تعامل (Interaction Design Foundation — IxDF؛ بدون نام نویسندهٔ مشخص). مفاهیم پایهٔ برگرفته از این منبع — تعریف SLAM، شناسایی سطح با دوربین و تخمین عمق با مثلثبندی، فیلتر کالمن و RANSAC، شکستن در نور کم و سطح بینقش و بازتابنده و محیط پویا، اصلهای بازخورد و بازیابی و آگاهی از محیط، پنهان شدن اشیای مجازی پشت اشیای واقعی و محدودهٔ راحت دید، کاربرد در خودرو و پهپاد و ربات و هدست واقعیت مجازی، برگرداندن کنترل به انسان در کاربردهای پرخطر، و تفاوت عملکرد دستگاهها — از این منبع گرفته شده، اما متن فارسی و توضیحها کاملاً مستقل نوشته شدهاند.
متن مقالهٔ اصلی تحت هیچ لایسنس بازی منتشر نشده است؛ به همین دلیل اینجا ترجمهٔ کلمهبهکلمه ارائه نشده و متن کامل انگلیسی (بههمراه همهٔ تصاویر) در لینک زیر در دسترس است.
بخشهای افزودهٔ مترجم: بند آغازین دربارهٔ مبل مجازی که لیز میخورد؛ تشبیه مرغ و تخممرغ و پیشینهٔ مسئله در رباتیک دهههای ۱۹۸۰ و ۱۹۹۰؛ نمودار ویژگیها در چهار محیط؛ توضیح بستن حلقه؛ نقش تکراری بهعنوان حالت چهارم شکست؛ نمودار و کل چارچوب چهار حالت ردیابی و رفتار رابط در هر حالت؛ قاعدهٔ ثابت ماندن اطلاعات حیاتی روی صفحه؛ جاروبرقی رباتی و مرز امن هدست؛ کل بخش «نقشهٔ خانهٔ شما مال کیست؟» شامل لنگرهای ابری و سه پرسش؛ و کل بخش «در بافت فارسی» شامل فرش و کاشی، گوشیهای بیپشتیبانی، نور کم، متن راستبهچپ در موتور سهبعدی و حساسیت نقشهٔ خانه.
تصاویر: یک تصویر از صفحهٔ منبع با لایسنس CC BY-SA 4.0 (© Interaction Design Foundation) اینجا آمده است. نمودارهای دیگر این صفحه طراحی اختصاصی مترجم است.
مشاهدهٔ مقالهٔ اصلی
مکانیابی و نقشهبرداری همزمان