Moved all in gtsam_utils to gtsam namespace

release/4.3a0
Richard Roberts 2012-08-03 21:02:45 +00:00
parent 84924ad663
commit 061b6ddc08
48 changed files with 73 additions and 112 deletions

View File

@ -9,7 +9,7 @@ hold on;
%% Plot points %% Plot points
% Can't use data because current frame might not see all points % Can't use data because current frame might not see all points
marginals = Marginals(isam.getFactorsUnsafe(), isam.calculateEstimate()); % TODO - this is slow marginals = Marginals(isam.getFactorsUnsafe(), isam.calculateEstimate()); % TODO - this is slow
gtsam_utils.plot3DPoints(result, [], marginals); gtsam.plot3DPoints(result, [], marginals);
%% Plot cameras %% Plot cameras
import gtsam.* import gtsam.*
@ -18,13 +18,13 @@ while result.exists(symbol('x',M))
ii = symbol('x',M); ii = symbol('x',M);
pose_i = result.at(ii); pose_i = result.at(ii);
if options.hardConstraint && (M==1) if options.hardConstraint && (M==1)
gtsam_utils.plotPose3(pose_i,[],10); gtsam.plotPose3(pose_i,[],10);
else else
P = marginals.marginalCovariance(ii); P = marginals.marginalCovariance(ii);
gtsam_utils.plotPose3(pose_i,P,10); gtsam.plotPose3(pose_i,P,10);
end end
if options.drawTruePoses % show ground truth if options.drawTruePoses % show ground truth
gtsam_utils.plotPose3(truth.cameras{M}.pose,[],10); gtsam.plotPose3(truth.cameras{M}.pose,[],10);
end end
M = M + options.cameraInterval; M = M + options.cameraInterval;

View File

@ -22,9 +22,9 @@ for i = 0:keys.size-1
if isa(p, 'gtsam.Point2') if isa(p, 'gtsam.Point2')
if haveMarginals if haveMarginals
P = marginals.marginalCovariance(key); P = marginals.marginalCovariance(key);
gtsam_utils.plotPoint2(p, linespec, P); gtsam.plotPoint2(p, linespec, P);
else else
gtsam_utils.plotPoint2(p, linespec); gtsam.plotPoint2(p, linespec);
end end
end end
end end

View File

@ -31,7 +31,7 @@ for i = 0:keys.size-1
plot([ x.x; lastPose.x ], [ x.y; lastPose.y ], linespec); plot([ x.x; lastPose.x ], [ x.y; lastPose.y ], linespec);
if haveMarginals if haveMarginals
P = marginals.marginalCovariance(lastKey); P = marginals.marginalCovariance(lastKey);
gtsam_utils.plotPose2(lastPose, 'g', P); gtsam.plotPose2(lastPose, 'g', P);
end end
end end
lastIndex = i; lastIndex = i;
@ -43,7 +43,7 @@ if ~isempty(lastIndex) && haveMarginals
lastKey = keys.at(lastIndex); lastKey = keys.at(lastIndex);
lastPose = values.at(lastKey); lastPose = values.at(lastKey);
P = marginals.marginalCovariance(lastKey); P = marginals.marginalCovariance(lastKey);
gtsam_utils.plotPose2(lastPose, 'g', P); gtsam.plotPose2(lastPose, 'g', P);
end end
if ~holdstate if ~holdstate

View File

@ -22,9 +22,9 @@ for i = 0:keys.size-1
if isa(p, 'gtsam.Point3') if isa(p, 'gtsam.Point3')
if haveMarginals if haveMarginals
P = marginals.marginalCovariance(key); P = marginals.marginalCovariance(key);
gtsam_utils.plotPoint3(p, linespec, P); gtsam.plotPoint3(p, linespec, P);
else else
gtsam_utils.plotPoint3(p, linespec); gtsam.plotPoint3(p, linespec);
end end
end end
end end

View File

@ -28,7 +28,7 @@ for i = 0:keys.size-1
else else
P = []; P = [];
end end
gtsam_utils.plotPose3(lastPose, P, scale); gtsam.plotPose3(lastPose, P, scale);
end end
lastIndex = i; lastIndex = i;
end end
@ -43,7 +43,7 @@ if ~isempty(lastIndex)
else else
P = []; P = [];
end end
gtsam_utils.plotPose3(lastPose, P, scale); gtsam.plotPose3(lastPose, P, scale);
end end
if ~holdstate if ~holdstate

View File

@ -6,5 +6,5 @@ else
plot(p.x,p.y,color); plot(p.x,p.y,color);
end end
if exist('P', 'var') if exist('P', 'var')
gtsam_utils.covarianceEllipse([p.x;p.y],P,color(1)); gtsam.covarianceEllipse([p.x;p.y],P,color(1));
end end

View File

@ -6,7 +6,7 @@ else
plot3(p.x,p.y,p.z,color); plot3(p.x,p.y,p.z,color);
end end
if exist('P', 'var') if exist('P', 'var')
gtsam_utils.covarianceEllipse3D([p.x;p.y;p.z],P); gtsam.covarianceEllipse3D([p.x;p.y;p.z],P);
end end
end end

View File

@ -9,5 +9,5 @@ quiver(pose.x,pose.y,c,s,axisLength,color);
if nargin>2 if nargin>2
pPp = P(1:2,1:2); % covariance matrix in pose coordinate frame pPp = P(1:2,1:2); % covariance matrix in pose coordinate frame
gRp = [c -s;s c]; % rotation from pose to global gRp = [c -s;s c]; % rotation from pose to global
gtsam_utils.covarianceEllipse([pose.x;pose.y],gRp*pPp*gRp',color); gtsam.covarianceEllipse([pose.x;pose.y],gRp*pPp*gRp',color);
end end

View File

@ -25,7 +25,7 @@ end
if (nargin>2) && (~isempty(P)) if (nargin>2) && (~isempty(P))
pPp = P(4:6,4:6); % covariance matrix in pose coordinate frame pPp = P(4:6,4:6); % covariance matrix in pose coordinate frame
gPp = gRp*pPp*gRp'; % convert the covariance matrix to global coordinate frame gPp = gRp*pPp*gRp'; % convert the covariance matrix to global coordinate frame
gtsam_utils.covarianceEllipse3D(C,gPp); gtsam.covarianceEllipse3D(C,gPp);
end end
end end

View File

@ -1,31 +0,0 @@
function [graph,initial] = load2D(filename,model)
% load2D: read TORO pose graph
% cannot read noise model from file yet, uses specified model
import gtsam.*
fid = fopen(filename);
if fid < 0
error(['load2D: Cannot open file ' filename]);
end
% scan all lines into a cell array
columns=textscan(fid,'%s','delimiter','\n');
fclose(fid);
lines=columns{1};
% loop over lines and add vertices
graph = NonlinearFactorGraph;
initial = Values;
n=size(lines,1);
for i=1:n
line_i=lines{i};
if strcmp('VERTEX2',line_i(1:7))
v = textscan(line_i,'%s %d %f %f %f',1);
initial.insert(v{2}, Pose2(v{3}, v{4}, v{5}));
elseif strcmp('EDGE2',line_i(1:5))
e = textscan(line_i,'%s %d %d %f %f %f',1);
graph.add(BetweenFactorPose2(e{2}, e{3}, Pose2(e{4}, e{5}, e{6}), model));
end
end

View File

@ -20,7 +20,7 @@ install(DIRECTORY "${GTSAM_SOURCE_ROOT_DIR}/matlab/gtsam_examples" DESTINATION "
# Utilities # Utilities
message(STATUS "Installing Matlab Toolbox Utilities") message(STATUS "Installing Matlab Toolbox Utilities")
install(DIRECTORY "${GTSAM_SOURCE_ROOT_DIR}/matlab/+gtsam_utils" DESTINATION "${GTSAM_TOOLBOX_INSTALL_PATH}" FILES_MATCHING PATTERN "*.m") install(DIRECTORY "${GTSAM_SOURCE_ROOT_DIR}/matlab/+gtsam" DESTINATION "${GTSAM_TOOLBOX_INSTALL_PATH}" FILES_MATCHING PATTERN "*.m")
message(STATUS "Installing Matlab Toolbox Examples (Data)") message(STATUS "Installing Matlab Toolbox Examples (Data)")
# Data files: *.graph and *.txt # Data files: *.graph and *.txt

View File

@ -55,7 +55,7 @@ import gtsam.*
cla; cla;
hold on; hold on;
gtsam_utils.plot2DTrajectory(result, [], Marginals(graph, result)); gtsam.plot2DTrajectory(result, [], Marginals(graph, result));
axis([-0.6 4.8 -1 1]) axis([-0.6 4.8 -1 1])
axis equal axis equal

View File

@ -52,7 +52,7 @@ import gtsam.*
cla; cla;
hold on; hold on;
gtsam_utils.plot2DTrajectory(result, [], Marginals(graph, result)); gtsam.plot2DTrajectory(result, [], Marginals(graph, result));
axis([-0.6 4.8 -1 1]) axis([-0.6 4.8 -1 1])
axis equal axis equal

View File

@ -72,8 +72,8 @@ import gtsam.*
cla;hold on cla;hold on
marginals = Marginals(graph, result); marginals = Marginals(graph, result);
gtsam_utils.plot2DTrajectory(result, [], marginals); gtsam.plot2DTrajectory(result, [], marginals);
gtsam_utils.plot2DPoints(result, [], marginals); gtsam.plot2DPoints(result, [], marginals);
plot([result.at(i1).x; result.at(j1).x],[result.at(i1).y; result.at(j1).y], 'c-'); plot([result.at(i1).x; result.at(j1).x],[result.at(i1).y; result.at(j1).y], 'c-');
plot([result.at(i2).x; result.at(j1).x],[result.at(i2).y; result.at(j1).y], 'c-'); plot([result.at(i2).x; result.at(j1).x],[result.at(i2).y; result.at(j1).y], 'c-');

View File

@ -52,8 +52,8 @@ import gtsam.*
cla;hold on cla;hold on
marginals = Marginals(graph, sample); marginals = Marginals(graph, sample);
gtsam_utils.plot2DTrajectory(sample, [], marginals); gtsam.plot2DTrajectory(sample, [], marginals);
gtsam_utils.plot2DPoints(sample, [], marginals); gtsam.plot2DPoints(sample, [], marginals);
for j=1:2 for j=1:2
key = symbol('l',j); key = symbol('l',j);
@ -73,5 +73,5 @@ N=1000;
for s=1:N for s=1:N
delta = S{2}*randn(2,1); delta = S{2}*randn(2,1);
proposedPoint = Point2(point{2}.x+delta(1),point{2}.y+delta(2)); proposedPoint = Point2(point{2}.x+delta(1),point{2}.y+delta(2));
gtsam_utils.plotPoint2(proposedPoint,'k.') gtsam.plotPoint2(proposedPoint,'k.')
end end

View File

@ -68,7 +68,7 @@ hold on
plot([result.at(5).x;result.at(2).x],[result.at(5).y;result.at(2).y],'r-','LineWidth',2); plot([result.at(5).x;result.at(2).x],[result.at(5).y;result.at(2).y],'r-','LineWidth',2);
marginals = Marginals(graph, result); marginals = Marginals(graph, result);
gtsam_utils.plot2DTrajectory(result, [], marginals); gtsam.plot2DTrajectory(result, [], marginals);
axis([-0.6 4.8 -1 1]) axis([-0.6 4.8 -1 1])
axis equal axis equal

View File

@ -12,7 +12,7 @@
%% Create a hexagon of poses %% Create a hexagon of poses
import gtsam.* import gtsam.*
hexagon = gtsam_utils.circlePose2(6,1.0); hexagon = gtsam.circlePose2(6,1.0);
p0 = hexagon.at(0); p0 = hexagon.at(0);
p1 = hexagon.at(1); p1 = hexagon.at(1);
@ -42,7 +42,7 @@ initial.insert(5, hexagon.at(5).retract([-0.1, 0.1,-0.1]'));
%% Plot Initial Estimate %% Plot Initial Estimate
import gtsam.* import gtsam.*
cla cla
gtsam_utils.plot2DTrajectory(initial, 'g*-'); axis equal gtsam.plot2DTrajectory(initial, 'g*-'); axis equal
%% optimize %% optimize
import gtsam.* import gtsam.*
@ -51,7 +51,7 @@ result = optimizer.optimizeSafely;
%% Show Result %% Show Result
import gtsam.* import gtsam.*
hold on; gtsam_utils.plot2DTrajectory(result, 'b*-'); hold on; gtsam.plot2DTrajectory(result, 'b*-');
view(2); view(2);
axis([-1.5 1.5 -1.5 1.5]); axis([-1.5 1.5 -1.5 1.5]);
result.print(sprintf('\nFinal result:\n')); result.print(sprintf('\nFinal result:\n'));

View File

@ -11,7 +11,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Find data file %% Find data file
datafile = gtsam_utils.findExampleDataFile('w100-odom.graph'); datafile = gtsam.findExampleDataFile('w100-odom.graph');
%% Initialize graph, initial estimate, and odometry noise %% Initialize graph, initial estimate, and odometry noise
import gtsam.* import gtsam.*
@ -31,13 +31,13 @@ graph.add(PriorFactorPose2(0, priorMean, priorNoise)); % add directly to graph
%% Plot Initial Estimate %% Plot Initial Estimate
import gtsam.* import gtsam.*
cla cla
gtsam_utils.plot2DTrajectory(initial, 'g-*'); axis equal gtsam.plot2DTrajectory(initial, 'g-*'); axis equal
%% Optimize using Levenberg-Marquardt optimization with an ordering from colamd %% Optimize using Levenberg-Marquardt optimization with an ordering from colamd
import gtsam.* import gtsam.*
optimizer = LevenbergMarquardtOptimizer(graph, initial); optimizer = LevenbergMarquardtOptimizer(graph, initial);
result = optimizer.optimizeSafely; result = optimizer.optimizeSafely;
hold on; gtsam_utils.plot2DTrajectory(result, 'b-*'); hold on; gtsam.plot2DTrajectory(result, 'b-*');
result.print(sprintf('\nFinal result:\n')); result.print(sprintf('\nFinal result:\n'));
%% Plot Covariance Ellipses %% Plot Covariance Ellipses
@ -47,7 +47,7 @@ P={};
for i=1:result.size()-1 for i=1:result.size()-1
pose_i = result.at(i); pose_i = result.at(i);
P{i}=marginals.marginalCovariance(i); P{i}=marginals.marginalCovariance(i);
gtsam_utils.plotPose2(pose_i,'b',P{i}) gtsam.plotPose2(pose_i,'b',P{i})
end end
view(2) view(2)
axis([-15 10 -15 10]); axis equal; axis([-15 10 -15 10]); axis equal;

View File

@ -12,7 +12,7 @@
%% Create a hexagon of poses %% Create a hexagon of poses
import gtsam.* import gtsam.*
hexagon = gtsam_utils.circlePose3(6,1.0); hexagon = gtsam.circlePose3(6,1.0);
p0 = hexagon.at(0); p0 = hexagon.at(0);
p1 = hexagon.at(1); p1 = hexagon.at(1);
@ -43,7 +43,7 @@ initial.insert(5, hexagon.at(5).retract(s*randn(6,1)));
%% Plot Initial Estimate %% Plot Initial Estimate
import gtsam.* import gtsam.*
cla cla
gtsam_utils.plot3DTrajectory(initial, 'g-*'); gtsam.plot3DTrajectory(initial, 'g-*');
%% optimize %% optimize
import gtsam.* import gtsam.*
@ -52,7 +52,7 @@ result = optimizer.optimizeSafely();
%% Show Result %% Show Result
import gtsam.* import gtsam.*
hold on; gtsam_utils.plot3DTrajectory(result, 'b-*', true, 0.3); hold on; gtsam.plot3DTrajectory(result, 'b-*', true, 0.3);
axis([-2 2 -2 2 -1 1]); axis([-2 2 -2 2 -1 1]);
axis equal axis equal
view(-37,40) view(-37,40)

View File

@ -16,27 +16,27 @@ N = 2500;
% dataset = 'sphere2500_groundtruth.txt'; % dataset = 'sphere2500_groundtruth.txt';
dataset = 'sphere2500.txt'; dataset = 'sphere2500.txt';
datafile = gtsam_utils.findExampleDataFile(dataset); datafile = gtsam.findExampleDataFile(dataset);
%% Initialize graph, initial estimate, and odometry noise %% Initialize graph, initial estimate, and odometry noise
import gtsam.* import gtsam.*
model = noiseModel.Diagonal.Sigmas([0.05; 0.05; 0.05; 5*pi/180; 5*pi/180; 5*pi/180]); model = noiseModel.Diagonal.Sigmas([0.05; 0.05; 0.05; 5*pi/180; 5*pi/180; 5*pi/180]);
[graph,initial]=gtsam_utils.load3D(datafile,model,true,N); [graph,initial]=gtsam.load3D(datafile,model,true,N);
%% Plot Initial Estimate %% Plot Initial Estimate
import gtsam.* import gtsam.*
cla cla
first = initial.at(0); first = initial.at(0);
plot3(first.x(),first.y(),first.z(),'r*'); hold on plot3(first.x(),first.y(),first.z(),'r*'); hold on
gtsam_utils.plot3DTrajectory(initial,'g-',false); gtsam.plot3DTrajectory(initial,'g-',false);
drawnow; drawnow;
%% Read again, now with all constraints, and optimize %% Read again, now with all constraints, and optimize
import gtsam.* import gtsam.*
graph = gtsam_utils.load3D(datafile, model, false, N); graph = gtsam.load3D(datafile, model, false, N);
graph.add(NonlinearEqualityPose3(0, first)); graph.add(NonlinearEqualityPose3(0, first));
optimizer = LevenbergMarquardtOptimizer(graph, initial); optimizer = LevenbergMarquardtOptimizer(graph, initial);
result = optimizer.optimizeSafely(); result = optimizer.optimizeSafely();
gtsam_utils.plot3DTrajectory(result, 'r-', false); axis equal; gtsam.plot3DTrajectory(result, 'r-', false); axis equal;
view(3); axis equal; view(3); axis equal;

View File

@ -22,7 +22,7 @@ options.nrCameras = 10;
options.showImages = false; options.showImages = false;
%% Generate data %% Generate data
[data,truth] = gtsam_utils.VisualISAMGenerateData(options); [data,truth] = gtsam.VisualISAMGenerateData(options);
measurementNoiseSigma = 1.0; measurementNoiseSigma = 1.0;
pointNoiseSigma = 0.1; pointNoiseSigma = 0.1;

View File

@ -22,7 +22,7 @@ options.nrCameras = 10;
options.showImages = false; options.showImages = false;
%% Generate data %% Generate data
[data,truth] = gtsam_utils.VisualISAMGenerateData(options); [data,truth] = gtsam.VisualISAMGenerateData(options);
measurementNoiseSigma = 1.0; measurementNoiseSigma = 1.0;
pointNoiseSigma = 0.1; pointNoiseSigma = 0.1;
@ -86,8 +86,8 @@ marginals = Marginals(graph, result);
cla cla
hold on; hold on;
gtsam_utils.plot3DPoints(result, [], marginals); gtsam.plot3DPoints(result, [], marginals);
gtsam_utils.plot3DTrajectory(result, '*', 1, 8, marginals); gtsam.plot3DTrajectory(result, '*', 1, 8, marginals);
axis([-40 40 -40 40 -10 20]);axis equal axis([-40 40 -40 40 -10 20]);axis equal
view(3) view(3)

View File

@ -75,6 +75,6 @@ axis equal
view(-38,12) view(-38,12)
camup([0;1;0]); camup([0;1;0]);
gtsam_utils.plot3DTrajectory(initialEstimate, 'r', 1, 0.3); gtsam.plot3DTrajectory(initialEstimate, 'r', 1, 0.3);
gtsam_utils.plot3DTrajectory(result, 'g', 1, 0.3); gtsam.plot3DTrajectory(result, 'g', 1, 0.3);
gtsam_utils.plot3DPoints(result); gtsam.plot3DPoints(result);

View File

@ -13,7 +13,7 @@
%% Load calibration %% Load calibration
import gtsam.* import gtsam.*
% format: fx fy skew cx cy baseline % format: fx fy skew cx cy baseline
calib = dlmread(gtsam_utils.findExampleDataFile('VO_calibration.txt')); calib = dlmread(gtsam.findExampleDataFile('VO_calibration.txt'));
K = Cal3_S2Stereo(calib(1), calib(2), calib(3), calib(4), calib(5), calib(6)); K = Cal3_S2Stereo(calib(1), calib(2), calib(3), calib(4), calib(5), calib(6));
stereo_model = noiseModel.Diagonal.Sigmas([1.0; 1.0; 1.0]); stereo_model = noiseModel.Diagonal.Sigmas([1.0; 1.0; 1.0]);
@ -26,7 +26,7 @@ initial = Values;
% row format: camera_id 4x4 pose (row, major) % row format: camera_id 4x4 pose (row, major)
import gtsam.* import gtsam.*
fprintf(1,'Reading data\n'); fprintf(1,'Reading data\n');
cameras = dlmread(gtsam_utils.findExampleDataFile('VO_camera_poses_large.txt')); cameras = dlmread(gtsam.findExampleDataFile('VO_camera_poses_large.txt'));
for i=1:size(cameras,1) for i=1:size(cameras,1)
pose = Pose3(reshape(cameras(i,2:17),4,4)'); pose = Pose3(reshape(cameras(i,2:17),4,4)');
initial.insert(symbol('x',cameras(i,1)),pose); initial.insert(symbol('x',cameras(i,1)),pose);
@ -35,7 +35,7 @@ end
%% load stereo measurements and initialize landmarks %% load stereo measurements and initialize landmarks
% camera_id landmark_id uL uR v X Y Z % camera_id landmark_id uL uR v X Y Z
import gtsam.* import gtsam.*
measurements = dlmread(gtsam_utils.findExampleDataFile('VO_stereo_factors_large.txt')); measurements = dlmread(gtsam.findExampleDataFile('VO_stereo_factors_large.txt'));
fprintf(1,'Creating Graph\n'); tic fprintf(1,'Creating Graph\n'); tic
for i=1:size(measurements,1) for i=1:size(measurements,1)
@ -69,9 +69,9 @@ toc
%% visualize initial trajectory, final trajectory, and final points %% visualize initial trajectory, final trajectory, and final points
cla; hold on; cla; hold on;
gtsam_utils.plot3DTrajectory(initial, 'r', 1, 0.5); gtsam.plot3DTrajectory(initial, 'r', 1, 0.5);
gtsam_utils.plot3DTrajectory(result, 'g', 1, 0.5); gtsam.plot3DTrajectory(result, 'g', 1, 0.5);
gtsam_utils.plot3DPoints(result); gtsam.plot3DPoints(result);
axis([-5 20 -20 20 0 100]); axis([-5 20 -20 20 0 100]);
axis equal axis equal

View File

@ -32,17 +32,17 @@ options.saveFigures = false;
options.saveDotFiles = false; options.saveDotFiles = false;
%% Generate data %% Generate data
[data,truth] = gtsam_utils.VisualISAMGenerateData(options); [data,truth] = gtsam.VisualISAMGenerateData(options);
%% Initialize iSAM with the first pose and points %% Initialize iSAM with the first pose and points
[noiseModels,isam,result,nextPose] = gtsam_utils.VisualISAMInitialize(data,truth,options); [noiseModels,isam,result,nextPose] = gtsam.VisualISAMInitialize(data,truth,options);
cla; cla;
gtsam_utils.VisualISAMPlot(truth, data, isam, result, options) gtsam.VisualISAMPlot(truth, data, isam, result, options)
%% Main loop for iSAM: stepping through all poses %% Main loop for iSAM: stepping through all poses
for frame_i=3:options.nrCameras for frame_i=3:options.nrCameras
[isam,result,nextPose] = gtsam_utils.VisualISAMStep(data,noiseModels,isam,result,truth,nextPose); [isam,result,nextPose] = gtsam.VisualISAMStep(data,noiseModels,isam,result,truth,nextPose);
if mod(frame_i,options.drawInterval)==0 if mod(frame_i,options.drawInterval)==0
gtsam_utils.VisualISAMPlot(truth, data, isam, result, options) gtsam.VisualISAMPlot(truth, data, isam, result, options)
end end
end end

View File

@ -230,12 +230,12 @@ global frame_i truth data noiseModels isam result nextPoseIndex options
initOptions(handles) initOptions(handles)
% Generate Data % Generate Data
[data,truth] = gtsam_utils.VisualISAMGenerateData(options); [data,truth] = gtsam.VisualISAMGenerateData(options);
% Initialize and plot % Initialize and plot
[noiseModels,isam,result,nextPoseIndex] = gtsam_utils.VisualISAMInitialize(data,truth,options); [noiseModels,isam,result,nextPoseIndex] = gtsam.VisualISAMInitialize(data,truth,options);
cla cla
gtsam_utils.VisualISAMPlot(truth, data, isam, result, options) gtsam.VisualISAMPlot(truth, data, isam, result, options)
frame_i = 2; frame_i = 2;
showFramei(hObject, handles) showFramei(hObject, handles)
@ -246,10 +246,10 @@ global frame_i truth data noiseModels isam result nextPoseIndex options
while (frame_i<size(truth.cameras,2)) while (frame_i<size(truth.cameras,2))
frame_i = frame_i+1; frame_i = frame_i+1;
showFramei(hObject, handles) showFramei(hObject, handles)
[isam,result,nextPoseIndex] = gtsam_utils.VisualISAMStep(data,noiseModels,isam,result,truth,nextPoseIndex); [isam,result,nextPoseIndex] = gtsam.VisualISAMStep(data,noiseModels,isam,result,truth,nextPoseIndex);
if mod(frame_i,options.drawInterval)==0 if mod(frame_i,options.drawInterval)==0
showWaiting(handles, 'Computing marginals...'); showWaiting(handles, 'Computing marginals...');
gtsam_utils.VisualISAMPlot(truth, data, isam, result, options) gtsam.VisualISAMPlot(truth, data, isam, result, options)
showWaiting(handles, ''); showWaiting(handles, '');
end end
end end
@ -261,8 +261,8 @@ global frame_i truth data noiseModels isam result nextPoseIndex options
if (frame_i<size(truth.cameras,2)) if (frame_i<size(truth.cameras,2))
frame_i = frame_i+1; frame_i = frame_i+1;
showFramei(hObject, handles) showFramei(hObject, handles)
[isam,result,nextPoseIndex] = gtsam_utils.VisualISAMStep(data,noiseModels,isam,result,truth,nextPoseIndex); [isam,result,nextPoseIndex] = gtsam.VisualISAMStep(data,noiseModels,isam,result,truth,nextPoseIndex);
showWaiting(handles, 'Computing marginals...'); showWaiting(handles, 'Computing marginals...');
gtsam_utils.VisualISAMPlot(truth, data, isam, result, options) gtsam.VisualISAMPlot(truth, data, isam, result, options)
showWaiting(handles, ''); showWaiting(handles, '');
end end

View File

@ -2,7 +2,6 @@
% eliminate % eliminate
import gtsam.* import gtsam.*
import gtsam_utils.*
% the combined linear factor % the combined linear factor
Ax2 = [ Ax2 = [

View File

@ -57,13 +57,13 @@ x_initial = [0.0;0.0];
P_initial = 0.01*eye(2); P_initial = 0.01*eye(2);
%% Create an KF object %% Create an KF object
import gtsam_utils.* import gtsam.*
state = KF.init(x_initial, P_initial); state = KF.init(x_initial, P_initial);
EQUALITY('expected0,state.mean', expected0,state.mean); EQUALITY('expected0,state.mean', expected0,state.mean);
EQUALITY('expected0,state.mean', P00,state.covariance); EQUALITY('expected0,state.mean', P00,state.covariance);
%% Run iteration 1 %% Run iteration 1
import gtsam_utils.* import gtsam.*
state = KF.predict(state,F, B, u, modelQ); state = KF.predict(state,F, B, u, modelQ);
EQUALITY('expected1,state.mean', expected1,state.mean); EQUALITY('expected1,state.mean', expected1,state.mean);
EQUALITY('P01,state.covariance', P01,state.covariance); EQUALITY('P01,state.covariance', P01,state.covariance);
@ -72,14 +72,14 @@ EQUALITY('expected1,state.mean', expected1,state.mean);
EQUALITY('I11,state.information', I11,state.information); EQUALITY('I11,state.information', I11,state.information);
%% Run iteration 2 %% Run iteration 2
import gtsam_utils.* import gtsam.*
state = KF.predict(state,F, B, u, modelQ); state = KF.predict(state,F, B, u, modelQ);
EQUALITY('expected2,state.mean', expected2,state.mean); EQUALITY('expected2,state.mean', expected2,state.mean);
state = KF.update(state,H,z2,modelR); state = KF.update(state,H,z2,modelR);
EQUALITY('expected2,state.mean', expected2,state.mean); EQUALITY('expected2,state.mean', expected2,state.mean);
%% Run iteration 3 %% Run iteration 3
import gtsam_utils.* import gtsam.*
state = KF.predict(state,F, B, u, modelQ); state = KF.predict(state,F, B, u, modelQ);
EQUALITY('expected3,state.mean', expected3,state.mean); EQUALITY('expected3,state.mean', expected3,state.mean);
state = KF.update(state,H,z3,modelR); state = KF.update(state,H,z3,modelR);

View File

@ -47,7 +47,6 @@ result = optimizer.optimizeSafely();
%% Plot Covariance Ellipses %% Plot Covariance Ellipses
import gtsam.* import gtsam.*
import gtsam_utils.*
marginals = Marginals(graph, result); marginals = Marginals(graph, result);
P={}; P={};
for i=1:result.size() for i=1:result.size()

View File

@ -42,6 +42,6 @@ marginals = Marginals(graph, result);
marginals.marginalCovariance(1); marginals.marginalCovariance(1);
%% Check first pose equality %% Check first pose equality
import gtsam_utils.* import gtsam.*
pose_1 = result.at(1); pose_1 = result.at(1);
CHECK('pose_1.equals(Pose2,1e-4)',pose_1.equals(Pose2,1e-4)); CHECK('pose_1.equals(Pose2,1e-4)',pose_1.equals(Pose2,1e-4));

View File

@ -66,7 +66,6 @@ marginals = Marginals(graph, result);
%% Check first pose and point equality %% Check first pose and point equality
import gtsam.* import gtsam.*
import gtsam_utils.*
pose_1 = result.at(symbol('x',1)); pose_1 = result.at(symbol('x',1));
marginals.marginalCovariance(symbol('x',1)); marginals.marginalCovariance(symbol('x',1));
CHECK('pose_1.equals(Pose2,1e-4)',pose_1.equals(Pose2,1e-4)); CHECK('pose_1.equals(Pose2,1e-4)',pose_1.equals(Pose2,1e-4));

View File

@ -66,7 +66,6 @@ result = optimizer.optimizeSafely();
%% Plot Covariance Ellipses %% Plot Covariance Ellipses
import gtsam.* import gtsam.*
import gtsam_utils.*
marginals = Marginals(graph, result); marginals = Marginals(graph, result);
P = marginals.marginalCovariance(1); P = marginals.marginalCovariance(1);

View File

@ -42,7 +42,6 @@ initial.insert(5, hexagon.at(5).retract(s*randn(6,1)));
%% optimize %% optimize
import gtsam.* import gtsam.*
import gtsam_utils.*
optimizer = LevenbergMarquardtOptimizer(fg, initial); optimizer = LevenbergMarquardtOptimizer(fg, initial);
result = optimizer.optimizeSafely; result = optimizer.optimizeSafely;

View File

@ -11,7 +11,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
import gtsam.* import gtsam.*
import gtsam_utils.*
options.triangle = false; options.triangle = false;
options.nrCameras = 10; options.nrCameras = 10;
@ -68,7 +67,6 @@ marginals.marginalCovariance(symbol('x',1));
%% Check optimized results, should be equal to ground truth %% Check optimized results, should be equal to ground truth
import gtsam.* import gtsam.*
import gtsam_utils.*
for i=1:size(truth.cameras,2) for i=1:size(truth.cameras,2)
pose_i = result.at(symbol('x',i)); pose_i = result.at(symbol('x',i));
CHECK('pose_i.equals(truth.cameras{i}.pose,1e-5)',pose_i.equals(truth.cameras{i}.pose,1e-5)) CHECK('pose_i.equals(truth.cameras{i}.pose,1e-5)',pose_i.equals(truth.cameras{i}.pose,1e-5))

View File

@ -68,7 +68,6 @@ result = optimizer.optimize();
%% check equality for the first pose and point %% check equality for the first pose and point
import gtsam.* import gtsam.*
import gtsam_utils.*
pose_x1 = result.at(x1); pose_x1 = result.at(x1);
CHECK('pose_x1.equals(first_pose,1e-4)',pose_x1.equals(first_pose,1e-4)); CHECK('pose_x1.equals(first_pose,1e-4)',pose_x1.equals(first_pose,1e-4));

View File

@ -32,15 +32,15 @@ options.saveFigures = false;
options.saveDotFiles = false; options.saveDotFiles = false;
%% Generate data %% Generate data
import gtsam_utils.* import gtsam.*
[data,truth] = VisualISAMGenerateData(options); [data,truth] = VisualISAMGenerateData(options);
%% Initialize iSAM with the first pose and points %% Initialize iSAM with the first pose and points
import gtsam_utils.* import gtsam.*
[noiseModels,isam,result,nextPose] = VisualISAMInitialize(data,truth,options); [noiseModels,isam,result,nextPose] = VisualISAMInitialize(data,truth,options);
%% Main loop for iSAM: stepping through all poses %% Main loop for iSAM: stepping through all poses
import gtsam_utils.* import gtsam.*
for frame_i=3:options.nrCameras for frame_i=3:options.nrCameras
[isam,result,nextPose] = VisualISAMStep(data,noiseModels,isam,result,truth,nextPose); [isam,result,nextPose] = VisualISAMStep(data,noiseModels,isam,result,truth,nextPose);
end end