1+ # load csv and plot it
2+ import numpy as np
3+ import matplotlib .pyplot as plt
4+ import matplotlib .gridspec as gridspec
5+
6+ # waypoint csv header: x,y,z,yaw,mps,change_flag
7+ W_X = 0
8+ W_Y = 1
9+ W_Z = 2
10+ W_YAW = 3
11+ W_MPS = 4
12+ # measure csv header: x,y,time,steering_angle,speed_mps,cur_lat_dist_abs,trg_way_lon_dist
13+ M_X = 0
14+ M_Y = 1
15+ M_TIME = 2
16+ M_STEER = 3
17+ M_SPEED = 4
18+ M_LAT_DIST = 5
19+ M_LON_DIST = 6
20+
21+ # create plot layout
22+ # f, (ax_xy, ax_st, ax_dist) = plt.subplots(nrows=3, ncols=1, sharex=False, gridspec_kw={"height_ratios": [3, 1, 1]})
23+
24+ f = plt .figure (constrained_layout = True )
25+ gs = f .add_gridspec (3 , 3 , width_ratios = [3 , 1 , 1 ], height_ratios = [3 , 1 , 1 ])
26+ ax_xy = f .add_subplot (gs [0 , :])
27+ ax_st = f .add_subplot (gs [1 , :- 1 ])
28+ ax_txt = f .add_subplot (gs [1 :, - 1 ])
29+ ax_dist = f .add_subplot (gs [- 1 , :- 1 ])
30+
31+ # ax_xy.set_xlabel("x") # , fontsize=6
32+ # ax_xy.set_ylabel("y")
33+ ax_st .set_xlabel ("time" )
34+ ax_st .set_ylabel ("steer ang" )
35+ ax_dist .set_xlabel ("time" )
36+ ax_dist .set_ylabel ("lat dist" )
37+ # ax_st.set_title("steering angle")
38+ # ax_dist.set_title("lat distance (abs)")
39+ ax_xy .axis ("equal" )
40+ ax_xy .grid ()
41+ ax_st .grid ()
42+ ax_dist .grid ()
43+ ax_xy .legend (['first stock name' , 'second stock name' ])
44+ ax_txt .axis ("off" )
45+
46+
47+
48+ # read the data
49+ def read_data (filename ):
50+ points = np .genfromtxt (filename , delimiter = "," , skip_header = 1 )
51+ return points
52+
53+ def read_data_arr (filenames ):
54+ points = []
55+ for filename in filenames :
56+ points .append (np .genfromtxt (filename + "_xypose.csv" , delimiter = "," , skip_header = 1 ))
57+ return points
58+
59+ # plot x y data
60+ def plot_xy (points , fmt = "" , labl = "" ):
61+ ax_xy .plot (points [:, W_X ], points [:, W_Y ], fmt , label = labl , alpha = 0.8 )
62+ ax_xy .legend ()
63+
64+ def plot_all (points , fmt = "" , labl = "" ):
65+ ax_xy .plot (points [:, W_X ], points [:, W_Y ], label = labl , alpha = 0.8 )
66+ ax_st .plot (points [:, M_TIME ], points [:, M_STEER ], fmt , label = labl , alpha = 0.8 )
67+ ax_dist .plot (points [:, M_TIME ], points [:, M_LAT_DIST ], fmt , label = labl , alpha = 0.8 )
68+ ax_xy .legend ()
69+
70+ def read_text (filenames ):
71+ text = ""
72+ for filename in filenames :
73+ text += "\n \n " + filename + "\n "
74+ with open (filename + "_metrics.csv" , "r" ) as file :
75+ text += file .read ()
76+ return text
77+
78+
79+ # main function
80+ if __name__ == "__main__" :
81+ meas_arr = ["csv/tmp01" , "csv/tmp02" , "csv/tmp03" ]
82+ wp_file = "csv/sim_waypoints3.csv"
83+ points_wp = read_data (wp_file )
84+ points_meas = read_data_arr (meas_arr )
85+ # ax_xy.plot(points_meas[0][:, M_X], points_meas[0][:, M_Y], "r.-", label="xy", alpha=0.1, linewidth=4.2)
86+ plot_xy (points_wp , fmt = "k--" , labl = "waypoints" )
87+ plot_all (points_meas [0 ], labl = "p pursuit A" )
88+ plot_all (points_meas [1 ], labl = "p pursuit B" )
89+ plot_all (points_meas [2 ], labl = "p pursuit C" )
90+ ax_txt .text (0.5 , 0.5 , read_text (meas_arr ), ha = "center" , va = "center" , fontsize = 8 )
91+ # f.tight_layout()
92+ # f.savefig("img/csv_eval01.svg")
93+ plt .show ()
0 commit comments