Python
1 def plot_anime(x,name,plot_range):2 fig = plt.figure()3 title=name+'_Trajectory'4 plt.title(title)5 plt.xlim(0, len(x))6 plt.ylim(-plot_range,plot_range)#yの範囲7 range_x=range(len(x))8 line, = plt.plot([], [], lw=2)9 10 def init():11 line.set_data([], [])12 return line,13 14 # アニメーションの更新関数15 def animate(frame):16 line.set_data(range_x[:frame], x[:frame])17 return line,18 19 # アニメーションの作成20 ani = FuncAnimation(fig, animate, frames=len(x), init_func=init, blit=True,interval=1000/60)21 number=name+'_Trajectory_anime_'+str(plot_range)22 name=number+"_"+str(episode)+"_"+str(ex_number)+".gif"23 path_img = path_dir.joinpath(name)24 ani.save(path_img,dpi=100, writer='pillow',fps=60)25 26 def plot_trajectory(x,y,z,x_goal,y_goal,z_goal,plot_range,ex_number,yaw_list,episode):27 #x座標の動きをアニメーションで描写28 plot_anime(x,"x",plot_range)29 #y座標の動きをアニメーションで描写30 plot_anime(y,"y",plot_range)31 #z座標の動きをアニメーションで描写32 plot_anime(z,"z",plot_range)33 34 # プロットの設定35 plt.xlim(-plot_range,plot_range)#xの範囲36 plt.ylim(-plot_range,plot_range)#yの範囲37 line, = plt.plot([], [], lw=2)#lwは描写される線の太さ38 39 plt.plot(x[0],y[0],c='k',marker='$S$',label="Start",markersize=10)#始まりに〇40 plt.plot(x[-1],y[-1],c='k',marker='$G$',label="Goal",markersize=10)#終わりにx41 plt.plot(x_goal,y_goal,c='b',marker='$T$',label="Target",markersize=10)#ゴール地点に*42 arrow = plt.annotate('', xy=(0,0), xytext=(0,0), arrowprops=dict(facecolor='red', shrink=0,headlength=20, headwidth=10))43 # 初期化関数:アニメーションの背景画像を設定する44 def init():45 line.set_data([], [])#線グラフオブジェクトが空の状態(つまり、グラフ上に何も表示されない状態)に初期化46 arrow.set_position((0, 0))47 arrow.xy = (0, 0)48 return line,arrow 49 50 # アニメーション関数:フレームごとに呼ばれる51 def animate(i):52 line.set_data(x[:i], y[:i])53 # 矢印の位置と向きの更新54 yaw = np.deg2rad(yaw_list[i]) # ヨー角をラジアンに変換55 length = 2 # 矢印の長さ56 dx = np.cos(yaw) * length 57 dy = np.sin(yaw) * length 58 arrow.set_position((x[i], y[i]))59 arrow.xy = (x[i] + dx, y[i] + dy)60 return line,arrow 61 # アニメーションの作成62 ani = FuncAnimation(plt.gcf(), animate, frames=len(x), init_func=init, blit=True,interval=1000/60)63 64 number='Trajectory_anime_'+str(plot_range)65 name=number+"_"+str(episode)+"_"+str(ex_number)+".gif"66 path_img = path_dir.joinpath(name)67 ani.save(path_img,dpi=100, writer='pillow',fps=60)
0 コメント