# Integrating RMF and Navigation Stack

In the RMF Demos, the magni robot is using a “SlotCar gazebo plugin” which receives the path request from rmf-core and converts it into robot motion (through setting joint velocities). This path request (list of waypoints) is generated from the fleet adapter without considering a cost map.

The global path planner of the navigation stack, however, considers a cost map and gives a safe path to a single goal destination. I'm not sure how to integrate these two path planners. Is there a suggested method to integrate these two (as we feel it is a common challenge that many companies might face) ?

edit retag close merge delete

Great question - I'd also like to know a little on this. On the planner side, from what I'm aware, it is routing through an annotated graph, so you shouldn't need a freespace planner. I think you'd just need a controller to follow the path and avoid obstacles. In practice it would be wise to still use a planner with soft constraints on the route for large obstacles a controller isn't well suited to handle, but good enough for a first order demo (especially in simulation).

We on the navigation side in ROS2 are looking at annotation methods and formats so this may be something to consider if we can get support to do some integrations.

( 2020-05-06 02:30:51 -0600 )edit

@stevemacenski Thanks for your quick response. It's a good idea. I also understand your point about a planner with soft constraints on the route for large obstacles. We'll think about it. Suggestions/packages in that direction, if any, are welcome.

( 2020-05-06 22:35:04 -0600 )edit

Sort by » oldest newest most voted

Hi @webvenky and @stevemacenski,

To augment @aaronchongth 's response, I've added a section to the rmf_demos FAQ page which may be helpful in answering how you can integrate robots running navstacks (in simulation & real world) with RMF.

TLDR;

• RMF generates plans for robots while avoiding other brands of robots also operating in the same space.
• The output of these plans will need to be fed into the robot's navstack or via an API provided by the vendor to get the robot to travel through the waypoints in the plan (The navstack may generate intermediate waypoints to avoid sensor-detected obstacles). The slotcar plugin is only for simulation efficiency.
• Robots running navstacks can be integrated with RMF in simulation and real world. Packages such as nav2_waypoint_follower compliment this objective.
more

I think all that probably belongs in a readme. I have to say from first glance, its not easy to see how this stuff can be practically applied out of simulation or if its even complete.

( 2020-05-07 14:31:38 -0600 )edit

Thank you for your response. We understand the idea behind traffic simulator. We will try to use the slot car plugin as a base code to integrate RMF and the robot navstack.

( 2020-05-11 02:54:56 -0600 )edit

Hello @webvenky! good question and insights, I will try to answer this to the best of my understanding, feel free to correct me, especially when navigation is involved.

The navigation graph that houses the waypoints, are generated using the traffic_editor and building_map_toolspackages in https://github.com/osrf/traffic_editor. This allows users to draw up their environment starting from a 2D floor plan, populating it with walls and models to best represent the real physical environment. With a close-enough representation of the real environment, lanes and waypoints can be placed in areas where the robots can navigate, while being mindful that lanes don't intersect with any existing furniture, for example. This allows users to generate a perfectly viable global navigation graph without a cost map.

The global graph of waypoints and lanes are used for robot traffic monitoring and resolving conflicts or dead-locks that may arise between robots or fleets of robots that are unaware of each other's presence, you can take a look at https://github.com/osrf/rmf_core. It is not meant to be used as a global planning graph for any single fleet of robot. RMF assumes the various robots or fleets are using their own fully-functional navigation stacks to do global and local planning, while nudging them out of the way of each other ahead of time whenever conflicts will arise in the near future.

The slotcar plugin allows us to simulate the motion and behavior of robots without worrying about the navigation stacks that might be running under the hood of different vendor robots. This will also allow us to run large scale simulations without being bogged down by large number of sensors and multiple navigation stacks running on that single machine.

If users are keen on running their own navigation stacks on simulated robots, I believe navigation2 is a good option to start with, I have had good experience with it on Turtlebot3s.

more