41 from ompl
import util
as ou
42 from ompl
import base
as ob
43 from ompl
import geometric
as og
47 from os.path
import abspath, dirname, join
48 sys.path.insert(0, join(dirname(dirname(abspath(__file__))),
'py-bindings'))
49 from ompl
import util
as ou
50 from ompl
import base
as ob
51 from ompl
import geometric
as og
53 from math
import fmod, sqrt
54 from typing
import Union
59 def allocSpace(space: str):
63 if space.lower() ==
"vana":
65 stateSpace.setBounds(bounds)
67 elif space.lower() ==
"owen":
69 stateSpace.setBounds(bounds)
72 if space.lower() !=
"vanaowen":
73 ou.OMPL_WARN(f
"Unknown state space {space}; defaulting to VanaOwen")
75 stateSpace.setBounds(bounds)
78 def allocatePlanner(si: ob.SpaceInformation, planner: str):
79 if planner.lower() ==
"rrt":
81 elif planner.lower() ==
"rrtstar":
83 elif planner.lower() ==
"est":
85 elif planner.lower() ==
"kpiece":
87 elif planner.lower() ==
"sst":
90 ou.OMPL_ERROR(f
"Planner type {planner} is not implemented in allocation function.")
93 def isStateValid(state: Union[ob.OwenState, ob.VanaState, ob.VanaOwenState]):
96 d = fmod(abs(state[i]), 2. * radius) - radius
98 return sqrt(dist) > .75 * radius
101 def plan(space : str, planner : str):
102 stateSpace = allocSpace(space)
109 if isStateValid(start):
113 if isStateValid(goal):
115 ss.setStartAndGoalStates(start, goal)
116 si = ss.getSpaceInformation()
117 si.setStateValidityCheckingResolution(0.001)
118 ss.setPlanner(allocatePlanner(si, planner))
121 result = ss.solve(10.0)
123 path = ss.getSolutionPath()
124 length = path.length()
126 print(path.printAsMatrix())
128 if result == ob.PlannerStatus.APPROXIMATE_SOLUTION:
129 print(
"Approximate solution. Distance to goal is ", ss.getProblemDefinition().getSolutionDifference())
130 print(
"Path length is ", length)
132 if __name__ ==
"__main__":
134 parser = argparse.ArgumentParser(description=
'Optimal motion planning demo program.')
137 parser.add_argument(
'-s',
'--space', default=
"VanaOwen", \
138 choices=[
'Owen',
'Vana',
'VanaOwen'], \
139 help=
'Type of 3D Dubins state space to use, defaults to vanaowen.')
140 parser.add_argument(
'-p',
'--planner', default=
'KPIECE', \
141 choices=[
'RRT',
'RRTstar',
'EST',
'KPIECE',
'SST'], \
142 help=
'Planning algorithm to use, defaults to KPIECE if not given.')
145 args = parser.parse_args()
147 plan(args.space, args.planner)