69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
|  | /* ----------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |  * GTSAM Copyright 2010, Georgia Tech Research Corporation, | ||
|  |  * Atlanta, Georgia 30332-0415 | ||
|  |  * All Rights Reserved | ||
|  |  * Authors: Frank Dellaert, et al. (see THANKS for the full author list) | ||
|  | 
 | ||
|  |  * See LICENSE for the license information | ||
|  | 
 | ||
|  |  * -------------------------------------------------------------------------- */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @file    SFMMdata.h | ||
|  |  * @brief   Simple example for the structure-from-motion problems | ||
|  |  * @author  Duy-Nguyen Ta | ||
|  |  */ | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * 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 | ||
|  |  */ | ||
|  | 
 | ||
|  | // As this is a full 3D problem, we will use Pose3 variables to represent the camera
 | ||
|  | // positions and Point3 variables (x, y, z) to represent the landmark coordinates.
 | ||
|  | // Camera observations of landmarks (i.e. pixel coordinates) will be stored as Point2 (x, y).
 | ||
|  | // We will also need a camera object to hold calibration information and perform projections.
 | ||
|  | #include <gtsam/geometry/Pose3.h>
 | ||
|  | #include <gtsam/geometry/Point3.h>
 | ||
|  | 
 | ||
|  | // We will also need a camera object to hold calibration information and perform projections.
 | ||
|  | #include <gtsam/geometry/SimpleCamera.h>
 | ||
|  | 
 | ||
|  | /* ************************************************************************* */ | ||
|  | std::vector<gtsam::Point3> createPoints() { | ||
|  | 
 | ||
|  |   // Create the set of ground-truth landmarks
 | ||
|  |   std::vector<gtsam::Point3> points; | ||
|  |   points.push_back(gtsam::Point3(10.0,10.0,10.0)); | ||
|  |   points.push_back(gtsam::Point3(-10.0,10.0,10.0)); | ||
|  |   points.push_back(gtsam::Point3(-10.0,-10.0,10.0)); | ||
|  |   points.push_back(gtsam::Point3(10.0,-10.0,10.0)); | ||
|  |   points.push_back(gtsam::Point3(10.0,10.0,-10.0)); | ||
|  |   points.push_back(gtsam::Point3(-10.0,10.0,-10.0)); | ||
|  |   points.push_back(gtsam::Point3(-10.0,-10.0,-10.0)); | ||
|  |   points.push_back(gtsam::Point3(10.0,-10.0,-10.0)); | ||
|  | 
 | ||
|  |   return points; | ||
|  | } | ||
|  | 
 | ||
|  | /* ************************************************************************* */ | ||
|  | std::vector<gtsam::Pose3> createPoses() { | ||
|  | 
 | ||
|  |   // Create the set of ground-truth poses
 | ||
|  |   std::vector<gtsam::Pose3> poses; | ||
|  |   double radius = 30.0; | ||
|  |   int i = 0; | ||
|  |   double theta = 0.0; | ||
|  |   gtsam::Point3 up(0,0,1); | ||
|  |   gtsam::Point3 target(0,0,0); | ||
|  |   for(; i < 8; ++i, theta += 2*M_PI/8) { | ||
|  |     gtsam::Point3 position = gtsam::Point3(radius*cos(theta), radius*sin(theta), 0.0); | ||
|  |     gtsam::SimpleCamera camera = gtsam::SimpleCamera::Lookat(position, target, up); | ||
|  |     poses.push_back(camera.pose()); | ||
|  |   } | ||
|  |   return poses; | ||
|  | } | ||
|  | /* ************************************************************************* */ |