66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Matlab
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Matlab
		
	
	
		
			Executable File
		
	
function plot3DTrajectory(values,linespec,frames,scale,marginals)
 | 
						|
% plot3DTrajectory plots a 3D trajectory
 | 
						|
% plot3DTrajectory(values,linespec,frames,scale,marginals)
 | 
						|
 | 
						|
if ~exist('scale','var') || isempty(scale), scale=1; end
 | 
						|
if ~exist('frames','var'), scale=[]; end
 | 
						|
 | 
						|
import gtsam.*
 | 
						|
 | 
						|
Pose3Values = gtsam.utilities.allPose3s(values);
 | 
						|
 | 
						|
haveMarginals = exist('marginals', 'var');
 | 
						|
keys = KeyVector(Pose3Values.keys);
 | 
						|
 | 
						|
holdstate = ishold;
 | 
						|
hold on
 | 
						|
 | 
						|
% Plot poses and covariance matrices
 | 
						|
lastIndex = [];
 | 
						|
for i = 0:keys.size-1
 | 
						|
  key = keys.at(i);
 | 
						|
  try
 | 
						|
    x = Pose3Values.atPose3(key);
 | 
						|
    if ~isempty(lastIndex)
 | 
						|
      % Draw line from last pose then covariance ellipse on top of
 | 
						|
      % last pose.
 | 
						|
      lastKey = keys.at(lastIndex);
 | 
						|
      try
 | 
						|
        lastPose = Pose3Values.atPose3(lastKey);
 | 
						|
        plot3([ x.x; lastPose.x ], [ x.y; lastPose.y ], [ x.z; lastPose.z ], linespec);
 | 
						|
        if haveMarginals
 | 
						|
          P = marginals.marginalCovariance(lastKey);
 | 
						|
        else
 | 
						|
          P = [];
 | 
						|
        end
 | 
						|
        gtsam.plotPose3(lastPose, P, scale);
 | 
						|
      catch err
 | 
						|
        %                 warning(['no Pose3 at ' lastKey]);
 | 
						|
      end
 | 
						|
    end
 | 
						|
    lastIndex = i;
 | 
						|
  catch
 | 
						|
    warning(['no Pose3 at ' key]);
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
% Draw final pose
 | 
						|
if ~isempty(lastIndex)
 | 
						|
  lastKey = keys.at(lastIndex);
 | 
						|
  try
 | 
						|
    lastPose = Pose3Values.atPose3(lastKey);
 | 
						|
    if haveMarginals
 | 
						|
      P = marginals.marginalCovariance(lastKey);
 | 
						|
    else
 | 
						|
      P = [];
 | 
						|
    end
 | 
						|
    gtsam.plotPose3(lastPose, P, scale);
 | 
						|
  catch
 | 
						|
    % warning(['no Pose3 at ' lastIndex]);
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
if ~holdstate
 | 
						|
  hold off
 | 
						|
end
 |