SLAM (Simultaneous Localization and Mapping)
SLAM teknolojisi, günümüzde robotların ve otonom cihazların etkileyici performansını sergilemesine olanak tanıyan önemli bir bileşendir. Bu ileri teknoloji sayesinde, robotlar ve akıllı cihazlar hem kendi konumlarını belirleyebilir hem de etraflarındaki nesneleri sürekli olarak haritalandırabilir. Böylece, daha akıllı ve bağımsız hareket etme yeteneğine sahip olurlar.
SLAM teknolojisi, insansız hava araçlarından temizlik robotlarına, otonom araçlardan endüstriyel robotlara kadar pek çok alanda başarıyla uygulanmaktadır. Bu teknolojinin arkasındaki temel fikir, cihazların sürekli olarak kendi pozisyonlarını ve çevrelerindeki nesnelerin konumlarını hesaplamalarını sağlayarak, daha doğru ve verimli hareket etmelerine imkan tanımaktır.
SLAM’ın işleyişi, sensörler ve algoritmaların bir araya gelmesiyle gerçekleşir. Sensörler, cihazın çevresindeki nesneler hakkında sürekli olarak veri toplar. Bu veri, algoritmalar tarafından işlenerek gerçek zamanlı bir harita oluşturulur ve cihazın kendi konumu belirlenir. Bu süreç, cihaz hareket ettikçe sürekli olarak tekrarlanır ve güncellenir, böylece dinamik ve değişen ortamlarda bile doğru bir şekilde navigasyon sağlanır.
Otonom araçlar da SLAM teknolojisinin faydalarından yararlanır. SLAM, otonom araçların karmaşık trafik koşullarında ve çevresel değişikliklerde bile doğru bir şekilde konumlarını belirlemelerine ve en uygun yolu seçmelerine yardımcı olur. Böylece sürücüsüz araçlar, insanların hayatını kolaylaştıştıran güvenli ve etkili bir ulaşım alternatifi sunar.
Başlamak İçin Gerekenler
- ROS2’nin kurulumunun tamamlanmış ve kullanılabilir olmasıdır. Eğer kurulu değilse takip eden bölümün başında kurabilirsiniz.
- Nav2‘nin kurulu olması,
- ROS2 workspace(çalışma alanının) mantığının temel olarak kavranmış olunması,
- Isaac Sim’in kurulu olması ve genel kullanıma hakim olunması,
- Omnigraph düğümlerinin çalışma mantığına hakim olunması gerekmektedir.
Kullanılacak Workspace İçin Gereken Dosyalar
1. Eğer kurulu bir ROS2 workspace’iniz yoksa buradan kurabilirsiniz. Biz bu kısımda workspace’in adını “scratch_ws” yaptık.
2. Öncelikle Slam Toolbox için bir kurulum yapmamız gerekiyor. Bunun için alttaki kod ile github’tan robotun gereken kısımlarını alabilirsiniz. Bu kodu daha önce oluşturulmuş olan “~/scratch_ws/src” içinde çalıştırmanız gerekmektedir. Daha sonra yaptığımız değişiklikleri kullanmak için “colcon build” komutunu kullanıyoruz .
Burada “foxy-devel” yazdığımız yere kendi kullandığınız ROS2 sürümünü yazabilirsiniz. Isaac Sim’in dokümanında genel olarak “foxy-devel” kullanıldığı için “foxy-devel” yazdık.
Rosdep ROS2 paketlerindeki bağımlılıkları kontrol eder ve olmayanları yükler. Eğer rosdep sisteminizde yoksa aşağıdaki komutlar ile yükleyebilirsiniz.
3- DDS bağlantısını yapmak için ~/.ros/ konumunda fastdds.xml adında bir .xml dosyası açmamız gerekiyor. Dosyayı alttaki kod ile açtıktan sonra terminalden yazabiliriz.
Bizden girdi bekleyen terminale alttaki metni yapıştıralım.
Daha sonra yaptığımız DDS ayarlarının sistem tarafından tanımlanması için ~/.bashrc ’ye dosya yolunu girmemiz gerekiyor.
nano ile dosyayı açıp alttaki kodu dosyanın en alt satırına yapıştıralım.
Terminale aşağıdaki komutu yazdıktan sonra ROS2 kurulumu için yapacaklarımız tamamlanmış oluyor.
SLAM ile Harita Oluşturma
1. Şimdi Isaac Sim’i açıyoruz ve “omniverse://localhost/NVIDIA/Assets/Isaac/2022.2.1/Isaac/Samples/ROS2/Scenario/carter_warehouse_apriltags_worker.usd” USD’sini açıyoruz. Önümüze gelen pencerede “Open Original File” düğmesine tıklıyoruz.
Burada dikkat edilmesi gereken noktalardan birisi, bu bölümün dördüncü adımına kadar simülasyonun çalıştırılmaması gerektiğidir.
Görsel 1. Isaac Sim üzerinde örnek sahnenin açılması. Kırmızı ok ile gösterilen yere 1. adımdaki USD adresini girin.
Görsel 2. Isaac Sim üzerinde örnek sahnenin açılması.
USD açıldığı zaman Stage sekmesinden /World/Carter_ROS/ActionGraph Omnigraph’ına sağ tıklayıp Open Graph diyoruz.
Görsel 3. Isaac Sim üzerinde örnek sahnenin açılması.
2. Açılan Omnigraph’ta bizim ek olarak robotun pozisyonunu “base_link” adı altında odometry düğümü olarak yayın yapmamız gerekiyor. Bunun için dördüncü fotoğraftaki gibi bağlantıları yapıyoruz.
Buradaki adımları aşağıda belirtildiği şekilde yapabilirsiniz:
- Stage sekmesindeki “ros2_publish_odometry” elementinin ikizini oluşturmamız gerekiyor. Bunu yapmak için, Stage sekmesinden “/World/Carter_ROS/ActionGraph” elementinin altındaki “ros2_publish_odometry“e tıklayıp klavyeden “Ctrl+D”‘ye basarak ikizini oluşturuyoruz.
- Oluşan odometry düğümünün “Linear Velocity” ve “Angular Velocity” bağlantılarını bağlantıya sağ tıklayarak kopartıyoruz. Beşinci veya altıncı fotoğraftaki gibi bir görüntü oluşması gerekiyor.
Görsel 4. ros2_publish_odometry Düğümü
Görsel 5. ros2_publish_odometry Düğümü Üzerinde Yapılan İşlem
Bu odometry düğümüne tıklayıp Property sekmesinde chasisFrameId kısmından ismini base_link yapıyoruz. Daha sonra odomFrameId parametresini map ile değiştiriyoruz ve topicName’i base_link olarak değiştiriyoruz.
Görsel 6. ros2_publish_odometry Düğümü Üzerinde Yapılan İşlem
3. Simülasyonu başlat tuşundan başlatabiliriz.
4. Bilgisayarımızda aşağıda tanımlanan yola gidiyoruz ve yaml dosyasını açıyoruz.
Dosyanın içinde yazılı olan base_frame parametresini değiştirmemiz gerekiyor.
Görsel 7. Yaml Dosyası Üzerinde Yapılan İşlem
SLAM ROS2 düğümünü çalıştırma aşamasına geldik. Bu kısımda terminal üzerinden işlemlerimizi yapacağız. İlk olarak iki terminal açıp alttaki gibi workspace’imizi sourcekomutu ile ayarlamamız gerekiyor.
Şimdi bunları yaptığımız ilk terminalimizden alttaki gibi SLAM düğümünü çalıştırıp ikinci terminalden ise rviz2’yi çalıştırmamız gerekiyor.
Terminal 1 :
Terminal 2:
Rviz2 ekranından Add’e basıp By topic sekmesinden /map yazılı topic adını bulmamız gerekiyor.
Görsel 8. Rviz ile Harita Gösterimi
En son görüntümüzün onuncu görseldeki gibi olması gerekiyor.
Görsel 8. Rviz ile Harita Gösterimi
Onuncu fotoğrafta görüldüğü gibi SLAM algoritmamız belirli topicleri alıp çalışmaya başladı. Bu kısımdan sonrasında robotunuzu hareket ettirmeye başlayıp haritayı çıkartmaya başlayabilirsiniz.
SLAM ile Oluşan Haritayı Kaydetme
Haritanızı kaydetme panelini açmak için Panels sekmesinden Add New Panel’e tıklayıp SlamToolboxPlugin’e tıklamanız gerekiyor.
Görsel 9. Oluşturulan Haritanın Kaydedilmesi
Görsel 10. Oluşturulan Haritanın Kaydedilmesi
Çıkardığımız haritayı Save Map ve Serialize Map şeklinde kaydedeceğiz. Haritanın serileştirilmesi, haritanın daha kolay paylaşılması ve depolanması içindir. Bunun için bu alanların metin kısımlarına haritamız için belirlediğimiz adı yazıp Save Map ve Serialize Map tuşlarına basıyoruz.
Görsel 11. Oluşturulan Haritanın Kaydedilmesi
Bu kısımda kaydettiğiniz harita “~/scratch_ws“nin içine gelmiş olması gerekiyor.
Bu yazıda, robotlar ve akıllı cihazların kendi konumlarını belirleyebilmeleri için çok önemli bir husus olan eş zamanlı konumlandırma ve haritalandırma işlemini, Isaac Sim ortamında SLAM ile nasıl haritalandırma yapıldığı ve bu haritanın nasıl kaydedildiği işledik. Sonraki yazılarımızda görüşmek üzere.
OPENZEKA HABERLERİ
Hesaplarınızda paylaşmak ister misiniz?