42 lines
1.1 KiB
Matlab
42 lines
1.1 KiB
Matlab
% Christan Potthast
|
|
% create linear factor graph
|
|
|
|
function lfg = create_linear_factor_graph(config, measurements, odometry, measurement_sigma, odo_sigma, n)
|
|
|
|
m = size(measurements,2);
|
|
|
|
% create linear factor graph
|
|
lfg = GaussianFactorGraph();
|
|
|
|
% create prior for initial robot pose
|
|
prior = Point2Prior([0;0],0.2,'x1');
|
|
lf = prior.linearize(config);
|
|
lfg.push_back(lf);
|
|
|
|
% add prior for landmarks
|
|
for j = 1:n
|
|
key = sprintf('l%d',j);
|
|
prior = Point2Prior([0;0],1000,key);
|
|
lf = prior.linearize(config);
|
|
lfg.push_back(lf);
|
|
end
|
|
|
|
% add measurement factors
|
|
for k = 1 : size(measurements,2)
|
|
measurement = measurements{k};
|
|
i = sprintf('x%d',measurement.i);
|
|
j = sprintf('l%d',measurement.j);
|
|
nlf = Simulated2DMeasurement(measurement.z, measurement_sigma, i, j);
|
|
lf = nlf.linearize(config);
|
|
lfg.push_back(lf);
|
|
end
|
|
|
|
% add odometry factors
|
|
for i = 2 : size(odometry,2)
|
|
odo = odometry{i};
|
|
p = sprintf('x%d',i-1);
|
|
c = sprintf('x%d',i);
|
|
nlf = Simulated2DOdometry(odo, odo_sigma, p, c);
|
|
lf = nlf.linearize(config);
|
|
lfg.push_back(lf);
|
|
end |