42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Matlab
		
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Matlab
		
	
	
|  | % Christan Potthast | ||
|  | % create linear factor graph | ||
|  | 
 | ||
|  | function lfg = create_gaussian_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 |