Multi-map navigation system

:rocket: This project implements a multi-map navigation system where a robot can navigate between different mapped rooms.

Each room is mapped in separate sessions, and a “wormhole” mechanism allows the robot to switch between maps seamlessly.

:link: GitHub Repo: Multi-Map-Navigation
:movie_camera: Demo Video: youtube


:magnifying_glass_tilted_left: What’s Inside:

:cyclone: Wormhole-based map transitions
:card_file_box: SQL database to store connections between maps
:world_map: Dynamic map switching using ROS map_server
:robot: ROS Action Server to handle navigation goals
:railway_track: Integration with move_base for local movement

2 Likes

Very cool! This is how we used to handle very large campuses of connected buildings at a robotics company I’ve previously worked at, too.

Does the robot need to stop in order to switch maps, in order to localize on the new map, or are you able to reinitialize the localization samples on the new map on-the-fly and still converge?

1 Like

Thanks, chrfritz! Yes, this method is indeed used with large buildings.

The robot doesn’t stop in the literal sense; it moves toward a connection point that links the current map to the target map. Once it reaches that point, it switches to the new map and continues toward the intended destination.

It’s essentially like handling two consecutive goals.

And it doesn’t need to stop at all, not even briefly, at that point to switch maps and relocalize? That’s very nice. It can be a bit tricky to compute a new initial location for the robot on the new map while the robot is moving. Do you require all maps to have the same orientation or require the user to define a rotational transform between any two pairs of connected maps? Getting the new position right is not too difficult and localization isn’t super-sensitive to errors, but getting the robot’s rotation wrong while it is moving can easily result in poor localization.

1 Like

Yes, you’re absolutely right — a wrong rotation can happen at any time and it’s critical for good localization.
We don’t require all maps to have the same orientation; the user can define the orientation manually.
However, in this project, I’m currently using a unified orientation for all maps. That said, I’m now working on a ROS 2 version of the system, where things are running well so far, and I’ll have the ability to control the orientation of each map individually.

Based on your experience, do you have any suggestions or ideas that might help improve this project further? I’d really appreciate your insight.