85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Matlab
		
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Matlab
		
	
	
load beijing.mat;
 | 
						|
load beijing_angles.mat;
 | 
						|
load beijing_graph.mat;
 | 
						|
%load beijing_config.mat;
 | 
						|
 | 
						|
cov = [ 0.25, 0, 0; 0, 0.25, 0; 0, 0, 0.01];
 | 
						|
 | 
						|
 | 
						|
factors = Pose2Graph;
 | 
						|
factors2 = Pose2Graph;
 | 
						|
ord = Ordering();
 | 
						|
ord2 = Ordering();
 | 
						|
 | 
						|
for i=1:length(ways)
 | 
						|
    if mod(i,500) == 0
 | 
						|
        fprintf(1, 'processing way %d\n', i);
 | 
						|
    end
 | 
						|
    for j=1:length(ways{i})-1
 | 
						|
        id1 = ways{i}(j);
 | 
						|
        id2 = ways{i}(j+1);
 | 
						|
        key1 = sprintf('x%d', id1);
 | 
						|
        key2 = sprintf('x%d', id2);
 | 
						|
 | 
						|
        delta_x = points(id1,:) - points(id2,:);
 | 
						|
        delta_angle = angles(id1) - angles(id2);
 | 
						|
        measured = Pose2(delta_x(1), delta_x(2), delta_angle);
 | 
						|
 | 
						|
        if pred(id1) == id2 || pred(id2) == id1 %% in the spanning tree
 | 
						|
            factor=Pose2Factor(key1,key2,measured, cov);
 | 
						|
            factors.push_back(factor);
 | 
						|
            ord.push_back(key1);
 | 
						|
            ord.push_back(key2);
 | 
						|
        else %% not in the spanning tree
 | 
						|
            factors2.push_back(Pose2Factor(key1,key2,measured, cov));
 | 
						|
            ord2.push_back(key1);
 | 
						|
            ord2.push_back(key2);
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
ord.unique();
 | 
						|
ord2.unique();
 | 
						|
% ord.reverse();
 | 
						|
% ord2.reverse();
 | 
						|
 | 
						|
if 0
 | 
						|
    config=Pose2Config();
 | 
						|
    n=size(points,1);
 | 
						|
    for j=1:n
 | 
						|
        pose=Pose2(points(j,1),points(j,2),angles(j));
 | 
						|
        key = sprintf('x%d', j);
 | 
						|
        config.insert(key,pose);
 | 
						|
        if mod(j,1000) == 0
 | 
						|
            key
 | 
						|
        end
 | 
						|
    end
 | 
						|
    save('beijing_config.mat','config');
 | 
						|
end
 | 
						|
 | 
						|
amd_ord=factors.getOrdering_(); % does not work
 | 
						|
LFG=factors.linearize_(config);
 | 
						|
ijs=LFG.sparse(ord);
 | 
						|
A=sparse(ijs(1,:),ijs(2,:),ijs(3,:)); 
 | 
						|
figure(1)
 | 
						|
spy(A);
 | 
						|
%save('beijing_factors.mat', 'factors');
 | 
						|
 | 
						|
LFG2=factors2.linearize_(config);
 | 
						|
ijs2=LFG2.sparse(ord2);
 | 
						|
A2=sparse(ijs2(1,:),ijs2(2,:),ijs2(3,:)); 
 | 
						|
figure(2)
 | 
						|
spy(A2);
 | 
						|
 | 
						|
% show R factor
 | 
						|
R = qr(A,0);
 | 
						|
figure(3)
 | 
						|
spy(R)
 | 
						|
 | 
						|
% show re-ordered R factor
 | 
						|
P = colamd(A);
 | 
						|
figure(4)
 | 
						|
spy(A(:,P))
 | 
						|
R = qr(A(:,P),0);
 | 
						|
figure(5)
 | 
						|
spy(R)
 |