rrt3D.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. """
  2. This is rrt star code for 3D
  3. @author: yue qi
  4. """
  5. import numpy as np
  6. from numpy.matlib import repmat
  7. from collections import defaultdict
  8. import time
  9. import os
  10. import sys
  11. sys.path.append(os.path.dirname(os.path.abspath(__file__))+"/../../Sampling-based Planning/")
  12. from rrt_3D.env3D import env
  13. from rrt_3D.utils3D import getDist, sampleFree, nearest, steer, isCollide, near, visualization, cost, path, edgeset
  14. class rrtstar():
  15. def __init__(self):
  16. self.env = env()
  17. self.Parent = defaultdict(lambda: defaultdict(dict))
  18. self.V = []
  19. self.E = edgeset()
  20. self.i = 0
  21. self.maxiter = 10000
  22. self.stepsize = 0.5
  23. self.Path = []
  24. def wireup(self,x,y):
  25. self.E.add_edge([x,y]) # add edge
  26. self.Parent[str(x[0])][str(x[1])][str(x[2])] = y
  27. def run(self):
  28. self.V.append(self.env.start)
  29. ind = 0
  30. xnew = self.env.start
  31. while ind < self.maxiter and getDist(xnew,self.env.goal) > 1:
  32. xrand = sampleFree(self)
  33. xnearest = nearest(self,xrand)
  34. xnew = steer(self,xnearest,xrand)
  35. if not isCollide(self,xnearest,xnew):
  36. self.V.append(xnew) # add point
  37. self.wireup(xnew,xnearest)
  38. #visualization(self)
  39. self.i += 1
  40. ind += 1
  41. if getDist(xnew,self.env.goal) <= 1:
  42. self.wireup(self.env.goal,xnew)
  43. self.Path,D = path(self)
  44. print('Total distance = '+str(D))
  45. visualization(self)
  46. if __name__ == '__main__':
  47. p = rrtstar()
  48. starttime = time.time()
  49. p.run()
  50. print('time used = ' + str(time.time()-starttime))