added infrastructure for SmartProjectionPose3Factors
							parent
							
								
									0f03cd736c
								
							
						
					
					
						commit
						49b3836c49
					
				| 
						 | 
				
			
			@ -3,7 +3,8 @@ import gtsam.*;
 | 
			
		|||
% Test GTSAM covariances on a factor graph with:
 | 
			
		||||
% Between Factors
 | 
			
		||||
% IMU factors (type 1 and type 2)
 | 
			
		||||
% Projection factors
 | 
			
		||||
% GPS prior factors on poses
 | 
			
		||||
% SmartProjectionPoseFactors
 | 
			
		||||
% Authors: Luca Carlone, David Jensen
 | 
			
		||||
% Date: 2014/4/6
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -19,31 +20,32 @@ if ~exist('externallyConfigured', 'var')
 | 
			
		|||
  %% Configuration
 | 
			
		||||
  % General options
 | 
			
		||||
  options.useRealData = 1;           % controls whether or not to use the real data (if available) as the ground truth traj
 | 
			
		||||
  options.includeBetweenFactors = 0; % if true, BetweenFactors will be added between consecutive poses
 | 
			
		||||
  options.includeBetweenFactors = 1; % if true, BetweenFactors will be added between consecutive poses
 | 
			
		||||
  
 | 
			
		||||
  options.includeIMUFactors = 1;     % if true, IMU factors will be added between consecutive states (biases, poses, velocities)
 | 
			
		||||
  options.imuFactorType = 2;         % Set to 1 or 2 to use IMU type 1 or type 2 factors (will default to type 1)
 | 
			
		||||
  options.includeIMUFactors = 0;     % if true, IMU factors will be added between consecutive states (biases, poses, velocities)
 | 
			
		||||
  options.imuFactorType = 1;         % Set to 1 or 2 to use IMU type 1 or type 2 factors (will default to type 1)
 | 
			
		||||
  options.imuNonzeroBias = 0;        % if true, a nonzero bias is applied to IMU measurements
 | 
			
		||||
  
 | 
			
		||||
  options.includeCameraFactors = 0;  % not fully implemented yet
 | 
			
		||||
  numberOfLandmarks = 10;            % Total number of visual landmarks, used for camera factors
 | 
			
		||||
  options.includeCameraFactors = 1;  % if true, SmartProjectionPose3Factors will be used with randomly generated landmarks
 | 
			
		||||
  options.numberOfLandmarks = 100;   % Total number of visual landmarks (randomly generated in a box around the trajectory)
 | 
			
		||||
  
 | 
			
		||||
  options.includeGPSFactors = 0;     % if true, GPS factors will be added as priors to poses
 | 
			
		||||
  options.gpsStartPose = 100;        % Pose number to start including GPS factors at
 | 
			
		||||
  
 | 
			
		||||
  options.trajectoryLength = 209;%209;    % length of the ground truth trajectory
 | 
			
		||||
  options.trajectoryLength = 50;%209;    % length of the ground truth trajectory
 | 
			
		||||
  options.subsampleStep = 20;        % number of poses to skip when using real data (to reduce computation on long trajectories)
 | 
			
		||||
  
 | 
			
		||||
  numMonteCarloRuns = 5;             % number of Monte Carlo runs to perform
 | 
			
		||||
  numMonteCarloRuns = 2;             % number of Monte Carlo runs to perform
 | 
			
		||||
  
 | 
			
		||||
  % Noise values to be adjusted
 | 
			
		||||
  sigma_ang = 1e-2;       % std. deviation for rotational noise, typical 1e-2
 | 
			
		||||
  sigma_cart = 1e-1;      % std. deviation for translational noise, typical 1e-1
 | 
			
		||||
  sigma_accel = 1e-1;         % std. deviation for accelerometer noise, typical 1e-3
 | 
			
		||||
  sigma_gyro = 1e-5;          % std. deviation for gyroscope noise, typical 1e-5
 | 
			
		||||
  sigma_accelBias = 1e-4;     % std. deviation for added accelerometer constant bias, typical 1e-3
 | 
			
		||||
  sigma_gyroBias = 1e-6;      % std. deviation for added gyroscope constant bias, typical 1e-5
 | 
			
		||||
  sigma_accel = 1e-3;     % std. deviation for accelerometer noise, typical 1e-3
 | 
			
		||||
  sigma_gyro = 1e-5;      % std. deviation for gyroscope noise, typical 1e-5
 | 
			
		||||
  sigma_accelBias = 1e-4; % std. deviation for added accelerometer constant bias, typical 1e-3
 | 
			
		||||
  sigma_gyroBias = 1e-6;  % std. deviation for added gyroscope constant bias, typical 1e-5
 | 
			
		||||
  sigma_gps = 1e-4;       % std. deviation for noise in GPS position measurements, typical 1e-4
 | 
			
		||||
  sigma_camera = 1;  % std. deviation for noise in camera measurements (pixels)
 | 
			
		||||
  
 | 
			
		||||
  % Set log files
 | 
			
		||||
  testName = sprintf('sa-%1.2g-sc-%1.2g-sacc-%1.2g-sg-%1.2g',sigma_ang,sigma_cart,sigma_accel,sigma_gyro)
 | 
			
		||||
| 
						 | 
				
			
			@ -86,18 +88,21 @@ noiseVectorGPS = sigma_gps * ones(3,1);
 | 
			
		|||
noiseGPS = noiseModel.Diagonal.Precisions([zeros(3,1); 1/sigma_gps^2 * ones(3,1)]);
 | 
			
		||||
 | 
			
		||||
%% Camera metadata
 | 
			
		||||
K = Cal3_S2(500,500,0,640/2,480/2); % Camera calibration
 | 
			
		||||
cameraMeasurementNoiseSigma = 1.0;
 | 
			
		||||
cameraMeasurementNoise = noiseModel.Isotropic.Sigma(2,cameraMeasurementNoiseSigma);
 | 
			
		||||
metadata.camera.calibration = Cal3_S2(500,500,0,640/2,480/2); % Camera calibration
 | 
			
		||||
metadata.camera.xlims = [-100, 650];    % x limits on area for landmark creation
 | 
			
		||||
metadata.camera.ylims = [-100, 700];    % y limits on area for landmark creation
 | 
			
		||||
metadata.camera.zlims = [-10, 30];      % z limits on area for landmark creation
 | 
			
		||||
metadata.camera.CameraSigma = sigma_camera;
 | 
			
		||||
cameraMeasurementNoise = noiseModel.Isotropic.Sigma(2, metadata.camera.CameraSigma);
 | 
			
		||||
noiseVectorCamera = metadata.camera.CameraSigma .* ones(2,1);
 | 
			
		||||
 | 
			
		||||
% Create landmarks
 | 
			
		||||
% Create landmarks and smart factors
 | 
			
		||||
if options.includeCameraFactors == 1
 | 
			
		||||
  for i = 1:numberOfLandmarks
 | 
			
		||||
    gtLandmarkPoints(i) = Point3( ...
 | 
			
		||||
      ... % uniformly distributed in the x axis along 120% of the trajectory length, starting after 15 poses
 | 
			
		||||
      [rand()*20*(options.trajectoryLength*1.2) + 15*20; ...  
 | 
			
		||||
      randn()*20; ...   % normally distributed in the y axis with a sigma of 20
 | 
			
		||||
      randn()*20]);     % normally distributed in the z axis with a sigma of 20
 | 
			
		||||
  for i = 1:options.numberOfLandmarks
 | 
			
		||||
    metadata.camera.gtLandmarkPoints(i) = Point3( ...
 | 
			
		||||
      [rand() * (metadata.camera.xlims(2)-metadata.camera.xlims(1)) + metadata.camera.xlims(1); ...  
 | 
			
		||||
       rand() * (metadata.camera.ylims(2)-metadata.camera.ylims(1)) + metadata.camera.ylims(1); 
 | 
			
		||||
       rand() * (metadata.camera.zlims(2)-metadata.camera.zlims(1)) + metadata.camera.zlims(1)]);
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -113,12 +118,13 @@ gtNoiseModels.noiseBiasBetween = noiseBiasBetween;
 | 
			
		|||
gtNoiseModels.noisePriorPose = noisePose;
 | 
			
		||||
gtNoiseModels.noisePriorBias = noisePriorBias;
 | 
			
		||||
gtNoiseModels.noiseGPS = noiseGPS;
 | 
			
		||||
gtNoiseModels.noiseCamera = cameraMeasurementNoise;
 | 
			
		||||
 | 
			
		||||
% Set measurement noise to 0, because this is ground truth
 | 
			
		||||
gtMeasurementNoise.poseNoiseVector = zeros(6,1);
 | 
			
		||||
gtMeasurementNoise.imu.accelNoiseVector = zeros(3,1);
 | 
			
		||||
gtMeasurementNoise.imu.gyroNoiseVector = zeros(3,1);
 | 
			
		||||
gtMeasurementNoise.cameraPixelNoiseVector = zeros(2,1);
 | 
			
		||||
gtMeasurementNoise.cameraNoiseVector = zeros(2,1);
 | 
			
		||||
gtMeasurementNoise.gpsNoiseVector = zeros(3,1);
 | 
			
		||||
  
 | 
			
		||||
% Set IMU biases to zero
 | 
			
		||||
| 
						 | 
				
			
			@ -140,8 +146,8 @@ gtGraph = imuSimulator.covarianceAnalysisCreateFactorGraph( ...
 | 
			
		|||
figure(1)
 | 
			
		||||
hold on;
 | 
			
		||||
plot3DPoints(gtValues);
 | 
			
		||||
plot3DTrajectory(gtValues, '-r', [], 1, Marginals(gtGraph, gtValues));
 | 
			
		||||
%plot3DTrajectory(gtValues, '-r');
 | 
			
		||||
%plot3DTrajectory(gtValues, '-r', [], 1, Marginals(gtGraph, gtValues));
 | 
			
		||||
plot3DTrajectory(gtValues, '-r');
 | 
			
		||||
axis equal
 | 
			
		||||
 | 
			
		||||
% optimize
 | 
			
		||||
| 
						 | 
				
			
			@ -162,13 +168,14 @@ monteCarloNoiseModels.noiseBiasBetween = noiseBiasBetween;
 | 
			
		|||
monteCarloNoiseModels.noisePriorPose = noisePose;
 | 
			
		||||
monteCarloNoiseModels.noisePriorBias = noisePriorBias;
 | 
			
		||||
monteCarloNoiseModels.noiseGPS = noiseGPS;
 | 
			
		||||
monteCarloNoiseModels.noiseCamera = cameraMeasurementNoise;
 | 
			
		||||
 | 
			
		||||
% Set measurement noise for monte carlo runs
 | 
			
		||||
monteCarloMeasurementNoise.poseNoiseVector = noiseVectorPose;
 | 
			
		||||
monteCarloMeasurementNoise.poseNoiseVector = zeros(6,1); %noiseVectorPose;
 | 
			
		||||
monteCarloMeasurementNoise.imu.accelNoiseVector = noiseVectorAccel;
 | 
			
		||||
monteCarloMeasurementNoise.imu.gyroNoiseVector = noiseVectorGyro;
 | 
			
		||||
monteCarloMeasurementNoise.cameraPixelNoiseVector = [0; 0];
 | 
			
		||||
monteCarloMeasurementNoise.gpsNoiseVector = noiseVectorGPS;
 | 
			
		||||
monteCarloMeasurementNoise.cameraNoiseVector = noiseVectorCamera;
 | 
			
		||||
  
 | 
			
		||||
for k=1:numMonteCarloRuns
 | 
			
		||||
  fprintf('Monte Carlo Run %d...\n', k');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,11 +33,12 @@ for i=0:length(measurements)
 | 
			
		|||
      graph.add(PriorFactorConstantBias(currentBiasKey, currentBias, noiseModels.noisePriorBias));
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    % Camera priors
 | 
			
		||||
    %% Create a SmartProjectionFactor for each landmark
 | 
			
		||||
    if options.includeCameraFactors == 1
 | 
			
		||||
      pointNoiseSigma = 0.1;
 | 
			
		||||
      pointPriorNoise  = noiseModel.Isotropic.Sigma(3,pointNoiseSigma);
 | 
			
		||||
      graph.add(PriorFactorPoint3(symbol('p',1), gtLandmarkPoints(1), pointPriorNoise));
 | 
			
		||||
      for j=1:options.numberOfLandmarks
 | 
			
		||||
        %% UNCOMMENT WHEN SMART FACTORS ARE ADDED TO MATLAB WRAPPER
 | 
			
		||||
        %SmartProjectionFactors(j) = SmartProjectionPose3Factor();
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
  else
 | 
			
		||||
| 
						 | 
				
			
			@ -140,26 +141,20 @@ for i=0:length(measurements)
 | 
			
		|||
      
 | 
			
		||||
    end % end of IMU factor creation
 | 
			
		||||
    
 | 
			
		||||
    %% Add Camera factors - UNDER CONSTRUCTION !!!! -
 | 
			
		||||
    if options.includeCameraFactors == 1
 | 
			
		||||
      % Create camera with the current pose and calibration K (specified above)
 | 
			
		||||
      gtCamera = SimpleCamera(currentPose, K);
 | 
			
		||||
      % Project landmarks into the camera
 | 
			
		||||
      numSkipped = 0;
 | 
			
		||||
      for j = 1:length(gtLandmarkPoints)
 | 
			
		||||
        landmarkKey = symbol('p', j);
 | 
			
		||||
        try
 | 
			
		||||
          Z = gtCamera.project(gtLandmarkPoints(j));
 | 
			
		||||
          % TO-DO probably want to do some type of filtering on the measurement values, because
 | 
			
		||||
          % they might not all be valid
 | 
			
		||||
          graph.add(GenericProjectionFactorCal3_S2(Z, cameraMeasurementNoise, currentPoseKey, landmarkKey, K));
 | 
			
		||||
        catch
 | 
			
		||||
          % Most likely the point is not within the camera's view, which
 | 
			
		||||
          % is fine
 | 
			
		||||
          numSkipped = numSkipped + 1;
 | 
			
		||||
    %% Add Camera Factors
 | 
			
		||||
    if options.includeCameraFactors == 1        
 | 
			
		||||
      for(j = 1:length(measurements(i).landmarks))
 | 
			
		||||
        cameraMeasurmentNoise = measurementNoise.cameraNoiseVector .* randn(2,1);
 | 
			
		||||
        cameraPixelMeasurement = measurements(i).landmarks(j).vector;
 | 
			
		||||
        if(cameraPixelMeasurement(1) ~= 0 && cameraPixelMeasurement(2) ~= 0)
 | 
			
		||||
          cameraPixelMeasurement = cameraPixelMeasurement + cameraMeasurmentNoise;
 | 
			
		||||
          %% UNCOMMENT WHEN SMART FACTORS ARE ADDED TO MATLAB WRAPPER
 | 
			
		||||
          % SmartProjectionFactors(j).add( ...
 | 
			
		||||
          %    Point2(cameraPizelMeasurement), ...
 | 
			
		||||
          %    currentPoseKey, noiseModels.noiseCamera, ...
 | 
			
		||||
          %    metadata.camera.calibration);
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      %fprintf('(Pose %d) %d landmarks behind the camera\n', i, numSkipped);
 | 
			
		||||
    end % end of Camera factor creation
 | 
			
		||||
    
 | 
			
		||||
    %% Add GPS factors
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ if options.useRealData == 1
 | 
			
		|||
    'VEast', 'VNorth', 'VUp');
 | 
			
		||||
  
 | 
			
		||||
  % Limit the trajectory length
 | 
			
		||||
  options.trajectoryLength = min([length(gtScenario.Lat) options.trajectoryLength]);
 | 
			
		||||
  options.trajectoryLength = min([length(gtScenario.Lat)/options.subsampleStep options.trajectoryLength]);
 | 
			
		||||
  fprintf('Scenario Ind: ');
 | 
			
		||||
  
 | 
			
		||||
  for i=0:options.trajectoryLength
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +86,19 @@ if options.useRealData == 1
 | 
			
		|||
      measurements(i).gpsPositionVector = gpsPositionVector;
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    %% gt Camera measurements
 | 
			
		||||
    if options.includeCameraFactors == 1 && i > 0
 | 
			
		||||
      camera = SimpleCamera(currentPose, metadata.camera.calibration);
 | 
			
		||||
      for j=1:length(metadata.camera.gtLandmarkPoints)
 | 
			
		||||
        try
 | 
			
		||||
          z = camera.project(metadata.camera.gtLandmarkPoints(j));
 | 
			
		||||
          measurements(i).landmarks(j) = z;
 | 
			
		||||
        catch
 | 
			
		||||
            % point is probably out of the camera's view
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
  end
 | 
			
		||||
  fprintf('\n');
 | 
			
		||||
else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,28 +11,28 @@ 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
 | 
			
		||||
         %1        0       1      2       0       0       10    0     100       209          20       100   ;... % 1
 | 
			
		||||
         %1        0       1      2       0       0       10    0     100       209          20       100   ;... % 2
 | 
			
		||||
        % 1        0       1      2       0       0       10    0     100       209          20       100   ;... % 3
 | 
			
		||||
         %1        0       1      2       0       0       10    0     100       209          20       100   ;... % 4
 | 
			
		||||
         %1        0       1      2       0       0       10    0     100       209          20       100   ;... % 5
 | 
			
		||||
         %1        0       1      2       0       0       10    0     100       209          20       100   ;... % 6
 | 
			
		||||
        % 1        0       1      2       0       0       10    0     100       209          20       100   ;... % 7
 | 
			
		||||
         1        0       1      2       1       0       10    0     100       209          20       100   ;... % 8
 | 
			
		||||
         1        0       1      2       1       0       10    0     100       209          20       100   ];   % 9
 | 
			
		||||
         %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
 | 
			
		||||
   
 | 
			
		||||
noises = [ ...
 | 
			
		||||
    %      1         2          3           4          5               6              7
 | 
			
		||||
    % sigma_ang sigma_cart sigma_accel sigma_gyro sigma_accelBias sigma_gyroBias sigma_gps
 | 
			
		||||
         %1e-2      1e-1       1e-3        1e-5         0               0            1e-4;... % 1
 | 
			
		||||
         %1e-2      1e-1       1e-2        1e-5         0               0            1e-4;... % 2
 | 
			
		||||
        % 1e-2      1e-1       1e-1        1e-5         0               0            1e-4;... % 3
 | 
			
		||||
         %1e-2      1e-1       1e-3        1e-4         0               0            1e-4;... % 4
 | 
			
		||||
         %1e-2      1e-1       1e-3        1e-3         0               0            1e-4;... % 5
 | 
			
		||||
         %1e-2      1e-1       1e-3        1e-2         0               0            1e-4;... % 6
 | 
			
		||||
        % 1e-2      1e-1       1e-3        1e-1         0               0            1e-4;... % 7
 | 
			
		||||
         1e-2      1e-1       1e-3        1e-5         1e-3            1e-5         1e-4;... % 8
 | 
			
		||||
         1e-2      1e-1       1e-3        1e-5         1e-4            1e-6         1e-4];   % 9
 | 
			
		||||
    %      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
 | 
			
		||||
     
 | 
			
		||||
if(size(testOptions,1) ~= size(noises,1))
 | 
			
		||||
  error('testOptions and noises do not have same number of rows');
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ end
 | 
			
		|||
externallyConfigured = 1;
 | 
			
		||||
 | 
			
		||||
% Set the flag to save the results
 | 
			
		||||
saveResults = 1;
 | 
			
		||||
saveResults = 0;
 | 
			
		||||
 | 
			
		||||
errorRuns = [];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ for i = 1:size(testOptions,1)
 | 
			
		|||
    options.imuFactorType = testOptions(i,4);
 | 
			
		||||
    options.imuNonzeroBias = testOptions(i,5);
 | 
			
		||||
    options.includeCameraFactors = testOptions(i,6);
 | 
			
		||||
    numberOfLandmarks = testOptions(i,7);
 | 
			
		||||
    options.numberOfLandmarks = testOptions(i,7);
 | 
			
		||||
    options.includeGPSFactors = testOptions(i,8);
 | 
			
		||||
    options.gpsStartPose = testOptions(i,9);
 | 
			
		||||
    options.trajectoryLength = testOptions(i,10);
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +73,7 @@ for i = 1:size(testOptions,1)
 | 
			
		|||
    sigma_accelBias = noises(i,5);
 | 
			
		||||
    sigma_gyroBias = noises(i,6);
 | 
			
		||||
    sigma_gps = noises(i,7);
 | 
			
		||||
    sigma_camera = noises(i,8);
 | 
			
		||||
    
 | 
			
		||||
    % Create folder name
 | 
			
		||||
    f_between = '';
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +96,7 @@ for i = 1:size(testOptions,1)
 | 
			
		|||
        f_between = sprintf('gps_%d_', gpsStartPose);
 | 
			
		||||
    end
 | 
			
		||||
    if (options.includeCameraFactors == 1)
 | 
			
		||||
        f_camera = sprintf('camera_%d_', numberOfLandmarks);
 | 
			
		||||
        f_camera = sprintf('camera_%d_', options.numberOfLandmarks);
 | 
			
		||||
    end
 | 
			
		||||
    f_runs = sprintf('mc%d', numMonteCarloRuns);
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue