]> rtime.felk.cvut.cz Git - hubacji1/iamcar.git/blobdiff - plot.py
Move screen size
[hubacji1/iamcar.git] / plot.py
diff --git a/plot.py b/plot.py
index a75d50ee8e23d34dbc611513e3c929c09f5eb532..c9f1eb13aad7f300ec73e2ca8e6d13a78883c1db 100644 (file)
--- a/plot.py
+++ b/plot.py
@@ -3,7 +3,7 @@
 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)
 
@@ -13,8 +13,6 @@ SAFETY_DIST = 0
 WHEEL_BASE = 2.450
 WIDTH = 1.625
 
-SCEN_FILE = argv[1]
-TRAJ_FILE = argv[2]
 PLOT = {
         "enable" : True,
         "node" : False,
@@ -23,6 +21,7 @@ PLOT = {
         "frame" : False,
         "path" : False,
         "traj" : True,
+        "slot" : True,
         }
 COLOR = {
         "node": "lightgrey",
@@ -35,6 +34,7 @@ COLOR = {
         "trajectory-frame": "lightblue",
         "obstacle": "black",
         "log": ("gold", "orange", "blueviolet", "blue", "navy", "black"),
+        "slot": "red"
         }
 
 def car_frame(pose):
@@ -128,22 +128,31 @@ def plot_segments(segments=[]):
     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("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")
@@ -152,7 +161,7 @@ if __name__ == "__main__":
         try:
             ax.add_artist(plt.Circle((o["circle"][0], o["circle"][1]),
                     o["circle"][2],
-                    color="black", fill=False, hatch="/"))
+                    color="black", fill=False, hatch="//"))
         except:
             pass
     if PLOT["node"]:
@@ -191,7 +200,7 @@ if __name__ == "__main__":
                 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(
@@ -205,23 +214,69 @@ if __name__ == "__main__":
                                 label=t["cost"][traj])
         except:
             print("No trajectory")
-    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)
-    # 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("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")
@@ -229,8 +284,8 @@ if __name__ == "__main__":
             pass
         try:
             ax.add_artist(plt.Circle((o["circle"][0], o["circle"][1]),
-                o["circle"][2],
-                color="black", fill=False))
+                    o["circle"][2],
+                    color="black", fill=False, hatch="//"))
         except:
             pass
     if PLOT["node"]:
@@ -244,7 +299,7 @@ if __name__ == "__main__":
             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"]:
@@ -283,18 +338,34 @@ if __name__ == "__main__":
                                 label=t["cost"][traj])
         except:
             print("No trajectory")
+
+    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)
-    # end plot here
+
+    #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)