33 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Python
		
	
	
|  |   | ||
|  |   # A structure-from-motion example with landmarks | ||
|  |   #  - The landmarks form a 10 meter cube | ||
|  |   #  - The robot rotates around the landmarks, always facing towards the cube | ||
|  | 
 | ||
|  | import gtsam | ||
|  | import numpy as np | ||
|  | 
 | ||
|  | def createPoints(): | ||
|  | 	# Create the set of ground-truth landmarks | ||
|  | 	points = [gtsam.Point3(10.0,10.0,10.0), | ||
|  | 			  gtsam.Point3(-10.0,10.0,10.0), | ||
|  | 	          gtsam.Point3(-10.0,-10.0,10.0), | ||
|  | 	          gtsam.Point3(10.0,-10.0,10.0), | ||
|  | 	          gtsam.Point3(10.0,10.0,-10.0), | ||
|  | 	          gtsam.Point3(-10.0,10.0,-10.0), | ||
|  | 	          gtsam.Point3(-10.0,-10.0,-10.0), | ||
|  | 	          gtsam.Point3(10.0,-10.0,-10.0)] | ||
|  | 	return points | ||
|  | 
 | ||
|  | def createPoses(): | ||
|  | 	# Create the set of ground-truth poses | ||
|  | 	radius = 30.0 | ||
|  | 	angles = np.linspace(0,2*np.pi,8,endpoint=False) | ||
|  | 	up = gtsam.Point3(0,0,1) | ||
|  | 	target = gtsam.Point3(0,0,0) | ||
|  | 	poses = [] | ||
|  | 	for theta in angles: | ||
|  | 		position = gtsam.Point3(radius*np.cos(theta), radius*np.sin(theta), 0.0) | ||
|  | 		camera = gtsam.PinholeCameraCal3_S2.Lookat(position, target, up) | ||
|  | 		poses.append(camera.pose()) | ||
|  | 	return poses |