From 595635eef4e30c871c1062f6b721a058c37c1cce Mon Sep 17 00:00:00 2001 From: m-guberina <gubi.guberina@gmail.com> Date: Sun, 26 Nov 2023 22:51:34 +0100 Subject: [PATCH] i think i got blitting to work in tkinter. of course code should be finished so that everything is blitted. and also, there should be a class handling all of the updating etc so that a) everything isn't unreadable and b) code is not duplicated. look into the HUMRO project to see how you go tkinter to update based on multiprocessing. this way you can update as much as you manage, while the control loop runs unimpeded. do note that this visualization stuff is really only useful when comparing logged runs and that's really it' --- .../initial_python_solution/.blit_test.py.swp | Bin 12288 -> 0 bytes ....manipulator_visual_motion_analyzer.py.swp | Bin 45056 -> 0 bytes .../example_code/blit_in_tk.py | 95 +++++++++++++++ .../{ => example_code}/blit_test.py | 0 .../dark_background_example.py | 0 .../{ => example_code}/ellipse.py | 0 .../embedding_in_tk_sgskip.py | 0 .../example_code/manager_anim.py | 108 ++++++++++++++++++ .../{ => example_code}/run_classic_ik_algs.py | 0 .../manipulator_visual_motion_analyzer.py | 20 +++- .../robot_stuff/.forw_kinm.py.swp | Bin 36864 -> 0 bytes .../__pycache__/forw_kinm.cpython-310.pyc | Bin 11451 -> 11480 bytes .../robot_stuff/forw_kinm.py | 12 +- 13 files changed, 229 insertions(+), 6 deletions(-) delete mode 100644 python/initial_python_solution/.blit_test.py.swp delete mode 100644 python/initial_python_solution/.manipulator_visual_motion_analyzer.py.swp create mode 100644 python/initial_python_solution/example_code/blit_in_tk.py rename python/initial_python_solution/{ => example_code}/blit_test.py (100%) rename python/initial_python_solution/{ => example_code}/dark_background_example.py (100%) rename python/initial_python_solution/{ => example_code}/ellipse.py (100%) rename python/initial_python_solution/{ => example_code}/embedding_in_tk_sgskip.py (100%) create mode 100644 python/initial_python_solution/example_code/manager_anim.py rename python/initial_python_solution/{ => example_code}/run_classic_ik_algs.py (100%) delete mode 100644 python/initial_python_solution/robot_stuff/.forw_kinm.py.swp diff --git a/python/initial_python_solution/.blit_test.py.swp b/python/initial_python_solution/.blit_test.py.swp deleted file mode 100644 index 5c52e18edb5224f1c6bd60b1766faf468b66fb90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmYc?2=nw+u+TGNU|?VnU|{g=Pfm@os$|eHW?)FqFD}SWNh|_M;lsI!#o3v8_*6jT z>R<-yXXNLm8tKEiIi-0i`UORa6`95QrA6_@nYjfysqxAAc_l^pIr;^aB^mj7`k8r| zC7Fpi@epo&aehu|NoIbYeo{_mNqk9aafx0*CB&Xlax?@+LjWxVN=wpoEqED>jSLMy zGRjJd3c^C6Am%6@4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7$G50QozVi&%nUI1oba? z9Dsp=ff34w(NOLvH5vk=Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?1VbP( zg@NH3I|IWm4#@mJtpERjpMl{lKLf)-eg=jE{0t0p`574I@G~$p^D{6s@iQ<u@-r}K z@-r~};bUO<&Bws7kB@<21s?;$ay|xzWIhIlP(B8RU_J&00X_zXcf1S?>v<U%@^~2- z6nGgJ1bG=41b7)34)HKB%;aHUNaSH)@Z(`%VBle3ILFPvu!Wm}VKX-a!(46#hE{F{ z277J>23c+fhVxtu4D-1d7(%%i80@$h7(R0{FkIziV3@$kz)-}=z!1a9z+k}1z`)JP zz;KQO;-_^We+|KS8Flh#2#kinXb6mkz-S1Jh5#%C6ciK`lobkcO7sd6k=doisTz8Q znhX%J%KTD=<itFMg3=O&M1_LH(&AKw%shq6GzE}Md179PLP@?taZY}@LP<tuUV5=Y zN`84BSaU&9W?qSgQd&W=m4cFvf}y^GMrvM)g04bwNn%lnCd3A)qLR$qRE7LJg`(8F zl+>ckymTcU1!Tow13?0|3LvF=AVLFTLRx0JUUFhySz@tXT25(kMto{nYF<e(R90C5 zEU1u}SE*2tnwOH9m#*L*>Zt%xq@z%js#}nlnO6c5FUd$%C{8X)O$GZeFEuqKH3e)j zk`<s8k{Td>Qc`{e!~x0*$@vA93LxE?xrynipa21JK-LtOB$lM=C?u7Zz)a4~OwTA$ z$jdKLNJ>>m&PdElPfby%Of3OhlvtscQj}O8pIB6qSzMx#lLxb*C{-5{G+=8W(mD#I z1u2PemqWq;6u2-OL6(3V0`U{rf}A|P;?$D(%9O;CM2)-xz2eL~jS2;A1&u5PeFZ}U z15E`jg}eg2f=p=iC`0T>MX@$7HM1lmwFoSRY^y?EK12{=p+ZJt8QhCt+d<(5(V$n9 zT3nJ}lp0@@nx2`Tr;(J7@M&>s3E1eQ#N_PsqWsdl6a^3yl<YvhffxYuC)BFaJZMmY z?Exn+1=OUHmS3ch1u~-u6yzF)1_lP2RtyYCPC|=XWoTjqc{CsFAW(#+6(#1Tmgg5` zD-`F0vj8Y_6sM*tWR@@}D->sd^FgXYQEG8%4mfLooD6ZK4k(8dD-@I#XQUQ`4Ftzu zYKlUTyOX0rQfXRRYLP-(QGPB+k^xIvP*wn?4v?%uVqRu$Vo7R>0xT_*WMmdAloqEJ zD<mo;Cnjg4roi3Lkd&@qtAONFP<o9ASriXS#Yo9nSs^{O1d^Qd(-czkN-~R5K^jYo zQWZ2(%TkLf!I@kkGp{%^1uUZnGC@<JI5Dpn-AxP(kirF2pcsHk6lGADm8U8c7i8vv zJps;y3OV`t1)w~WgB0(etX@!*pPX6@G8U0_^9xdo5<yFqiy4#^6p}O*%2Of948zkP zyGk+=OB50kP(v~yK>-whU;`2n27uxzIlrhVHMu0GQlU7r3KX_^Dc}G?ANLnn( zS4b~POkz-0NJ>r1FG>YD0kph2Gp`g}gcXAlOJa$F6@#)uc&Y-Z7y<b%tu!a65^NgS z>uH(kpg>J5QOGPQR!GatOUwaV3MvFaPJtvD24x0ig`CvH;u3}YyyR3pP!cPFgjQlo zE+}&HON$gza|=o;70NU7Qu50c5-UJSATLEBHLn<CLuQFWW-%-&q$nhoK%xbdQZ<rt z@{_Y|-4b((Q#Bcs6><}^Qx(9PKrVoq2hyCFS)7^zDaAlC#mPmP1tkjEsi_6U3hDWo zdFc!c8aa77nhLfGi4}SUIr$|T6*{1D1YEpm>cCTmZAeim*s9cuf}G6cOi)l4r52W^ z7K6fpK^aw{LP=^)PO(C6VhPB|oXjLpIOgXe2O}i)E0kxX<|&k?g0r)ZLSlu2Ex2MU zE=>aI1l0u$AhEmxy`0Rv;)2BFR1E_i1tVBtrvonf7#K2h3-XIfz%>kvomZM$P^pku XtdLg#6GFI0ub>iSK1jMCr-T6j(*MfY diff --git a/python/initial_python_solution/.manipulator_visual_motion_analyzer.py.swp b/python/initial_python_solution/.manipulator_visual_motion_analyzer.py.swp deleted file mode 100644 index 6dfe2a96bb05e401c7327f20ce338af45f733479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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 XEg}Nn76>|5t~ft8wIm}mFP#AZt|q6I diff --git a/python/initial_python_solution/example_code/blit_in_tk.py b/python/initial_python_solution/example_code/blit_in_tk.py new file mode 100644 index 0000000..db7b3dd --- /dev/null +++ b/python/initial_python_solution/example_code/blit_in_tk.py @@ -0,0 +1,95 @@ +import tkinter as Tk +import numpy as np +import matplotlib.pyplot as plt +from datetime import datetime +import time + +from matplotlib.figure import Figure +from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg + +# from Backend import Backend #self written data acquisition handler +import random + +#global variables +t0 = datetime.now() #start time of program + +#Returns time difference in seconds +def time_difference(t1, t2): + delta = t2-t1 + delta = delta.total_seconds() + return delta + +# Define Class for Flow data display +class FlowFig(): + def __init__(self, master): #master:Parent frame for plot + #Initialize plot data + self.t = [] + self.Flow = [] + + #Initialize plot for FlowFig + self.fig = plt.figure(figsize=(4,4)) + self.ax = self.fig.add_subplot(111) + self.ax.set_title("Flow Control Monitor") + self.ax.set_xlabel("Time") + self.ax.set_ylabel("Flow") + self.ax.axis([0,100,0,5]) + self.line = self.ax.plot(self.t, self.Flow, '-') + + #Set up canvas + self.canvas = FigureCanvasTkAgg(self.fig, master = master) + self.canvas.draw() + self.ax.add_line(self.line[0]) + self.background = self.canvas.copy_from_bbox(self.ax.bbox) + self.ax.grid(True) + + # # Initialize handler for data aqcuisition + # self.Data= Backend() + # self.Data.initialize() + + #update figure + def update(self): + start = time.time() + # get new data values + self.t.append(time_difference(t0, datetime.now())) + Flow = random.uniform(1, 5) + self.Flow.append(Flow) + + # shorten data vector if too long + if len(self.t) > 200: + del self.t[0] + del self.Flow[0] + + #adjust xlims, add new data to plot + self.ax.set_xlim([np.min(self.t), np.max(self.t)]) + self.line[0].set_data(self.t, self.Flow) + + #blit new data into old frame + self.canvas.restore_region(self.background) + self.ax.draw_artist(self.line[0]) + self.canvas.blit(self.ax.bbox) + self.canvas.flush_events() + root.after(1,self.update) + end = time.time() + print("time on rendering", end - start) + print("fps: ", 1/ (end - start)) + +#Flow Frame of GUI +class FlowPage(Tk.Frame): + def __init__(self, parent, controller): + Tk.Frame.__init__(self,parent) + self.parent = parent + self.FlowPlot = FlowFig(self) + self.FlowPlot.canvas.get_tk_widget().grid(row=0, column=0, rowspan=9, columnspan=9) + +# Mainloop +root= Tk.Tk() +root.rowconfigure(0, weight=1) +root.columnconfigure(0, weight=1) + +Flowmonitor = FlowPage(root, root) +Flowmonitor.grid(row =0, column=0, rowspan =10, columnspan=10) +Flowmonitor.rowconfigure(0, weight=1) +Flowmonitor.columnconfigure(0, weight=1) + +root.after(25, Flowmonitor.FlowPlot.update) +root.mainloop() diff --git a/python/initial_python_solution/blit_test.py b/python/initial_python_solution/example_code/blit_test.py similarity index 100% rename from python/initial_python_solution/blit_test.py rename to python/initial_python_solution/example_code/blit_test.py diff --git a/python/initial_python_solution/dark_background_example.py b/python/initial_python_solution/example_code/dark_background_example.py similarity index 100% rename from python/initial_python_solution/dark_background_example.py rename to python/initial_python_solution/example_code/dark_background_example.py diff --git a/python/initial_python_solution/ellipse.py b/python/initial_python_solution/example_code/ellipse.py similarity index 100% rename from python/initial_python_solution/ellipse.py rename to python/initial_python_solution/example_code/ellipse.py diff --git a/python/initial_python_solution/embedding_in_tk_sgskip.py b/python/initial_python_solution/example_code/embedding_in_tk_sgskip.py similarity index 100% rename from python/initial_python_solution/embedding_in_tk_sgskip.py rename to python/initial_python_solution/example_code/embedding_in_tk_sgskip.py diff --git a/python/initial_python_solution/example_code/manager_anim.py b/python/initial_python_solution/example_code/manager_anim.py new file mode 100644 index 0000000..edd9a92 --- /dev/null +++ b/python/initial_python_solution/example_code/manager_anim.py @@ -0,0 +1,108 @@ +import matplotlib.pyplot as plt +import numpy as np +import time + +class BlitManager: + def __init__(self, canvas, animated_artists=()): + """ + Parameters + ---------- + canvas : FigureCanvasAgg + The canvas to work with, this only works for subclasses of the Agg + canvas which have the `~FigureCanvasAgg.copy_from_bbox` and + `~FigureCanvasAgg.restore_region` methods. + + animated_artists : Iterable[Artist] + List of the artists to manage + """ + self.canvas = canvas + self._bg = None + self._artists = [] + + for a in animated_artists: + self.add_artist(a) + # grab the background on every draw + self.cid = canvas.mpl_connect("draw_event", self.on_draw) + + def on_draw(self, event): + """Callback to register with 'draw_event'.""" + cv = self.canvas + if event is not None: + if event.canvas != cv: + raise RuntimeError + self._bg = cv.copy_from_bbox(cv.figure.bbox) + self._draw_animated() + + def add_artist(self, art): + """ + Add an artist to be managed. + + Parameters + ---------- + art : Artist + + The artist to be added. Will be set to 'animated' (just + to be safe). *art* must be in the figure associated with + the canvas this class is managing. + + """ + if art.figure != self.canvas.figure: + raise RuntimeError + art.set_animated(True) + self._artists.append(art) + + def _draw_animated(self): + """Draw all of the animated artists.""" + fig = self.canvas.figure + for a in self._artists: + fig.draw_artist(a) + + def update(self): + """Update the screen with animated artists.""" + cv = self.canvas + fig = cv.figure + # paranoia in case we missed the draw event, + if self._bg is None: + self.on_draw(None) + else: + # restore the background + cv.restore_region(self._bg) + # draw all of the animated artists + self._draw_animated() + # update the GUI state + cv.blit(fig.bbox) + # let the GUI event loop process anything it has to do + cv.flush_events() + +# make a new figure +fig, ax = plt.subplots() +x = np.linspace(0, 2 * np.pi, 100) +# add a line +(ln,) = ax.plot(x, np.sin(x), animated=True) +# add a frame number +fr_number = ax.annotate( + "0", + (0, 1), + xycoords="axes fraction", + xytext=(10, -10), + textcoords="offset points", + ha="left", + va="top", + animated=True, +) +bm = BlitManager(fig.canvas, [ln, fr_number]) +# make sure our window is on the screen and drawn +plt.show(block=False) +plt.pause(.1) + +for j in range(100): + start = time.time() + # update the artists + ln.set_ydata(np.sin(x + (j / 100) * np.pi)) + fr_number.set_text(f"frame: {j}") + # tell the blitting manager to do its thing + bm.update() + + end = time.time() + print("time on rendering", end - start) + print("fps: ", 1/ (end - start)) diff --git a/python/initial_python_solution/run_classic_ik_algs.py b/python/initial_python_solution/example_code/run_classic_ik_algs.py similarity index 100% rename from python/initial_python_solution/run_classic_ik_algs.py rename to python/initial_python_solution/example_code/run_classic_ik_algs.py diff --git a/python/initial_python_solution/manipulator_visual_motion_analyzer.py b/python/initial_python_solution/manipulator_visual_motion_analyzer.py index 23a428d..6900208 100644 --- a/python/initial_python_solution/manipulator_visual_motion_analyzer.py +++ b/python/initial_python_solution/manipulator_visual_motion_analyzer.py @@ -145,6 +145,7 @@ for robot_index, robot in enumerate(ik_env.robots): trajectory_plots.append(trajectory_plot) # goal point ik_env.goal_point_plot = drawPoint(ik_env.ax, ik_env.goal, 'maroon', '*') +#background_manipulator = fig_manipulator.canvas.copy_from_bbox(fig_manipulator.bbox) # let's add the manipulability ellipse @@ -293,8 +294,13 @@ notebook_right.grid(row=0, column=1, sticky='ew') # tkinterize these plots canvas_manipulator = FigureCanvasTkAgg(fig_manipulator, master=frame_manipulator) +canvas_manipulator.draw() # NEW +# TODO maybe you want another background idk +# worked elsewhere with figure.bbox background_manipulator = canvas_manipulator.copy_from_bbox(fig_manipulator.bbox) +#background_manipulator = canvas_manipulator.copy_from_bbox(canvas_manipulator.bbox) + canvas_manipulator_widget = canvas_manipulator.get_tk_widget() canvas_manipulator_widget.grid(row=0, column=0) canvas_manipulator._tkcanvas.grid(row=1, column=0) @@ -349,6 +355,7 @@ def update_points(new_val): # ee plot ########################################################################### start = ttime.time() + #fig_manipulator.canvas.restore_region(background_manipulator) canvas_manipulator.restore_region(background_manipulator) index = int(np.floor(float(new_val))) @@ -370,6 +377,11 @@ def update_points(new_val): for robot_index, robot in enumerate(ik_env.robots): ik_env.robots[robot_index].setJoints(ik_env.data[robot_index]["qs"][index]) ik_env.robots[robot_index].drawStateAnim() + + # NEW AND BROKEN + for link in robot.lines: + for line in link: + ik_env.ax.draw_artist(line) # all these are in lists as that's what the line plot wants, # despite the fact that we have single points point_in_time_eigen1_line.set_xdata([time[index]]) @@ -405,8 +417,12 @@ def update_points(new_val): ik_env.p_e_point_plots[robot_index].set_data([ik_env.data[robot_index]['p_es'][index][0]], [ik_env.data[robot_index]['p_es'][index][1]]) ik_env.p_e_point_plots[robot_index].set_3d_properties([ik_env.data[robot_index]['p_es'][index][2]]) canvas_ee.draw() - canvas_manipulator.draw() - # NEW + # NEW AND BROKEN +# fig_manipulator.canvas.blit(fig_manipulator.bbox) +# fig_manipulator.canvas.flush_events() + canvas_manipulator.blit(fig_manipulator.bbox) + canvas_manipulator.flush_events() + #canvas_manipulator.draw() # might need to manually update all artists here from ax_something #canvas_manipulator.blit(fig_manipulator.bbox) canvas_manip_graphs.draw() diff --git a/python/initial_python_solution/robot_stuff/.forw_kinm.py.swp b/python/initial_python_solution/robot_stuff/.forw_kinm.py.swp deleted file mode 100644 index c0aefbb19e9fc5f2403b0c03a9d5e4906deb177d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 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 IMbnA_08#Vw)&Kwi diff --git a/python/initial_python_solution/robot_stuff/__pycache__/forw_kinm.cpython-310.pyc b/python/initial_python_solution/robot_stuff/__pycache__/forw_kinm.cpython-310.pyc index fef8c56c5d57b61d99de335ea07b479488fdf269..ae795696554855aaab0586582d8ca7a29dcd7522 100644 GIT binary patch delta 1824 zcmdlTc_Wf9pO=@5fq{WRb$fEEUc^Q|Rd&Xb$tLV7j0-16vZpa-O+LUb&7Z=S!rsdo z!&u8%!;r-Q5|a|(fD3XV1Ucb?+%Q2&kTfGid~zU%HzU{Nxg1iwA)1W0I1=+Ra}!Ha zQzmcc$Y(QRU|=Y+nykZF&aTC##i+%ovw0Qg9Y!{DkhsO<9&SYwD-hEJM2Lb2DG(tK zB1{<=7;Xut6eX7X7iFgAl_ZvA=I1%)W#$$cPkzWPA__8lC3BG)NEus6zEfgxYLWG1 zE*?e38Jl%@5*ZmyCin5WGFnf*!mGr%X!Cd8>CAR6AcI{&gd2!(XJBB^WPT0`D-bS< z0||l&Mi5H~L<oWi50FB($rlAhCr5E}O@1xNqXF>($a40yoczQRW20Nl1@WmxV6P~F zG=aThI$2&QiaP+rw+0c3lUsyT*wR7FjLGYSBp9P69~aVO+`svw&^bl{FOWTaMJga; z8AFQ9C!ZJ57q9>+2Ac>rJAE>rs0CxxWOq?hM&Zr1qR$y+%0Mc>4k`!fWKOM2y~SFb zoLNv=R5`gpT-gAu5o`q5W^nj|jZFdROa<A>4-Uzq8jwKk<jdkVd{H1~6UabD*P_PB zvJxSTmYa(tWEm5{!2xk*5!h}qkW#P%DnYEtAOee>w^)h`i%M=Wr=*q?fm~Vya)Tx- zlFf}Eol%qDOR6(QZx)yGW30y#Wkn$Six5%d3DN`(I-Vl1BS6L$d4ojNL4*&8KsX2N zdr0JfJjVq}VqvMtCHX}~pfpwF4^plJB_=<S7G%tu{7w2fW6b1xGHNcf7#JAR^V+08 z{8Z#T07)_Ipzz~GSbdAHC^a#~D?c-@B)BB8B(;bYWLN@-U;_~*lRad;8KWjok=14_ zpL{@ek2ctG;PfvEQUG?`91v?R0|Nszkr&Ma2}Dg^E+@;_vH7T69is&(sixo0RS5m9 z_|v{91|$!1OA#l?K|)1f%isZWi>V;92<!-x$%;zizPGrGQ%eH!i!(v_st9CJ5!l`^ zkTGD(7l2q2AVL*nAPXd(K+d?un_5v)lo+3qm|KvUmtGV#`M!cS<HXI}ihPV53qgvx zi$JzW$S(zHM;Hz^7i3xy*ziS@Ba{pnH*D@y5@a+80qNr?0;eT#fPfP$mH;UN8?b2d zDP=>(W0U_Vf5n<ez`+4eB$}KM-+>JVh4d}9qI_`Vfc*;(B}fQ?${tO2B>%E!fnu}R zs0f@Xkg_w#dpeT~RMi;oPoA#&EW!}v2~KcYxW$o^nO9tpm<%lxK(<00u?nOMZ0}4E z3*;S5Hi&KD1Pcyg*5Zu(lHyw|AgU;8@>Mle#y69Ht0lQRgY*P~h-eT2(p}UHVod@O z(?JB-Sa1k0262~zh!r4WC5Tu9A~sE4qOQZJu=%2T2NQwt17|mIVF*rLpqy3&s$evE zA*CI{W1y^ci#sj9s64SK#XB=E7aS1aY>o)nB4bdt<0wuoiBCx^NxUUkJo$!}pa{s# znnJf&(~1&vQ^DpJ&71sJOO*{=ZU#)&(6$t{0lC~3MA(4{Z4ePPxlCJ$@%QAJ+V=bh kL7~rei#4w_x1h4feDZT`Gsd>bayn6r2PaqRI5N5c06XQGoB#j- delta 1750 zcmcZ+xjT|CpO=@5fq{V`c}8;T!my2es_cv@lTFxF7-vq7WKUyUF!=zxH1|T57{*%8 z8ip(e5MPRi4J^Qg5MT!jaKi*7*=iWF7#FfkPUP@r<e0pcLu&FBj(j#l1_p*A%gLUc z<?L!qYK&@(8k>)E-eF`j1BshYUdgQ(YYAc+g9uR&Aq67jL4*kd1H&!hl%m9P|Dw#) zypqI{%=|pZyv*DpBajRqNG2>bxg@^`EC{k{C3BG)NRF)}-zl*;wa9AnM_%E{Ry=%+ zQ#O0@Br-A@PhQRI$_NrxVw|^Ggl{^tr8CGb7ZBkJBHS1l7&Mumg8~SIi()~7V1g0E z5&{u|Ai{m}6F~zFh(|znvZv+bCzco+-C{0?Pb~s_NC~74>>-oMHbPO{{vf^;h)9^c zP)J2S4a7_bX=cmKN=%N=y2X;46`v0#3yLBqKM~So+`XAk_#C5vC&*cRMJgc0j3Gs4 zli!Hw3z&oSgDnADmo`~j)PgZ`a*C)aBmd@EqR$y+N<k{XZY%@oWKOM2y~SFboLNv= zR55w3xUvCQBiIPAW559qHZ~cgGX-QTKR8T_szCxZlRt>t@I``{jUWRVU5gqfTS<g4 znr`lwkY!A82Wfyfvj}Xr7)UAD0Tm$DBoKkc&RZ<Sg+(Q|m{U?qia;(c0=Yqx70KoX zkj}`-JW}e6;hRmQ{1{n45jVL}S~Lm~F&-dA;Gp6u0$U0)rpOB<stzK&K?K5jux}yp z1M&<PB1IK}Qd5y1DEV-6f`o%h5=&CECJW0vXN;cwTSiS`CIbUQdS09Kho6d^2Oz10 z9prglsKt{VWhJ@eLH4nM2;<4Avfhl5lQ+t0GZs(2E4xP<><n;{mjo#QJ7YG8HHU$L z0h*AD=7IzwA<igHE%D0F%quBw+5AYZj*%afDAVufDun)4{AphlJvm=NR0QtnTTBI+ zMPTcVC)+8BPhPLUXAd&C2y9O%$XKvt^Fb^L5TOckJqsknLDt^lO|2*?N{mlQ%q_^w zOD_VsU1YL=qBvvkW(`F?Mves_4ctW_^Cje$fQ&#`05%(BViDMag&-eH?og6tT(fzZ zk|3i&Fi0;)5jb^#0|J}`u>?dB*bs>RU&?ZfhbBv^e60sXeGzJ&Es6%Y0G<>yIUzm; z8x9KPTWm%7pg1f7`yC!mkT3!jHJa>5erL}DhqO@<IH@D$TaYC>lefw8PoASH&UkzB z7S(4F1|ZLHg5&)bM^0v5aY14-v;+Xz3~|UxkWR4OGe9hmw=~%xHiDBTILKLxGxAG{ zZ?S-=B5<@%W>ptrd@)%<J;~h(q%QzOM1cs92}MmH)<h674Mc#A28Z|}5O*1fSPmjq zfQZ!~V&mk4>N<=vo8PH-Fj?UbM^I)i0vC9olwAbMS4E(jLzB12c=84<1yL-aSY$N$ zsg|M$$RV0Sw^-AP5_40*nu_L5meN*b1DAgOlU=nfMXf>3u>ldbAVM2Nfcz{ndAT+p w<M+wiwC(v1fP$9m7HeK<Zb4;{*<=<SGsf1*);dv)2PPj>7oWUVM~l%3032PBssI20 diff --git a/python/initial_python_solution/robot_stuff/forw_kinm.py b/python/initial_python_solution/robot_stuff/forw_kinm.py index dbf3d3e..0a54f80 100644 --- a/python/initial_python_solution/robot_stuff/forw_kinm.py +++ b/python/initial_python_solution/robot_stuff/forw_kinm.py @@ -133,10 +133,14 @@ class Robot_raw: z_hat = self.joints[j].HomMat[0:3,2] p = self.joints[j].HomMat[0:3,3] - line_x, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'r')#, animated=True) - line_y, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'g')#, animated=True) - line_z, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'b')#, animated=True) - line_p, = self.ax.plot(np.array([]),np.array([]),np.array([]), self.color_link)#, animated=True) + #line_x, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'r')#, animated=True) + #line_y, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'g')#, animated=True) + #line_z, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'b')#, animated=True) + #line_p, = self.ax.plot(np.array([]),np.array([]),np.array([]), self.color_link)#, animated=True) + line_x, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'r', animated=True) + line_y, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'g', animated=True) + line_z, = self.ax.plot(np.array([]),np.array([]),np.array([]), 'b', animated=True) + line_p, = self.ax.plot(np.array([]),np.array([]),np.array([]), self.color_link, animated=True) self.lines += [[line_x, line_y, line_z, line_p]] avg_link_lenth += self.joints[j].d + self.joints[j].r -- GitLab