from json import loads
from math import copysign, cos, pi, sin
from matplotlib import pyplot as plt
-from sys import argv
+from sys import argv, exit
sign = lambda x: copysign(1, x)
WHEEL_BASE = 2.450
WIDTH = 1.625
-SCEN_FILE = argv[1]
-TRAJ_FILE = argv[2]
PLOT = {
"enable" : True,
"node" : False,
"frame" : False,
"path" : False,
"traj" : True,
+ "slot" : True,
}
COLOR = {
"node": "lightgrey",
"trajectory-frame": "lightblue",
"obstacle": "black",
"log": ("gold", "orange", "blueviolet", "blue", "navy", "black"),
+ "slot": "red"
}
def car_frame(pose):
pass
if __name__ == "__main__":
+ SCEN_FILE = argv[1]
+
s = load_scenario(SCEN_FILE)
try:
+ TRAJ_FILE = argv[2]
t = load_trajectory(TRAJ_FILE) # fixed to trajectories
except:
- pass
+ t = {"elap": 0}
plt.rcParams["font.size"] = 24
+ plt.rcParams['hatch.linewidth'] = 1.0
fig = plt.figure()
+
+ ################
## 1st subplot
- ax = fig.add_subplot(121)
+
+ if "edge" in t.keys():
+ ax = fig.add_subplot(121)
+ else:
+ ax = fig.add_subplot(111)
ax.set_aspect("equal")
- ax.set_title("RRT* final path")
- ax.set_xlabel("Longitudinal direction [m]")
- ax.set_ylabel("Lateral direction [m]")
+ ax.set_title("Final path")
+ ax.set_xlabel("x [m]")
+ ax.set_ylabel("y [m]")
- # plot here
for o in s["obst"]:
try:
plt.plot(*plot_nodes(o["segment"]), color="black")
try:
ax.add_artist(plt.Circle((o["circle"][0], o["circle"][1]),
o["circle"][2],
- color="black", fill=False))
+ color="black", fill=False, hatch="//"))
except:
pass
if PLOT["node"]:
print("No path")
if PLOT["traj"]:
try:
- for traj in range(4):#len(t["traj"])):
+ for traj in range(len(t["traj"])):
if PLOT["frame"]:
for i in t["traj"][traj]:
plt.plot(*car_frame(i), color=COLOR["log"][traj],
- label=t["cost"][traj])
+ label=t["cost"][traj], lw=1)
else:
try:
plt.plot(
label=t["cost"][traj])
except:
print("No trajectory")
- plt.plot(*plot_nodes([s["init"]]), color=COLOR["start"], marker=".")
- plt.plot(*plot_nodes([s["goal"]]), color=COLOR["goal"], marker=".")
- # end plot here
+
+ if PLOT["slot"]:
+ try:
+ plt.plot(*plot_nodes(s["slot"]["polygon"]), color=COLOR["slot"])
+ except:
+ print("No slot")
+
+ try: # init
+ plt.plot(*car_frame(t["init"]), color="red", lw=2)
+ plt.plot(*plot_nodes([t["init"]]), color="red", marker="+", ms=12)
+ except:
+ plt.plot(*car_frame(s["init"]), color="red", lw=2)
+ plt.plot(*plot_nodes([s["init"]]), color="red", marker="+", ms=12)
+ try: # goal
+ plt.plot(*plot_nodes([t["goal"]]), color="red", marker="+", ms=12)
+ plt.plot(*car_frame(t["goal"]), color="red", lw=2)
+ except:
+ plt.plot(*plot_nodes([s["goal"]]), color="red", marker="+", ms=12)
+ plt.plot(*car_frame(s["goal"]), color="red", lw=2)
+ try: # middle
+ plt.plot(*car_frame(t["midd"]), color="red", lw=2)
+ plt.plot(*plot_nodes([t["midd"]]), color="red", marker="+", ms=12)
+ except:
+ pass
+
+ #plt.fill_between(
+ # [-2.7, 3.25, 3.25, -2.7],
+ # [-0.5, -0.5, 0, 0],
+ # [26, 26, 26.5, 26.5],
+ # facecolor="none", hatch="//", edgecolor="black", linewidth=0)
+ #plt.fill_between(
+ # [-2.7, -2.7, -0, -0, -2.2, -2.2, 0, 0, -2.7],
+ # [-0.5, 26.5, 26.5, 19.5, 19.5, 13, 13, -0.5, -0.5],
+ # facecolor="none", hatch="//", edgecolor="black", linewidth=0)
+ #plt.fill_between(
+ # [3.25, 3.25, 2.75, 2.75, 3.25],
+ # [-0.5, 26.5, 26.5, -0.5, -0.5],
+ # facecolor="none", hatch="//", edgecolor="black", linewidth=0)
+
+ #plt.text(1, 0.2, s="1", color="red")
+ #plt.text(2, 12.2, s="2", color="red")
+ #plt.text(3.6, 10, s="3", color="black")
+ #plt.text(-0.5, 14.3, s="4", color="black")
+ #plt.text(3, 18, s="5", color="blue")
+ #plt.text(-4.7, 0.8, s="6", color="orange")
+ #plt.text(-2, 11, s="7", color="gray")
handles, labels = ax.get_legend_handles_labels()
- #lgd = ax.legend(handles, labels, loc="upper center",
- # bbox_to_anchor=(0.5, -0.11), title="Cost")
+
+ if not "edge" in t.keys():
+ plt.show()
+ plt.close(fig)
+ exit(0)
+
+ ################
## 2nd subplot
+
ax = fig.add_subplot(122)
ax.set_aspect("equal")
- ax.set_title("RRT* all edges")
- ax.set_xlabel("Longitudinal direction [m]")
- ax.set_ylabel("Lateral direction [m]")
+ ax.set_title("All edges")
+ ax.set_xlabel("x [m]")
+ ax.set_ylabel("y [m]")
- # plot here
for o in s["obst"]:
try:
plt.plot(*plot_nodes(o["segment"]), color="black")
try:
ax.add_artist(plt.Circle((o["circle"][0], o["circle"][1]),
o["circle"][2],
- color="black", fill=False))
+ color="black", fill=False, hatch="//"))
except:
pass
if PLOT["node"]:
for edges in t["edge"]:
for e in edges:
plt.plot([e[0][0], e[1][0]], [e[0][1], e[1][1]],
- color=COLOR["edge"])
+ color=COLOR["edge"], lw=1)
except:
print("No edges")
if PLOT["sample"]:
label=t["cost"][traj])
except:
print("No trajectory")
- plt.plot(*plot_nodes([s["init"]]), color=COLOR["start"], marker=".")
- plt.plot(*plot_nodes([s["goal"]]), color=COLOR["goal"], marker=".")
- # end plot here
+
+ if PLOT["slot"]:
+ try:
+ plt.plot(*plot_nodes(s["slot"]["polygon"]), color=COLOR["slot"])
+ except:
+ print("No slot")
+
+ plt.plot(*car_frame(s["init"]), color="red", lw=2)
+ plt.plot(*car_frame(s["goal"]), color="red", lw=2)
+ plt.plot(*plot_nodes([s["init"]]), color="red", marker="+", ms=12)
+ plt.plot(*plot_nodes([s["goal"]]), color="red", marker="+", ms=12)
+
+ #plt.fill_between(
+ # [-2.7, 3.25, 3.25, -2.7],
+ # [-0.5, -0.5, 0, 0],
+ # [26, 26, 26.5, 26.5],
+ # facecolor="none", hatch="//", edgecolor="black", linewidth=0)
+ #plt.fill_between(
+ # [-2.7, -2.7, -0, -0, -2.2, -2.2, 0, 0, -2.7],
+ # [-0.5, 26.5, 26.5, 19.5, 19.5, 13, 13, -0.5, -0.5],
+ # facecolor="none", hatch="//", edgecolor="black", linewidth=0)
+ #plt.fill_between(
+ # [3.25, 3.25, 2.75, 2.75, 3.25],
+ # [-0.5, 26.5, 26.5, -0.5, -0.5],
+ # facecolor="none", hatch="//", edgecolor="black", linewidth=0)
handles, labels = ax.get_legend_handles_labels()
- #lgd = ax.legend(handles, labels, loc="upper center",
- # bbox_to_anchor=(0.5, -0.11), title="Cost")
# END OF SUBPLOTS
plt.show()
- #plt.savefig("{}.png".format(argv[2]), bbox_extra_artists=(lgd,),
- # bbox_inches='tight')
plt.close(fig)