rrt3D.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 matplotlib.pyplot as plt
  10. import os
  11. import sys
  12. sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Sampling_based_Planning/")
  13. from rrt_3D.env3D import env
  14. from rrt_3D.utils3D import getDist, sampleFree, nearest, steer, isCollide, near, visualization, cost, path
  15. class rrt():
  16. def __init__(self):
  17. self.env = env()
  18. self.Parent = {}
  19. self.V = []
  20. # self.E = edgeset()
  21. self.i = 0
  22. self.maxiter = 10000
  23. self.stepsize = 0.5
  24. self.Path = []
  25. self.done = False
  26. self.x0 = tuple(self.env.start)
  27. self.xt = tuple(self.env.goal)
  28. self.ind = 0
  29. self.fig = plt.figure(figsize=(10, 8))
  30. def wireup(self, x, y):
  31. # self.E.add_edge([s, y]) # add edge
  32. self.Parent[x] = y
  33. def run(self):
  34. self.V.append(self.x0)
  35. while self.ind < self.maxiter:
  36. xrand = sampleFree(self)
  37. xnearest = nearest(self, xrand)
  38. xnew = steer(self, xnearest, xrand)
  39. collide, _ = isCollide(self, xnearest, xnew)
  40. if not collide:
  41. self.V.append(xnew) # add point
  42. self.wireup(xnew, xnearest)
  43. if getDist(xnew, self.xt) <= self.stepsize:
  44. self.wireup(self.xt, xnew)
  45. self.Path, D = path(self)
  46. print('Total distance = ' + str(D))
  47. break
  48. # visualization(self)
  49. self.i += 1
  50. self.ind += 1
  51. # if the goal is really reached
  52. self.done = True
  53. visualization(self)
  54. plt.show()
  55. if __name__ == '__main__':
  56. p = rrt()
  57. starttime = time.time()
  58. p.run()
  59. print('time used = ' + str(time.time() - starttime))