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)