بازگشت به دسته SLAM و موقعیت‌یابی

الگوریتم SLAM چگونه کار می‌کند؟ بررسی مراحل مکان‌یابی و نقشه‌برداری همزمان

7 دقیقه مطالعه5 برچسب
دکتر حمیدرضا حسین‌پور

مدیرعامل و مؤسس

مدیرعامل و مؤسس سپهر پایش مکان نگار

الگوریتم SLAM چگونه کار می‌کند؟ بررسی مراحل مکان‌یابی و نقشه‌برداری همزمان

الگوریتم SLAM چگونه کار می‌کند؟ آشنایی با مراحل عملکرد سیستم‌های SLAM

در مقاله قبلی با مفهوم SLAM (Simultaneous Localization and Mapping) آشنا شدیم و دیدیم که این فناوری چگونه به ربات‌ها و سیستم‌های خودران اجازه می‌دهد بدون داشتن نقشه اولیه، محیط را شناسایی کرده و هم‌زمان موقعیت خود را تخمین بزنند.

اما یک سؤال اساسی مطرح می‌شود:

یک سیستم SLAM دقیقاً چگونه این کار را انجام می‌دهد؟

آیا ربات فقط تصاویر دوربین را مشاهده می‌کند؟ آیا LiDAR به تنهایی کافی است؟ چگونه سیستم متوجه می‌شود که دوباره به یک مکان قبلی بازگشته است؟ و مهم‌تر از همه، چگونه خطاهای ایجاد شده در طول مسیر اصلاح می‌شوند؟

در این مقاله، به زبان ساده اما با نگاهی مهندسی، فرآیند کامل اجرای یک الگوریتم SLAM را بررسی می‌کنیم.


هدف اصلی الگوریتم SLAM

هر سیستم SLAM تنها دو هدف اصلی دارد:

  1. تخمین موقعیت فعلی ربات (Localization)
  2. ساخت یا به‌روزرسانی نقشه محیط (Mapping)

مشکل اینجاست که این دو فرآیند به یکدیگر وابسته هستند.

اگر مکان ربات اشتباه تخمین زده شود، نقشه نیز اشتباه خواهد بود. از طرف دیگر، اگر نقشه دقیق نباشد، مکان‌یابی نیز دچار خطا می‌شود.

به همین دلیل، الگوریتم‌های SLAM این دو مسئله را به‌صورت هم‌زمان حل می‌کنند.


معماری کلی یک سیستم SLAM

اگر بخواهیم فرآیند SLAM را به صورت ساده نمایش دهیم، می‌توان آن را به شکل زیر در نظر گرفت:

فلوچارت مراحل اجرای یک الگوریتم SLAM از دریافت داده‌های سنسورها تا تولید نقشه نهایی و مسیر دقیق. این چرخه شامل مراحل جمع‌آوری داده، پیش‌پردازش، استخراج ویژگی، تخمین حرکت، مکان‌یابی، نقشه‌برداری، تشخیص Loop Closure و بهینه‌سازی است که به‌صورت پیوسته تکرار می‌شود.
فلوچارت مراحل اجرای یک الگوریتم SLAM از دریافت داده‌های سنسورها تا تولید نقشه نهایی و مسیر دقیق. این چرخه شامل مراحل جمع‌آوری داده، پیش‌پردازش، استخراج ویژگی، تخمین حرکت، مکان‌یابی، نقشه‌برداری، تشخیص Loop Closure و بهینه‌سازی است که به‌صورت پیوسته تکرار می‌شود.

این چرخه معمولاً ده‌ها یا حتی صدها بار در هر ثانیه تکرار می‌شود.


مرحله اول: دریافت داده از سنسورها

اولین مرحله در هر سیستم SLAM، جمع‌آوری اطلاعات از محیط است.

نوع سنسور مورد استفاده، نوع الگوریتم SLAM را نیز مشخص می‌کند.

رایج‌ترین سنسورها عبارت‌اند از:

  • دوربین تک‌چشمی (Monocular Camera)
  • دوربین استریو (Stereo Camera)
  • دوربین RGB-D
  • LiDAR
  • IMU
  • GNSS
  • Wheel Encoder
  • Radar

هر سنسور اطلاعات متفاوتی تولید می‌کند.

به عنوان مثال:

  • دوربین اطلاعات تصویری ارائه می‌دهد.
  • LiDAR فاصله تا اجسام را اندازه‌گیری می‌کند.
  • IMU شتاب و سرعت زاویه‌ای را ثبت می‌کند.
  • GNSS موقعیت جهانی را فراهم می‌کند.

در بسیاری از سامانه‌های مدرن، چندین سنسور به‌صورت هم‌زمان استفاده می‌شوند که به این فرآیند Sensor Fusion گفته می‌شود.


مرحله دوم: پیش‌پردازش داده‌ها

داده‌های خام سنسورها معمولاً قابل استفاده مستقیم نیستند.

در این مرحله عملیات زیر انجام می‌شود:

  • حذف نویز
  • همگام‌سازی زمانی سنسورها
  • اصلاح اعوجاج تصویر
  • حذف نقاط نامعتبر LiDAR
  • کالیبراسیون بین سنسورها

هرچه کیفیت این مرحله بهتر باشد، عملکرد کل سیستم SLAM نیز بهتر خواهد بود.


مرحله سوم: استخراج ویژگی (Feature Extraction)

ربات نمی‌تواند تمام میلیون‌ها پیکسل تصویر یا تمام نقاط ابرنقاط LiDAR را پردازش کند.

بنابراین باید ویژگی‌های مهم محیط استخراج شوند.

نمونه‌هایی از ویژگی‌ها عبارت‌اند از:

  • گوشه‌ها
  • لبه‌ها
  • خطوط
  • صفحات
  • نقاط شاخص

در Visual SLAM معمولاً الگوریتم‌هایی مانند ORB، SIFT یا FAST برای استخراج ویژگی استفاده می‌شوند.

در LiDAR SLAM نیز گوشه‌ها و سطوح تخت از ابرنقاط استخراج می‌شوند.

این ویژگی‌ها در فریم‌های بعدی مجدداً جستجو می‌شوند تا حرکت سیستم تخمین زده شود.


مرحله چهارم: تخمین حرکت (Motion Estimation)

پس از استخراج ویژگی‌ها، سیستم تلاش می‌کند حرکت خود را نسبت به فریم قبلی محاسبه کند.

به این فرآیند گاهی گفته می‌شود:

  • Odometry
  • Visual Odometry
  • LiDAR Odometry

هدف این مرحله، محاسبه تغییرات زیر است:

  • جابه‌جایی در راستای X
  • جابه‌جایی در راستای Y
  • جابه‌جایی در راستای Z
  • چرخش Roll
  • چرخش Pitch
  • چرخش Yaw

خروجی این مرحله معمولاً یک Pose جدید است.


مرحله پنجم: مکان‌یابی (Localization)

اکنون که حرکت نسبی مشخص شده است، سیستم باید موقعیت جدید خود را در نقشه تخمین بزند.

در این مرحله معمولاً از روش‌هایی مانند:

  • Kalman Filter
  • Extended Kalman Filter (EKF)
  • Particle Filter
  • Factor Graph

استفاده می‌شود.

هدف این الگوریتم‌ها کاهش اثر نویز سنسورها و تولید بهترین تخمین ممکن از موقعیت ربات است.


مرحله ششم: نقشه‌برداری (Mapping)

پس از مشخص شدن موقعیت، داده‌های جدید وارد نقشه می‌شوند.

نوع نقشه می‌تواند متفاوت باشد:

  • Point Cloud Map
  • Occupancy Grid Map
  • Feature Map
  • Landmark Map
  • Dense Map
  • Sparse Map

هر بار که ربات حرکت می‌کند، نقشه کامل‌تر و دقیق‌تر می‌شود.


مرحله هفتم: تشخیص Loop Closure

یکی از مهم‌ترین بخش‌های هر سیستم SLAM، تشخیص بازگشت به مکان‌های قبلی است.

مقایسه دو حالت حرکت ربات؛ در حالت اول (بالا)، خطای تجمعی (Drift) باعث انحراف مسیر از مسیر واقعی می‌شود. در حالت دوم (پایین)، تشخیص بازگشت به مکان قبلی (Loop Closure) مسیر را اصلاح کرده و نقشه را دقیق‌تر می‌کند. این مکانیزم یکی از مهم‌ترین مراحل در الگوریتم‌های SLAM است.
مقایسه دو حالت حرکت ربات؛ در حالت اول (بالا)، خطای تجمعی (Drift) باعث انحراف مسیر از مسیر واقعی می‌شود. در حالت دوم (پایین)، تشخیص بازگشت به مکان قبلی (Loop Closure) مسیر را اصلاح کرده و نقشه را دقیق‌تر می‌کند. این مکانیزم یکی از مهم‌ترین مراحل در الگوریتم‌های SLAM است.

فرض کنید ربات پس از ده دقیقه حرکت دوباره به نقطه شروع برسد.

به دلیل خطاهای تجمعی، ممکن است سیستم تصور کند چند متر با محل اولیه فاصله دارد.

اگر سیستم بتواند تشخیص دهد که این مکان قبلاً مشاهده شده است، این اتفاق را Loop Closure می‌نامند.

تشخیص صحیح Loop Closure باعث می‌شود:

  • خطاهای تجمعی کاهش پیدا کنند.
  • مسیر اصلاح شود.
  • نقشه دقیق‌تر شود.
  • Drift حذف یا بسیار کم شود.

در بسیاری از الگوریتم‌های مدرن، Loop Closure مهم‌ترین عامل افزایش دقت محسوب می‌شود.


مرحله هشتم: بهینه‌سازی (Optimization)

بعد از شناسایی Loop Closure، سیستم باید کل مسیر را اصلاح کند.

در این مرحله از الگوریتم‌های بهینه‌سازی استفاده می‌شود.

رایج‌ترین روش‌ها عبارت‌اند از:

  • Pose Graph Optimization
  • Bundle Adjustment
  • Factor Graph Optimization
  • Nonlinear Least Squares

در این مرحله موقعیت تمام فریم‌ها به‌گونه‌ای اصلاح می‌شود که مجموع خطاهای سیستم حداقل شود.

به همین دلیل، مسیر نهایی معمولاً بسیار دقیق‌تر از مسیر اولیه خواهد بود.


چرا خطای Drift ایجاد می‌شود؟

حتی دقیق‌ترین سنسورها نیز دارای نویز هستند.

اگر ربات تنها بر اساس حرکت نسبی خود پیش برود، این خطاها به مرور زمان روی هم جمع می‌شوند.

به این پدیده Drift گفته می‌شود.

دلایل اصلی ایجاد Drift عبارت‌اند از:

  • نویز IMU
  • خطای LiDAR
  • تغییر نور در تصاویر
  • لغزش چرخ‌ها
  • خطای استخراج ویژگی
  • تطابق اشتباه نقاط

وجود Loop Closure و الگوریتم‌های بهینه‌سازی باعث کاهش قابل توجه این خطاها می‌شود.


نقش Sensor Fusion در عملکرد SLAM

در بسیاری از پروژه‌های صنعتی، استفاده از یک سنسور کافی نیست.

به همین دلیل، اطلاعات چندین سنسور با یکدیگر ترکیب می‌شوند.

نمونه‌هایی از ترکیب سنسورها عبارت‌اند از:

ترکیب سنسورهاکاربرد
Camera + IMUVisual Inertial SLAM
LiDAR + IMULIO-SAM، FAST-LIO
GNSS + IMUناوبری خودرو
Camera + LiDARخودروهای خودران
GNSS + LiDAR + IMUسیستم‌های نقشه‌برداری دقیق

ترکیب صحیح سنسورها باعث افزایش دقت، کاهش Drift و پایداری بیشتر سیستم می‌شود.

مقایسه دو حالت حرکت ربات؛ در حالت اول (بالا)، خطای تجمعی (Drift) باعث انحراف مسیر از مسیر واقعی می‌شود. در حالت دوم (پایین)، تشخیص بازگشت به مکان قبلی (Loop Closure) مسیر را اصلاح کرده و نقشه را دقیق‌تر می‌کند. این مکانیزم یکی از مهم‌ترین مراحل در الگوریتم‌های SLAM است.
مقایسه دو حالت حرکت ربات؛ در حالت اول (بالا)، خطای تجمعی (Drift) باعث انحراف مسیر از مسیر واقعی می‌شود. در حالت دوم (پایین)، تشخیص بازگشت به مکان قبلی (Loop Closure) مسیر را اصلاح کرده و نقشه را دقیق‌تر می‌کند. این مکانیزم یکی از مهم‌ترین مراحل در الگوریتم‌های SLAM است.

جمع‌بندی

اگرچه در ظاهر، SLAM تنها یک الگوریتم برای مکان‌یابی و نقشه‌برداری است، اما در واقع مجموعه‌ای از فرآیندهای پیچیده شامل دریافت داده، استخراج ویژگی، تخمین حرکت، مکان‌یابی، ساخت نقشه، تشخیص Loop Closure و بهینه‌سازی است که به‌صورت پیوسته و هم‌زمان اجرا می‌شوند.

درک این چرخه، پایه‌ای ضروری برای مطالعه الگوریتم‌های پیشرفته‌تر است. بسیاری از سامانه‌های مطرح مانند ORB-SLAM3، Cartographer، LOAM، LIO-SAM، FAST-LIO و OB_GINS نیز با وجود تفاوت در جزئیات، همین معماری کلی را دنبال می‌کنند و تنها در نحوه پیاده‌سازی هر مرحله با یکدیگر تفاوت دارند.


آنچه در مقاله بعدی خواهید خواند

اکنون که با مراحل اجرای یک سیستم SLAM آشنا شدید، زمان آن رسیده است که با انواع الگوریتم‌های SLAM آشنا شوید. در مقاله بعدی، الگوریتم‌هایی مانند EKF-SLAM، FastSLAM، Graph SLAM، Visual SLAM، LiDAR SLAM، Visual-Inertial SLAM و RGB-D SLAM را بررسی کرده و مزایا، محدودیت‌ها و کاربرد هر یک را مقایسه خواهیم کرد.

دیدگاه‌ها (0)

ثبت دیدگاه جدید

دیدگاه شما پس از تأیید در سایت نمایش داده خواهد شد.