52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Matlab
		
	
	
			
		
		
	
	
			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
 | |
| 
 |