The aim of the project is to combine hector SLAM and YOLO v3 in order to detect small objects. It is possible to create the map using hector SLAM with custom made autonomous robot and take photos of nearby objects or obstacles. Those pictures are stored with its possible coordinates to process them by one one using YOLO v3. The map is projected to Python environment to show objects within.
Further information about hector SLAM is in the link below:
http://wiki.ros.org/hector_slam
Further information about YOLO v3 is in the link below:
https://opencv-tutorial.readthedocs.io/en/latest/yolo/yolo.html
The codes and the packages that are used/created can be found in the link below:
The rooms where the codes are executed can be seen left side of the picture. The pictures in the middle refer to RViz maps. N1, N2, R coordinate systems were added manually which are not random, to show objects and robot. All robotic calculations were made using these coordinate systems. The map is created using ROS topic called "/map" that is basically an array with 0, -1 and +100 (free, unexplored, obstacle). The pictures in the right side are the results that show objects.
Robot consists of two chassis. On the top chassis there are LiDAR, Raspberry Pi 3B+, Pi Camera, and 4 batteries; on the lower chassis there are powerbank, 4 batteries, Arduino UNO, L298N (motor driver), two DC motors and one caster wheel. 8 batteries are connected as serial, powerbank is used to power Raspberry Pi, and Arduino, Pi Camera, LiDAR are connected to Raspberry Pi. All connection is in the picture below:
Projenin amacı bilgisayarlı görü ile eş zamanlı haritalama ve lokalizasyon tekniklerini birleştirerek küçük boyuttaki objelerin tanımlamasını yapmaktır. Özel yapım otonom gezgin robot SLAM tekniği kullanarak iç mekanın haritasını ekrana yansıtırken aynı zamanda kendisine yakın olan engellerin fotoğrafını çeker ve tanımlama yapmak için kaydeder. Tüm nesneleri gördüğünden emin olduktan sonra algoritma durdurulur ve o ana kadar çekilmiş olan fotoğraflarla, engellerin ya da nesnelerin muhtemel yerleriyle beraber kaydedilir. Bu fotoğraflar, Python 3.x'in OpenCV ile birlikte kurulduğu sanal ortam içerisinde değiştirilmiş YOLO v3 Python kodu ile işlemden geçirilir. Bu bir nevi nesneleri anlamsız bilgilerden arındırma işlemidir. Tanımlanmış nesneler ve konumları matplotlib kütüphanesi kullanılarak oluşturulan harita üzerinde belirir.
Haritalama tekniği olarak Hector SLAM kullanılmıştır. Hector SLAM tekniği ROS Kinetic ile birlikte kullanılmış ve Ubuntu 16.04 üzerine kurulmuştur. Daha fazla bilgi için link aşağıdadır.
http://wiki.ros.org/hector_slam
Bilgisayarlı görü için YOLO v3 tercih edilmiştir. Aşağıdaki linkten yararlanılmıştır.
https://opencv-tutorial.readthedocs.io/en/latest/yolo/yolo.html
Oluşturulmuş kodlar ve diğer tüm detaylar için lütfen aşağıdaki linke tıklayınız.
En soldaki fotoğraflar nesnelerin bulunduğu odaları göstermektedir. İkinci haritada N1, N2 ve R düzlemleri anlaşılabilirlik açışından manuel olarak eklenmiştir ve her biri koordinat sistemini temsil etmektedir. Hiçbir koordinat düzlemi rastgele değildir, hesaplamalar bu sistemlere göre yapılmıştır. RViz programı üzerinde çıkan bu harita, /map konusu üzerinden bir dizi (array) olarak dönmektedir. Bu özelliği kullanarak Python 3.x üzerinde üçüncü haritalar oluşturulmuştur. Gerçek odaların karşılığının haritalar üzerinde anlaşılabilmesi için göz alıcı renklerde şekiller kullanılarak ifade edilmiştir.
Robot iki iskeletten oluşmaktadır. Üst tarafında LiDAR sensörü, Raspberry Pi 3B+, kamera ve 4 tane pil; alt kısmında ise taşınabilir şarj cihazı, 4 tane pil, Arduino, motor sürücü ve motorlar bulunmaktadır. 8 tane 1.1V yeniden doldurabilir piller seri bir şekilde bağlanmıştır ve motor sürücüyü güçlendirmek için kullanılmıştır. Taşınabilir şarj cihazı ise sabit 2A, 5V çıkışlıdır ve Raspberry Pi'yı güçlendirmek için kullanılmıştır. Bağlantı şeması şu şekildedir: