61 lines
1.4 KiB
Matlab
61 lines
1.4 KiB
Matlab
function VisualISAMPlot(truth, data, isam, result, options)
|
|
% VisualISAMPlot plots current state of ISAM2 object
|
|
% Authors: Duy Nguyen Ta and Frank Dellaert
|
|
|
|
import gtsam.*
|
|
h=gca;
|
|
cla(h);
|
|
hold on;
|
|
|
|
%% Plot points
|
|
% Can't use data because current frame might not see all points
|
|
marginals = Marginals(isam.getFactorsUnsafe(), isam.calculateEstimate()); % TODO - this is slow
|
|
gtsam.plot3DPoints(result, [], marginals);
|
|
|
|
%% Plot cameras
|
|
M = 1;
|
|
while result.exists(symbol('x',M))
|
|
ii = symbol('x',M);
|
|
pose_i = result.atPose3(ii);
|
|
if options.hardConstraint && (M==1)
|
|
gtsam.plotPose3(pose_i,[],10);
|
|
else
|
|
P = marginals.marginalCovariance(ii);
|
|
gtsam.plotPose3(pose_i,P,10);
|
|
end
|
|
if options.drawTruePoses % show ground truth
|
|
gtsam.plotPose3(truth.cameras{M}.pose,[],10);
|
|
end
|
|
|
|
M = M + options.cameraInterval;
|
|
end
|
|
|
|
%% draw
|
|
axis([-40 40 -40 40 -10 20]);axis equal
|
|
view(3)
|
|
colormap('hot')
|
|
drawnow
|
|
|
|
%% do various optional things
|
|
|
|
if options.saveFigures
|
|
figToSave = figure('visible','off');
|
|
newax = copyobj(h,figToSave);
|
|
colormap(figToSave,'hot');
|
|
set(newax, 'units', 'normalized', 'position', [0.13 0.11 0.775 0.815]);
|
|
print(figToSave,'-dpng',sprintf('VisualiSAM%03d.png',M));
|
|
axes(h);
|
|
end
|
|
|
|
if options.saveDotFiles
|
|
isam.saveGraph(sprintf('VisualiSAM%03d.dot',M));
|
|
end
|
|
|
|
if options.saveDotFile
|
|
isam.saveGraph(sprintf('VisualiSAM.dot'));
|
|
end
|
|
|
|
if options.printStats
|
|
isam.printStats();
|
|
end
|