ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I'm going for the offline approach where I can run the robot around, batch optimize the graph and generate a map which can then be used by AMCL for localization. g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. Had to post my response as an answer as it was too long for the comments.

I'm going for the offline approach where I can run the robot around, batch optimize the graph and generate a map which can then be used by AMCL for localization. g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. Had to post my response as an answer as it was too long for the comments.comments :)

I'm going for the offline pose-graph SLAM approach where I can run the robot around, around some environment, gather the data, batch optimize the graph and generate a map which can then be used by AMCL for localization. As of now g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. Had to post my response as I will keep updating this answer as I make progress. I see 3 components to this problem; (i) how to generate the pose to pose odometry ?(relatively easy these days in ROS), (ii) how to generate loop closure constraints between various poses? (iii) how to solve the graph optimization problem? (will not focus too much on this as there are bunch of awesome open source solvers like g2o, GTSAM, LAGO etc.) (iv) how to take an answer as it was too long for the comments :)optimized graph and construct a usable map?

  1. Pose to pose odometry: I tried using laser_scan_matcher to compute the transformation between poses (or keyframes) but soon realized that laser_scan_matcher uses CSM (Canonical Scan Matcher) which doesn't work very well in cluttered environments. We have switched to using the scan matching from Hector SLAM which appears to be doing much better as of now.

I'm going for the offline pose-graph SLAM approach where I can run the robot around some environment, gather the data, batch optimize the graph and generate a map which can then be used by AMCL for localization. As of now g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. I will keep updating this answer as I make progress. I see 3 components to this problem; (i) how to generate the pose to pose odometry ?(relatively easy these days in ROS), (ii) how to generate loop closure constraints between various poses? (iii) how to solve the graph optimization problem? (will not focus too much on this as there are bunch of awesome open source solvers like g2o, GTSAM, LAGO etc.) (iv) how to take an optimized graph and construct a usable map?

  1. Pose to pose odometry: I tried using laser_scan_matcher to compute the transformation between poses (or keyframes) but soon realized that laser_scan_matcher (which uses CSM (Canonical - Canonical Scan Matcher) which doesn't work very well in cluttered environments. We have switched to using the scan matching from Hector SLAM which appears to be doing much better as of now.

I'm going for the offline pose-graph SLAM approach where I can run the robot around some environment, gather the data, batch optimize the graph and generate a map which can then be used by AMCL for localization. As of now g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. I will keep updating this answer as I make progress. I see 3 4 components to this problem; (i) how to generate the pose to pose odometry ?(relatively easy these days in ROS), (ii) how to generate loop closure constraints between various poses? (iii) how to solve the graph optimization problem? (will not focus too much on this as there are bunch of awesome open source solvers like g2o, GTSAM, LAGO etc.) (iv) how to take an optimized graph and construct a usable map?map? Finally once I have a map, I should technically be able to use AMCL to localize.

  1. Pose to pose odometry: I tried using laser_scan_matcher to compute the transformation between poses (or keyframes) but soon realized that laser_scan_matcher (which uses CSM - Canonical Scan Matcher) doesn't work very well in cluttered environments. We have switched to using the scan matching from Hector SLAM which appears to be doing much better as of now.

Update: Full progress on pose-graph SLAM with ROS will be posted on my blog here.

I'm going for the offline pose-graph SLAM approach where I can run the robot around some environment, gather the data, batch optimize the graph and generate a map which can then be used by AMCL for localization. As of now g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. I will keep updating this answer as I make progress. I see 4 components to this problem; (i) how to generate the pose to pose odometry ?(relatively easy these days in ROS), (ii) how to generate loop closure constraints between various poses? (iii) how to solve the graph optimization problem? (will not focus too much on this as there are bunch of awesome open source solvers like g2o, GTSAM, LAGO etc.) (iv) how to take an optimized graph and construct a usable map? Finally once I have a map, I should technically be able to use AMCL to localize.

  1. Pose to pose odometry: I tried using laser_scan_matcher to compute the transformation between poses (or keyframes) but soon realized that laser_scan_matcher (which uses CSM - Canonical Scan Matcher) doesn't work very well in cluttered environments. We have switched to using the scan matching from Hector SLAM which appears to be doing much better as of now.

Update: Full progress on pose-graph SLAM with ROS will be posted on my blog here.

I'm going for the offline pose-graph SLAM approach where I can run the robot around some environment, gather the data, batch optimize the graph and generate a map which can then be used by AMCL for localization. As of now g2o and GTSAM both look like good options for the backend. I'm also trying out LAGO solver by Luca Carlone @ MIT, this solver is quite robust when the odometry is bad as it separates orientation and position estimation. I will keep updating this answer as I make progress. I see 4 components to this problem; (i) how to generate the pose to pose odometry ?(relatively easy these days in ROS), (ii) how to generate loop closure constraints between various poses? (iii) how to solve the graph optimization problem? (will not focus too much on this as there are bunch of awesome open source solvers like g2o, GTSAM, LAGO etc.) (iv) how to take an optimized graph and construct a usable map? Finally once I have a map, I should technically be able to use AMCL to localize.

  1. Pose to pose odometry: I tried using laser_scan_matcher to compute the transformation between poses (or keyframes) but soon realized that laser_scan_matcher (which uses CSM - Canonical Scan Matcher) doesn't work very well in cluttered environments. We have switched to using the scan matching from Hector SLAM which appears to be doing much better as of now.

  2. Front-End (Loop closure detection): open_karto appears to have a good loop closure detection module. Another option is FLIRT LIB https://github.com/tipaldi/flirtlib