B
blog
Misafir
Misafir
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.
-
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.‘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
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
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 .
Copy to Clipboard
cd ~/scratch_ws/src git clone -b foxy-devel
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
cd ~/scratch_ws rosdep install -y -r -q --from-paths src --ignore-src --rosdistro foxy colcon build --symlink-installBurada “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.
Copy to Clipboard
sudo apt install python-rosdep sudo apt install python3-rosdep
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.
Copy to Clipboard
cd ~/.ros/ touch fastdds.xml cat > fastdds.xml
Bizden girdi bekleyen terminale alttaki metni yapıştıralım.
Copy to Clipboard
Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. NVIDIA CORPORATION and its licensors retain all intellectual property and proprietary rights in and to this software, related documentation and any modifications thereto. Any use, reproduction, disclosure or distribution of this software and related documentation without an express license agreement from NVIDIA CORPORATION is strictly prohibited.
UdpTransport UDPv4
UdpTransport false
Daha sonra yaptığımız DDS ayarlarının sistem tarafından tanımlanması için ~/.bashrc ’ye dosya yolunu girmemiz gerekiyor.
Copy to Clipboard
nano ~/.bashrc
nano ile dosyayı açıp alttaki kodu dosyanın en alt satırına yapıştıralım.
Copy to Clipboard
export FASTRTPS_DEFAULT_PROFILES_FILE=~/.ros/fastdds.xml
Terminale aşağıdaki komutu yazdıktan sonra ROS2 kurulumu için yapacaklarımız tamamlanmış oluyor.
Copy to Clipboard
source ~/.bashrc
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.
Copy to Clipboard
~/scratch_ws/src/slam_toolbox/config/mapper_params_online_async.yaml
Dosyanın içinde yazılı olan base_frame parametresini değiştirmemiz gerekiyor.
Copy to Clipboard
base_frame: base_link
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.
Copy to Clipboard
cd ~/scratch_ws source /opt/ros/foxy/setup.bash source install/local_setup.bash
Ş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 :
Copy to Clipboard
ros2 launch slam_toolbox online_async_launch.py params_file:=~/scratch_ws/src/slam_toolbox/config/mapper_params_online_async.yaml use_sim_time:=true
Terminal 2:
Copy to Clipboard
rviz2
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ı belirleyebiliri 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 konularını işledik. Sonraki yazılarımızda görüşmek üzere.
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.