MATLAB changes from develop
parent
0464b38ca0
commit
f01ee3b5d9
|
@ -0,0 +1,10 @@
|
|||
function EXPECT(name,assertion)
|
||||
% EXPECT throw a warning if an assertion fails
|
||||
%
|
||||
% EXPECT(name,assertion)
|
||||
% - name of test
|
||||
% - assertion
|
||||
|
||||
if (assertion~=1)
|
||||
warning(['EXPECT ' name ' fails']);
|
||||
end
|
|
@ -1,16 +1,17 @@
|
|||
function covarianceEllipse(x,P,color)
|
||||
function covarianceEllipse(x,P,color, k)
|
||||
% covarianceEllipse plots a Gaussian as an uncertainty ellipse
|
||||
% Based on Maybeck Vol 1, page 366
|
||||
% k=2.296 corresponds to 1 std, 68.26% of all probability
|
||||
% k=11.82 corresponds to 3 std, 99.74% of all probability
|
||||
%
|
||||
% covarianceEllipse(x,P,color)
|
||||
% covarianceEllipse(x,P,color,k)
|
||||
% it is assumed x and y are the first two components of state x
|
||||
% k is scaling for std deviations, defaults to 1 std
|
||||
|
||||
[e,s] = eig(P(1:2,1:2));
|
||||
s1 = s(1,1);
|
||||
s2 = s(2,2);
|
||||
k = 2.296;
|
||||
if nargin<4, k = 2.296; end;
|
||||
[ex,ey] = ellipse( sqrt(s1*k)*e(:,1), sqrt(s2*k)*e(:,2), x(1:2) );
|
||||
line(ex,ey,'color',color);
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% GTSAM Copyright 2010-2013, Georgia Tech Research Corporation,
|
||||
% Atlanta, Georgia 30332-0415
|
||||
% All Rights Reserved
|
||||
% Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
||||
%
|
||||
% See LICENSE for the license information
|
||||
%
|
||||
% @brief Monocular VO Example with 5 landmarks and two cameras
|
||||
% @author Frank Dellaert
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%% import
|
||||
import gtsam.*
|
||||
|
||||
%% Create two cameras and corresponding essential matrix E
|
||||
aRb = Rot3.Yaw(pi/2);
|
||||
aTb = Point3 (0.1, 0, 0);
|
||||
identity=Pose3;
|
||||
aPb = Pose3(aRb, aTb);
|
||||
cameraA = CalibratedCamera(identity);
|
||||
cameraB = CalibratedCamera(aPb);
|
||||
|
||||
%% Create 5 points
|
||||
P = { Point3(0, 0, 1), Point3(-0.1, 0, 1), Point3(0.1, 0, 1), Point3(0, 0.5, 0.5), Point3(0, -0.5, 0.5) };
|
||||
|
||||
%% Project points in both cameras
|
||||
for i=1:5
|
||||
pA{i}= cameraA.project(P{i});
|
||||
pB{i}= cameraB.project(P{i});
|
||||
end
|
||||
|
||||
%% We start with a factor graph and add epipolar constraints to it
|
||||
% Noise sigma is 1cm, assuming metric measurements
|
||||
graph = NonlinearFactorGraph;
|
||||
model = noiseModel.Isotropic.Sigma(1,0.01);
|
||||
for i=1:5
|
||||
graph.add(EssentialMatrixFactor(1, pA{i}, pB{i}, model));
|
||||
end
|
||||
|
||||
%% Create initial estimate
|
||||
initial = Values;
|
||||
trueE = EssentialMatrix(aRb,Sphere2(aTb));
|
||||
initialE = trueE.retract([0.1, -0.1, 0.1, 0.1, -0.1]');
|
||||
initial.insert(1, initialE);
|
||||
|
||||
%% Optimize
|
||||
parameters = LevenbergMarquardtParams;
|
||||
% parameters.setVerbosity('ERROR');
|
||||
optimizer = LevenbergMarquardtOptimizer(graph, initial, parameters);
|
||||
result = optimizer.optimize();
|
||||
|
||||
%% Print result (as essentialMatrix) and error
|
||||
error = graph.error(result)
|
||||
E = result.at(1)
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
import gtsam.*
|
||||
|
||||
%% Find data file
|
||||
datafile = findExampleDataFile('w100-odom.graph');
|
||||
datafile = findExampleDataFile('w100.graph');
|
||||
|
||||
%% Initialize graph, initial estimate, and odometry noise
|
||||
model = noiseModel.Diagonal.Sigmas([0.05; 0.05; 5*pi/180]);
|
||||
|
|
|
@ -33,7 +33,7 @@ graph.add(NonlinearEqualityPose3(x1, first_pose));
|
|||
%% Create realistic calibration and measurement noise model
|
||||
% format: fx fy skew cx cy baseline
|
||||
K = Cal3_S2Stereo(1000, 1000, 0, 320, 240, 0.2);
|
||||
stereo_model = noiseModel.Diagonal.Sigmas([1.0; 1.0; 1.0]);
|
||||
stereo_model = noiseModel.Isotropic.Sigma(3,1);
|
||||
|
||||
%% Add measurements
|
||||
% pose 1
|
||||
|
|
Loading…
Reference in New Issue