gtsam/matlab/+gtsam/plot2DTrajectory.m

52 lines
1.2 KiB
Matlab

function plot2DTrajectory(values, linespec, marginals)
%PLOT2DTRAJECTORY Plots the Pose2's in a values, with optional covariances
% Finds all the Pose2 objects in the given Values object and plots them
% in increasing key order, connecting consecutive poses with a line. If
% a Marginals object is given, this function will also plot marginal
% covariance ellipses for each pose.
import gtsam.*
if ~exist('linespec', 'var') || isempty(linespec)
linespec = 'k*-';
end
haveMarginals = exist('marginals', 'var');
holdstate = ishold;
hold on
% Do something very efficient to draw trajectory
poses = utilities.extractPose2(values);
X = poses(:,1);
Y = poses(:,2);
theta = poses(:,3);
plot(X,Y,linespec);
% Quiver can also be vectorized if no marginals asked
if ~haveMarginals
C = cos(theta);
S = sin(theta);
quiver(X,Y,C,S,0.1,linespec);
else
% plotPose2 does both quiver and covariance matrix
keys = KeyVector(values.keys);
for i = 0:keys.size-1
key = keys.at(i);
try
x = values.atPose2(key);
P = marginals.marginalCovariance(key);
gtsam.plotPose2(x,linespec(1), P);
catch err
% I guess it's not a Pose2
end
end
end
if ~holdstate
hold off
end
end