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;
 | 
						|
}
 | 
						|
/* ************************************************************************* */
 |