clear; clc; addpath(genpath('../../matlab/')); %% Parameters data_dir = '../../sample_data/KITTI/00/velodyne/'; basic_max_range = 80; % meter basic_num_sectors = 60; basic_num_rings = 20; %% Visualization of ScanContext bin_path = [data_dir, '000094.bin']; ptcloud = KITTIbin2Ptcloud(bin_path); sc = Ptcloud2ScanContext(ptcloud, basic_num_sectors, basic_num_rings, basic_max_range); h1 = figure(1); clf; imagesc(sc); set(gcf, 'Position', [10 10 800 300]); xlabel('sector'); ylabel('ring'); % for vivid visualization colormap jet; caxis([0, 4]); % KITTI00 is usually in z: [0, 4] %% Making Ringkey and maintaining kd-tree % Read the PlaceRecognizer.m %% ScanContext with different resolution figure(2); clf; pcshow(ptcloud); colormap jet; caxis([0 4]); res = [0.25, 0.5, 1, 2, 3]; h2=figure(3); clf; set(gcf, 'Position', [10 10 500 1000]); for i = 1:length(res) num_sectors = basic_num_sectors * res(i); num_rings = basic_num_rings * res(i); sc = Ptcloud2ScanContext(ptcloud, num_sectors, num_rings, basic_max_range); subplot(length(res), 1, i); imagesc(sc); hold on; colormap jet; caxis([0, 4]); % KITTI00 is usually in z: [0, 4] end %% Comparison btn two scan contexts KITTI_bin1a_path = [data_dir, '000094.bin']; KITTI_bin1b_path = [data_dir, '000095.bin']; KITTI_bin2a_path = [data_dir, '000198.bin']; KITTI_bin2b_path = [data_dir, '000199.bin']; ptcloud_KITTI1a = KITTIbin2Ptcloud(KITTI_bin1a_path); ptcloud_KITTI1b = KITTIbin2Ptcloud(KITTI_bin1b_path); ptcloud_KITTI2a = KITTIbin2Ptcloud(KITTI_bin2a_path); ptcloud_KITTI2b = KITTIbin2Ptcloud(KITTI_bin2b_path); sc_KITTI1a = Ptcloud2ScanContext(ptcloud_KITTI1a, basic_num_sectors, basic_num_rings, basic_max_range); sc_KITTI1b = Ptcloud2ScanContext(ptcloud_KITTI1b, basic_num_sectors, basic_num_rings, basic_max_range); sc_KITTI2a = Ptcloud2ScanContext(ptcloud_KITTI2a, basic_num_sectors, basic_num_rings, basic_max_range); sc_KITTI2b = Ptcloud2ScanContext(ptcloud_KITTI2b, basic_num_sectors, basic_num_rings, basic_max_range); dist_1a_1b = DistanceBtnScanContexts(sc_KITTI1a, sc_KITTI1b); dist_1b_2a = DistanceBtnScanContexts(sc_KITTI1b, sc_KITTI2a); dist_1a_2a = DistanceBtnScanContexts(sc_KITTI1a, sc_KITTI2a); dist_2a_2b = DistanceBtnScanContexts(sc_KITTI2a, sc_KITTI2b); disp([dist_1a_1b, dist_1b_2a, dist_1a_2a, dist_2a_2b]);