97 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
		
		
			
		
	
	
			97 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
| 
								 | 
							
								# GTSAM Examples
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This directory contains all GTSAM C++ examples GTSAM pertaining to SFM
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Basic Examples:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* **SimpleRotation**:  a simple example of optimizing a single rotation according to a single prior
							 | 
						||
| 
								 | 
							
								* **CameraResectioning**: resection camera from some known points
							 | 
						||
| 
								 | 
							
								* **SFMExample**: basic structure from motion
							 | 
						||
| 
								 | 
							
								* **SFMExample_bal**: same, but read data from read from BAL file
							 | 
						||
| 
								 | 
							
								* **SelfCalibrationExample**: Do SFM while also optimizing for calibration
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Stereo Visual Odometry Examples
							 | 
						||
| 
								 | 
							
								Visual odometry using a stereo rig:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* **StereoVOExample**: basic example of stereo VO
							 | 
						||
| 
								 | 
							
								* **StereoVOExample_large**: larger, with a snippet of Kitti data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## More Advanced Examples
							 | 
						||
| 
								 | 
							
								The following examples illustrate some concepts from Georgia Tech's research papers, listed in the references section at the end:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* **VisualISAMExample**: uses iSAM [TRO08]
							 | 
						||
| 
								 | 
							
								* **VisualISAM2Example**: uses iSAM2 [IJRR12]
							 | 
						||
| 
								 | 
							
								* **SFMExample_SmartFactor**: uses smartFactors [ICRA14]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Kalman Filter Examples
							 | 
						||
| 
								 | 
							
								* **elaboratePoint2KalmanFilter**: simple linear Kalman filter on a moving 2D point, but done using factor graphs
							 | 
						||
| 
								 | 
							
								* **easyPoint2KalmanFilter**: uses the generic templated Kalman filter class to do the same
							 | 
						||
| 
								 | 
							
								* **fullStateKalmanFilter**: simple 1D example with a full-state filter
							 | 
						||
| 
								 | 
							
								* **errorStateKalmanFilter**: simple 1D example of a moving target measured by a accelerometer, incl. drift-rate bias
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 2D Pose SLAM 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* **LocalizationExample.cpp**: modeling robot motion
							 | 
						||
| 
								 | 
							
								* **LocalizationExample2.cpp**: example with GPS like measurements
							 | 
						||
| 
								 | 
							
								* **Pose2SLAMExample**: A 2D Pose SLAM example using the predefined typedefs in gtsam/slam/pose2SLAM.h
							 | 
						||
| 
								 | 
							
								* **Pose2SLAMExample_advanced**: same, but uses an Optimizer object
							 | 
						||
| 
								 | 
							
								* **Pose2SLAMwSPCG**: solve a simple 3 by 3 grid of Pose2 SLAM problem by using easy SPCG interface
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Planar SLAM with landmarks
							 | 
						||
| 
								 | 
							
								* **PlanarSLAMExample**: simple robotics example using the pre-built planar SLAM domain
							 | 
						||
| 
								 | 
							
								* **PlanarSLAMExample_selfcontained**: simple robotics example with all typedefs internal to this script.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Visual SLAM
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The directory **vSLAMexample** includes 2 simple examples using GTSAM:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- **vSFMexample** using visual SLAM for structure-from-motion (SFM)
							 | 
						||
| 
								 | 
							
								- **vISAMexample** using visual SLAM and ISAM for incremental SLAM updates
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See the separate README file there.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##Undirected Graphical Models (UGM)
							 | 
						||
| 
								 | 
							
								The best representation for a Markov Random Field is a factor graph :-) This is illustrated with some discrete examples from the UGM MATLAB toolbox, which
							 | 
						||
| 
								 | 
							
								can be found at <http://www.di.ens.fr/~mschmidt/Software/UGM>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##Building and Running
							 | 
						||
| 
								 | 
							
								To build, cd into the directory and do:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								mkdir build
							 | 
						||
| 
								 | 
							
								cd build
							 | 
						||
| 
								 | 
							
								cmake ..
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For each .cpp file in this directory two make targets are created, one to build the executable, and one to build and run it. For example, the file `CameraResectioning.cpp` contains simple example to resection a camera from 4 known points. You can build it using
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								make CameraResectioning
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								or build and run it immediately with
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								make CameraResectioning.run
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								which should output:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								Final result:
							 | 
						||
| 
								 | 
							
								Values with 1 values:
							 | 
						||
| 
								 | 
							
								Value x1: R:
							 | 
						||
| 
								 | 
							
								[
							 | 
						||
| 
								 | 
							
								           1,	         0.0,	         0.0,	
							 | 
						||
| 
								 | 
							
								         0.0,	          -1,	         0.0,	
							 | 
						||
| 
								 | 
							
								         0.0,	         0.0,	          -1,	
							 | 
						||
| 
								 | 
							
								];
							 | 
						||
| 
								 | 
							
								t: [0, 0, 2]';
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## References
							 | 
						||
| 
								 | 
							
								- [TRO08]: [iSAM: Incremental Smoothing and Mapping, Michael Kaess](http://frank.dellaert.com/pub/Kaess08tro.pdf), Michael Kaess, Ananth Ranganathan, and Frank Dellaert, IEEE Transactions on Robotics, 2008
							 | 
						||
| 
								 | 
							
								- [IJRR12]: [iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree](http://www.cc.gatech.edu/~dellaert/pub/Kaess12ijrr.pdf), Michael Kaess, Hordur Johannsson, Richard Roberts, Viorela Ila, John Leonard, and Frank Dellaert, International Journal of Robotics Research, 2012
							 | 
						||
| 
								 | 
							
								- [ICRA14]: [Eliminating Conditionally Independent Sets in Factor Graphs: A Unifying Perspective based on Smart Factors](http://frank.dellaert.com/pub/Carlone14icra.pdf), Luca Carlone, Zsolt Kira, Chris Beall, Vadim Indelman, and Frank Dellaert, IEEE International Conference on Robotics and Automation (ICRA), 2014
							 |