| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  | % use this script to easily run and save results for multiple consistency | 
					
						
							|  |  |  | % tests without having to pay attention to the computer every 5 minutes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import gtsam.*; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | resultsDir = 'results/' | 
					
						
							|  |  |  | if (~exist(resultsDir, 'dir')) | 
					
						
							|  |  |  |     mkdir(resultsDir); | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | testOptions = [ ... | 
					
						
							|  |  |  |     %    1       2       3       4       5       6       7     8      9        10         11      12 | 
					
						
							|  |  |  |     % RealData? Between? IMU? IMUType  Bias?  Camera? #LndMrk GPS? StrtPose TrajLength Subsample #MCRuns | 
					
						
							| 
									
										
										
										
											2014-05-09 03:27:32 +08:00
										 |  |  |          %1        0       1      2       0       0      100    0     100       209          20       100   ;... % 1 | 
					
						
							|  |  |  |          %1        0       1      2       0       0      100    0     100       209          20       100   ;... % 2 | 
					
						
							|  |  |  |         % 1        0       1      2       0       0      100    0     100       209          20       100   ;... % 3 | 
					
						
							|  |  |  |          1        0       1      2       0       1      100    0     100       209          20       20   ;... % 4 | 
					
						
							|  |  |  |          1        0       1      2       0       1      100    0     100       209          20       20   ;... % 5 | 
					
						
							|  |  |  |          1        0       1      2       0       0      100    0     100       209          20       20   ];%... % 6 | 
					
						
							|  |  |  |         % 1        0       1      2       0       0      100    0     100       209          20       100   ;... % 7 | 
					
						
							|  |  |  |          %1        0       1      2       0       0      100    0     100       209          20       1   ;... % 8 | 
					
						
							|  |  |  |          %1        0       1      2       0       0      100    0     100       209          20       1   ];   % 9 | 
					
						
							| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  |     | 
					
						
							|  |  |  | noises = [ ... | 
					
						
							| 
									
										
										
										
											2014-05-09 03:27:32 +08:00
										 |  |  |     %      1         2          3           4          5               6              7         8 | 
					
						
							|  |  |  |     % sigma_ang sigma_cart sigma_accel sigma_gyro sigma_accelBias sigma_gyroBias sigma_gps sigma_camera | 
					
						
							|  |  |  |          %1e-2      1e-1       1e-3        1e-5         0               0            1e-4       1;... % 1 | 
					
						
							|  |  |  |          %1e-2      1e-1       1e-2        1e-5         0               0            1e-4       1;... % 2 | 
					
						
							|  |  |  |         % 1e-2      1e-1       1e-1        1e-5         0               0            1e-4       1;... % 3 | 
					
						
							|  |  |  |          1e-2      1e-1       1e-3        1e-4         0               0            1e-4        1;... % 4 | 
					
						
							|  |  |  |          1e-2      1e-1       1e-3        1e-3         0               0            1e-4        1;... % 5 | 
					
						
							|  |  |  |          1e-2      1e-1       1e-3        1e-2         0               0            1e-4        1];%... % 6 | 
					
						
							|  |  |  |         % 1e-2      1e-1       1e-3        1e-1         0               0            1e-4       1;... % 7 | 
					
						
							|  |  |  |          %1e-2      1e-1       1e-3        1e-2         1e-3            1e-5         1e-4       1;... % 8 | 
					
						
							|  |  |  |          %1e-2      1e-1       1e-3        1e-2         1e-4            1e-6         1e-4       1];   % 9 | 
					
						
							| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  |       | 
					
						
							|  |  |  | if(size(testOptions,1) ~= size(noises,1)) | 
					
						
							|  |  |  |   error('testOptions and noises do not have same number of rows'); | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Set flag so the script knows there is an external configuration | 
					
						
							|  |  |  | externallyConfigured = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Set the flag to save the results | 
					
						
							| 
									
										
										
										
											2014-05-09 03:27:32 +08:00
										 |  |  | saveResults = 0; | 
					
						
							| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | errorRuns = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Go through tests | 
					
						
							|  |  |  | for i = 1:size(testOptions,1) | 
					
						
							|  |  |  |     % Clean up from last test | 
					
						
							|  |  |  |     close all; | 
					
						
							|  |  |  |     %clc; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     % Set up variables for test | 
					
						
							|  |  |  |     options.useRealData = testOptions(i,1); | 
					
						
							|  |  |  |     options.includeBetweenFactors = testOptions(i,2); | 
					
						
							|  |  |  |     options.includeIMUFactors = testOptions(i,3); | 
					
						
							|  |  |  |     options.imuFactorType = testOptions(i,4); | 
					
						
							|  |  |  |     options.imuNonzeroBias = testOptions(i,5); | 
					
						
							|  |  |  |     options.includeCameraFactors = testOptions(i,6); | 
					
						
							| 
									
										
										
										
											2014-05-09 03:27:32 +08:00
										 |  |  |     options.numberOfLandmarks = testOptions(i,7); | 
					
						
							| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  |     options.includeGPSFactors = testOptions(i,8); | 
					
						
							|  |  |  |     options.gpsStartPose = testOptions(i,9); | 
					
						
							|  |  |  |     options.trajectoryLength = testOptions(i,10); | 
					
						
							|  |  |  |     options.subsampleStep = testOptions(i,11); | 
					
						
							|  |  |  |     numMonteCarloRuns = testOptions(i,12); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     sigma_ang = noises(i,1); | 
					
						
							|  |  |  |     sigma_cart = noises(i,2); | 
					
						
							|  |  |  |     sigma_accel = noises(i,3); | 
					
						
							|  |  |  |     sigma_gyro = noises(i,4); | 
					
						
							|  |  |  |     sigma_accelBias = noises(i,5); | 
					
						
							|  |  |  |     sigma_gyroBias = noises(i,6); | 
					
						
							|  |  |  |     sigma_gps = noises(i,7); | 
					
						
							| 
									
										
										
										
											2014-05-09 03:27:32 +08:00
										 |  |  |     sigma_camera = noises(i,8); | 
					
						
							| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  |      | 
					
						
							|  |  |  |     % Create folder name | 
					
						
							|  |  |  |     f_between = ''; | 
					
						
							|  |  |  |     f_imu = ''; | 
					
						
							|  |  |  |     f_bias = ''; | 
					
						
							|  |  |  |     f_gps = ''; | 
					
						
							|  |  |  |     f_camera = ''; | 
					
						
							|  |  |  |     f_runs = ''; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if (options.includeBetweenFactors == 1); | 
					
						
							|  |  |  |         f_between = 'between_'; | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     if (options.includeIMUFactors == 1) | 
					
						
							|  |  |  |         f_imu = sprintf('imu%d_', options.imuFactorType); | 
					
						
							|  |  |  |         if (options.imuNonzeroBias == 1); | 
					
						
							|  |  |  |             f_bias = sprintf('bias_a%1.2g_g%1.2g_', sigma_accelBias, sigma_gyroBias); | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     if (options.includeGPSFactors == 1); | 
					
						
							|  |  |  |         f_between = sprintf('gps_%d_', gpsStartPose); | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     if (options.includeCameraFactors == 1) | 
					
						
							| 
									
										
										
										
											2014-05-09 03:27:32 +08:00
										 |  |  |         f_camera = sprintf('camera_%d_', options.numberOfLandmarks); | 
					
						
							| 
									
										
										
										
											2014-05-02 00:56:24 +08:00
										 |  |  |     end | 
					
						
							|  |  |  |     f_runs = sprintf('mc%d', numMonteCarloRuns); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     folderName = [resultsDir f_between f_imu f_bias f_gps f_camera f_runs '/']; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     % make folder if it doesnt exist | 
					
						
							|  |  |  |     if (~exist(folderName, 'dir')) | 
					
						
							|  |  |  |         mkdir(folderName); | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     testName = sprintf('sa-%1.2g-sc-%1.2g-sacc-%1.2g-sg-%1.2g',sigma_ang,sigma_cart,sigma_accel,sigma_gyro); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     % Run the test | 
					
						
							|  |  |  |     fprintf('Test %d\n\tResults will be saved to:\n\t%s\n\trunning...\n', i, folderName); | 
					
						
							|  |  |  |     fprintf('Test Name: %s\n', testName); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     try | 
					
						
							|  |  |  |         imuSimulator.covarianceAnalysisBetween; | 
					
						
							|  |  |  |     catch | 
					
						
							|  |  |  |         errorRuns = [errorRuns i]; | 
					
						
							|  |  |  |         fprintf('\n*****\n   Something went wrong, most likely indeterminant linear system error.\n'); | 
					
						
							|  |  |  |         disp('Test Options:\n'); | 
					
						
							|  |  |  |         disp(testOptions(i,:)); | 
					
						
							|  |  |  |         disp('Noises'); | 
					
						
							|  |  |  |         disp(noises(i,:)); | 
					
						
							|  |  |  |         fprintf('\n*****\n\n'); | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Print error summary | 
					
						
							|  |  |  | fprintf('*************************\n'); | 
					
						
							|  |  |  | fprintf('%d Runs failed due to errors (data not collected for failed runs)\n', length(errorRuns)); | 
					
						
							|  |  |  | for i = 1:length(errorRuns) | 
					
						
							|  |  |  |     k = errorRuns(i); | 
					
						
							|  |  |  |     fprintf('\nTest %d:\n', k); | 
					
						
							|  |  |  |     fprintf('  options.useRealData = %d\n', testOptions(k,1)); | 
					
						
							|  |  |  |     fprintf('  options.includeBetweenFactors = %d\n', testOptions(k,2)); | 
					
						
							|  |  |  |     fprintf('  options.includeIMUFactors = %d\n', testOptions(k,3)); | 
					
						
							|  |  |  |     fprintf('  options.imuFactorType = %d\n', testOptions(k,4)); | 
					
						
							|  |  |  |     fprintf('  options.imuNonzeroBias = %d\n', testOptions(k,5)); | 
					
						
							|  |  |  |     fprintf('  options.includeCameraFactors = %d\n', testOptions(k,6)); | 
					
						
							|  |  |  |     fprintf('  numberOfLandmarks = %d\n', testOptions(k,7)); | 
					
						
							|  |  |  |     fprintf('  options.includeGPSFactors = %d\n', testOptions(k,8)); | 
					
						
							|  |  |  |     fprintf('  options.gpsStartPose = %d\n', testOptions(k,9)); | 
					
						
							|  |  |  |     fprintf('  options.trajectoryLength = %d\n', testOptions(k,10)); | 
					
						
							|  |  |  |     fprintf('  options.subsampleStep = %d\n', testOptions(k,11)); | 
					
						
							|  |  |  |     fprintf('  numMonteCarloRuns = %d\n', testOptions(k,12)); | 
					
						
							|  |  |  |     fprintf('\n'); | 
					
						
							|  |  |  |     fprintf('  sigma_ang = %f\n', noises(i,1)); | 
					
						
							|  |  |  |     fprintf('  sigma_cart = %f\n', noises(i,2)); | 
					
						
							|  |  |  |     fprintf('  sigma_accel = %f\n', noises(i,3)); | 
					
						
							|  |  |  |     fprintf('  sigma_gyro = %f\n', noises(i,4)); | 
					
						
							|  |  |  |     fprintf('  sigma_accelBias = %f\n', noises(i,5)); | 
					
						
							|  |  |  |     fprintf('  sigma_gyroBias = %f\n', noises(i,6)); | 
					
						
							|  |  |  |     fprintf('  sigma_gps = %f\n', noises(i,7)); | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |