Rosanswers logo

Hello Everyone,

Lately I've been experimenting on using the navigation stack without the mapserver, and using GMapping for the generation of a map via Online SLAM, with very good results (although sometimes a little CPU intensive).

I was wondering how could I refer to a point the robot has visited in the past, when the map is continually changing. Here is an example of my question:

Suppose I am giving my robot a tour of the office (he doesn't have a prior knowledge of its environment). While we tour, at certain positions I will "mark" some place, for example, "this is Ben's desk". After the tour, I would like to be able to tell the robot to go to Ben's desk.

I am not sure how I could manage to do that if the map is continually changing, in size, orientation, etc. Is there a way that doesn't rely exclusively on odometry?

Thanks in advance. All ideas are welcome :)

Originally posted by Pablo Hevia-Koch on ROS Answers with karma: 55 on 2011-05-11

Post score: 4


2 Answers 2


Rosanswers logo

Well, in theory the map should not be changing, just growing in terms of adding information. So, if you mark your current location in the /map frame, then this should later also be the same position to go back to.

If the maps you are producing look OK, this should be sufficient. Otherwise you need a better SLAM solution or remember the environment and use some global matching procedure to find the spot.

Originally posted by dornhege with karma: 31395 on 2011-05-11

This answer was ACCEPTED on the original site

Post score: 4

Original comments

Comment by felix k on 2011-09-14:
Have you made any achievements? I need to do the same. Or are there any packages to mark positions?

Comment by Pablo Hevia-Koch on 2011-05-12:
Thank you very much for your advice =). I'll give it a shot

Comment by dornhege on 2011-05-12:
That what the "in theory" was for. It can happen that the map deforms to correct accumulated errors. The only real solution is: better SLAM algorithm/input quality or to use some kind of place recognition. E.g. with graph-based SLAM you could remember the current node.

Comment by Pablo Hevia-Koch on 2011-05-11:
Are you sure about this? I've seen maps change in the sense of "deformation" when closing loops, and similar things.

Comment by ctguell on 2013-09-12:
@dornhege How do yo tag a position in the /map??? Ive looked for this answer but was unable to find it. Thanks

Comment by felix k on 2013-09-15:
Just transform your position from its odom frame (or where it is originated from) to the map frame using tf and store it in a list of positions as wanted.

Comment by ctguell on 2013-09-24:
@felix_k thanks but could you explain how to store that position so later I can see it in rviz for example?? Should i listen to /map and then publish it with a new topic?? I understand the idea but dont know how to make it work, i would really appreciate your help, thanks

Comment by felix k on 2013-09-24:
I've had written a tool that stores positions and can give them to move_base later, storing just the geometry_msg/Pose objects used in all messages in a list: position_memo.py


Rosanswers logo

I pretty much agree with dornhedge that /map shouldn't be changing too much.

Another, pretty ad-hoc solution would be to remember the local environment when a position is tagged and then to do some kind of nearest neighbor search in your updated map, with a (possibly gaussian) prior over the odometry estimate for Ben's desk.

But that may be too much hassle and/or computation to implement/run.

Originally posted by Dimitar Simeonov with karma: 535 on 2011-05-11

This answer was NOT ACCEPTED on the original site

Post score: 1


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.