ROS2 Haritalama ve Otonom Navigasyon | Nav2 & SLAM Toolbox

ROS2 ile haritalama ve otonom navigasyon, bizlere en çok gelen sorulardan biridir. Özellikle RPLidar Kurulumu ve Kullanımı yazımızdan sonra sıkça lidar ile haritalama işleminin nasıl yapıldığını sordunuz. Biz de sizlerden gelen bu istek doğrultusunda bir blog yazısı hazırlamaya karar verdik. Bu yazımızda slam_toolbox kullanarak haritalama yapmayı ve Nav2 (Navigation Stack) ile de otonom navigasyon işleminin nasıl yapıldığını göreceğiz.

Şimdi isterseniz kısaca, haritalama ve otonom navigasyonun robotikteki amacından ve görevlerinden bahsedelim:

  • Haritalama: Bir sistemin otonom şekilde yani dış müdahale olmadan hareket edebilmesi için bulunduğu alanı tanıması amacıyla kullanılır. Bunun için sıkça kullanılan paketler şu şekildedir: Cartographer, SLAM Toolbox
  • Navigasyon: Sistemin haritaladığı alana göre yol planı oluşturmasını ve otonom şekilde hareket etmesini sağlar. Bu alanda en yaygın kullanılan araçlardan birisi Nav2 paketidir.

Ben bu yazıda sizlere slam_toolbox paketi ile nasıl haritalama yapabileceğinizi ve ardından haritalanan bu alanda nasıl otonom navigasyon gerçekleştirebilceğinizi anlatacağım. Son olarak tüm bu işlemler size karmaşık gelmeye başladıysa, uygulamamızı yukarıdaki videoyu da takip ederek yapabilirsiniz.

1. Kurulumlar

Bu aşamada ihtiyacımız olan paketlerin kurulumunu yapacağız. İlk olarak sistemimizi güncelleyelim ve ardından turtlebot3 paketinin kurulumunu yapalım. Bu paket bizlere gerekli tüm sensörlerle donatılmış bir robot sağlayacak.

sudo apt update
sudo apt upgrade 
sudo apt install ros-humble-turtlebot3*

Ardından haritalama ve navigasyonda kullanacağımız paketlerin kurulumunu gerçekleştirelim:

sudo apt install ros-humble-navigation2 
sudo apt install ros-humble-nav2-bringup 
sudo apt install ros-humble-slam-toolbox

ros-humble-slam-toolbox paketini haritalama yapmak için kullanacağız. ros-humble-navigation2 ve ros-humble-nav2-bringup paketlerini ise otonom navigasyon yapmak için gerekli launch dosyalarına erişmek için kullancağız.

Şimdi benzetim (simülasyon) adımına geçebiliriz !

2. Robotu Benzetim Ortamında Gezdirme

Tutlebot3 paketinde farklı robot modelleri bulunmaktadır. Bizler waffle modelini kullanacağımızı .bashrc içinde belirtmeliyiz. Ayrıca DDS ayarımızı da yapmalıyız. Öncelikle bu işlemleri birlikte gerçekleştirelim:

gedit ~/.bashrc

export TURTLEBOT3_MODEL=waffle
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

Ardından .bashrc dosyamızı kaynaklayarak son ayarları bildirelim:

source ~/.bashrc
printenv | grep TURTLE

Şimdi bir simülasyonu başlatarak robotumuzu görelim:

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 run turtlebot3_teleop teleop_keyboard

Bu adımda öncelikle robotumuzu Gazebo ortamında başlatıyor ve ardından da tuştakımı üzerinden hareket ettirecek paketi çalıştırıyoruz. Bu kontrollere alışmak için en başta bir miktar deneme yapmanız gerekebilir.

3. SLAM ile Haritalama

Önceki başlıktaki adımları hatasız bir şekilde tamamladıysanız haritalama adımına geçebiliriz. slam_toolbox ile haritalama yaparken önümüzde iki seçenek var: Senkron Haritalama, Asenkron Haritalama

Bizler Asenkron haritalama yöntemini tercih edeceğiz. Bu işe yeni başlayanlar için daha uygun olduğunu söylebilirim. Bu konunun detaylarına belki daha sonra değinebiliriz. Eğer Gazebo‘yu kapattıysanız aşağıdaki komutla tekrar açın ve tuştakımı bağlantısını da başlatın:

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
ros2 run turtlebot3_teleop teleop_keyboard

Ardından aşağıdaki haritalama ve görselleştirme paketini başlatın:

ros2 launch slam_toolbox online_async_launch.py use_sim_time:=True
ros2 run rviz2 rviz2 -d /opt/ros/humble/share/nav2_bringup/rviz/nav2_default_view.rviz 
# ros2 run rviz2 rviz2

İlk komut slam_toolbox paketini başlatacak. İkincisi ise haritalana bölgeleri gerçek zamanlı olarak izlememizi sağlayacak. Tüm alan haritalandıktan sonra Rviz’deki SlamToolboxPlugin panelini kullanarak videoda gösterildiği gibi haritanıı kaydedebilirsiniz

Not: Eğer bu adımlarda sorun yaşadıysanız lütfen videoyu bir kez izleyin !

4. Otonom Navigasyon

Bu adımda otonom navigasyon gerçekleştireceğiz. Bunun için daha önce kaydettiğimiz haritayı robotumuzun sistemine göndermemiz gerekiyor. Amacımız haritaladığımız alan bilgisini kullarak otonom navigasyon gerçekleştirmek olacak. O zaman haydi başlayalım. 🔥

Navigasyon işlemi için Navigation Stack paketini kullanacağız. Bu yöntem endüstride oldukça yaygın olarak kullanılmaktadır. Navigation Stack özelleştirilebilir bir mimariye sahiptir. Dolayısıyla oldukça esnektir ve farklı sistemler içinde çalışabilmektedir. Bu konuda destek almak isterseniz, sitemizde iletişim formu veya e-posta adresimiz üzerinden bana ulaşabilirsiniz.

Navigasyon paketini başlatmadan önce Turtlebot3 için bir ayar yapacağız. Sistem dosyalarından waffle.yaml dosyasına ulaşıp bir düzenleme gerçekleştireceğiz. Bu ayar Nav2 paketinin kullanımı için oldukça kritik bir önem taşıyor. Eğer bu ayarı yapmazsanız Nav2 çalışmaz.

cd /opt/ros/humble/share/turtlebot3_navigation2/param
sudo gedit waffle.yaml

Şimdi bu dosyanın içinde 29. satırdaki “robot_model” parametresini yorum satırı yapıp hemen altına yeni satırımızı ekleyeceğiz. Dosyada parametrenin son hali şu şekilde olmalı:

#robot_model_type: "differential"
robot_model_type: "nav2_amcl::DifferentialMotionModel"

Son olarak, yukarıdaki ayarı yaptıktan sonra dosyayı kaydedip kapatalım ve ana dizine geri dönelim. Burada Gazebo’yu tekrar açın ve ardından aşağıdaki komutu çalıştırın:

ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map/test.yaml

İstersek Rviz üzerinde bir hedef gönderebilir, istersek de çoklu hedefler gönderebiliriz. Bununla ilgili konuları videomuzda ayrıntılı bir şekilde anlattım, oradan da takip edebilirsiniz.

5. Endüstriyel Uygulamalar

Bu blog yazısında, SLAM Toolbox paketini kullanarak haritalama yaptık. Daha sonra Navigation Stack ile otonom navigasyonun nasıl yapıalcağını gördük. Bu bilgiler ışığında sizlerin geliştireceği projeleri görmeyi dört gözle bekliyorum !

Son olarak, burada paylaşılan komutlar ve yöntemler temel çalışmaları ifade etmektedir. Endüstriyel çalışmalara uygun sistemler geliştirmek ve sorunlarınıza hızlı bir şekilde çözüm üretmek için iletişim formu veya e-posta (analizgorsel@gmail.com) adresimiz üzerinden benimle iletişime geçebilirsiniz.

Oğuzhan Gürbüz

Oğuzhan Gürbüz

Merhabalar,
Görsel Analiz'in kurucusuyum.
İnsansız kara araçları üzerine çalışıyorum. Görüntü işleme, derin öğrenme ve ROS gibi alanlarda danışmanlıklar ve eğitimler veriyorum. Şirketlere ve araştırmacılara bu tip sistemleri geliştirmelerinde yardımcı oluyorum.

2 Comments

  1. Hocam merhabalar , elinizde lidar varsa direkt olarak lidari bilgisayara bağlayıp gerçek bir lidar üzerinden haritalama yapmak ile ilgili bir blog hazırlayabilir misiniz.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ücretsiz Bilgisayarlı Görü eğitimlerini kaçırmamak için hemen abone ol !