From 824fb4d14ed0c3264aab5f59e631de83c60bbcee Mon Sep 17 00:00:00 2001 From: William Chen <billyskc@ucla.edu> Date: Mon, 3 Jun 2019 23:08:12 -0700 Subject: [PATCH] finished sim part --- CoLo-AT/Algorithm Comparison.pdf | Bin 22885 -> 29721 bytes .../__pycache__/data_analyzer.cpython-36.pyc | Bin 7073 -> 7145 bytes CoLo-AT/data_analysis/data_analyzer.py | 15 +++++++++------ ...simulated_dataset_manager_w.cpython-36.pyc | Bin 7048 -> 6884 bytes .../simulated_dataset_manager_w.py | 8 -------- CoLo-AT/gs_ci_journal_sim.py | 10 +++++----- .../__pycache__/ekf_gs_sci2.cpython-36.pyc | Bin 5445 -> 5445 bytes CoLo-AT/localization_algos/ekf_gs_sci2.py | 5 ++--- .../__pycache__/robot_system.cpython-36.pyc | Bin 4204 -> 4204 bytes .../__pycache__/sim_manager.cpython-36.pyc | Bin 5319 -> 5354 bytes .../__pycache__/state_recorder.cpython-36.pyc | Bin 4989 -> 4989 bytes CoLo-AT/simulation_process/sim_manager.py | 1 + 12 files changed, 17 insertions(+), 22 deletions(-) diff --git a/CoLo-AT/Algorithm Comparison.pdf b/CoLo-AT/Algorithm Comparison.pdf index be8592ab63d020456462f6a207fa78bf16221817..19257be51e0530e4914cf84d90a705e80fff7465 100644 GIT binary patch delta 16950 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 VBoJzgAoBnL97wdZ5{i;Y{}+&{Fz^5X delta 10043 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 diff --git a/CoLo-AT/data_analysis/__pycache__/data_analyzer.cpython-36.pyc b/CoLo-AT/data_analysis/__pycache__/data_analyzer.cpython-36.pyc index 7c702c1fe6559289fc6ad2a6503301457bd71125..487698deadc7a65695954f9daa06aef9cb606afd 100644 GIT binary patch delta 826 zcmY+B&ubGw6vuaV^K-M4P13||5~)=wb?rflwDDK4X*Jra$-z`@jYyK+wx&tb&TbW9 zFhWof6odg0Z+i7qa`WoNg9kx8xF_+V`2+MM=)7GOoMAuv-pu>HdGqE)ZjcKf##o+` ze^k3WVLQ0@tKg2$Co2uVX9`*V$NZb)pY@164=$s3{qMmV8b3&JGeohGNDDoL1RCXD z)EN5XsoYbIWLjWb;l(9?GeU6>^+Y7tVMDdSkN)#xuCIDNm7a*?E)|*z#Z;w3G)Chz zu`1Dk5r6FG=U^Iz^%dVmK~J%)d@nXuxVbuN*)`i7H7)x_n>~~l;)7p&kQ^`Dg^t-r z`GL>ZHfwz&q9Noks(eCs*d=TX`=f|YQAT`9yO1I(C<e3t9)A(LOORt3a1~JHaHNgx zcEySCY}Ph0+vbK%B-nIgr@;cjz+D5?0Q%`l2LZ6I0Ynbn=V|`W@0A=RM|i{{IR?SU zIh?S`&ov3ZDS<~JCjc`XdYnYThG!zD0A~Pa0rP+b031lp0nW4g@n`5&e@`MMqG>jj ze2v%nx-NRxSZ6<zMO0vOsV@4~f0HVsz-f>b*|4@RRRHrcKmp7EELPS=^er$6pa|#y zHUVy37r-h3%Iv8&iPZjEZ59Q*{<2tlBH%Tc719md;&Fe=p=>9;JFo`II{T15v>(zr z3hC54_Vre+Zni8k0lN)A2(ZG&G6&EID`jRAlYF64(h<4B4P7b`o4w5BQ|=Aiq!uV{ i0eY;R)mS8}X;nEN8kbcP0ZrKP^Tu!9CV6%=yY?G_hP4I& delta 733 zcmZ9K&ubGw6vy}Nwwq*kC&|Wc(qwA|J?K)fNU7CoEyT9|jt7mlQP8A`k(e}bk_zI8 z)*vDx2oKbQ2;Rh-?9G$-2Y5Gv2f;)1?4bwId0XqjS?0r+_iN_8o&MCTsmKIl#*be= zFFJ1{ozPaUDT;D-c~Fv;D>sw-u-t8dFGB@*@2`i7;EoDb3zwk_por){6(fafk$m11 ztP35B=qg<mluo1^>zE=ISS2^CLVKd}mQZR;FcA}5L|oV+QPqTAjz1ohwV8;L{mQ@@ z#j|nTxR0NW3Dt|@HuFJPYp*tXTD{`GF;f5q{9t_ofiGA&sTm+YHK3LROSK>gNq;!{ zRgIsQ&G1FS5}|;GJyHmalbfDCjUjONX%xI5(bq{`AgB`F0RO)b1^t%G3-P@awvVtM z@7hDt(<Bc`cs7rc&Jt*>e1UL;aFlS2KnL*SgcJDDeh#nwYQj-r5^oQ^V>M~_)ZkC? z8qPTjFpH0zJMhgnlczzSqqKRvoZ9ZplFSn<0-et}K1+>yEt1y>^Mn;blMvkNB&kz` z9DYgd0n3jMXF=cS7Z=lG`rpYtOfR!*GH&xaw{Sf@qE{)ih;C+l2bJqtyjf~?F4c>r zO1;g;$Xg<W2^DN)c7cmeGucG&_;McbbJF8!Io`(anHeYOASlWy;|Ad#9&~r7mW-M3 XP9w%mijVXLS5_OXoBRN-xmW)HR+ODX diff --git a/CoLo-AT/data_analysis/data_analyzer.py b/CoLo-AT/data_analysis/data_analyzer.py index d1b233b..a6bc957 100644 --- a/CoLo-AT/data_analysis/data_analyzer.py +++ b/CoLo-AT/data_analysis/data_analyzer.py @@ -76,7 +76,7 @@ class Analyzer(): - def calculate_loc_err_and_trace_state_variance_per_run(self, data_recorder, unit_time_interval = 1, plot_graphs = True, selected_labels = None): + def calculate_loc_err_and_trace_state_variance_per_run(self, data_recorder, unit_time_interval = 0.5, plot_graphs = True, selected_labels = None): #recorded_dataline = [time, robot_label, est_x_pos, est_y_pos, trace_state_var, gt_x_pos, gt_y_pos, loc_err, update type] data = data_recorder.get_recorded_data() @@ -143,10 +143,12 @@ class Analyzer(): state_err_per_run.append(state_err_per_time_interval/num_dataline_per_time_iterval) trace_per_run.append(trace_per_time_iterval/num_dataline_per_time_iterval) + + else: - loc_err_per_run.append(0) - state_err_per_run.append(0) - trace_per_run.append(0) + loc_err_per_run.append(loc_err_per_run[-1]) + state_err_per_run.append(state_err_per_run[-1]) + trace_per_run.append(trace_per_run[-1]) lm_measurement_num.append(lm_measurement_count) relative_measurment_num.append(relative_measurement_count) @@ -157,8 +159,9 @@ class Analyzer(): interval_start_time = interval_start_time+unit_time_interval print(data_recorder.name,': ') - print('Avg location deviation errors per run: ', sum(loc_err_per_run)/len(loc_err_per_run)) - print('Avg trace of state variances per run: ', sum(trace_per_run)/len(trace_per_run)) + print('Avg location deviation errors per run: ', np.mean(loc_err_per_run)) + print('Avg state estimation errors per run: ', np.mean(state_err_per_run)) + print('Avg trace of state variances per run: ', np.mean(trace_per_run)) if plot_graphs: self.plot_loc_err_and_trace(loc_err_per_run, trace_per_run, time_arr, operations_distr = [lm_measurement_num, relative_measurment_num, comm_num], recorder_name = recorder_name) diff --git a/CoLo-AT/dataset_manager/__pycache__/simulated_dataset_manager_w.cpython-36.pyc b/CoLo-AT/dataset_manager/__pycache__/simulated_dataset_manager_w.cpython-36.pyc index 35c5604c197dbd43ba397d71f598ccbad8207c35..f2a3c9d7665263c49923681c4c514744357791fd 100644 GIT binary patch delta 354 zcmeA$e`3mI%*)HQfc;yHiqb|dTe12Z3=9k@j44bl3?&RT3|WlLj4lk#j5Q4LOexG* zM43}qu!yphu%@s!Gcqy&X*QrKY|TtyHan2b4q}7EfM#-J0$K5#6?Q;AmkUFzNo@kq zsx0;zMoESg4oQ$Q2%8g$%>|U>p2G~3<E&w{VJNH!XDH#$;sNqOdU?~Bz|Q3ZvO!jZ ztmFq`zBHC#22CEn$$}gqjMpX$N=#+EKAD{(j`7B1Hpv9dA`zg!i!?!mHjvO{E|LMU z6+whPNI;;-2E?|WJWo<W)DpzB0ue4C!WBdqPu?Tx%_;$8GEA0|n$FlXd6U#N0D-Mc AMgRZ+ delta 546 zcmZvYJxjw-6o${aN!m0`+Ej}s+C_vyP;jUsYFY>Dq=+Es;um<S*hxbW!Agg8&^Z(r z|Ac?WQ5{^mx#;3h&xu6}nvf^&`<{Ex{dilrT{J3|W!!y!?02Uhjp|r?8v!J?;0Vru zNUBL*icm;p5>8d}C{>?olnaTW7-Y&ILz$OaD2gyNUi+<47p@KFq<jb!>ZC@zq9)U_ zt#=?yQKUs!ha^tRjQpGG()cIMgoeyUh(Ldnw-|{;TcnXSXS7r{Ih=V_Bd^xsVE%>= ziY;urAXS%#ks+-NX^njDf%j{+(1(lnJqWF4j=V-+z9EwB+N6KxL$g5IZm2up*;@f! zEc7%&;4zAf8OAK(gsb$#uD*%S@%4BYU*dvuh_CUvbG+**L5Zrt6l0Fi`|9`m-bk>- y!7?N1th1^xRv12`%BV3`8EcF>V?8dr8>3~CfGK(%EMf^AVaAv4J$B;U#M3ughH)DJ diff --git a/CoLo-AT/dataset_manager/simulated_dataset_manager_w.py b/CoLo-AT/dataset_manager/simulated_dataset_manager_w.py index bd0238a..007c7d2 100755 --- a/CoLo-AT/dataset_manager/simulated_dataset_manager_w.py +++ b/CoLo-AT/dataset_manager/simulated_dataset_manager_w.py @@ -211,14 +211,6 @@ class Sim_Dataset_Manager: def dataset_reset(self): - self.start_time = 0 - self.starting_states = {} - self.starting_states[1] = [self.start_time, 0, 5, pi/2] - self.starting_states[2] = [self.start_time, 5, 0, pi] - self.starting_states[3] = [self.start_time, 0, -5, 3*pi/2] - self.starting_states[4] = [self.start_time, 0, 5, 2*pi] - - self.num_robots = len(self.robot_lables) self.measurement_data = [[] for i in range(self.num_robots)] self.odometry_data = [[] for i in range(self.num_robots)] self.groundtruth_data = [[] for i in range(self.num_robots)] diff --git a/CoLo-AT/gs_ci_journal_sim.py b/CoLo-AT/gs_ci_journal_sim.py index 9d4b5c4..ed3498b 100644 --- a/CoLo-AT/gs_ci_journal_sim.py +++ b/CoLo-AT/gs_ci_journal_sim.py @@ -27,7 +27,7 @@ from ekf_gs_sci2 import EKF_GS_SCI2 ############################################################################## -duration = 100 +duration = 150 robot_labels = [1,2,3,4] testing_dataset = Sim_Dataset_Manager('testing') start_time, starting_states, dataset_data, time_arr = testing_dataset.circular_path_4_robots(duration) @@ -65,7 +65,7 @@ robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = False) sim = SimulationManager('sim cen_ekf') state_recorder_LS_cen = StatesRecorder('LS_cen', robot_labels) sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder_LS_cen, simple_plot = False) -loc_err_per_run, state_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_cen, plot_graphs = False) +loc_err_per_run, state_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_cen, plot_graphs = False, selected_labels = [1]) ############################################################################## @@ -76,7 +76,7 @@ robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = False) sim = SimulationManager('sim ls_bda') state_recorder_LS_BDA = StatesRecorder('LS_BDA', robot_labels) sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder_LS_BDA, simple_plot = False) -loc_err_per_run, state_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_BDA, plot_graphs = False) +loc_err_per_run, state_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_BDA, plot_graphs = False, selected_labels = [1]) ############################################################################## @@ -88,7 +88,7 @@ robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = False) sim = SimulationManager('sim ls_ci') state_recorder_LS_CI = StatesRecorder('LS_CI', robot_labels) sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder_LS_CI, simple_plot = False) -loc_err_per_run, state_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_CI, plot_graphs = False) +loc_err_per_run, state_err_per_run_ls_ci, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_CI, plot_graphs = False, selected_labels = [1]) ############################################################################## @@ -99,7 +99,7 @@ robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = True) sim = SimulationManager('sim gs_sci') state_recorder_GS_SCI = StatesRecorder('GS_SCI', robot_labels) sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder_GS_SCI, simple_plot = False) -loc_err_per_run, state_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_GS_SCI, plot_graphs = False) +loc_err_per_run, state_err_per_run_sci, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_GS_SCI, plot_graphs = False, selected_labels = [1]) analyzer.algos_comparison([state_recorder, state_recorder_LS_cen, state_recorder_LS_BDA, state_recorder_LS_CI, state_recorder_GS_SCI, state_recorder_bound], only_trace = ['gs_ci_bound'], selected_labels = [1]) diff --git a/CoLo-AT/localization_algos/__pycache__/ekf_gs_sci2.cpython-36.pyc b/CoLo-AT/localization_algos/__pycache__/ekf_gs_sci2.cpython-36.pyc index c8abb3b50d3e7bbaa105b4b78ae49a4178137b74..a52f11c5e0e8030a79269ec134d0f7da2a092452 100644 GIT binary patch delta 69 zcmX@AbySPfn3tEUiTzv5rH!2R?CcC+aA9*lyBI4Y<K|^Nr&$;)HWvxjF|zj``l=Dr X|7!Agq5q5rCVv;+!>B!Zi^xO({E-;q delta 69 zcmX@AbySPfn3tDJssBUF<&B*6?Ci5<g22wr{p@0_j7*!C@tkI1tlV5ASjPyJdO7*K T(0|5*lfMh^VbqztMPwoXuOl4B diff --git a/CoLo-AT/localization_algos/ekf_gs_sci2.py b/CoLo-AT/localization_algos/ekf_gs_sci2.py index e95628a..7bfb64e 100644 --- a/CoLo-AT/localization_algos/ekf_gs_sci2.py +++ b/CoLo-AT/localization_algos/ekf_gs_sci2.py @@ -30,7 +30,7 @@ class EKF_GS_SCI2(ekf_algo_framework): [measurement_data, sensor_covariance] = sensor_data sigma_odo = sensor_covariance - var_v = 0.1 + var_v = 0.25 num_robots = int(len(s)/2) delta_t = measurement_data[0] @@ -108,7 +108,6 @@ class EKF_GS_SCI2(ekf_algo_framework): kalman_gain = total_sigma*H.getT()*sigma_invention.getI() s = s + kalman_gain*(z - z_hat) - total_sigma = total_sigma - kalman_gain*H*total_sigma i_mtx = np.identity(num_robots*2) sigma_i = (i_mtx - kalman_gain*H) * sigma_i * (i_mtx.copy() - kalman_gain*H).getT() + kalman_gain * sigma_z * kalman_gain.getT() @@ -197,7 +196,7 @@ class EKF_GS_SCI2(ekf_algo_framework): [comm_robot_s, orinetations, comm_robot_sigma_s]=comm_data num_robots = int(len(s)/2) - e = 0.8 # (iii+1)*0.01 + e = 0.83 # (iii+1)*0.01 [sigma_d, sigma_i] = sigma_s [comm_robot_sigma_d, comm_robot_sigma_i] = comm_robot_sigma_s diff --git a/CoLo-AT/robots/__pycache__/robot_system.cpython-36.pyc b/CoLo-AT/robots/__pycache__/robot_system.cpython-36.pyc index 1fd2769d85d4c09a6c7592f51c8ff5792061162a..f6533f73d45e44a77137725ae12f93b05af62170 100644 GIT binary patch delta 16 XcmaE(@J4~%n3tEUnd#d`_EZ4?FD3;a delta 16 XcmaE(@J4~%n3tF9$j`4E*;54oHnIj* diff --git a/CoLo-AT/simulation_process/__pycache__/sim_manager.cpython-36.pyc b/CoLo-AT/simulation_process/__pycache__/sim_manager.cpython-36.pyc index 1450bcf5f5e286f03e7a2161ce1cbf2616342420..898bd634c5771fc458900a539937375e91f436bf 100644 GIT binary patch delta 1337 zcmZWpOK%)S5T2eHugClFdN+<qNQ4t9kr+of3FhI5U<gDG<b??+K`5v-yVKsZHLq0n zI$jjX5^w;CTXTjpxgno8aE1d1uIYaO5+E)da-yo&aV&EA=IidSYO24gnV;i7;;E%p ztKReez5UM*Qy1B_InVR%v-=+RG~4huf|PyEn3sAVc(H%|_a>gkp$&^97uGK-TZ5!X z%iM-ah&1-;nXN+&W#4<yF!$KnWQYro)y%I9q6Wp+pl(+E<zut}2b9*f`(>W<epzTJ zvrItOeCz+o+UDzE<z(FnK=g&&6u^~E^ibKB5=HuCY5or8whxf9v8Nnpn5CVmUFksE z0QeTc$Oej-B9=;J!(1c<u5~)D>PczOD47qlM2i&b%kyC&`-zriaRO5-%I~p|g?_}M zoiD<K9d+0AfvScs!M>{+R-0w#cIIj~L$+Y@`tl*$9th2$?3J2JywDaLq?nHRseXjT z=3)KH0vQ@VJ5G2Ox%JZ=UL-P2UI>mCE&;u;=6YkUcA4Ur%tqtvb9i$n*i67q3{ZF1 zMw>|{Q(jhR@sEuoYcr%K-<(x&jM#AmJDCfml7ZNBPd?>L7oFi1lzmk40!`Tz7k5rH zmx75?l)>C?f3`GD3CEULfANeB*RhJ2!F!MQf%^Zbem;{*qrcV41JjwgadOwiPbd*v ze<}bt9y~B#&Rk;C=C_&C?H5QmnTkv&T*IQ7?!>jzxcBLznQtF8m#4bh@jRTt9Uu># zfAA8qmkC}Wc$Hw8;2eStGEu;5v^-BRNqbQOgL`)b2pi<GfY<3@#T_VYqaIZP-k`lp z1aA|(OYkPbHoQf2m7qiL4gyZx2#4?PP-<|E`+u|H3Q4KkaFz5E<ezd{+d}Hz$;mue zBhmW=H%NJ?5L=p8rBbq&39gUJT<`=S8DVc_!Lzb&n|m2#x@FB*-TBoI-CNw0*a%d` zHO7qx`6J5RBe+R$i<D8>Q}`9`4#(p@HO*h$!|WRq9r$ItMOru1F|h@Lj|nsZ^?4uA zFaZ5DC`!=^zpF6nMhBxtea)T39XnAB^J+BiNYnAfJkgo#!C{QBeyLzUB&-sB?G9XU re4~^FPKX5e|B5(YmuL$g_t1B7S1&+>1Ofu8Vqayh(5Crr_WAz+-WXIR delta 1302 zcmZXUOK%)S5Xa}WyR$E^ZEO(&*ioLI0LErRSdm~L4~K*(iem|+5vUpOw0B3$OmC`t zom~;hf-ew>z97DV4+urRaE1eXhDPE8AmxxlE*ub5v(A&tPu0~`-PQl9nZJYIgKE3k ztnK{r=!-w^S1;M8YnEl*weMQYimgp6ux|vm@$x9+fnz+$(`_hW#GVBe{iA)e<lw^6 z4{h)(Xar>_>#v>85n4b2A1%}BiY#MYkt+~s%3((T<~*?L`o6oiTgHH}1-#3X9S%&Y zNDXD!lsu20E~{BIVi4s$ZmOyeT=qp8LyOL?KS}K=m?ls4Ah)MN7ubj}4qZu>WMkvT zi8NluqujVsHRDO0lVbHZ-fQ-;{U1EASBnQZK=r{C;l)QqX)5k8G2jrXMC6_QbLG!G zdr^O1>zoN&J+2stEumO~FB!oM9nqxv=AUl$Kn(L(!4My{p#QCXx=!i_hbOn5q-ZD3 z;1n5CBn@ZyTmdLeI3<&8n4&92WwXq9L|DU6Skm|Es|#UulCcwkDfKY%cIfX!X%b`2 zFs1*hzuIX~G|5;f2d|KI7-1?Imon;cJY&*`<awP|8!y`z_pdhEZs`cdhx*&rcWs)T zLM5CPXL-eV+jwVS!-dCwplSH0c0Ns{!fFR=d;0A3trG`IU&l>jZ~rd=Zs5kA{%QJ( zUDJ=I-)<eHz)H+h6)^?JbbBW7j-yX+R9AL`ML2;rka&e~5Ri46@CM;c!drx8gmF`z z!wM}|Y3bwx<44fD)91jAn<Y8CLz`{d^d&Y`jj`ir$ajv=A$&l1m$3UD@qGd{8_pwe z&c--$w}*+E^ykGU!-o_~U51Y+zC^;wA~tNIS=`A;HMmGYmk5^;;h~(56dMRBldY69 zmFRo3{-Lmfb+c4-!^V^BBp!wO=h?-t){7g8K?r@215C>JWWuk~xf_HlgijEmFSaCp zhzI?D+??XGp2G=b0}x%D6(+lV9uHHl_3}%9>{cni82JUV775n~UlOR{&wvgC4?&7a znn~aGU4Pb}_v^Kr#ZE9|O8GDwjA0YEO{1`vvq+`M7R-~&5fVNp!y81(?Za6;ntOev g=pFr}jC1{CQ^sFNEHZG>Q5^eB5k*bD{&jBYKPh-i4*&oF diff --git a/CoLo-AT/simulation_process/__pycache__/state_recorder.cpython-36.pyc b/CoLo-AT/simulation_process/__pycache__/state_recorder.cpython-36.pyc index fecf62bb365b60850ecd554432651b7f9690698c..732abd46ebad50eb45b3176b5055226175851428 100644 GIT binary patch delta 16 XcmeyX_E(MFn3tDJfaBXn_A+4rF7O2O delta 16 XcmeyX_E(MFn3tDJ``_1%>}A3LHEae1 diff --git a/CoLo-AT/simulation_process/sim_manager.py b/CoLo-AT/simulation_process/sim_manager.py index a575a10..08908cd 100644 --- a/CoLo-AT/simulation_process/sim_manager.py +++ b/CoLo-AT/simulation_process/sim_manager.py @@ -13,6 +13,7 @@ from random import randint class SimulationManager(): def __init__(self, name): self.name = name + np.random.seed(12) def comm_controller(self, rbt_idx, num_robots, rsp): receiver_idx = rbt_idx -- GitLab