CGR Localization
 All Classes Namespaces Files Functions Variables Macros Pages
CGR (Laser Scanner, Kinect - FSPF) Localization

1. Summary

This package provides the code for CGR localization to localize a robot in 2D using either laser rangefinder readings or depth images obtained from Kinect-style sensors.

2. Dependencies

To install all dependencies on Ubuntu, run "./InstallPackages", or copy & run the following command:

sudo apt-get install g++ libqt4-dev cmake libpopt-dev libusb-1.0-0-dev liblua5.1-dev libglew1.5-dev libeigen3-dev 

On other platforms, you will have to manually install the following packages:

3. Compiling

Run "make" in the cgr_localization folder OR run "rosmake cgr_localization" after adding the full path of the cgr_localization package to the ROS_PACKAGES_PATH environemt variable.

4. Testing with demo data

The following demo data sets are available:

  1. CoBot2 in GHC7 (LIDAR)
  2. CoBot2 in GHC7 (Kinect)
  3. CoBot2 in NSH4 (LIDAR)

To run the code with the demo data:

  1. Use
    roslaunch cgr_localization cgr_demo_laser.launch 
    to run CGR localization using LIDAR observations and display that on the bundled GUI, OR
    roslaunch cgr_localization cgr_demo_kinect.launch 
    to run CGR localization using Kinect depth image observations.
  2. Play back the data file with
    rosbag play <bagfile.bag> --clock 

5. Running on your own robot

  1. Creating A Vector Map: To run cgr localization on your own robot, you need to generate a vector map of your environment. For an example vector map, see maps/GHC7/GHC7_vector.txt . Each entry in the vector map represents a line (wall) in the world, and is of the form:
    x1, y1, x2, y2 
    where x1, y1 is the start location and x2, y2 the end location of the line. The vector maps reside in the maps folder. For example, the map for "GHC7" resides in the file maps/GHC7/GHC7_vector.txt . Once the map is created, it needs to be added to maps/atlas.txt so that cgr_localization loads it on startup.
  2. Generate Map Visibility Lists: CGR localization uses analytic raycasts on vector maps for the observation functions. To speed up the analytic renders at runtime, visibility lists are pre-computed for the vector maps. To generate the visibility list for your map, run the following command:
    ./bin/pre_render -m"YourMapName" [ -n NumberOfThreads ]
    For example:
    ./bin/pre_render -m"GHC7" -n8
  3. ROS topics: The required ROS topics are "odom" of type nav_msgs/Odometry , and "scan" of type sensor_msgs/LaserScan and/or "kinect_depth" of type sensor_msgs/Image (Raw 16-bit depth data gathered via libfreenect from the kinect


  1. "Corrective Gradient Reļ¬nement for Mobile Robot Localization", Joydeep Biswas, Brian Coltin, and Manuela Veloso, Proceedings of IEEE/RSJ International Conference on Intelligent Robots and Systems, September, 2011, pp. 73 - 78. PDF
  2. "Depth Camera Based Indoor Mobile Robot Localization and Navigation", Joydeep Biswas and Manuela Veloso, Proceedings of IEEE International Conference on Robotics and Automation, May, 2012. PDF