From 6483b070afa21fb9466583865eca150a2318d2b1 Mon Sep 17 00:00:00 2001 From: zhm-real Date: Tue, 17 Nov 2020 09:48:19 -0800 Subject: [PATCH] match env --- Search_based_Planning/Search_2D/ARAstar.py | 2 +- .../Search_2D/Bidirectional_a_star.py | 2 +- Search_based_Planning/Search_2D/D_star.py | 2 +- .../Search_2D/D_star_Lite.py | 2 +- Search_based_Planning/Search_2D/LPAstar.py | 2 +- Search_based_Planning/Search_2D/LRTAstar.py | 2 +- .../Search_2D/PotentialField.py | 172 ------------------ Search_based_Planning/Search_2D/RTAAStar.py | 2 +- .../__pycache__/Astar.cpython-38.pyc | Bin 0 -> 5495 bytes .../Search_2D/__pycache__/env.cpython-38.pyc | Bin 0 -> 1405 bytes .../__pycache__/plotting.cpython-38.pyc | Bin 0 -> 5398 bytes .../__pycache__/queue.cpython-38.pyc | Bin 0 -> 2668 bytes 12 files changed, 7 insertions(+), 179 deletions(-) delete mode 100644 Search_based_Planning/Search_2D/PotentialField.py create mode 100644 Search_based_Planning/Search_2D/__pycache__/Astar.cpython-38.pyc create mode 100644 Search_based_Planning/Search_2D/__pycache__/env.cpython-38.pyc create mode 100644 Search_based_Planning/Search_2D/__pycache__/plotting.cpython-38.pyc create mode 100644 Search_based_Planning/Search_2D/__pycache__/queue.cpython-38.pyc diff --git a/Search_based_Planning/Search_2D/ARAstar.py b/Search_based_Planning/Search_2D/ARAstar.py index 1f0ab3d..c014616 100644 --- a/Search_based_Planning/Search_2D/ARAstar.py +++ b/Search_based_Planning/Search_2D/ARAstar.py @@ -14,7 +14,7 @@ import math sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import plotting, env +from Search_2D import plotting, env class AraStar: diff --git a/Search_based_Planning/Search_2D/Bidirectional_a_star.py b/Search_based_Planning/Search_2D/Bidirectional_a_star.py index 3b6bf12..3580c1a 100644 --- a/Search_based_Planning/Search_2D/Bidirectional_a_star.py +++ b/Search_based_Planning/Search_2D/Bidirectional_a_star.py @@ -11,7 +11,7 @@ import heapq sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import plotting, env +from Search_2D import plotting, env class BidirectionalAStar: diff --git a/Search_based_Planning/Search_2D/D_star.py b/Search_based_Planning/Search_2D/D_star.py index 300059b..60b6c7e 100644 --- a/Search_based_Planning/Search_2D/D_star.py +++ b/Search_based_Planning/Search_2D/D_star.py @@ -11,7 +11,7 @@ import matplotlib.pyplot as plt sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import plotting, env +from Search_2D import plotting, env class DStar: diff --git a/Search_based_Planning/Search_2D/D_star_Lite.py b/Search_based_Planning/Search_2D/D_star_Lite.py index fb7677e..4996be2 100644 --- a/Search_based_Planning/Search_2D/D_star_Lite.py +++ b/Search_based_Planning/Search_2D/D_star_Lite.py @@ -11,7 +11,7 @@ import matplotlib.pyplot as plt sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import plotting, env +from Search_2D import plotting, env class DStar: diff --git a/Search_based_Planning/Search_2D/LPAstar.py b/Search_based_Planning/Search_2D/LPAstar.py index 22e56df..4fd70ae 100644 --- a/Search_based_Planning/Search_2D/LPAstar.py +++ b/Search_based_Planning/Search_2D/LPAstar.py @@ -11,7 +11,7 @@ import matplotlib.pyplot as plt sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import plotting, env +from Search_2D import plotting, env class LPAStar: diff --git a/Search_based_Planning/Search_2D/LRTAstar.py b/Search_based_Planning/Search_2D/LRTAstar.py index 71418d3..108903b 100644 --- a/Search_based_Planning/Search_2D/LRTAstar.py +++ b/Search_based_Planning/Search_2D/LRTAstar.py @@ -11,7 +11,7 @@ import math sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import queue, plotting, env +from Search_2D import queue, plotting, env class LrtAStarN: diff --git a/Search_based_Planning/Search_2D/PotentialField.py b/Search_based_Planning/Search_2D/PotentialField.py deleted file mode 100644 index dfa82e7..0000000 --- a/Search_based_Planning/Search_2D/PotentialField.py +++ /dev/null @@ -1,172 +0,0 @@ -""" -Potential_Field -@author: huiming zhou -""" - -import os -import sys -import numpy as np -import matplotlib.pyplot as plt -from collections import deque - -sys.path.append(os.path.dirname(os.path.abspath(__file__)) + - "/../../Search_based_Planning/") - -from Search_2D import plotting -from Search_2D import env - - -class PF: - def __init__(self, s_start, s_goal): - self.s_start = s_start - self.s_goal = s_goal - self.kp = 5.0 - self.eta = 400 - self.r = 30.0 - self.OL = 10 - self.rr = 2 - - self.Env = env.Env() - self.Plot = plotting.Plotting(s_start, s_goal) - - self.u_set = self.Env.motions # feasible input set - self.obs = self.Env.obs # position of obstacles - self.x = self.Env.x_range - self.y = self.Env.y_range - - def run(self): - pmap, minx, miny = self.calc_potential_field() - - d = np.hypot(self.s_start[0] - self.s_goal[0], - self.s_start[1] - self.s_goal[1]) - - ix = self.s_start[0] - minx - iy = self.s_start[1] - miny - gix = self.s_goal[0] - minx - giy = self.s_goal[1] - miny - - self.draw_heatmap(pmap) - plt.gcf().canvas.mpl_connect('key_release_event', - lambda event: [exit(0) if event.key == 'escape' else None]) - plt.plot(ix, iy, "sk") - plt.plot(gix, giy, "sm") - - rx, ry = [self.s_start[0]], [self.s_goal[0]] - ids_rec = deque() - - while d >= 1: - minp = float("inf") - minix, miniy = -1, -1 - - for u in self.u_set: - inx = int(ix + u[0]) - iny = int(iy + u[1]) - - if inx >= len(pmap) or iny >= len(pmap[0]) or inx < 0 or iny < 0: - p = float("inf") - print("test") - else: - p = pmap[inx][iny] - - if minp > p: - minp = p - minix = inx - miniy = iny - - ix = minix - iy = miniy - xp = ix + minx - yp = iy + miny - d = np.hypot(self.s_goal[0] - xp, self.s_goal[1] - yp) - rx.append(xp) - ry.append(yp) - - if self.is_oscillation(ids_rec, ix, iy): - print("Oscillation detected at ({},{})!".format(ix, iy)) - break - - plt.plot(ix, iy, ".r") - plt.pause(0.01) - - return rx, ry - - def calc_potential_field(self): - minx = 0 - miny = 0 - maxx = self.x - 1 - maxy = self.y - 1 - xw = maxx - minx - yw = maxy - miny - - pmap = [[0.0 for i in range(yw)] for i in range(xw)] - - for ix in range(xw): - x = ix + minx - - for iy in range(yw): - y = iy + miny - ug = self.calc_attractive_potential(x, y) - uo = self.calc_repulsive_potential(x, y) - uf = ug + uo - pmap[ix][iy] = uf - - return pmap, minx, miny - - def calc_attractive_potential(self, x, y): - return 0.5 * self.kp * \ - np.hypot(x - self.s_goal[0], y - self.s_goal[1]) - - def calc_repulsive_potential(self, x, y): - dmin = float("inf") - - for s in self.obs: - d = np.hypot(x - s[0], y - s[1]) - if dmin >= d: - dmin = d - - # calc repulsive potential - dq = dmin - - if dq <= self.rr: - if dq <= 0.8: - dq = 0.8 - - return 0.5 * self.eta * (1.0 / dq - 1.0 / self.rr) ** 2 - else: - return 0.0 - - def is_oscillation(self, ids_rec, ix, iy): - ids_rec.append((ix, iy)) - - if len(ids_rec) > self.OL: - ids_rec.popleft() - - ids_set = set() - for s in ids_rec: - if s in ids_set: - return True - else: - ids_set.add(s) - return False - - @staticmethod - def draw_heatmap(data): - data = np.array(data).T - plt.pcolor(data, vmax=100.0, cmap=plt.cm.Blues) - - -def main(): - s_start = (5, 5) - s_goal = (45, 25) - - pf = PF(s_start, s_goal) - - plt.grid(True) - plt.axis("equal") - _, _ = pf.run() - plt.show() - - -if __name__ == '__main__': - print(__file__ + " start!!") - main() diff --git a/Search_based_Planning/Search_2D/RTAAStar.py b/Search_based_Planning/Search_2D/RTAAStar.py index 42eb90d..de0a615 100644 --- a/Search_based_Planning/Search_2D/RTAAStar.py +++ b/Search_based_Planning/Search_2D/RTAAStar.py @@ -11,7 +11,7 @@ import math sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../Search_based_Planning/") -from Search_based_Planning.Search_2D import queue, plotting, env +from Search_2D import queue, plotting, env class RTAAStar: diff --git a/Search_based_Planning/Search_2D/__pycache__/Astar.cpython-38.pyc b/Search_based_Planning/Search_2D/__pycache__/Astar.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d90ba3c44538ba88a6880eb06eb10a78fa65dcf GIT binary patch literal 5495 zcma)A&5s*r8Gqk*#^dp<*V&|LvVpct=n~=(c46T0-SoOH;Yt(tXjd92-6d zttx8zwHcprPrJxwoYQ=LU=7z=Yr}f0&e=Q6t9ZtT%rlNeYu&4Q=7+4+@XvU)10kRK zjU$FR;sI+~lgri}Cr(^x-`KNmyW^x6$z8iQ4u(P4wI{u3Y(2*z+5Y6!o$YPtTJ|Ru}q5|#hL!z{d@bFarcMs zJ-D}*>0Z#rQuput=-&RrjCY%QrpNxEBP&=%8bk<%A2WFl*}sN6y=ds~5Wjcc36gim zk9O|6Nv~w@iy2KzOjJ@$To3LIbuaS3Z2H!w<@ ziHmHi6F&OlpejEpPodppX?`B<5<6fro!8J#s{>Ojr_^vpEkEI5dbo!j&d@k@^0f}h zv6#H8fJ@*l@y#^kkKu?~V>Lld{n`?#Vihs&<^m?qKX^Rn;DiW0* z!i)y5^9Hc9@wu)Ue1q44Cm|aA0`fX?po_mECTDVFl`FJKz~?`b4uY40);Y%@zbApYw8+u>B$>+q$E)sr!e-j$uoGf;O)*vO0r(4no zU&gSeQM|vO>BNt$T7V?eM$SP?d+Z#nvSG7a%PE(4Nzm2vHE8pyB}{%ny}czSudTfO z%Cr-@mq1lRQfvJa1!6!d5?HSz9^lcTi+RAOl`fkaNY#WNi`0NbaY!O$4{U&(oM#s? zvygE^eu`0gYAE?Or?s?tTuEV1A>Fl9K(>2_pJJv#ZIJEW)WUi-CD~Psu#{x4rD%m* z|28rEHS}AM-ZjdVOv}8Cwpv=DzVck?FV1BZ=dudPmWOX)SBqeiRtuo~sbsnwhrodS zBuIL5RQRV5Q<#ulo8F&HF%^;p+IDkb7B97t&qc>x@2u4R?Z zAaWCV5j6>a2%=k>Hu)uLBuM#2qw$K{#Yp6a%im!pN+6Humjz5EMLSyLA9fVcV80V2&qKa729%CUnvQg7d>w=wl=ru${8!9l04e;lOAs5> zNR)61s&&L~#Gy_GCui^$=BdYp|0lM;mGSY%JZFG9S4OzB!26?jXK}!hBMbOLC__7C8)TlyiRWP>Hrs(0PhNtkigQa_;oXZDPy( zM`gOZQY+s@LFscSmYI;}65fYNg}`bl{L}f}H({JTGVjpmm)Itok=fNIe=8sNt~+Rt z2aq=VF8P?9NP>ewZ0EjOIc(0h+}T@_)G+eCP*7nzfrRD$Ig|g#W`GYwIX}=iY?Idr z7kE7I>_Zm2OSl>41&-{h|?YVVPan`tiW|Ub^x5F z4G@+LJgq-Y0C5Fnb8~@ZcI__);X^qF%9gjWckH(z#%Lu4R_YowU01vAfcU2JiiZ$V>k@h!25`dk?-!}yfW zCY_{|0mUNp^2&c;$KcY8UsN&Lvd*@DV0S5s+_tZF3-L-K5+(n--9z|1k1lQH3^&Vb z&xL>2ZjYrTX06!gxmb6~DbTda(vgOiZxC4#uuEwBJ?m3IN~R6O1C7{x1{#^ zteZzTjGWsPh(s=MZ^Rt%hw|t}$j0IJVIx70vR{1i)AD@xa_>Elq2V#w>cfByJwxGk z9)D8wy#&1ZB_CqIsQ7@OLXvXPrk;nW$}b>|km+O&&`i-mZuP%TC7Z~~gOJbg2c%f} zo`%T{jV!sfgoWjh6vN!qFGVUtR zwcl*e$AHis`i_%Xjx&tB@qo&8$2lCkgQBPEI9}9t97*yiUnfHToATzC97j?Ik_19I zj#A0Y0v)QP`~?yOLXuJ&Z~%pQ#4sCayeIAqEb zpoBPoq)lN(5PzUHqhJx?;EWZaAz?vJE1o{n@a>H>N@c$(p3{QzO%Rm7iR?L@zE$(b z?LpxAZa5Klu7MqN7)j1eX5KHpvZ+_dYHk=HGKXnK=%yB29fVf4WY)r9&ULl7Ze^Bn?b3@zE L8XvH?z%~9KyL;g` literal 0 HcmV?d00001 diff --git a/Search_based_Planning/Search_2D/__pycache__/env.cpython-38.pyc b/Search_based_Planning/Search_2D/__pycache__/env.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e45c75b8d0504fc65225c15ff892fb552c211b30 GIT binary patch literal 1405 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 literal 0 HcmV?d00001 diff --git a/Search_based_Planning/Search_2D/__pycache__/queue.cpython-38.pyc b/Search_based_Planning/Search_2D/__pycache__/queue.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69c46c686152f84441b374e99fc01ccabf6439d4 GIT binary patch literal 2668 zcmcIlQIFe15Z<-pi<7$?rB?w31g-=^5i|jW1gfAq>8dM8RXB9w#T6{Bckklj*uGsG z=}viTe+YTZJHKXMdFo%_iJ5gAn>&Y!12)<5?vB0R&g?fc-wy_T0*&^5V;?z${Em}m zvthCiUEK%438yjf%O~~eL&7a?KPTLNX89J(I^2Po12Y?DTf7UiF3dWd9+RQ_0`?%2 z5M{GjFxiK$J_aF(PdV`|PJO%F9lkdE`cAo{zr|hNdrtf=@58R!y7yfn3UT<&;kOq* z_C06^aiG*aZ@p|59|#r7D9fWXX{fwNd0eRIG!fi8Nu_rfNtNG?lDp*~Epks5u^5>> zLJB9W8jkVk2hi0nh@AXN7i3PD#mO;Q(#g`++hH2VB1BZB9WKrap&bx~SW?|lB0gCX ziC6H)Y&=b8Vtg@8i}AxK|GIcGJ__>bQ5+;ml$?%_MIgf|dlD$Y+2z$wAB;yM{J-oi z13k*lwaZwPL^)&Iczm>j(2JXEmyIg*%S@h=r}P=+^k)l9wk8t2vb3}vi$r!|EL{|6 zVJQ$!J7SjQ=jgKv`IQ>k=t6TMcmW%Zk%-3AH(&su;OjYEPzq!`CK9zv%K+-FAj?F; zVcLULzmud~Tt0xE75S^6t>6bWJZLuCjCPdZiwbtQg6(E$7K@X-)nNNnmo zcpphH6O8FTW3!Y4=U}|U*jW+8D@~U%o`#Ic9oR~uBP4DrUqey5*o@H65*-IoO%yJ< zwBxuo{>*v^OMhwj@;>x`7lw~841c&1hPb>T3{iC@3?BvmO%xht$PSp*b}z<}@1V_S z{5k;eMAr%cIY1!fbt@X)*d6E6H23SdP19n}C+d%PF z!;pXIC10dg1aNs22m>H^F`+qf}n} zbcLyAeFIgE&XXdQkW!Q