Skip to main content

A* search algorithm with an added time dimension to deal with dynamic obstacles.

Project description

Space-Time A*

Space-Time A* (STA*) Search Algorithm with an Additional Time Dimension to Deal with Dynamic Obstacles.

Installation

The package is named space-time-astar and listed on PyPI. You can use the pip to install:

pip3 install space-time-astar

For multiple agents, you might be interested in the cbs-mapf package which uses this package as the low-level planner, also on GitHub and PyPI.

Usage

Import Planner

from stastar.planner import Planner

Constructor Parameters

Planner(grid_size: int, robot_radius: int, static_obstacles: List[Tuple[int, int]])
  • grid_size: int - each grid will be square with side length grid_size.
  • robot_radius: int - agents are assumed to be circles with radius being robot_radius.
  • static_obstacles: List[Tuple[int, int]] - A list of coordinates specifying the static obstacles in the map.

It is important that grid_size is not too small and static_obstacles does not contain too many coordinates, otherwise the performance will severely deteriorate. What is 'too many' you might ask? It depends on your requirements.

Find Path

Use Planner's plan() method:

plan(start: Tuple[int, int],
     goal: Tuple[int, int],
     dynamic_obstacles: Dict[int, Set[Tuple[int, int]]],
     semi_dynamic_obstacles:Dict[int, Set[Tuple[int, int]]] = dict(),
     max_iter:int = 500,
     debug:bool = False) -> np.ndarray:

Parameters:

  • start: Tuple[int, int] - A start coordinate.
  • goal: Tuple[int, int] - A goal coordinate.
  • dynamic_obstacles: Dict[int, Set[Tuple[int, int]]] - Dynamic obstacles are really other agents reservation in space-time, more details below.
  • semi_dynamic_obstacles: Dict[int, Set[Tuple[int, int]]], optional - This parameter exist because we have to take the agents that have reached their destinations into account, they are essentially static obstacles from specific times.
  • max_iter: int, optional - Max iterations of the search. Default to 500.
  • debug: bool, optional - Prints some debug message. Default to False.

The keys for dynamic_obstacles are integers representing time and the values are sets of coordinates. It tells the planner what coordinates we need to avoid at each time step. Currently, it is assumed that dynamic obstacles are other agents (with the same robot_radius) and are treated differently to static obstacles.

Return:

A numpy.ndaarray with shape (L, 2) with L being the length of the path.

Theoretical Background

Here is a good document about Space-Time A* (STA*) written by David Silver.

In a nutshell, STA* is normal A* plus a time dimension. See the illustration below.

On the left block, the first agent plans its path and reserve its path through time (with no regard to the second agent).

On the right block, the second agent plans its path while avoiding the path reserved by the first agent (i.e. the dynamic_obstacles argument).

Implementation decisions in space-time-astar package

  • The Manhattan distance, an admissible and consistent heuristic, is used in this implementation. You can change this by changing the h() function in planner.py.

  • The agents can be bigger than the grid.

  • The dynamic obstacles are assumed to be other agents of the same size. This can be changed in the safe_dynamic() inner function in plan().

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

space-time-astar-0.8.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

space_time_astar-0.8-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file space-time-astar-0.8.tar.gz.

File metadata

  • Download URL: space-time-astar-0.8.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for space-time-astar-0.8.tar.gz
Algorithm Hash digest
SHA256 3554c20ffb6cf33291cf0b77951b2e66655e61a2007e9ccf6fe72617e5cb72c7
MD5 51090fc4b438350f5272971326c7d586
BLAKE2b-256 72f658567dc9292e1f84de2210826e04d6e892081b8cb7e27f25d2126a118040

See more details on using hashes here.

File details

Details for the file space_time_astar-0.8-py3-none-any.whl.

File metadata

  • Download URL: space_time_astar-0.8-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for space_time_astar-0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 63f372cce21ad691f06648aaf55eede34663b590af9f221351c1a7007cb4771d
MD5 b4a93c74e3e7bb56e1d546238a880a83
BLAKE2b-256 d60a5d0920968f1c7724d57797566c3778b496f24bef9b9dfafb43510e5694be

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page