Robotikte SLAM Nedir? Eşzamanlı Konumlandırma ve Haritalama Çalışma Prensipleri
Otonom robotların GPS sinyali olmayan, tamamen yabancı mekanlarda kaybolmadan hareket etmesini sağlayan "SLAM" (Simultaneous Localization and Mapping) teknolojisinin arkasındaki donanım, yazılım ve matematiksel temelleri inceliyoruz.
Gündelik hayatımızda kullandığımız akıllı akıllı süpürgelerden Amazon depolarındaki lojistik robotlarına, otonom araçlardan uzay keşif araçlarına (Rover) kadar modern robotik sistemlerin en kritik yeteneklerinden biri otonom haritalama ve navigasyondur. Peki bir robot, hiç bilmediği bir odaya bırakıldığında nerede olduğunu nasıl anlar ve aynı anda çevresinin haritasını nasıl çizer?
İşte bu temel mühendislik problemi, robotik literatüründe SLAM (Simultaneous Localization and Mapping - Eşzamanlı Konumlandırma ve Haritalama) olarak adlandırılır.
1 Tavuk-Yumurta İkilemi: Konumlandırma mı, Haritalama mı?
SLAM algoritmalarını anlamak için öncelikle çözdüğü klasik mantık ikilemini kavramak gerekir:
- Konumlandırma (Localization): Robotun mevcut harita üzerindeki X, Y (ve 3D için Z) koordinatlarını hesaplayabilmesi için önceden çizilmiş güvenilir bir haritaya ihtiyacı vardır.
- Haritalama (Mapping): Robotun çevresindeki engellerin doğru bir haritasını çizebilmesi için her an kendinin tam olarak nerede olduğunu bilmesi gerekir.
Eğer elinizde bir harita yoksa nerede olduğunuzu bilemezsiniz; nerede olduğunuzu bilmiyorsanız doğru bir harita çizemezsiniz. SLAM algoritmaları, Olasılıksal Durum Kestirimi (Probabilistic State Estimation) tekniklerini kullanarak bu iki bilinmeyen denklemi aynı anda çözer.
2 Donanım Mimarisi: SLAM Türleri ve Sensörler
SLAM uygulamalarında kullanılan birincil algılayıcı sensör tipine göre teknoloji iki ana kategoriye ayrılır:
A. LiDAR tabanlı SLAM (2D ve 3D)
Dönen lazer ışınları sayesinde saniyede yüz binlerce nokta mesafesi ölçen LiDAR (Light Detection and Ranging) sensörleri kullanılır. Yüksek hassasiyet ve milimetrik doğruluk sunar. Gmapping, Cartographer ve LOAM algoritmaları bu kategoriye örnektir.
B. Görsel SLAM (Visual SLAM / vSLAM)
Tekli (Monocular), çiftli (Stereo) veya derinlik kameraları (RGB-D) kullanır. Görüntü üzerindeki köşe, kenar ve doku özniteliklerini (SIFT, ORB vb.) takip ederek harita oluşturur. Maliyet açısından daha ekonomiktir ancak ışık değişimlerinden ve düz duvar gibi dokusuz yüzeylerden etkilenir. ORB-SLAM3 ve RTAB-Map en bilinen vSLAM kütüphaneleridir.
Odometri ve Sensör Füzyonu Şarttır!
Tekerlek enkoderlerinden gelen Wheel Odometry ve ivmeölçer/jiroskop sensörlerinden (IMU) gelen Inertial Odometry verileri tek başına zamanla kayma (drift) hatası yapar. SLAM, sensör füzyonu (Sensor Fusion) teknikleriyle bu birikimli hatayı sürekli düzeltir.
3 Algoritmanın Temel Çalışma Adımları
Tipik bir SLAM yazılım döngüsü şu adımlarla çalışır:
- Odomatrik Hareket Tahmini: Robot tekerlek hareketleri ve IMU verisi ile bir sonraki konumunu öngörür.
- Sensör Ölçümü: LiDAR veya kamera ile çevredeki engel/nirengi noktalarının mesafesi ölçülür.
- Veri Eşleme (Data Association): Yeni alınan tarama verisi, geçmişte çizilen haritadaki verilerle üst üste çakıştırılır.
- Durum Güncellemesi: Genişletilmiş Kalman Filtresi (EKF SLAM) veya Parçacık Filtresi (FastSLAM) kullanılarak en olasılıklı konum ve harita güncellenir.
- Döngü Kapatma (Loop Closure): Robot önceden ziyaret ettiği bir noktaya döndüğünde bunu tespit eder ve aradaki tüm birikimli mesafe hatalarını geriye dönük olarak düzeltir.
4 ROS 2 (Robot Operating System) ile Basit SLAM Konfigürasyonu
Günümüzde robotik geliştiriciler SLAM sistemlerini sıfırdan yazmak yerine ROS / ROS 2 ekosistemindeki hazır paketleri (örneğin slam_toolbox veya cartographer_ros) yapılandırır. Aşağıda tipik bir Python ve ROS 2 düğümünün SLAM harita veri aboneliği mantığı gösterilmiştir:
import rclpy
from rclpy.node import Node
from nav_msgs.msg import OccupancyGrid
class SlamMapSubscriber(Node):
def __init__(self):
super().__init__('slam_map_subscriber')
# Navigasyon haritası (OccupancyGrid) konusuna abone olunuyor
self.subscription = self.create_subscription(
OccupancyGrid,
'/map',
self.map_callback,
10
)
self.get_logger().info('SLAM Harita Dinleyici Düğümü Başlatıldı.')
def map_callback(self, msg):
width = msg.info.width
height = msg.info.height
resolution = msg.info.resolution
self.get_logger().info(f'Harita Güncellendi: {width}x{height} piksel | Çözünürlük: {resolution} m/px')
def main(args=None):
rclpy.init(args=args)
node = SlamMapSubscriber()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
Robotik Projelerinizi Bir Adım Öteye Taşıyın
Kendi otonom robotunuzu tasarlamak, Arduino ve Raspberry Pi uyumlu sensör uygulamalarını keşfetmek için kodlama rehberlerimize göz atın.
Kodlama Eğitimlerine GitSıkça Sorulan Sorular
SLAM kullanmak için GPS şart mıdır?
Hayır, SLAM teknolojisi özellikle GPS sinyallerinin ulaşamadığı kapalı alanlarda (iç mekanlar, tüneller, madenler, su altı) otonom navigasyon sağlamak amacıyla geliştirilmiştir.
LiDAR SLAM ile Visual SLAM arasındaki temel fark nedir?
LiDAR SLAM, lazer ışınları ile doğrudan milimetrik 2D/3D nokta bulutu mesafe verisi toplar. Visual SLAM (vSLAM) ise kameralardan alınan görüntüler üzerindeki piksel ve görsel nirengi noktalarını işleyerek harita oluşturur.
Tavuk mu yumurta mı ikilemi SLAM için ne anlama gelir?
Robotun doğru konumunu hesaplaması için doğru bir haritaya; doğru bir harita çizebilmesi için ise nerede olduğunu bilmesine ihtiyacı vardır. SLAM bu iki bilinmeyeni eşzamanlı çözen olasılıksal bir altyapıdır.

