Added two ReadMe files to document the plethora of smart factors.
							parent
							
								
									4ef234bbbb
								
							
						
					
					
						commit
						372ae27a5e
					
				| 
						 | 
				
			
			@ -0,0 +1,64 @@
 | 
			
		|||
# SLAM Factors
 | 
			
		||||
 | 
			
		||||
## GenericProjectionFactor (defined in ProjectionFactor.h)
 | 
			
		||||
 | 
			
		||||
Non-linear factor for a constraint derived from a 2D measurement. 
 | 
			
		||||
The calibration is assumed known and passed in the constructor.
 | 
			
		||||
The main building block for visual SLAM.
 | 
			
		||||
 | 
			
		||||
Templated on
 | 
			
		||||
- `POSE`, default `Pose3`
 | 
			
		||||
- `LANDMARK`, default `Point3`
 | 
			
		||||
- `CALIBRATION`, default `Cal3_S2`
 | 
			
		||||
 | 
			
		||||
## SmartFactors
 | 
			
		||||
 | 
			
		||||
These are "structure-less" factors, i.e., rather than introducing a new variable for an observed 3D point or landmark, a single factor is created that provides a multi-view constraint on several poses and/or cameras.
 | 
			
		||||
 | 
			
		||||
### SmartFactorBase
 | 
			
		||||
 | 
			
		||||
This is the base class for smart factors, templated on a `CAMERA` type.
 | 
			
		||||
It has no internal point, but it saves the measurements, keeps a noise model, and an optional sensor pose.
 | 
			
		||||
 | 
			
		||||
### SmartProjectionFactor
 | 
			
		||||
 | 
			
		||||
Also templated on `CAMERA`. Triangulates a 3D point and keeps an estimate of it around.
 | 
			
		||||
This factor operates with monocular cameras, and is used to optimize the camera pose
 | 
			
		||||
*and* calibration for each camera, and requires variables of type `CAMERA` in values.
 | 
			
		||||
 | 
			
		||||
If the calibration is fixed use `SmartProjectionPoseFactor` instead!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### SmartProjectionPoseFactor
 | 
			
		||||
 | 
			
		||||
Derives from `SmartProjectionFactor` but is templated on a `CALIBRATION` type, setting `CAMERA = PinholePose<CALIBRATION>`.
 | 
			
		||||
This factor assumes that the camera calibration is fixed and the same for all cameras involved in this factor.
 | 
			
		||||
The factor only constrains poses.
 | 
			
		||||
 | 
			
		||||
If the calibration should be optimized, as well, use `SmartProjectionFactor` instead!
 | 
			
		||||
 | 
			
		||||
### SmartProjectionFactorP
 | 
			
		||||
 | 
			
		||||
Same as `SmartProjectionPoseFactor`, except:
 | 
			
		||||
- it is templated on `CAMERA`, i.e., it allows cameras beyond pinhole;
 | 
			
		||||
- it admits a different calibration for each measurement, i.e., it can model a multi-camera system;
 | 
			
		||||
- it allows multiple observations from the same pose/key, again, to model a multi-camera system.
 | 
			
		||||
 | 
			
		||||
TODO: DimPose and ZDim are hardcoded. Copy/paste from `SmartProjectionPoseFactor`. Unclear what the use case is.
 | 
			
		||||
 | 
			
		||||
### RegularImplicitSchurFactor
 | 
			
		||||
 | 
			
		||||
A specialization of a GaussianFactor to structure-less SFM, which is very fast in a conjugate gradient (CG) solver. 
 | 
			
		||||
It is produced by calling `createRegularImplicitSchurFactor` in `SmartFactorBase` or `SmartProjectionFactor`. 
 | 
			
		||||
 | 
			
		||||
### JacobianFactorQ
 | 
			
		||||
 | 
			
		||||
A RegularJacobianFactor that uses some badly documented reduction on the Jacobians.
 | 
			
		||||
 | 
			
		||||
### JacobianFactorQR
 | 
			
		||||
 | 
			
		||||
A RegularJacobianFactor that eliminates a point using sequential elimination.
 | 
			
		||||
 | 
			
		||||
### JacobianFactorQR
 | 
			
		||||
 | 
			
		||||
A RegularJacobianFactor that uses the "Nullspace Trick" by Mourikis et al. See the documentation in the file, which *is* well documented.
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
# SLAM Factors
 | 
			
		||||
 | 
			
		||||
## SmartFactors
 | 
			
		||||
 | 
			
		||||
These are "structure-less" factors, i.e., rather than introducing a new variable for an observed 3D point or landmark, a single factor is created that provides a multi-view constraint on several poses and/or cameras.
 | 
			
		||||
 | 
			
		||||
### SmartRangeFactor
 | 
			
		||||
 | 
			
		||||
An experiment in creating a structure-less 2D range-SLAM factor with range-only measurements.
 | 
			
		||||
It uses a sophisticated `triangulate` logic based on circle intersections.
 | 
			
		||||
 | 
			
		||||
### SmartStereoProjectionFactor
 | 
			
		||||
 | 
			
		||||
Version of `SmartProjectionFactor` for stereo observations, specializes SmartFactorBase for `CAMERA == StereoCamera`.
 | 
			
		||||
 | 
			
		||||
TODO: a lot of commented out code and could move a lot to .cpp file.
 | 
			
		||||
 | 
			
		||||
### SmartStereoProjectionPoseFactor
 | 
			
		||||
 | 
			
		||||
Derives from `SmartStereoProjectionFactor` but adds an array of `Cal3_S2Stereo` calibration objects .
 | 
			
		||||
 | 
			
		||||
TODO: Again, as no template arguments, we could move a lot to .cpp file.
 | 
			
		||||
 | 
			
		||||
### SmartStereoProjectionFactorPP
 | 
			
		||||
 | 
			
		||||
Similar `SmartStereoProjectionPoseFactor` but *additionally* adds an array of body_P_cam poses. The dimensions seem to be hardcoded and the types defined in the SmartFactorBase have been re-defined.  
 | 
			
		||||
 | 
			
		||||
TODO: See above, same issues as `SmartStereoProjectionPoseFactor`.
 | 
			
		||||
 | 
			
		||||
### SmartProjectionPoseFactorRollingShutter
 | 
			
		||||
 | 
			
		||||
Is templated on a `CAMERA` type and derives from `SmartProjectionFactor`.
 | 
			
		||||
 | 
			
		||||
This factor optimizes two consecutive poses of a body assuming a rolling
 | 
			
		||||
shutter model of the camera with given readout time. The factor requires that
 | 
			
		||||
values contain (for each 2D observation) two consecutive camera poses from
 | 
			
		||||
which the 2D observation pose can be interpolated.
 | 
			
		||||
 | 
			
		||||
TODO: the dimensions seem to be hardcoded and the types defined in the SmartFactorBase have been re-defined. Also, possibly a lot of copy/paste computation of things that (should) happen in base class.
 | 
			
		||||
		Loading…
	
		Reference in New Issue