Пример #1
0
def plot_overall_odometry_errors(odo_err_col, algorithm_names, rel_e_distances,
                                 plot_settings, output_dir):
    for et in odo_err_col:
        if et == 'rel_trans_perc':
            ylabel = 'Translation error (\%)'
        elif et == 'rel_rot_deg_per_m':
            ylabel = 'Rotation error (deg / m)'
        else:
            assert False
        cur_err = odo_err_col[et]

        assert sorted(algorithm_names) == sorted(list(cur_err.keys()))
        colors = []
        labels = []
        for alg in algorithm_names:
            colors.append(plot_settings['algo_colors'][alg])
            labels.append(plot_settings['algo_labels'][alg])

        distances = sorted(rel_e_distances)
        errors = []
        for alg in algorithm_names:
            errors.append([cur_err[alg][d] for d in distances])

        fig = plt.figure(figsize=(12, 3))
        ax = fig.add_subplot(111,
                             xlabel='Distance traveled [m]',
                             ylabel=ylabel)
        pu.boxplot_compare(ax, distances, errors, labels, colors, legend=True)
        fig.tight_layout()
        fig.savefig(output_dir + '/' + 'overall_{}'.format(et) + FORMAT,
                    bbox_inches="tight",
                    dpi=args.dpi)
        plt.close(fig)
def _boxplotOrientDiffs(orient_diffs, names, nm_to_label, top_save_dir):
    xlabels = kMetricsLabels
    data_labels = [nm_to_label[v] for v in names]
    colors = [kPallete[i] for i, v in enumerate(names)]

    data = []
    for nm in names:
        data_i = []
        for m in kMetrics:
            data_i.append(orient_diffs[nm][m])
        data.append(data_i)

    fig = plt.figure(figsize=(12, 6))
    ax = fig.add_subplot(111)
    pu.boxplot_compare(ax, xlabels, data, data_labels, colors)
    ax.set_ylabel("Orientation diff. (deg)")
    plt.tight_layout()
    fig.savefig(os.path.join(top_save_dir, 'orient_diffs_boxplot.png'),
                bbox_inches='tight')
Пример #3
0
def plot_odometry_error_per_dataset(dataset_rel_err, dataset_names,
                                    algorithm_names, datasets_outdir,
                                    plot_settings):
    for dataset_idx, dataset_nm in enumerate(dataset_names):
        output_dir = datasets_outdir[dataset_nm]
        print("Plotting {0}...".format(dataset_nm))
        rel_err = dataset_rel_err[dataset_idx]
        assert sorted(algorithm_names) == sorted(
            list(rel_err['trans_err'].keys()))
        distances = rel_err['subtraj_len']

        config_labels = []
        config_colors = []
        for v in algorithm_names:
            config_labels.append(plot_settings['algo_labels'][v])
            config_colors.append(plot_settings['algo_colors'][v])

        fig = plt.figure(figsize=(12, 3))
        ax = fig.add_subplot(121,
                             xlabel='Distance traveled (m)',
                             ylabel='Translation error (\%)')
        pu.boxplot_compare(
            ax,
            distances, [rel_err['trans_err_perc'][v] for v in algorithm_names],
            config_labels,
            config_colors,
            legend=False)
        ax = fig.add_subplot(122,
                             xlabel='Distance traveled (m)',
                             ylabel='Rotation error (deg / m)')
        pu.boxplot_compare(
            ax,
            distances, [rel_err['rot_deg_per_m'][v] for v in algorithm_names],
            config_labels,
            config_colors,
            legend=True)
        fig.tight_layout()
        fig.savefig(output_dir + '/' + dataset_nm + '_trans_rot_error' +
                    FORMAT,
                    bbox_inches="tight",
                    dpi=args.dpi)
        plt.close(fig)
def _boxplotFIMDiffs(nm_to_fim_diff_perc, names, nm_to_label, top_save_dir):
    xlabels = [nm_to_label[v] for v in names]
    data_labels = ['FIM Diff']
    colors = [kPallete[0]]

    data = []
    for nm in names:
        data.append(nm_to_fim_diff_perc[nm])

    fig = plt.figure(figsize=(12, 6))
    ax = fig.add_subplot(111)
    pu.boxplot_compare(ax, xlabels, [data], data_labels, colors, legend=False)
    ax.set_ylabel("FIM diff. (\%)")
    plt.setp(ax.get_xticklabels(),
             rotation=45,
             ha="right",
             rotation_mode="anchor")
    plt.tight_layout()
    fig.savefig(os.path.join(top_save_dir, 'fim_diffs_boxplot.png'),
                bbox_inches='tight')
Пример #5
0
    def plot_rel_traj_error(self, FORMAT='.png'):
        print(">>> Plotting relative (odometry) error...")

        distances = self.preset_boxplot_distances
        rel_trans_err = [[self.rel_errors[d]['rel_trans'] for d in distances]]
        rel_trans_err_perc = [[self.rel_errors[d]['rel_trans_perc']
                               for d in distances]]
        rel_yaw_err = [[self.rel_errors[d]['rel_yaw'] for d in distances]]
        labels = ['Estimate']
        colors = ['k', 'b']

        # plot relative translation error (in meters)
        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Translation error [m]')
        pu.boxplot_compare(ax, distances, rel_trans_err, labels, colors)
        fig.tight_layout()
        fig.savefig(self.plots_dir + '/rel_translation_error' + FORMAT, bbox_inches="tight")
        plt.close(fig)

        # plot relative translation error (in %)
        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot( 111, xlabel='Distance traveled [m]',ylabel='Translation error [\%]')
        pu.boxplot_compare(ax, distances, rel_trans_err_perc, labels, colors)
        fig.tight_layout()
        fig.savefig(self.plots_dir + '/rel_translation_error_perc' + FORMAT,
                    bbox_inches="tight")
        plt.close(fig)

        # plot relative rotation error (in degrees)
        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111, xlabel='Distance traveled [m]', ylabel='Yaw error [deg]')
        pu.boxplot_compare(ax, distances, rel_yaw_err, labels, colors)
        fig.tight_layout()
        fig.savefig(self.plots_dir + '/rel_yaw_error' + FORMAT, bbox_inches="tight")
        plt.close(fig)
Пример #6
0
def plot_rmse_per_dataset(algorithm_rmse, dataset_names, algorithm_names,
                          output_dir, plot_settings):
    config_labels = []
    config_colors = []
    assert sorted(algorithm_names) == sorted(
        list(algorithm_rmse['trans_err'].keys()))
    for v in algorithm_names:
        config_labels.append(plot_settings['algo_labels'][v])
        config_colors.append(plot_settings['algo_colors'][v])
    assert len(datasets_labels) == len(datasets)
    labels = [plot_settings['datasets_labels'][v] for v in dataset_names]

    # check
    n_data = len(datasets)
    for v in algorithm_names:
        assert len(algorithm_rmse['trans_err'][v]) == n_data
        assert len(algorithm_rmse['rot_err'][v]) == n_data

    fig = plt.figure(figsize=(6, 3))
    ax = fig.add_subplot(111, xlabel='Datasets', ylabel='Translation RMSE (m)')
    pu.boxplot_compare(
        ax, labels, [algorithm_rmse['trans_err'][v] for v in algorithm_names],
        config_labels, config_colors)
    fig.tight_layout()
    fig.savefig(output_dir + '/' + 'all_translation_rmse' + FORMAT,
                bbox_inches="tight",
                dpi=args.dpi)
    plt.close(fig)

    fig = plt.figure(figsize=(6, 3))
    ax = fig.add_subplot(111, xlabel='Datasets', ylabel='Rotation RMSE (deg)')
    pu.boxplot_compare(ax, labels,
                       [algorithm_rmse['rot_err'][v] for v in algorithm_names],
                       config_labels, config_colors)
    fig.tight_layout()
    fig.savefig(output_dir + '/' + 'all_rotation_rmse' + FORMAT,
                bbox_inches="tight",
                dpi=args.dpi)
    plt.close(fig)
def plot_overall_odometry_errors(overall_err, output_dir):
    print("Plotting overall error...")
    n_config = len(overall_err['trans_err'])
    assert n_config == len(overall_err['trans_err_perc'])
    assert n_config == len(overall_err['yaw_err'])

    config_labels = []
    config_colors = []
    for v in overall_err['trans_err'].keys():
        config_labels.append(PLOT_LABELS[v])
        config_colors.append(COLORS[v])

    # absolute error
    fig = plt.figure(figsize=(6, 2.5))
    ax = fig.add_subplot(111,
                         xlabel='Distance traveled [m]',
                         ylabel='Translation error [m]')
    pu.boxplot_compare(ax,
                       overall_err['distances'],
                       overall_err['trans_err'].values(),
                       config_labels,
                       config_colors,
                       ymax=0.15)
    fig.tight_layout()
    fig.savefig(output_dir + '/overall_rel_translation_error' + FORMAT,
                bbox_inches="tight")
    plt.close(fig)

    # relative error
    fig = plt.figure(figsize=(6, 2.5))
    ax = fig.add_subplot(111,
                         xlabel='Distance traveled [m]',
                         ylabel='Translation error [\%]')
    pu.boxplot_compare(ax, overall_err['distances'],
                       overall_err['trans_err_perc'].values(), config_labels,
                       config_colors)
    fig.tight_layout()
    fig.savefig(output_dir + '/overall_rel_translation_error_percentage' +
                FORMAT,
                bbox_inches="tight")
    plt.close(fig)

    # yaw orientation error
    fig = plt.figure(figsize=(6, 2.5))
    ax = fig.add_subplot(111,
                         xlabel='Distance traveled [m]',
                         ylabel='Yaw error [deg]')
    pu.boxplot_compare(ax, overall_err['distances'],
                       overall_err['yaw_err'].values(), config_labels,
                       config_colors)
    fig.tight_layout()
    fig.savefig(output_dir + '/overall_rel_yaw_error' + FORMAT,
                bbox_inches="tight")
    plt.close(fig)
def plot_odometry_error_per_dataset(dataset_rel_err, dataset_names, out_dir):
    for dataset_idx, dataset_nm in enumerate(dataset_names):
        print("Plotting {0}...".format(dataset_nm))
        rel_err = dataset_rel_err[dataset_idx]
        distances = rel_err['subtraj_len']

        config_labels = []
        config_colors = []
        for v in rel_err['trans_err'].keys():
            config_labels.append(PLOT_LABELS[v])
            config_colors.append(COLORS[v])

        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111,
                             xlabel='Distance traveled [m]',
                             ylabel='Translation error [m]')
        pu.boxplot_compare(ax,
                           distances,
                           rel_err['trans_err'].values(),
                           config_labels,
                           config_colors,
                           ymax=0.15)
        fig.tight_layout()
        fig.savefig(output_dir + '/' + dataset_nm + '_translation_error' +
                    FORMAT,
                    bbox_inches="tight")
        plt.close(fig)

        # relative error
        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111,
                             xlabel='Distance traveled [m]',
                             ylabel='Translation error [\%]')
        pu.boxplot_compare(ax, distances, rel_err['trans_err_perc'].values(),
                           config_labels, config_colors)
        fig.tight_layout()
        fig.savefig(output_dir + '/' + dataset_nm +
                    '_translation_error_percentage' + FORMAT,
                    bbox_inches="tight")
        plt.close(fig)

        # yaw orientation error
        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111,
                             xlabel='Distance traveled [m]',
                             ylabel='Yaw error [deg]')
        pu.boxplot_compare(ax, distances, rel_err['ang_yaw_err'].values(),
                           config_labels, config_colors)
        fig.tight_layout()
        fig.savefig(output_dir + '/' + dataset_nm + '_yaw_error' + FORMAT,
                    bbox_inches="tight")
        plt.close(fig)
Пример #9
0
    print(">>> Plotting relative (odometry) error...")
    distances = traj.preset_boxplot_distances
    rel_trans_err = [[traj.rel_errors[d]['rel_trans'] for d in distances]]
    rel_trans_err_perc = [[
        traj.rel_errors[d]['rel_trans_perc'] for d in distances
    ]]
    rel_yaw_err = [[traj.rel_errors[d]['rel_yaw'] for d in distances]]
    labels = ['Estimate']
    colors = ['b']

    fig = plt.figure(figsize=(6, 2.5))
    ax = fig.add_subplot(111,
                         xlabel='Distance traveled [m]',
                         ylabel='Translation error [m]')
    pu.boxplot_compare(ax, distances, rel_trans_err, labels, colors)
    fig.tight_layout()
    fig.savefig(plots_dir + '/rel_translation_error' + FORMAT,
                bbox_inches="tight")
    plt.close(fig)

    fig = plt.figure(figsize=(6, 2.5))
    ax = fig.add_subplot(111,
                         xlabel='Distance traveled [m]',
                         ylabel='Translation error [\%]')
    pu.boxplot_compare(ax, distances, rel_trans_err_perc, labels, colors)
    fig.tight_layout()
    fig.savefig(plots_dir + '/rel_translation_error_perc' + FORMAT,
                bbox_inches="tight")
    plt.close(fig)
Пример #10
0
        suffix = ''
        if n_trials > 1:
            suffix = '_mt'

        plot_types = ['rel_trans', 'rel_trans_perc', 'rel_yaw']
        rel_errors, distances = mt_error.get_relative_errors_and_distances(
            error_types=plot_types)

        labels = ['Estimate']
        colors = ['b']

        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111,
                             xlabel='Distance traveled [m]',
                             ylabel='Translation error [m]')
        pu.boxplot_compare(ax, distances, rel_errors['rel_trans'], labels,
                           colors)
        fig.tight_layout()
        fig.savefig(plot_dir_i + '/rel_translation_error' + suffix + FORMAT,
                    bbox_inches="tight")
        plt.close(fig)

        fig = plt.figure(figsize=(6, 2.5))
        ax = fig.add_subplot(111,
                             xlabel='Distance traveled [m]',
                             ylabel='Translation error [\%]')
        pu.boxplot_compare(ax, distances, rel_errors['rel_trans_perc'], labels,
                           colors)
        fig.tight_layout()
        fig.savefig(plot_dir_i + '/rel_translation_error_perc' + suffix +
                    FORMAT,
                    bbox_inches="tight")