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

Is it possible to navigate and build map at the same time?

asked 2016-01-05 09:44:33 -0500

Eric_ROS gravatar image

Hello~ all I'm a starter to learn ROS. Now I focus on Navigation and map generation.

We know that autonomous navigation procedure is : Load map files(yaml & PGM files) => Localization(amcl) => User assigns the goal => Plan an ideal route (global planner+costmap) => obstacle avoidance (Local Planner+costmap) => Reached!!

It means we have to build a map beforehand, then we can do autonomous navigation. I'd like to know... (1) Is it possible to immediately update map if robot found a new obstacle not showed on the static map?

(2)is it possible to do autonomous navigation and build map at the same time. I mean...generate a small part of map and keep updating it to RObot for navigation?

I searched the forum and found the related article as follows, seems not available my request.

Does anyone know about it? It would be better to give me some idea or suggestion.


edit retag flag offensive close merge delete

5 Answers

Sort by ยป oldest newest most voted

answered 2016-01-05 11:42:57 -0500

ahendrix gravatar image

You can use gmapping and move_base together to build a map and navigate autonomously in an unknown environment, but because you can't start gmapping with a partial map, this means that your map will always start empty (probably not what you want). gmapping also requires constantly increasing memory over the life of the map, so it isn't well suited for long-term use.

I don't have any direct experience with it, but the hector_slam package provides another SLAM implementation that may do what you're looking for.

edit flag offensive delete link more


Thanks for your sharing!! hector_slam is interesting!!

Eric_ROS gravatar image Eric_ROS  ( 2016-01-06 08:58:53 -0500 )edit

answered 2016-01-06 03:09:06 -0500

Sebastian Kasperski gravatar image

Every mapping algorithm should be able to publish the so far generated map, either via topic or service, so this map can be used for navigation. In a case where you want to do autonomous exploration of your environment, you actually have to use the unfinished map for navigation. In package nav2d is a graph-based SLAM together with the navigation nodes for autonomous exploration.

edit flag offensive delete link more


Thanks for your sharing!!

Eric_ROS gravatar image Eric_ROS  ( 2016-01-06 04:22:39 -0500 )edit

answered 2016-01-14 02:38:33 -0500

quentin gravatar image

I am also trying to do the same thing: autonomous navigation with a partially known map. I am currently trying two alternatives for my quadrotor:

Solution 1

Use AMCL to localize on my partially known map. move_base navigation node uses this map as the global map to compute global paths. In the meantime, I run hector_mapping only for the map creation. At the end of the process, I can compare the map created by hector_mapping with the initial static map and therefore identify the new elements.

Challenges: if the obstacles (ie. elements not included in the static map used by AMCL) are too numerous, the AMCL localization is struggling and has to rely only on odometry. Sometimes the localization system crashes...

Solution 2

Don't use AMCL but only hector_mapping to localize and create the map. In order to make use of the already partially known map in the path planning, I use it as the global map for move_base.

Challenges: In order for the system to remain consistent along the navigation, the map created by hector_mapping (and therefore the local map frame) and the global static map have to remain aligned. So far, I haven't find a way to efficiently compare the 2 maps and publish a transform between the two. Two issues have to be taken into account: possible deformations of the hector_mapping's map and the small size of hector map at the beginning of the process

Any advise or feedback on that will be warmly welcomed! Hope it will help somebody!

edit flag offensive delete link more


Anybody has face these problems before?

quentin gravatar image quentin  ( 2016-01-26 20:15:49 -0500 )edit

Hi Quentin, were you able to implement both these methods in your project? I have just started with a ROS project and this is exactly what I'm trying to do.

adityakamath gravatar image adityakamath  ( 2016-10-31 05:07:45 -0500 )edit

answered 2016-01-05 10:58:00 -0500

Akif gravatar image

This is what we call Simultaneous Localization and Mapping (SLAM).

Most widely used package for SLAM applications in ROS is gmapping.

edit flag offensive delete link more

answered 2016-01-05 11:57:03 -0500

duck-development gravatar image

There is more then one Navigation Stack.

Gmapping is a Slam Algorithm, but it is widely used for map generation. Then the map is saved and you use AMCL to for localization in the map.

Hector SLAM is used on its own, the benefit of Hector SLAM is: you do not need encoder values from the wheels.

Kato Slam it an other Navigation Stack

edit flag offensive delete link more


Thanks for your reply, Hector SLAM seems a great package for learning.

Eric_ROS gravatar image Eric_ROS  ( 2016-01-06 04:03:26 -0500 )edit

Question Tools

1 follower


Asked: 2016-01-05 09:44:33 -0500

Seen: 4,567 times

Last updated: Jan 14 '16