Skip to content

MOGI-ROS/Kog_Rob_HF

 
 

Repository files navigation

Kognitív Robotika Házi feladat

#6 Emberek vagy tárgyak trackelése - Felszolgáló robot tájékozódása ArUco markerek trackelésével

Projektfeladatunk során egy kávézóban működő felszolgáló robotot szimuláltunk le, amely a plafonra helyezett ArUco markerek kamerás trackelésével határozza meg a saját helyzetét. A robot a kezdő pozícióbpól (pulttól) indulva egy előre meghatározott útvonalon képes bármelyik asztalhoz kivinni a rendelést, a felhasználó utasítása szerint. A működés bemutatására készült egy rövid videó is. https://www.youtube.com/watch?v=NYHsfWoEsYA

Tartalom

  1. Környezet megalkotása
  2. Robot modellezése
  3. Markerek
  4. Trackelés működése
    1. Kamera kép feldolgozása
    2. Robot pozíció kiszámolása
  5. Robot irányítása
  6. Felhasználói felület
  7. Telepítési útmutató
  8. Használt ROS csomagok és Python könyvtárak

Környezet megalkotása

A szimuláció környezetét Gazebo fizikai szimulációs környezet használatával építettük fel. A felszolgáló robot egy szimulált kávézóban viszi ki a vendégekhez a rendelésüket. Az "L" alakú 12x10m alapterületű helységben 8 db asztal is elhelyezésre került, amelyek között előre kijelölt útvonalakon képes közlekedni a robot.

Robot modellezése

A felszolgáló robot a ROS Turtlebot3 alapcsomagjával van szimulálva. Azonban mivel a felszolgáló robot fizikai méretei jelentősen nagyobbak kell legyenek mint a turtlebot burger vagy a waffle verziójánál, ezért egy saját fizikai modellt rendeltünk hozzá, ehhez egyszerűen módosítottuk a fájlt amely a turtlebot fizikai leírását tartalmazta. A felszolgáló robot két hajtott és egy támasztó keréken gurul, kb. 1m magas és a tetején került elhelyezésre egy szállító tálca és a plafonra rögzített markereket figyelő kamera is.

Markerek

A robot tájékozódása elsősorban nem a lidar adatai, vagy odometria alapján történik, hanem a virtuális kávézó plafonján elhelyezkedő markerek kamerás követésével. A markerek egy dinamikusan skálázható rács rácspontjaiban találhatóak, jelen esetben egy 11x9-es 1m-es osztású rácsot használunk, de a helység L alaperülete miatt nem 99 hanem csak 85 db marker látható.

A használt jelölők ún. ArUco ( "Augmented Reality" and "University of Cordoba") markerek, amelyeket kifejezetten tracking és kiterjesztett valóság alkalmazásokra fejlesztettek ki. Egyetlen ArUco marker is elegendő hogy a kamera képe alapján visszaszámolható legyen a robot térbeli poz<ciója (x,y,z és orientációja (A,B,C) is egyaránt. Ehhez szükséges a kamera torzításaink kompenzálása a képeken, a markerek pontos helyzetének ismerete a térben egy referencia ponthoz képest, illetve a kamera és robot koordinátarendszere közötti transzformáció is adott kell legyen. Célszerűazonban , hogy ne csupán egyetlen, hanem több markert is lásson egy idejűleg a kamera, így korrigálhatóak a hibák és nől a helymeghatározás pontosság. A robot legrosszabb esetben 2, maximálisan pedig 9 db markert lát és követ egyszerre.

Trackelés működése

A kamera képének feldolgozása az OpenCV könyvtár Aruco alkönyvtárának használatával történik. A feldolgozás és számolás egyaránt a saját készítésű "Marker_manager.py" scriptben van megírva, ahol definiáltuk a "Locate_robot" osztályt.

Kamera kép feldolgozása

A feldolgozási folyamat szempontjából az "image_callback" metódus az első lépés. A függvény kinyeri a megfelelő topicból a Gazebo kamera plugin által pusholt képet és szürkeárnyalatossá konvertálja. Az Aruco könyvtár függvényei ezután detektálják a képen a markerek sarokpontjait és azonosítóit. A kinyert információ alapján a másik aruco könyvtárba tartozó függvény a kódokoz rendelt koordinátarendszer és a kamera paramétereinek ismeretében minden markerre visszaadja a tengelyek menti koorindiátákat és az azok körüli szögelfordulást, amelyeket az "rvesc" és "tvecs" vektorok tartalmazzák.

Robot pozíció kiszámolása

A markerektől való távolságok és szöghelyzetek ismeretében kiszámolható a robot pozíciója a rögzített origójú térben, amelyet a "Calculate_robot_pos" függvény végez. Első lépésként azonban megfelelő formába kell alakítani a Rodrigez paraméterekként megkapott orientációt, ami tömör, általános de nehezen kezelhető struktúra. Ezért a "rodrigues_vec_to_rotation_mat" saját metódus segítségével könnyebben kezelhető forgatási mátrix formájába transzformáljuk. Ezt követően a kapott adatokból minden markerhez legenrálódik egy homogén transzformációs mátrix ami a robot koorinátarendszerében írja le az ArUco kód helyzetét. A markerek origóhoz képesti helyzete pedig ismert és ID alapján kikereshető egy .csv fájlból. A transzformációs mátrixok ismeretében így azok szorzataként előáll a global koordinátarendszer és a robot koordináta rendszer közötti transzformáció, annyiszor ahány markert látott a kamera. Természetesen a pontatlanságok miatt ezek nem azonosak, de átlagolásukkal elégséges, kb. 1 cm-es pontosságot adnak. Mivel a robot síkban moozog így az x,y körüli szögelfordulás és a z koordináta mindig azonosak, csak a többi változik. A kiszámolt x,y pozíciót és z körüli elfordulást végül egy topicba publish-eli az osztály metódusa. A script végén értelemszerűen példányosításra kerül az osztály a megfelelő argumentumokkal.

Robot irányítása

A felhasználó által kijelölt asztal alapján kerül meghatározásra a célpozíció koordinátája, a robot aktuális helyzete pedig mindig ismert a markerek trackelésének köszönhetően. A kezdő és célpont közötti útvonalat a "Service_manager.py" script generálja le. A pályqa az egyszerűség kedvéért egyenesekből és 90°-os fordulásokból épül fel. Ezután a robot a "Vel_manager.py" script irányításával mozog végig az útvonal szakaszain, amely az aktuális X,Y koordináták és Z körüli szögelfordulás alapján szabályozzák a hajtott kerekek sebesség vektorait attól függe, hogy egyenes mentén haladásra vagy forgásra van szükség. A kávé kiszállítása után visszatért a kiinduló pontra a robot, ahol vár az újabb feladatra.

Felhasználói felület

Egy egyszerű terminal alapú felhasználói felületet is készítettünk, amely segítségével lehetséges a cél asztal kiválasztása (bal szélső ablak). Illetve folyamatosan információt biztosít a robot aktuális állapotáról, minthogy szabad, vagy dolgozik (bal szélső ablak), az aktuális pozíciójáról (középső ablak) és sebességéről (jobb szélső ablak).

Telepítési útmutató

1.Hozz létre egy mappát a munkaterületednek (például legyen a neve "catkin_ws"):

 mkdir -p ~/catkin_ws/src

2.Lépj be a létrehozott munkaterület src könyvtárába:

cd ~/catkin_ws/src

3.Klónozd le a Git projektet:

git clone [https://github.com/felhasznalonev/projekt.git](https://github.com/ArminKaroly/Kog_Rob_HF/)

4.Add hozzá a használt ROS csomagokat forrásként az aktuális környezetedhez:

source ~/catkin_ws/devel/setup.bash

5.Lépj be a munkaterület főkönyvtárába és buildeld a csomagokat a catkin_make paranccsal:

cd ~/catkin_ws/
catkin_make

6.Telepítsd az Aruco_description packaget a ~/catkin_ws/src mappába a github repo readme fájljának utasításai szerint. https://github.com/ValerioMa/aruco_description

7.Egy külön terminálban indítsd el a roscore-t.

8.Lépj be a workspace .../src/Kog_Rob_HF/scripts könyvtárába és futtasd a Marker_make.sh scriptet a következő paranccsal:

bash Marker_make.sh

Ez legenrálja a tájékozódáshoz szükséges markereket. Mivel 85 darab van a folyamat eltarthat néhány percig.

9.Telepítsd az xterm terminál kezelő ubuntu applikációt:

sudo apt install xterm

10.Indítsd el a szimulációt

roslaunch koghf gazebo_sim.launch

Ezzel a paranccsal minden a szimuláció futtatásához, a robot kezeléséhez szükséges program és node elindul, és a UI és információs terminálok is megnyílnak.

Használt ROS csomagok és Python könyvtárak

A projekt ros noetic verziójával készült. http://wiki.ros.org/noetic

About

Kognitív Robotika Házi feladat

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • CMake 57.4%
  • Python 42.6%