This ROS packages enables the creation of a hierarchical 3D scene graph during runtime. In contrast to other solutions, rooms are segmented, classified and added as nodes as well. A robot using this package has to be equipped with a camera that provides an RGB stream, as well as a depth stream. Optimally, the robot is equipped with a 360° laser scanner. The package generates a 3D scene graph and comes with tools to visualize it using RViz.
Segments the current image from the RGB stream using YOLOv9 after synchronizing and publishes 2D object bounding boxes.
- RGB input stream:
/camera/color/image_rawusingsensor_msgs/Imagemessages - Depth input stream:
/camera/depth/pointsusingsensor_msgs/PointCloud2messages - Odometry input:
/camera/color/odomusingnav_msgs/Odometrymessages
- Synchronized RGB stream:
/scene_graph/color/image_rawusingsensor_msgs/Imagemessages - Synchronized depth stream:
/scene_graph/depth/pointsusingsensor_msgs/PointCloud2messages - Synchronized odometry stream:
/scene_graph/odomusingnav_msgs/Odometrymessages - Detected objects in current frame:
/scene_graph/detected_objectsusingscene_graph/DetectedObjectsmessages
Places the detected objects in 3D global space using the robot's odometry.
- Synchronized RGB stream:
/scene_graph/color/image_rawusingsensor_msgs/Imagemessages - Synchronized depth stream:
/scene_graph/depth/pointsusingsensor_msgs/PointCloud2messages - Synchronized odometry stream:
/scene_graph/odomusingnav_msgs/Odometrymessages - Detected objects in current frame:
/scene_graph/detected_objectsusingscene_graph/DetectedObjectsmessages
- Synchronized RGB stream:
/scene_graph/seen_graph_objectsusingscene_graph/GraphObjectsmessages
Classifies a single room utilizing a Random Forest Classifier on the base of given objects in that room.
- Objects in give room:
/scene/graph/room_with_objectsusingscene_graph/RoomWithObjectsmessages
- Classified room label:
/scene_graph/classified_roomusingscene_graph/ClassifiedRoommessages
Iteratively generates a 3D scene graph at runtime. Publishes messages to visualize the graph
- 3D bounding boxes of seen objects in the frame:
/scene_graph/seen_graph_objectsusingscene_graph/GraphObjectsmessages - Polygons of segmented rooms:
/scene_graph/roomsusingscene_graph/RoomPolygonListmessages - Label of classified room:
/scene_graph/classified_roomusingscene_graph/ClassifiedRoommessages
- Objects in the graph:
scene_graph/graph_objectsusingscene_graph/GraphObjectsmessages - Objects in a given room to be classified:
/scene/graph/room_with_objectsusingscene_graph/RoomWithObjectsmessages - Visualization of object bounding boxes:
/scene_graph/viz/object_bbox_markerusingvisualization_msgs/MarkerArraymessages - Visualization of room nodes:
/scene_graph/viz/room_markersusingvisualization_msgs/MarkerArraymessages - Visualization of building nodes:
/scene_graph/viz/building_markersusingvisualization_msgs/MarkerArraymessages - Visualization of edges:
/scene_graph/viz/line_markersusingvisualization_msgs/MarkerArraymessages - Visualization of node labels:
/scene_graph/viz/text_markersusingvisualization_msgs/MarkerArraymessages
- ROS Noetic on Ubuntu 20.04 LTS
- Camera that provides RGB- and depth-streams (e.g. Orbbec Astra)
- High-FOV laser scanner
- Robot compatible with ROS that comes with an IMU
To install this package, install the CGAL library and the ultralytics package first. After that, clone and build this package.
pip install ultralytics
sudo apt-get install libcgal-dev
cd <your_catkin_workspace>/src
git clone https://github.com/sijanz/scene_graph
cd .. && catkin_make
Run the whole scene graph creation pipeline as follows. Use a new terminal window for each command.
rosrun scene_graph ros_yolo_node.py
rosrun scene_graph object_localization_node
rosrun scene_graph room_classification_node
rosrun scene_graph graph_management_node

