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 71e848bdc21f0e4085fd1f8b06af55246286a44c..98deeb48ab51fd14206fa66498458fe60f18dfe4 100644 Binary files a/CoLo-AT/data_analysis/__pycache__/data_analyzer.cpython-36.pyc and b/CoLo-AT/data_analysis/__pycache__/data_analyzer.cpython-36.pyc differ diff --git a/CoLo-AT/data_analysis/data_analyzer.py b/CoLo-AT/data_analysis/data_analyzer.py index b5be8b81c25eab0ac2cd168e99e382477eaebf6f..f608879cdffc056f76489078cb7a4b1faa586bda 100644 --- a/CoLo-AT/data_analysis/data_analyzer.py +++ b/CoLo-AT/data_analysis/data_analyzer.py @@ -26,6 +26,8 @@ class Analyzer(): self.dataset_labels = dataset_labels def plot_loc_err_and_trace(self, loc_err, trace, time_arr, measurement_count, recorder_name = None): + + [lm_measurement_num, relative_measurment_num] = measurement_count fig = plt.figure() plt.suptitle('Correctness analysis') fig1 = fig.add_subplot(311) @@ -34,8 +36,9 @@ class Analyzer(): fig1.plot(time_arr, loc_err, label = recorder_name) fig2.plot(time_arr, trace, label = recorder_name) - fig3.bar(time_arr, measurement_count, label = recorder_name) - + #fig3.bar(time_arr, lm_measurement_num, label = "landmark observation") + fig3.bar(time_arr, relative_measurment_num, label = "relative observation") + fig3.bar(time_arr, lm_measurement_num, bottom = relative_measurment_num, label = "landmark observation") fig1.set_title('Estimation deviation error') fig1.set_xlabel('Time[s]') @@ -78,7 +81,8 @@ class Analyzer(): finish_flag = False loc_err_per_run = [] - measurement_num = [] + lm_measurement_num = [] + relative_measurment_num = [] trace_per_run = [] time_arr = [] @@ -86,7 +90,8 @@ class Analyzer(): loc_err_per_time_iterval = 0 trace_per_time_iterval = 0 num_dataline_per_time_iterval = 0 - measurement_count = 0 + lm_measurement_count = 0 + relative_measurement_count = 0 while interval_start_time <= time < interval_start_time+unit_time_interval: try: @@ -96,8 +101,10 @@ class Analyzer(): break time = data_in_time_order[time_index][0] - if update_in_time_order[time_index] == 'landmark observation' or update_in_time_order[time_index] == 'relative observation': - measurement_count +=1 + if update_in_time_order[time_index] == 'landmark observation': + lm_measurement_count +=1 + if update_in_time_order[time_index] == 'relative observation': + relative_measurement_count +=1 loc_err_per_time_iterval+= data_in_time_order[time_index][7] trace_per_time_iterval += data_in_time_order[time_index][4] @@ -116,7 +123,10 @@ class Analyzer(): loc_err_per_run.append(0) trace_per_run.append(0) - measurement_num.append(measurement_count) + lm_measurement_num.append(lm_measurement_count) + relative_measurment_num.append(relative_measurement_count) + + time_arr.append((interval_start_time+unit_time_interval+interval_start_time)/2) interval_start_time = interval_start_time+unit_time_interval @@ -126,7 +136,7 @@ class Analyzer(): print('Avg trace of state variances per run: ', sum(trace_per_run)/len(trace_per_run)) if plot_graphs: - self.plot_loc_err_and_trace(loc_err_per_run, trace_per_run, time_arr, measurement_count = measurement_num, recorder_name = recorder_name) + self.plot_loc_err_and_trace(loc_err_per_run, trace_per_run, time_arr, measurement_count = [lm_measurement_num, relative_measurment_num], recorder_name = recorder_name) return loc_err_per_run, trace_per_run, time_arr @@ -222,6 +232,7 @@ class Analyzer(): def algos_comparison(self, arr_data_recorder, only_trace=None): + print("************Algorithm Comparison***************") arr_loc_err = [] arr_trace = [] for data_recorder in arr_data_recorder: diff --git a/CoLo-AT/gs_sci_vs_ls_ci.py b/CoLo-AT/gs_sci_vs_ls_ci.py new file mode 100644 index 0000000000000000000000000000000000000000..e3bba30a0e831272609bb0f52b909aa2f8185632 --- /dev/null +++ b/CoLo-AT/gs_sci_vs_ls_ci.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Apr 8 17:55:06 2018 + +@author: william +""" + +import os, sys +import getpass +sys.path.append(os.path.join(os.path.dirname(__file__), ".")) +from dataset_manager.realworld_dataset_manager import RW_Dataset_Manager +from simulation_process.sim_manager import SimulationManager +from robots.robot_system import RobotSystem +from simulation_process.state_recorder import StatesRecorder +from data_analysis.data_analyzer import Analyzer +from data_analysis.realtime_plot import animate_plot + +# load algorithms +sys.path.append(os.path.join(os.path.dirname(__file__), "localization_algos")) +from centralized_ekf import Centralized_EKF # works +from ekf_ls_bda import EKF_LS_BDA +from ekf_ls_ci import EKF_LS_CI +from ekf_gs_ci2 import EKF_GS_CI2 +from ekf_gs_sci2 import EKF_GS_SCI2 + + +# dataset_path = "/Users/shengkangchen/Documents/CoLo/CoLo-D/CoLo-Datasets/official_dataset3/" +dataset_path = "/home/william/CoLo/CoLo-D/CoLo-Datasets/official_dataset1/" # for desktop Ubuntu + +robot_labels = [1,2,3] +duration = 180 # duration for the simulation in sec +testing_dataset = RW_Dataset_Manager('testing') +start_time, starting_states, dataset_data, time_arr = testing_dataset.load_datasets(dataset_path, robot_labels, duration) +analyzer = Analyzer('analyzer', robot_labels) + +loc_algo = EKF_GS_CI2('algo') +robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = True) +sim = SimulationManager('sim gs_ci') +state_recorder = StatesRecorder('GS_CI', robot_labels) + +sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = False) +loc_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = True) + +#animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map()) + +############################################################################## + + +testing_dataset.dataset_reset() +loc_algo = EKF_LS_CI('algo') +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, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_CI, plot_graphs = True) + +############################################################################## +''' +testing_dataset.dataset_reset() +loc_algo = EKF_GS_SCI2('algo') +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, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_GS_SCI, plot_graphs = True) +''' +analyzer.algos_comparison([state_recorder, state_recorder_LS_CI]) diff --git a/CoLo-AT/isrr2017_v2_2019.py b/CoLo-AT/isrr2017_v2_2019.py new file mode 100644 index 0000000000000000000000000000000000000000..344afecd0dd92e7ecdf14c0654d6f450ab8bbcbd --- /dev/null +++ b/CoLo-AT/isrr2017_v2_2019.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Apr 8 17:55:06 2018 + +@author: william +""" + +import os, sys +import getpass +sys.path.append(os.path.join(os.path.dirname(__file__), ".")) +from dataset_manager.realworld_dataset_manager import RW_Dataset_Manager +from simulation_process.sim_manager import SimulationManager +from robots.robot_system import RobotSystem +from simulation_process.state_recorder import StatesRecorder +from data_analysis.data_analyzer import Analyzer +from data_analysis.realtime_plot import animate_plot + +# load algorithms +sys.path.append(os.path.join(os.path.dirname(__file__), "localization_algos")) +from centralized_ekf import Centralized_EKF # works +from ekf_ls_bda import EKF_LS_BDA +from ekf_ls_ci import EKF_LS_CI +from ekf_gs_ci2 import EKF_GS_CI2 +from ekf_gs_sci2 import EKF_GS_SCI2 + + +# dataset_path = "/Users/shengkangchen/Documents/CoLo/CoLo-D/CoLo-Datasets/official_dataset3/" +dataset_path = "/home/william/CoLo/CoLo-D/CoLo-Datasets/official_dataset3/" # for desktop Ubuntu + +robot_labels = [1,2,3] +duration = 180 # duration for the simulation in sec +testing_dataset = RW_Dataset_Manager('testing') +start_time, starting_states, dataset_data, time_arr = testing_dataset.load_datasets(dataset_path, robot_labels, duration) +analyzer = Analyzer('analyzer', robot_labels) + +loc_algo = EKF_GS_CI2('algo') +robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = True) +sim = SimulationManager('sim gs_ci') +state_recorder = StatesRecorder('GS_CI', robot_labels) + +sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = False) +loc_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = True) + +#animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map()) + +############################################################################## + +testing_dataset.dataset_reset() +loc_algo = Centralized_EKF('algo') +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, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_cen, plot_graphs = True) + + +############################################################################## + +testing_dataset.dataset_reset() +loc_algo = EKF_LS_BDA('algo') +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, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_BDA, plot_graphs = True) + + +############################################################################## + +testing_dataset.dataset_reset() +loc_algo = EKF_LS_CI('algo') +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, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_LS_CI, plot_graphs = True) + +############################################################################## + +testing_dataset.dataset_reset() +loc_algo = EKF_GS_SCI2('algo') +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, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder_GS_SCI, plot_graphs = True) + +analyzer.algos_comparison([state_recorder, state_recorder_LS_cen, state_recorder_LS_BDA, state_recorder_LS_CI, state_recorder_GS_SCI]) diff --git a/CoLo-AT/localization_algos/__pycache__/ekf_ls_bda.cpython-36.pyc b/CoLo-AT/localization_algos/__pycache__/ekf_ls_bda.cpython-36.pyc index dfff1580319cd69bccc411af302e0a2a4aeb2dd0..6843e8adf7a54bbc8527d351585099c800e71b27 100644 Binary files a/CoLo-AT/localization_algos/__pycache__/ekf_ls_bda.cpython-36.pyc and b/CoLo-AT/localization_algos/__pycache__/ekf_ls_bda.cpython-36.pyc differ diff --git a/CoLo-AT/localization_algos/__pycache__/ekf_ls_ci.cpython-36.pyc b/CoLo-AT/localization_algos/__pycache__/ekf_ls_ci.cpython-36.pyc index 7bbf05027bcebec06b2ffaf2f49d45c423207ea6..8f679589595ce4259c225d0622f73a6b0385245e 100644 Binary files a/CoLo-AT/localization_algos/__pycache__/ekf_ls_ci.cpython-36.pyc and b/CoLo-AT/localization_algos/__pycache__/ekf_ls_ci.cpython-36.pyc differ diff --git a/CoLo-AT/localization_algos/__pycache__/gs_ci_bound.cpython-36.pyc b/CoLo-AT/localization_algos/__pycache__/gs_ci_bound.cpython-36.pyc index 83bf5d28309a25e87b1bc794f5adbd1a8d27d0d4..0011e92cb63c4fc5e20457ee0cf17255617a39e5 100644 Binary files a/CoLo-AT/localization_algos/__pycache__/gs_ci_bound.cpython-36.pyc and b/CoLo-AT/localization_algos/__pycache__/gs_ci_bound.cpython-36.pyc differ diff --git a/CoLo-AT/localization_algos/ekf_ls_ci.py b/CoLo-AT/localization_algos/ekf_ls_ci.py index fe396468252612ed20b838524c8dc6fbf0f9f63b..cfe89cdc573141203a19b937443a38ab7001992b 100644 --- a/CoLo-AT/localization_algos/ekf_ls_ci.py +++ b/CoLo-AT/localization_algos/ekf_ls_ci.py @@ -40,8 +40,8 @@ class EKF_LS_CI(ekf_algo_framework): s[i+1,0] = s[i+1,0] + sin(self_theta)*v*delta_t #y var_u_v = sigma_odo[0,0] - sigma_s[i:i+2, i:i+2] = sigma_s[i:i+2, i:i+2]+ delta_t*delta_t*rot_mtx(self_theta)*matrix([[var_u_v, 0],[0, 0]])*rot_mtx(self_theta).T - + #sigma_s[i:i+2, i:i+2] = sigma_s[i:i+2, i:i+2]+ delta_t*delta_t*rot_mtx(self_theta)*matrix([[var_u_v, 0],[0, 0]])*rot_mtx(self_theta).T + sigma_s[i:i+2, i:i+2] = sigma_s[i:i+2, i:i+2]+ delta_t*delta_t*rot_mtx(self_theta)*sigma_odo*rot_mtx(self_theta).T return [s, orinetations, sigma_s] @@ -78,8 +78,6 @@ class EKF_LS_CI(ekf_algo_framework): z_hat = rot_mtx(self_theta).getT()*(np.matrix([delta_x, delta_y]).getT()) # shifted to robot frame - - sigma_z = rot_mtx(bearing) * sigma_ob * rot_mtx(bearing).getT() sigma_invention = H * local_sigma * H.getT() + sigma_z kalman_gain = local_sigma*H.getT()*sigma_invention.getI() diff --git a/CoLo-AT/localization_algos/gs_ci_bound.py b/CoLo-AT/localization_algos/gs_ci_bound.py index 21f007c61988f990f1272db1bae82861295e9249..da3a82097d2c3bd74131201efc44ea3827bb96f0 100644 --- a/CoLo-AT/localization_algos/gs_ci_bound.py +++ b/CoLo-AT/localization_algos/gs_ci_bound.py @@ -12,7 +12,7 @@ class GS_CI_Bound(ekf_algo_framework): self.d_max = 2 # max measurement distance self.d_var = 0.2 self.bearing_var = 0.2 - self.var_v = 0.2 + self.var_v = 0.1 def state_variance_init(self, num_robots): return 0.01*np.matrix(np.identity(2*num_robots), dtype = float)