ROS2/Gazebo projekt SLAM közbeni emberdetektáláshoz. A
gazebo_mapper_py csomag TurtleBot3 szimulációt indít, Cartographerrel térképez,
YOLOv8-cal detektál a kamera képén, majd az RViz-re teszi ki a
találatokat, ami így megjelenik a térképen.
- Résztvevők
- Új gépen inditás
- Gazebo világ
- Neurális háló
- Irányítás
- Perception node és működés
- Fontos topicok
- Megjegyzés
- Videó
Ladányi Péter, Kaszás Péter, Pafféri Péter,Szakács Levente, Hegedűs László
ROS2 Jazzy környezetben:
sudo apt update
sudo apt install -y \
python3-colcon-common-extensions \
python3-rosdep \
python3-pip \
ros-jazzy-turtlebot3-gazebo \
ros-jazzy-turtlebot3-cartographer \
ros-jazzy-cartographer-ros
git clone https://github.com/ladanyipeter/Kognitiv_projekt.git
source /opt/ros/jazzy/setup.bash
sudo rosdep init 2>/dev/null || true
rosdep update
rosdep install --from-paths src --ignore-src -r -y
python3 -m pip install --user --break-system-packages --force-reinstall -r requirements.txt
bash scripts/install_gazebo_models.sh
colcon build
source install/setup.bash
ros2 launch gazebo_mapper_py simulation.launch.pyEgy egyedi, L-alakú házat építettünk fel Gazebo-ban, amihez a szükséges modelleket az AWS robomaker small house world github repo-ból töltöttük le. A szükséges modellek letöltése után a falak elhelyezésével 4 külön szobát alakítottunk ki, amelyek a következők:
- Nappali és konyha egy helyiségben, amelyeket a konyhapult és szekrények választanak el. A konyhában étkezőasztal székekkel, pult és hűtő található, valamint egy ember a konyhapult mellett. A nappaliban egy dohányzóasztal és körülötte székek találhatóak.
- Beltéri edzőterem külön szobában, fekvenyomó paddal és súlyzókkal, valamint egy ember.
- Hálószoba ággyal, éjjeliszekrénnyel és egy TV-vel.
- Az utolsó szoba pedig egy még berendezésre váró szoba az újonnan épült házban, itt kartondobozok találhatók, valamint egy ember aki éppen ezekből pakol ki. Ebben a szobában ezen kívül csak egy szekrény található.
A kamerakép feldolgozásához az Ultralitycs YOLOv8n modelljét használtuk. Egyszerű predict módban, és az ember osztályt tartottuk meg a detektálásokból, és ezt jelenítettük meg a kameraképen és a map-en is.
Nincs automatizált mozgása, irányítani egy másik terminálban nyitott távirányítóval lehet:
ros2 run teleop_twist_keyboard teleop_twist_keyboard A saját node, ami az objektumok észlelésért felel. Feliratkozik a kameraképre és a LIDAR szenzor jelére. A kameraképet megjeleníti egy külön ablakban, neurális háló (yolov8 nano) segítségével elemzi, és ha embert talál, akkor azt kiemeli, és elküldi (publish) az rviznek. A detektálás egy szöginformációt is tartalmaz, amelyet a LIDAR adataival összekapcsolva meghatározható az ember pozíciója a térképen. A cartographer csomag segítségével feltérképezhetjük a helyszínt, és így már bejelölhetjük rajta az embereket.
A rendszerben klaszterezést is alkalmaztunk a LIDAR adatok feldolgozására. Erre azért volt szükség, mert önmagában a kamera alapú emberdetektálás nem mindig adott pontos pozíciót a térképen. Előfordult például, hogy a kamera már felismerte az embert, de a LIDAR még nem látta megfelelően, ezért a rendszer az embert hibásan a falra vagy egy sarokra helyezte a map-en.
A klaszterezés másik fontos szerepe az volt, hogy a LIDAR gyakran külön objektumként érzékelte az ember két lábát. Emiatt a rendszer ugyanazt az embert két külön ponton jelenítette meg a térképen. A klaszterezés segítségével a közeli LIDAR pontokat össze tudtuk kapcsolni, így stabilabb és pontosabb emberpozíciót kaptunk. A megoldás a LIDAR sugarakat csoportosítja, majd a megfelelő méretű és egymáshoz közeli klaszterekből határozza meg az ember helyét.
- Kamera:
/image_raw/compressed - LIDAR:
/scan - Térkép:
/map - Detektált objektumok RVizhez:
/detected_objects_markers
A projekt nem használ gépfüggő abszolút útvonalakat a Gazebo világfájlokban. A Gazebo
modellek a ~/gazebo_models mappába kerülnek, amit a launch fájl automatikusan
hozzáad a Gazebo keresési útvonalaihoz. A rosdep miatt ha minden jól megy semmit sem kell pluszban manuálisan telepíteni.
A szimulációról videót is készítettünk működés közben, ami az alábbi linken érhető el: https://drive.google.com/file/d/1F7muy9zZ0dy0EOCNPHec-l6IjMH29DoC/view?usp=sharing