| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  | % 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(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  | % Point2 at origin | 
					
						
							|  |  |  | origin = Point2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  | % create prior for initial robot pose | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  | model0_2 = SharedDiagonal([0.2;0.2]); | 
					
						
							|  |  |  | prior = Simulated2DPosePrior(origin,model0_2,1); | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  | lf = prior.linearize(config); | 
					
						
							|  |  |  | lfg.push_back(lf); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % add prior for landmarks | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  | model1000 = SharedDiagonal([1000;1000]); | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  | for j = 1:n | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  |     prior = Simulated2DPointPrior(origin,model1000,j); | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  |     lf = prior.linearize(config);  | 
					
						
							|  |  |  |     lfg.push_back(lf); | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  | % add odometry factors | 
					
						
							|  |  |  | odo_model = SharedDiagonal([odo_sigma;odo_sigma]); | 
					
						
							|  |  |  | for i = 2 : size(odometry,2) | 
					
						
							|  |  |  |     odo = Point2(odometry{i}(1),odometry{i}(2)); | 
					
						
							|  |  |  |     nlf = Simulated2DOdometry(odo, odo_model, i-1, i); | 
					
						
							|  |  |  |     lf = nlf.linearize(config); | 
					
						
							|  |  |  |     lfg.push_back(lf); | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  | % add measurement factors | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  | measurement_model = SharedDiagonal([measurement_sigma;measurement_sigma]); | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  | for k = 1 : size(measurements,2)  | 
					
						
							|  |  |  |     measurement = measurements{k}; | 
					
						
							| 
									
										
										
										
											2010-02-23 13:06:16 +08:00
										 |  |  |     point = Point2(measurement.z(1),measurement.z(2)); | 
					
						
							|  |  |  |     nlf = Simulated2DMeasurement(point, measurement_model, measurement.i, measurement.j); | 
					
						
							| 
									
										
										
										
											2009-12-10 12:16:51 +08:00
										 |  |  |     lf = nlf.linearize(config); | 
					
						
							|  |  |  |     lfg.push_back(lf); | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 |