python-motion-planning 1.1__tar.gz → 1.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/PKG-INFO +55 -45
  2. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/README.md +52 -42
  3. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/pyproject.toml +2 -3
  4. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/evolutionary_search/aco.py +3 -3
  5. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/evolutionary_search/evolutionary_search.py +3 -3
  6. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/evolutionary_search/pso.py +3 -3
  7. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/a_star.py +3 -3
  8. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/d_star.py +3 -3
  9. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/d_star_lite.py +3 -3
  10. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/dijkstra.py +23 -15
  11. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/gbfs.py +23 -15
  12. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/graph_search.py +3 -3
  13. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/jps.py +3 -3
  14. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/lazy_theta_star.py +3 -3
  15. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/lpa_star.py +3 -3
  16. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/s_theta_star.py +3 -3
  17. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/theta_star.py +3 -3
  18. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/voronoi.py +3 -3
  19. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/sample_search/informed_rrt.py +3 -3
  20. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/sample_search/rrt.py +3 -3
  21. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/sample_search/rrt_connect.py +3 -3
  22. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/sample_search/rrt_star.py +3 -3
  23. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/sample_search/sample_search.py +3 -3
  24. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/environment/env.py +12 -29
  25. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning.egg-info/PKG-INFO +55 -45
  26. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning.egg-info/requires.txt +0 -1
  27. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/LICENSE +0 -0
  28. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/setup.cfg +0 -0
  29. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/__init__.py +0 -0
  30. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/__init__.py +0 -0
  31. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/bezier_curve.py +0 -0
  32. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/bspline_curve.py +0 -0
  33. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/cubic_spline.py +0 -0
  34. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/curve.py +0 -0
  35. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/dubins_curve.py +0 -0
  36. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/fem_pos_smooth.py +0 -0
  37. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/polynomial_curve.py +0 -0
  38. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/curve_generation/reeds_shepp.py +0 -0
  39. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/__init__.py +0 -0
  40. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/evolutionary_search/__init__.py +0 -0
  41. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/graph_search/__init__.py +0 -0
  42. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/global_planner/sample_search/__init__.py +0 -0
  43. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/__init__.py +0 -0
  44. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/apf.py +0 -0
  45. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/dwa.py +0 -0
  46. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/local_planner.py +0 -0
  47. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/lqr.py +0 -0
  48. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/mpc.py +0 -0
  49. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/pid.py +0 -0
  50. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/local_planner/rpp.py +0 -0
  51. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/__init__.py +0 -0
  52. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/agent/__init__.py +0 -0
  53. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/agent/agent.py +0 -0
  54. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/environment/__init__.py +0 -0
  55. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/environment/node.py +0 -0
  56. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/environment/point2d.py +0 -0
  57. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/environment/pose2d.py +0 -0
  58. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/helper/__init__.py +0 -0
  59. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/helper/math_helper.py +0 -0
  60. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/planner/__init__.py +0 -0
  61. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/planner/control_factory.py +0 -0
  62. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/planner/curve_factory.py +0 -0
  63. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/planner/planner.py +0 -0
  64. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/planner/search_factory.py +0 -0
  65. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/plot/__init__.py +0 -0
  66. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning/utils/plot/plot.py +0 -0
  67. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning.egg-info/SOURCES.txt +0 -0
  68. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning.egg-info/dependency_links.txt +0 -0
  69. {python_motion_planning-1.1 → python_motion_planning-1.1.1}/src/python_motion_planning.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: python-motion-planning
3
- Version: 1.1
3
+ Version: 1.1.1
4
4
  Summary: Motion planning algorithms for Python
5
5
  Maintainer-email: Yang Haodong <913982779@qq.com>, Wu Maojia <2223942063@qq.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -690,7 +690,7 @@ Requires-Dist: matplotlib
690
690
  Requires-Dist: cvxopt
691
691
  Requires-Dist: osqp
692
692
  Requires-Dist: tqdm
693
- Requires-Dist: tensorboard==2.12.0
693
+ Dynamic: license-file
694
694
 
695
695
 
696
696
  # Introduction
@@ -711,26 +711,22 @@ We also provide [ROS C++](https://github.com/ai-winter/ros_motion_planning) vers
711
711
  # Quick Start
712
712
 
713
713
  ## Overview
714
- The file structure is shown below
714
+ The source file structure is shown below
715
715
 
716
716
  ```
717
717
  python_motion_planning
718
- ├─assets
719
- ├─docs
720
- ├─examples
721
- └─python_motion_planning
722
- ├─global_planner
723
- | ├─graph_search
724
- | ├─sample_search
725
- | └─evolutionary_search
726
- ├─local_planner
727
- ├─curve_generation
728
- └─utils
729
- ├─agent
730
- ├─environment
731
- ├─helper
732
- ├─planner
733
- └─plot
718
+ ├─global_planner
719
+ | ├─graph_search
720
+ | ├─sample_search
721
+ | └─evolutionary_search
722
+ ├─local_planner
723
+ ├─curve_generation
724
+ └─utils
725
+ ├─agent
726
+ ├─environment
727
+ ├─helper
728
+ ├─planner
729
+ └─plot
734
730
  ```
735
731
 
736
732
  * The global planning algorithm implementation is in the folder `global_planner` with `graph_search`, `sample_search` and `evolutionary search`.
@@ -756,44 +752,58 @@ pip install python-motion-planning
756
752
  ## Run
757
753
  Below are some simple examples.
758
754
 
759
- 1. Run planning and animation separately
755
+ 1. Run A* with discrete environment (Grid)
760
756
  ```python
761
757
  import python_motion_planning as pmp
762
- planner = pmp.AStar(start=(5, 5), goal=(45, 25), env=pmp.Grid(51, 31))
763
- cost, path, expand = planner.plan()
764
- planner.plot.animation(path, str(planner), cost, expand) # animation
765
- ```
766
758
 
767
- 2. Run planning and animation in one step
768
- ```python
769
- import python_motion_planning as pmp
770
- planner = pmp.AStar(start=(5, 5), goal=(45, 25), env=pmp.Grid(51, 31))
771
- planner.run() # run both planning and animation
759
+ # Create environment with custom obstacles
760
+ env = pmp.Grid(51, 31)
761
+ obstacles = env.obstacles
762
+ for i in range(10, 21):
763
+ obstacles.add((i, 15))
764
+ for i in range(15):
765
+ obstacles.add((20, i))
766
+ for i in range(15, 30):
767
+ obstacles.add((30, i))
768
+ for i in range(16):
769
+ obstacles.add((40, i))
770
+ env.update(obstacles)
771
+
772
+ planner = pmp.AStar(start=(5, 5), goal=(45, 25), env=env) # create planner
773
+ cost, path, expand = planner.plan() # plan
774
+ planner.plot.animation(path, str(planner), cost, expand) # animation
772
775
  ```
773
776
 
774
- 3. Create planner in factory mode
777
+ 2. Run RRT with continuous environment (Map)
775
778
  ```python
776
779
  import python_motion_planning as pmp
777
- search_factory = pmp.SearchFactory()
778
- planner = search_factory("a_star", start=(5, 5), goal=(45, 25), env=pmp.Grid(51, 31))
779
- planner.run() # run both planning and animation
780
+
781
+ # Create environment with custom obstacles
782
+ env = pmp.Map(51, 31)
783
+ obs_rect = [
784
+ [14, 12, 8, 2],
785
+ [18, 22, 8, 3],
786
+ [26, 7, 2, 12],
787
+ [32, 14, 10, 2]
788
+ ]
789
+ obs_circ = [
790
+ [7, 12, 3],
791
+ [46, 20, 2],
792
+ [15, 5, 2],
793
+ [37, 7, 3],
794
+ [37, 23, 3]
795
+ ]
796
+ env.update(obs_rect=obs_rect, obs_circ=obs_circ)
797
+
798
+ planner = pmp.RRT(start=(18, 8), goal=(37, 18), env=env) # create planner
799
+ cost, path, expand = planner.plan() # plan
800
+ planner.plot.animation(path, str(planner), cost, expand) # animation
780
801
  ```
781
802
 
782
803
  More examples can be found in the folder `examples` in the repository.
783
804
 
784
- ## Documentation
785
-
786
805
  For more details, you can refer to [online documentation](https://ai-winter.github.io/python_motion_planning/).
787
806
 
788
- The documentation is auto-generated using mkdocs. To do this, enter the root directory and run
789
-
790
- ```shell
791
- python generate_mkdocs.py
792
- mkdocs serve
793
- ```
794
-
795
- Then open the browser and go to [http://127.0.0.1:8000](http://127.0.0.1:8000). That is the generated documentation.
796
-
797
807
  # Version
798
808
  ## Global Planner
799
809
 
@@ -17,26 +17,22 @@ We also provide [ROS C++](https://github.com/ai-winter/ros_motion_planning) vers
17
17
  # Quick Start
18
18
 
19
19
  ## Overview
20
- The file structure is shown below
20
+ The source file structure is shown below
21
21
 
22
22
  ```
23
23
  python_motion_planning
24
- ├─assets
25
- ├─docs
26
- ├─examples
27
- └─python_motion_planning
28
- ├─global_planner
29
- | ├─graph_search
30
- | ├─sample_search
31
- | └─evolutionary_search
32
- ├─local_planner
33
- ├─curve_generation
34
- └─utils
35
- ├─agent
36
- ├─environment
37
- ├─helper
38
- ├─planner
39
- └─plot
24
+ ├─global_planner
25
+ | ├─graph_search
26
+ | ├─sample_search
27
+ | └─evolutionary_search
28
+ ├─local_planner
29
+ ├─curve_generation
30
+ └─utils
31
+ ├─agent
32
+ ├─environment
33
+ ├─helper
34
+ ├─planner
35
+ └─plot
40
36
  ```
41
37
 
42
38
  * The global planning algorithm implementation is in the folder `global_planner` with `graph_search`, `sample_search` and `evolutionary search`.
@@ -62,44 +58,58 @@ pip install python-motion-planning
62
58
  ## Run
63
59
  Below are some simple examples.
64
60
 
65
- 1. Run planning and animation separately
61
+ 1. Run A* with discrete environment (Grid)
66
62
  ```python
67
63
  import python_motion_planning as pmp
68
- planner = pmp.AStar(start=(5, 5), goal=(45, 25), env=pmp.Grid(51, 31))
69
- cost, path, expand = planner.plan()
70
- planner.plot.animation(path, str(planner), cost, expand) # animation
71
- ```
72
64
 
73
- 2. Run planning and animation in one step
74
- ```python
75
- import python_motion_planning as pmp
76
- planner = pmp.AStar(start=(5, 5), goal=(45, 25), env=pmp.Grid(51, 31))
77
- planner.run() # run both planning and animation
65
+ # Create environment with custom obstacles
66
+ env = pmp.Grid(51, 31)
67
+ obstacles = env.obstacles
68
+ for i in range(10, 21):
69
+ obstacles.add((i, 15))
70
+ for i in range(15):
71
+ obstacles.add((20, i))
72
+ for i in range(15, 30):
73
+ obstacles.add((30, i))
74
+ for i in range(16):
75
+ obstacles.add((40, i))
76
+ env.update(obstacles)
77
+
78
+ planner = pmp.AStar(start=(5, 5), goal=(45, 25), env=env) # create planner
79
+ cost, path, expand = planner.plan() # plan
80
+ planner.plot.animation(path, str(planner), cost, expand) # animation
78
81
  ```
79
82
 
80
- 3. Create planner in factory mode
83
+ 2. Run RRT with continuous environment (Map)
81
84
  ```python
82
85
  import python_motion_planning as pmp
83
- search_factory = pmp.SearchFactory()
84
- planner = search_factory("a_star", start=(5, 5), goal=(45, 25), env=pmp.Grid(51, 31))
85
- planner.run() # run both planning and animation
86
+
87
+ # Create environment with custom obstacles
88
+ env = pmp.Map(51, 31)
89
+ obs_rect = [
90
+ [14, 12, 8, 2],
91
+ [18, 22, 8, 3],
92
+ [26, 7, 2, 12],
93
+ [32, 14, 10, 2]
94
+ ]
95
+ obs_circ = [
96
+ [7, 12, 3],
97
+ [46, 20, 2],
98
+ [15, 5, 2],
99
+ [37, 7, 3],
100
+ [37, 23, 3]
101
+ ]
102
+ env.update(obs_rect=obs_rect, obs_circ=obs_circ)
103
+
104
+ planner = pmp.RRT(start=(18, 8), goal=(37, 18), env=env) # create planner
105
+ cost, path, expand = planner.plan() # plan
106
+ planner.plot.animation(path, str(planner), cost, expand) # animation
86
107
  ```
87
108
 
88
109
  More examples can be found in the folder `examples` in the repository.
89
110
 
90
- ## Documentation
91
-
92
111
  For more details, you can refer to [online documentation](https://ai-winter.github.io/python_motion_planning/).
93
112
 
94
- The documentation is auto-generated using mkdocs. To do this, enter the root directory and run
95
-
96
- ```shell
97
- python generate_mkdocs.py
98
- mkdocs serve
99
- ```
100
-
101
- Then open the browser and go to [http://127.0.0.1:8000](http://127.0.0.1:8000). That is the generated documentation.
102
-
103
113
  # Version
104
114
  ## Global Planner
105
115
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-motion-planning"
7
- version = "1.1"
7
+ version = "1.1.1"
8
8
  description = "Motion planning algorithms for Python"
9
9
  maintainers = [
10
10
  {name = "Yang Haodong", email = "913982779@qq.com"},
@@ -19,8 +19,7 @@ dependencies = [
19
19
  "matplotlib",
20
20
  "cvxopt",
21
21
  "osqp",
22
- "tqdm",
23
- "tensorboard==2.12.0"
22
+ "tqdm"
24
23
  ]
25
24
  classifiers = [
26
25
  "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
@@ -8,7 +8,7 @@ import random
8
8
  from bisect import bisect_left
9
9
 
10
10
  from .evolutionary_search import EvolutionarySearcher
11
- from python_motion_planning.utils import Env, Node
11
+ from python_motion_planning.utils import Env, Node, Grid
12
12
 
13
13
 
14
14
  class ACO(EvolutionarySearcher):
@@ -18,7 +18,7 @@ class ACO(EvolutionarySearcher):
18
18
  Parameters:
19
19
  start (tuple): start point coordinate
20
20
  goal (tuple): goal point coordinate
21
- env (Env): environment
21
+ env (Grid): environment
22
22
  heuristic_type (str): heuristic function type, default is euclidean
23
23
  n_ants (int): number of ants
24
24
  alpha (float): pheromone and heuristic factor weight coefficient
@@ -37,7 +37,7 @@ class ACO(EvolutionarySearcher):
37
37
  References:
38
38
  [1] Ant Colony Optimization: A New Meta-Heuristic
39
39
  """
40
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean",
40
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean",
41
41
  n_ants: int = 50, alpha: float = 1.0, beta: float = 5.0, rho: float = 0.1, Q: float = 1.0,
42
42
  max_iter: int = 100) -> None:
43
43
  super().__init__(start, goal, env, heuristic_type)
@@ -6,7 +6,7 @@
6
6
  """
7
7
  import math
8
8
 
9
- from python_motion_planning.utils import Env, Node, Planner
9
+ from python_motion_planning.utils import Env, Node, Planner, Grid
10
10
 
11
11
  class EvolutionarySearcher(Planner):
12
12
  """
@@ -15,10 +15,10 @@ class EvolutionarySearcher(Planner):
15
15
  Parameters:
16
16
  start (tuple): start point coordinate
17
17
  goal (tuple): goal point coordinate
18
- env (Env): environment
18
+ env (Grid): environment
19
19
  heuristic_type (str): heuristic function type
20
20
  """
21
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str="euclidean") -> None:
21
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str="euclidean") -> None:
22
22
  super().__init__(start, goal, env)
23
23
  # heuristic type
24
24
  self.heuristic_type = heuristic_type
@@ -8,7 +8,7 @@ import random, math
8
8
  from copy import deepcopy
9
9
 
10
10
  from .evolutionary_search import EvolutionarySearcher
11
- from python_motion_planning.utils import Env, MathHelper
11
+ from python_motion_planning.utils import Env, MathHelper, Grid
12
12
  from python_motion_planning.curve_generation import BSpline
13
13
 
14
14
  GEN_MODE_CIRCLE = 0
@@ -22,7 +22,7 @@ class PSO(EvolutionarySearcher):
22
22
  Parameters:
23
23
  start (tuple): start point coordinate
24
24
  goal (tuple): goal point coordinate
25
- env (Env): environment
25
+ env (Grid): environment
26
26
  heuristic_type (str): heuristic function type
27
27
  n_particles (int): number of particles
28
28
  w_inertial (float): inertial weight
@@ -41,7 +41,7 @@ class PSO(EvolutionarySearcher):
41
41
  >>> planner.plot.animation(path, str(planner), cost, cost_curve=cost_curve) # animation
42
42
  >>> planner.run() # run both planning and animation
43
43
  """
44
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean",
44
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean",
45
45
  n_particles: int = 300, point_num: int = 5, w_inertial: float = 1.0,
46
46
  w_cognitive: float = 1.0, w_social: float = 1.0, max_speed: int = 6,
47
47
  max_iter: int = 200, init_mode: int = GEN_MODE_RANDOM) -> None:
@@ -7,7 +7,7 @@
7
7
  import heapq
8
8
 
9
9
  from .graph_search import GraphSearcher
10
- from python_motion_planning.utils import Env, Node
10
+ from python_motion_planning.utils import Env, Grid, Node
11
11
 
12
12
 
13
13
  class AStar(GraphSearcher):
@@ -17,7 +17,7 @@ class AStar(GraphSearcher):
17
17
  Parameters:
18
18
  start (tuple): start point coordinate
19
19
  goal (tuple): goal point coordinate
20
- env (Env): environment
20
+ env (Grid): environment
21
21
  heuristic_type (str): heuristic function type
22
22
 
23
23
  Examples:
@@ -30,7 +30,7 @@ class AStar(GraphSearcher):
30
30
  References:
31
31
  [1] A Formal Basis for the heuristic Determination of Minimum Cost Paths
32
32
  """
33
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
33
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
34
34
  super().__init__(start, goal, env, heuristic_type)
35
35
 
36
36
  def __str__(self) -> str:
@@ -5,7 +5,7 @@
5
5
  @update: 2024.6.23
6
6
  """
7
7
  from .graph_search import GraphSearcher
8
- from python_motion_planning.utils import Env, Node
8
+ from python_motion_planning.utils import Env, Node, Grid
9
9
 
10
10
 
11
11
  class DNode(Node):
@@ -41,7 +41,7 @@ class DStar(GraphSearcher):
41
41
  Parameters:
42
42
  start (tuple): start point coordinate
43
43
  goal (tuple): goal point coordinate
44
- env (Env): environment
44
+ env (Grid): environment
45
45
 
46
46
  Examples:
47
47
  >>> import python_motion_planning as pmp
@@ -53,7 +53,7 @@ class DStar(GraphSearcher):
53
53
  References:
54
54
  [1]Optimal and Efficient Path Planning for Partially-Known Environments
55
55
  """
56
- def __init__(self, start: tuple, goal: tuple, env: Env) -> None:
56
+ def __init__(self, start: tuple, goal: tuple, env: Grid) -> None:
57
57
  super().__init__(start, goal, env, None)
58
58
  self.start = DNode(start, None, 'NEW', float('inf'), float("inf"))
59
59
  self.goal = DNode(goal, None, 'NEW', 0, float('inf'))
@@ -8,7 +8,7 @@ import heapq
8
8
 
9
9
  from .graph_search import GraphSearcher
10
10
  from .lpa_star import LPAStar, LNode
11
- from python_motion_planning.utils import Env
11
+ from python_motion_planning.utils import Env, Grid
12
12
 
13
13
 
14
14
  class DStarLite(LPAStar):
@@ -18,7 +18,7 @@ class DStarLite(LPAStar):
18
18
  Parameters:
19
19
  start (tuple): start point coordinate
20
20
  goal (tuple): goal point coordinate
21
- env (Env): environment
21
+ env (Grid): environment
22
22
  heuristic_type (str): heuristic function type
23
23
 
24
24
  Examples:
@@ -31,7 +31,7 @@ class DStarLite(LPAStar):
31
31
  References:
32
32
  [1] D* Lite
33
33
  """
34
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
34
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
35
35
  GraphSearcher.__init__(self, start, goal, env, heuristic_type)
36
36
  # start and goal
37
37
  self.start = LNode(start, float('inf'), float('inf'), None)
@@ -7,11 +7,27 @@
7
7
  import heapq
8
8
 
9
9
  from .a_star import AStar
10
- from python_motion_planning.utils import Env
10
+ from python_motion_planning.utils import Env, Grid
11
11
 
12
12
 
13
13
  class Dijkstra(AStar):
14
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
14
+ """
15
+ Class for Dijkstra motion planning.
16
+
17
+ Parameters:
18
+ start (tuple): start point coordinate
19
+ goal (tuple): goal point coordinate
20
+ env (Grid): environment
21
+ heuristic_type (str): heuristic function type
22
+
23
+ Examples:
24
+ >>> import python_motion_planning as pmp
25
+ >>> planner = pmp.Dijkstra((5, 5), (45, 25), pmp.Grid(51, 31))
26
+ >>> cost, path, expand = planner.plan() # planning results only
27
+ >>> planner.plot.animation(path, str(planner), cost, expand) # animation
28
+ >>> planner.run() # run both planning and animation
29
+ """
30
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
15
31
  super().__init__(start, goal, env, heuristic_type)
16
32
 
17
33
  def __str__(self) -> str:
@@ -19,20 +35,12 @@ class Dijkstra(AStar):
19
35
 
20
36
  def plan(self) -> tuple:
21
37
  """
22
- Class for Dijkstra motion planning.
23
-
24
- Parameters:
25
- start (tuple): start point coordinate
26
- goal (tuple): goal point coordinate
27
- env (Env): environment
28
- heuristic_type (str): heuristic function type
38
+ Dijkstra motion plan function.
29
39
 
30
- Examples:
31
- >>> import python_motion_planning as pmp
32
- >>> planner = pmp.Dijkstra((5, 5), (45, 25), pmp.Grid(51, 31))
33
- >>> cost, path, expand = planner.plan() # planning results only
34
- >>> planner.plot.animation(path, str(planner), cost, expand) # animation
35
- >>> planner.run() # run both planning and animation
40
+ Returns:
41
+ cost (float): path cost
42
+ path (list): planning path
43
+ expand (list): all nodes that planner has searched
36
44
  """
37
45
  # OPEN list (priority queue) and CLOSED list (hash table)
38
46
  OPEN = []
@@ -7,11 +7,27 @@
7
7
  import heapq
8
8
 
9
9
  from .a_star import AStar
10
- from python_motion_planning.utils import Env
10
+ from python_motion_planning.utils import Env, Grid
11
11
 
12
12
 
13
13
  class GBFS(AStar):
14
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
14
+ """
15
+ Class for Greedy Best First Search.
16
+
17
+ Parameters:
18
+ start (tuple): start point coordinate
19
+ goal (tuple): goal point coordinate
20
+ env (Grid): environment
21
+ heuristic_type (str): heuristic function type
22
+
23
+ Examples:
24
+ >>> import python_motion_planning as pmp
25
+ >>> planner = pmp.GBFS((5, 5), (45, 25), pmp.Grid(51, 31))
26
+ >>> cost, path, expand = planner.plan() # planning results only
27
+ >>> planner.plot.animation(path, str(planner), cost, expand) # animation
28
+ >>> planner.run() # run both planning and animation
29
+ """
30
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
15
31
  super().__init__(start, goal, env, heuristic_type)
16
32
 
17
33
  def __str__(self) -> str:
@@ -19,20 +35,12 @@ class GBFS(AStar):
19
35
 
20
36
  def plan(self) -> tuple:
21
37
  """
22
- Class for Greedy Best First Search.
23
-
24
- Parameters:
25
- start (tuple): start point coordinate
26
- goal (tuple): goal point coordinate
27
- env (Env): environment
28
- heuristic_type (str): heuristic function type
38
+ GBFS motion plan function.
29
39
 
30
- Examples:
31
- >>> import python_motion_planning as pmp
32
- >>> planner = pmp.GBFS((5, 5), (45, 25), pmp.Grid(51, 31))
33
- >>> cost, path, expand = planner.plan() # planning results only
34
- >>> planner.plot.animation(path, str(planner), cost, expand) # animation
35
- >>> planner.run() # run both planning and animation
40
+ Returns:
41
+ cost (float): path cost
42
+ path (list): planning path
43
+ expand (list): all nodes that planner has searched
36
44
  """
37
45
  # OPEN list (priority queue) and CLOSED list (hash table)
38
46
  OPEN = []
@@ -5,7 +5,7 @@
5
5
  @update: 2023.1.13
6
6
  """
7
7
  import math
8
- from python_motion_planning.utils import Env, Node, Planner
8
+ from python_motion_planning.utils import Env, Node, Planner, Grid
9
9
 
10
10
 
11
11
  class GraphSearcher(Planner):
@@ -15,10 +15,10 @@ class GraphSearcher(Planner):
15
15
  Parameters:
16
16
  start (tuple): start point coordinate
17
17
  goal (tuple): goal point coordinate
18
- env (Env): environment
18
+ env (Grid): environment
19
19
  heuristic_type (str): heuristic function type
20
20
  """
21
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str="euclidean") -> None:
21
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str="euclidean") -> None:
22
22
  super().__init__(start, goal, env)
23
23
  # heuristic type
24
24
  self.heuristic_type = heuristic_type
@@ -7,7 +7,7 @@
7
7
  import heapq
8
8
 
9
9
  from .a_star import AStar
10
- from python_motion_planning.utils import Env, Node
10
+ from python_motion_planning.utils import Env, Node, Grid
11
11
 
12
12
  class JPS(AStar):
13
13
  """
@@ -16,7 +16,7 @@ class JPS(AStar):
16
16
  Parameters:
17
17
  start (tuple): start point coordinate
18
18
  goal (tuple): goal point coordinate
19
- env (Env): environment
19
+ env (Grid): environment
20
20
  heuristic_type (str): heuristic function type
21
21
 
22
22
  Examples:
@@ -29,7 +29,7 @@ class JPS(AStar):
29
29
  References:
30
30
  [1] Online Graph Pruning for Pathfinding On Grid Maps
31
31
  """
32
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
32
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
33
33
  super().__init__(start, goal, env, heuristic_type)
34
34
 
35
35
  def __str__(self) -> str:
@@ -7,7 +7,7 @@
7
7
  import heapq
8
8
 
9
9
  from .theta_star import ThetaStar
10
- from python_motion_planning.utils import Env, Node
10
+ from python_motion_planning.utils import Env, Node, Grid
11
11
 
12
12
  class LazyThetaStar(ThetaStar):
13
13
  """
@@ -16,7 +16,7 @@ class LazyThetaStar(ThetaStar):
16
16
  Parameters:
17
17
  start (tuple): start point coordinate
18
18
  goal (tuple): goal point coordinate
19
- env (Env): environment
19
+ env (Grid): environment
20
20
  heuristic_type (str): heuristic function type
21
21
 
22
22
  Examples:
@@ -29,7 +29,7 @@ class LazyThetaStar(ThetaStar):
29
29
  References:
30
30
  [1] Lazy Theta*: Any-Angle Path Planning and Path Length Analysis in 3D
31
31
  """
32
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
32
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
33
33
  super().__init__(start, goal, env, heuristic_type)
34
34
 
35
35
  def __str__(self) -> str:
@@ -7,7 +7,7 @@
7
7
  import heapq
8
8
 
9
9
  from .graph_search import GraphSearcher
10
- from python_motion_planning.utils import Env, Node
10
+ from python_motion_planning.utils import Env, Node, Grid
11
11
 
12
12
  class LNode(Node):
13
13
  """
@@ -43,7 +43,7 @@ class LPAStar(GraphSearcher):
43
43
  Parameters:
44
44
  start (tuple): start point coordinate
45
45
  goal (tuple): goal point coordinate
46
- env (Env): environment
46
+ env (Grid): environment
47
47
  heuristic_type (str): heuristic function type
48
48
 
49
49
  Examples:
@@ -56,7 +56,7 @@ class LPAStar(GraphSearcher):
56
56
  References:
57
57
  [1] Lifelong Planning A*
58
58
  """
59
- def __init__(self, start: tuple, goal: tuple, env: Env, heuristic_type: str = "euclidean") -> None:
59
+ def __init__(self, start: tuple, goal: tuple, env: Grid, heuristic_type: str = "euclidean") -> None:
60
60
  super().__init__(start, goal, env, heuristic_type)
61
61
  # start and goal
62
62
  self.start = LNode(start, float('inf'), 0.0, None)