77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Matlab
		
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Matlab
		
	
	
|  | % Set up a small SLAM example in MATLAB to test the execution time | ||
|  | 
 | ||
|  | clear; | ||
|  | clf; | ||
|  | %Parameters | ||
|  | noRuns=100; | ||
|  | steps=1; | ||
|  | m = 5; | ||
|  | velocity=1; | ||
|  | time_qr=[]; | ||
|  | time_gtsam=[]; | ||
|  | for steps=1:noRuns | ||
|  |   | ||
|  |     %figure(1);clf; | ||
|  |     % robot moves in the world | ||
|  |     trajectory = walk([0.1,0.1],velocity,m); | ||
|  |     mappingArea=max(trajectory,[],2); | ||
|  |     %plot(trajectory(1,:),trajectory(2,:),'b+'); hold on; | ||
|  | 
 | ||
|  |     visibilityTh=sqrt(mappingArea(1)^2+mappingArea(2)^2)/m; %distance between poses | ||
|  |     % Set up the map | ||
|  |     map = create_landmarks(visibilityTh, mappingArea,steps); | ||
|  |     %plot(map(1,:), map(2,:),'g.'); | ||
|  |     %axis([0 mappingArea(1) 0 mappingArea(2)]); axis square; | ||
|  |     n=size(map,1)*size(map,2); | ||
|  |     % Check visibility and plot this on the problem figure | ||
|  |     visibilityTh=visibilityTh+steps; | ||
|  |     visibility = create_visibility(map, trajectory,visibilityTh); | ||
|  |     %gplot(visibility,[map trajectory]'); | ||
|  |      | ||
|  |     steps | ||
|  |     % simulate the measurements | ||
|  |     measurement_sigma = 1; | ||
|  |     odo_sigma = 0.1; | ||
|  |     [measurements, odometry] = simulate_measurements(map, trajectory, visibility, measurement_sigma, odo_sigma); | ||
|  |      | ||
|  |      | ||
|  |     % create a configuration of all zeroes | ||
|  |      config = create_config(n,m); | ||
|  | 
 | ||
|  |     % create the factor graph | ||
|  |     gaussianFactorGraph = create_gaussian_factor_graph(config, measurements, odometry, measurement_sigma, odo_sigma, n); | ||
|  |     %  | ||
|  |     % create an ordering | ||
|  |     ord = create_ordering(n,m); | ||
|  | 
 | ||
|  |     ijs = gaussianFactorGraph.sparse(ord); | ||
|  |     A=sparse(ijs(1,:),ijs(2,:),ijs(3,:));  | ||
|  | 
 | ||
|  |      | ||
|  |     runs=50; % for each graph run QR and elimination several times and average the time | ||
|  |      | ||
|  |     ck_qr=cputime; | ||
|  |     for it=1:runs | ||
|  |         R_qr = qr(A);       | ||
|  |     end | ||
|  |     time_qr=[time_qr,(cputime-ck_qr)/runs]; | ||
|  |      | ||
|  |     % eliminate with that ordering | ||
|  |     %time gt_sam | ||
|  |     for it=1:runs+1 | ||
|  |         if it==2 | ||
|  |         ck_gt=cputime; | ||
|  |         end | ||
|  |         BayesNet = gaussianFactorGraph.eliminate_(ord);  | ||
|  |     end | ||
|  |     time_gtsam=[time_gtsam,(cputime-ck_gt)/runs]; | ||
|  |      | ||
|  |     clear trajectory visibility gaussianFactorGraph measurements odometry; | ||
|  |     m = m+5; | ||
|  |     velocity=velocity+1; | ||
|  |     steps=steps+1; | ||
|  | end | ||
|  | plot(time_qr,'r');hold on; | ||
|  | plot(time_gtsam,'b'); | ||
|  | 
 |