/s_graphs_docker

Repository to generate in Realtime S-Graphs for Robot pose and High-Level Map Optimization

S-Graphs+: Real-time Localization and Mapping leveraging Hierarchical Representations

Hriday Bavle · Jose Luis Sanchez-Lopez
Muhammad Shaheer · Javier Civera · Holger Voos

Depricated: Please use this link: https://github.com/snt-arg/lidar_s_graphs/


Logo

Table of Contents
  1. About S-Graphs
  2. Getting Started
  3. Example on Datasets
  4. ROS Related
  5. License
  6. Maintainers

Published Papers

  1. S-Graphs+: Real-time Localization and Mapping leveraging Hierarchical Representations

    • Citation
       @misc{bavle2022sgraphs+,
         title = {S-Graphs+: Real-time Localization and Mapping leveraging Hierarchical Representations},
         author={Hriday Bavle and Jose Luis Sanchez-Lopez and Muhammad Shaheer and Javier Civera and Holger Voos},
         year={2022},
         publisher = {arXiv},
         year = {2022},
         primaryClass={cs.RO}
      }
  2. Situational Graphs for Robot Navigation in Structured Indoor Environments

    • Citation
       @ARTICLE{9826367,
         author={Bavle, Hriday and Sanchez-Lopez, Jose Luis and Shaheer, Muhammad and Civera, Javier and Voos, Holger},
         journal={IEEE Robotics and Automation Letters}, 
         title={Situational Graphs for Robot Navigation in Structured Indoor Environments}, 
         year={2022},
         volume={7},
         number={4},
         pages={9107-9114},
         doi={10.1109/LRA.2022.3189785}}

Getting started

  1. Clone this repository

  2. Pull the docker image from DockerHub

docker pull sntarg/s_graphs:latest
  1. Create a container for the s_graphs image.
docker run -dit --net host --name s_graphs_container sntarg/s_graphs

This command also incorporates the flags d, which makes the container run in the detached mode and net, which gives the container the access of the host interfaces.

  1. Execute the container
docker exec -ti s_graphs_container bash
  1. Source the s_graphs workspace
source devel/setup.bash

About S-Graphs

Architecture

Tf tree

Example on Datasets

Note: For each command below, please execute them in separate terminal windows!

Download Datasets

Real Dataset

Virtual Dataset

Real Dataset

Command to be executed inside the docker container!

roslaunch s_graphs s_graphs.launch env:=real use_free_space_graph:=true 2>/dev/null
cd PATH_TO_THIS_REPO && rviz -d rviz/s_graphs.rviz
rosbag PATH_TO_THIS_REPO/real_dataset --clock

Virtual Dataset

Command to be executed inside the docker container!

roslaunch s_graphs s_graphs.launch env:=virtual compute_odom:=true use_free_space_graph:=true 2>/dev/null
cd PATH_TO_THIS_REPO && rviz -d rviz/s_graphs.rviz
rosbag play PATH_TO_THIS_REPO/virtual_dataset --clock

Dataset only using a Velodyne

roscd s_graphs && rviz -d rviz/s_graphs.rviz
roslaunch s_graphs s_graphs.launch use_free_space_graph:=true compute_odom:=true 2>/dev/null
rosbag play PATH_TO_ROSBAG_DATASET --clock

ROS Related

Nodelets

s_graphs is composed of 3 main nodelets.

  • s_graphs_nodelet

    • Subscribed Topics

    • Published Topics

      • /s_graphs/markers (visualization_msgs/MarkerArray)

        • The markers represents the different s_graphs layers.
      • /s_graphs/odom2map (geometry_msgs/TransformStamped)

        • Sets where the robot pose is within the map (world).
      • /s_graphs/odom_pose_corrected (geometry_msgs/PoseStamped)

        • The pose of the robot once odom2map is applied.
      • /s_graphs/odom_path_corrected (nav_msgs/Path)

        • The path of the robot once the odom2map is applied.
      • /s_graphs/map_points (sensor_msgs/PointCloud2)

        • The points that represent the first layer of S-Graphs.
      • /s_graphs/map_planes (s_graphs/PlanesData)

        • Current planes seen by the robot.
      • /s_graphs/all_map_planes (s_graphs/PlanesData)

        • All the planes that were seen by the robot.
  • room_segmentation_nodelet

    • Subscribed Topics

      • /voxblox_skeletonizer/sparse_graph (visualization_msgs/MarkerArray)
        • Represents the free space where the robot can go to. This is also knonw as free-space clusters.
      • /s_graphs/map_planes (s_graphs/PlanesData)
        • Current planes seen by the robot.
    • Published Topics

      • /room_segmentation/room_data (s_graphs/RoomsData)
        • Contains all the necessary information about the rooms in a floor.
  • floor_plane_nodelet

    • Subscribed Topics

      • /s_graphs/all_map_planes (s_graphs/PlanesData)
        • All the planes that were seen by the robot.
    • Published Topics

      • /floor_plan/floor_data (s_graphs/RoomData):
        • Constains all the necessary information about each floor.

Services

  • /s_graphs/dump (s_graphs/DumpGraph)

    • save all the internal data (point clouds, floor coeffs, odoms, and pose graph) to a directory.
  • /s_graphs/save_map (s_graphs/SaveMap)

    • save the generated map as a PCD file.

Parameters

All the configurable parameters are listed in launch/s_graphs.launch as ros params.

Published TFs

  • map2odom: The transform published between the map frame and the odom frame after the corrections have been applied.

Tf tree

Instructions To Use S-Graphs

  1. Define the transformation between your sensors (LIDAR, IMU, GPS) and base_link of your system using static_transform_publisher (see line #94, s_graphs.launch). All the sensor data will be transformed into the common base_link frame, and then fed to the SLAM algorithm. Note: base_link frame in virtual dataset is set to base_footprint and in real dataset is set to body

  2. Remap the point cloud topic of PrefilteringNodelet. Like:

  <node pkg="nodelet" type="nodelet" name="hdl_prefilter" args="load s_graphs/PrefilteringNodelet hdl_prefilter_nodelet_manager">
    <remap from="/velodyne_points" to="/rslidar_points"/>
  ...
  1. If you have an odometry source convert it to base ENU frame, then remove the ScanMatchingNodelet from line #37 to #50 in s_graphs.launch and then remap odom topic in SGraphsNodelet like
  <node pkg="nodelet" type="nodelet" name="s_graphs" args="load s_graphs/SGraphsNodelet s_graphs_nodelet_manager" output="screen"> 
    <remap if="$(eval arg('env') == 'real')" from="/odom" to="/platform/odometry" />
  ...

Note: If you want to visualize the tfs correctly then your odom source must provide a tf from the odom to base_link frame.

License

This package is released under the BSD-2-Clause License.

Note that the cholmod solver in g2o is licensed under GPL. You may need to build g2o without cholmod dependency to avoid the GPL.

Maintainers

Webpage