ros-navigation / navigation2

ROS 2 Navigation Framework and System
https://nav2.org/
Other
2.53k stars 1.28k forks source link

[Feature Request] Temporary Static Obstacles Detection and Map Update Using RL #4535

Closed BCKSELFDRIVEWORLD closed 3 months ago

BCKSELFDRIVEWORLD commented 3 months ago

Feature Request

Feature Description

This feature aims to enhance indoor mobile robots by enabling dynamic detection of unforeseen temporary static obstacles and updating the map using Markov Decision Processes (MDP) with Reinforcement Learning (RL) algorithms. This will allow robots to identify and record these obstacles on the map after repeated encounters, optimizing their maneuvering and reducing task completion time. By increasing the cost values of cells with persistent obstacles, robots can plan more efficient paths and avoid unnecessary maneuvers.

Use Case

Currently, robots create their initial paths based on a global costmap, but they often encounter unforeseen static obstacles that require frequent maneuvering, increasing task duration. This feature will enable robots to dynamically adapt to such obstacles, improving their efficiency and reducing the time needed to complete tasks. This is particularly useful in environments where temporary static obstacles are common, such as warehouses, hospitals, and offices.

Implementation Details

Using Reinforcement Learning and MDP:

Defining the MDP:

Training the RL Algorithm:

Map Update:

Path Planning and Maneuver Optimization:

Expected Benefits

I believe this feature is logical and feasible. I have a few questions in my mind that need clarification, but overall, this concept seems promising to me. If the community is as enthusiastic about this feature as I am, I would love to work on this topic.

SteveMacenski commented 3 months ago

Certainly an interesting idea! Have you worked on something similar before and have an intuition that this would work well? Having something to better address dynamic obstacles at a costmap abstraction level would be fabulous.

I'd love to see a prototype of this in action on your github before we discuss integrating it directly into the Nav2 stack to make sure it performs well enough and sufficiently general for folks' use case. If its not super portable, its still a very useful project to have in the ecosystem for people to use if they can or adapt it!