Changed the data interface for the VisualISAM demos

release/4.3a0
Alex Cunningham 2012-06-13 14:58:15 +00:00
parent e21696b473
commit 1cbc827512
5 changed files with 32 additions and 23 deletions

View File

@ -1,4 +1,4 @@
function [noiseModels,isam,result] = VisualInitialize(data,truth,options)
function [noiseModels,isam,result] = VisualISAMInitialize(data,truth,options)
% VisualInitialize: initialize visualSLAM::iSAM object and noise parameters
% Authors: Duy Nguyen Ta, Frank Dellaert and Alex Cunningham
@ -17,7 +17,7 @@ newFactors = visualSLAMGraph;
initialEstimates = visualSLAMValues;
for i=1:2
ii = symbol('x',i);
if i==1 & options.hardConstraint % add hard constraint
if i==1 && options.hardConstraint % add hard constraint
newFactors.addPoseConstraint(ii,truth.cameras{1}.pose);
else
newFactors.addPosePrior(ii,truth.cameras{i}.pose, noiseModels.pose);
@ -28,18 +28,16 @@ end
%% Add visual measurement factors from two first poses and initialize observed landmarks
for i=1:2
ii = symbol('x',i);
for j=1:size(data.z,2)
jj = symbol('l',j);
% Must check whether a landmark was actually observed
if ~isempty(data.z{i,j})
newFactors.addMeasurement(data.z{i,j}, noiseModels.measurement, ii, jj, data.K);
% TODO: initial estimates should not be from ground truth!
if ~initialEstimates.exists(jj)
initialEstimates.insertPoint(jj, truth.points{j});
end
if options.pointPriors % add point priors
newFactors.addPointPrior(jj, truth.points{j}, noiseModels.point);
end
for k=1:length(data.Z{i})
j = data.J{i}{k};
jj = symbol('l',data.J{i}{k});
newFactors.addMeasurement(data.Z{i}{k}, noiseModels.measurement, ii, jj, data.K);
% TODO: initial estimates should not be from ground truth!
if ~initialEstimates.exists(jj)
initialEstimates.insertPoint(jj, truth.points{j});
end
if options.pointPriors % add point priors
newFactors.addPointPrior(jj, truth.points{j}, noiseModels.point);
end
end
end

View File

@ -1,4 +1,4 @@
function [isam,result] = VisualISAMStep(data,noiseModels,isam,result,options);
function [isam,result] = VisualISAMStep(data,noiseModels,isam,result,truth, options)
% VisualISAMStep: execute one update step of visualSLAM::iSAM object
% Authors: Duy Nguyen Ta and Frank Dellaert
@ -12,9 +12,17 @@ i = result.nrPoses+1;
odometry = data.odometry{i-1};
newFactors.addOdometry(symbol('x',i-1), symbol('x',i), odometry, noiseModels.odometry);
%% Add visual measurement factors
for j=1:size(data.z,2)
newFactors.addMeasurement(data.z{i,j}, noiseModels.measurement, symbol('x',i), symbol('l',j), data.K);
%% Add visual measurement factors and initializations as necessary
for k=1:length(data.Z{i})
zij = data.Z{i}{k};
j = data.J{i}{k};
jj = symbol('l', j);
newFactors.addMeasurement(zij, noiseModels.measurement, symbol('x',i), jj, data.K);
% TODO: initialize with something other than truth
if ~result.exists(jj) && ~initialEstimates.exists(jj)
lmInit = truth.points{j};
initialEstimates.insertPoint(jj, lmInit);
end
end
%% Initial estimates for the new pose.

View File

@ -33,9 +33,10 @@ graph = visualSLAMGraph;
%% Add factors for all measurements
measurementNoise = gtsamSharedNoiseModel_Sigma(2,measurementNoiseSigma);
for i=1:size(data.z,1)
for j=1:size(data.z,2)
graph.addMeasurement(data.z{i,j}, measurementNoise, symbol('x',i), symbol('l',j), data.K);
for i=1:length(data.Z)
for k=1:length(data.Z{i})
j = data.J{i}{k};
graph.addMeasurement(data.Z{i}{k}, measurementNoise, symbol('x',i), symbol('l',j), data.K);
end
end

View File

@ -41,7 +41,7 @@ VisualISAMPlot(truth, data, isam, result, options)
%% Main loop for iSAM: stepping through all poses
for frame_i=3:options.nrCameras
[isam,result] = VisualISAMStep(data,noiseModels,isam,result,options);
[isam,result] = VisualISAMStep(data,noiseModels,isam,result,truth,options);
if mod(frame_i,options.drawInterval)==0
VisualISAMPlot(truth, data, isam, result, options)
end

View File

@ -32,7 +32,9 @@ for i=1:options.nrCameras
truth.cameras{i} = gtsamSimpleCamera_lookat(t, gtsamPoint3, gtsamPoint3([0,0,1]'), truth.K);
% Create measurements
for j=1:nrPoints
data.z{i,j} = truth.cameras{i}.project(truth.points{j});
% All landmarks seen in every frame
data.Z{i}{j} = truth.cameras{i}.project(truth.points{j});
data.J{i}{j} = j;
end
end