|
gtsam
|
WNOA (White Noise on Acceleration) motion prior factor.
This factor implements the WNOA motion prior between two states (pose and velocity at times t_k and t_{k+1}). It provides residuals and Jacobians consistent with the WNOA continuous-time prior when discretized over the timestep deltaT.
Template parameter Pose is expected to be a GTSAM pose type (e.g. Pose2, Pose3) or a vector-space pose; the factor supports both Lie group and vector-space pose representations.
The factor's ordering of keys is: pose_k, vel_k, pose_kp1, vel_kp1.
Public Member Functions | |
| WnoaMotionFactor (const StateData &state_k, const StateData &state_kp1, const VectorN &q_psd_diag) | |
| Construct a WNOA motion factor from two StateData entries. | |
| WnoaMotionFactor (Key poseKey0, Key velKey0, Key poseKey1, Key velKey1, const double deltaT, const VectorN &q_psd_diag) | |
| Construct a WNOA factor given explicit keys and timestep. | |
| Vector | evaluateError (const Pose &p1, const Velocity &v1, const Pose &p2, const Velocity &v2, OptionalMatrixType Hp1, OptionalMatrixType Hv1, OptionalMatrixType Hp2, OptionalMatrixType Hv2) const override |
| Evaluate the WNOA factor residual and optional Jacobians. | |
| virtual Vector | evaluateError (const ValueTypes &... x, OptionalMatrixTypeT< ValueTypes >... H) const =0 |
| Override evaluateError to finish implementing an n-way factor. | |
| Vector | evaluateError (const ValueTypes &... x, MatrixTypeT< ValueTypes > &... H) const |
| If all the optional arguments are matrices then redirect the call to the one which takes pointers. | |
| Vector | evaluateError (const ValueTypes &... x) const |
| No-Jacobians requested function overload. | |
| AreAllMatrixRefs< Vector, OptionalJacArgs... > | evaluateError (const ValueTypes &... x, OptionalJacArgs &&... H) const |
| Some (but not all) optional Jacobians are omitted (function overload) and the jacobians are l-value references to matrices. | |
Testable | |
| void | print (const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override |
| print | |
| bool | equals (const NonlinearFactor &expected, double tol=1e-9) const override |
| equals | |
| Public Member Functions inherited from gtsam::NoiseModelFactorT< Vector, ValueTypes... > | |
| Key | key () const |
| Returns a key. | |
| Vector | unwhitenedError (const Values &x, std::vector< Matrix > &H) const |
| support taking in the actual vector instead of the pointer as well to get access to this version of the function from derived classes one will need to use the "using" keyword and specify that like this: public: using NoiseModelFactor::unwhitenedError; | |
| NoiseModelFactorT () | |
| Default Constructor for I/O. | |
| NoiseModelFactorT (const SharedNoiseModel &noiseModel, KeyType< ValueTypes >... keys) | |
| Constructor. | |
| NoiseModelFactorT (const SharedNoiseModel &noiseModel, CONTAINER keys) | |
| Constructor. | |
| virtual Vector | evaluateError (const ValueTypes &... x, OptionalMatrixTypeT< ValueTypes >... H) const=0 |
| Override evaluateError to finish implementing an n-way factor. | |
| Vector | evaluateError (const ValueTypes &... x, MatrixTypeT< ValueTypes > &... H) const |
| If all the optional arguments are matrices then redirect the call to the one which takes pointers. | |
| Vector | evaluateError (const ValueTypes &... x) const |
| No-Jacobians requested function overload. | |
| AreAllMatrixRefs< Vector, OptionalJacArgs... > | evaluateError (const ValueTypes &... x, OptionalJacArgs &&... H) const |
| Some (but not all) optional Jacobians are omitted (function overload) and the jacobians are l-value references to matrices. | |
| AreAllMatrixPtrs< Vector, OptionalJacArgs... > | evaluateError (const ValueTypes &... x, OptionalJacArgs &&... H) const |
| Some (but not all) optional Jacobians are omitted (function overload) and the jacobians are pointers to matrices. | |
| Key | key1 () const |
| Key | key2 () const |
| Key | key3 () const |
| Key | key4 () const |
| Key | key5 () const |
| Key | key6 () const |
| std::shared_ptr< GaussianFactor > | linearize (const Values &values) const override |
| Linearize factors whose error and argument dimensions are all fixed to an arbitrary-arity FixedJacobianFactor. | |
| Vector | unwhitenedError (const Values &x, OptionalMatrixVecType H=nullptr) const override |
| This implements the unwhitenedError virtual function by calling the n-key specific version of evaluateError, which is pure virtual so must be implemented in the derived class. | |
| Public Member Functions inherited from gtsam::NoiseModelFactor | |
| NoiseModelFactor () | |
| Default constructor for I/O only. | |
| ~NoiseModelFactor () override | |
| Destructor. | |
| template<typename CONTAINER> | |
| NoiseModelFactor (const SharedNoiseModel &noiseModel, const CONTAINER &keys) | |
| Constructor. | |
| size_t | dim () const override |
| get the dimension of the factor (number of rows on linearization) | |
| const SharedNoiseModel & | noiseModel () const |
| access to the noise model | |
| Vector | unwhitenedError (const Values &x, std::vector< Matrix > &H) const |
| support taking in the actual vector instead of the pointer as well to get access to this version of the function from derived classes one will need to use the "using" keyword and specify that like this: public: using NoiseModelFactor::unwhitenedError; | |
| Vector | whitenedError (const Values &c) const |
| Vector of errors, whitened This is the raw error, i.e., i.e. | |
| Vector | unweightedWhitenedError (const Values &c) const |
| Vector of errors, whitened, but unweighted by any loss function. | |
| double | weight (const Values &c) const |
| Compute the effective weight of the factor from the noise model. | |
| double | error (const Values &c) const override |
| Calculate the error of the factor. | |
| shared_ptr | cloneWithNewNoiseModel (const SharedNoiseModel newNoise) const |
| Creates a shared_ptr clone of the factor with a new noise model. | |
| double | error (const HybridValues &c) const override |
| All factor types need to implement an error function. | |
| NonlinearFactor () | |
| Default constructor for I/O only. | |
| template<typename CONTAINER> | |
| NonlinearFactor (const CONTAINER &keys) | |
| Constructor from a collection of the keys involved in this factor. | |
| double | error (const HybridValues &c) const override |
| All factor types need to implement an error function. | |
| virtual bool | active (const Values &c) const |
| Checks whether a factor should be used based on a set of values. | |
| virtual void | qcqpFactors (NonlinearFactorGraph *costs, NonlinearEqualityConstraints *constraints, size_t columnDimension=1) const |
| Add this factor's QCQP cost and constraints over matrix-valued QCQP variables with the given column dimension. | |
| virtual shared_ptr | clone () const |
| Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses. | |
| virtual shared_ptr | rekey (const std::map< Key, Key > &rekey_mapping) const |
| Creates a shared_ptr clone of the factor with different keys using a map from old->new keys. | |
| virtual shared_ptr | rekey (const KeyVector &new_keys) const |
| Clones a factor and fully replaces its keys. | |
| virtual bool | sendable () const |
| Should the factor be evaluated in the same thread as the caller This is to enable factors that has shared states (like the Python GIL lock). | |
| Public Member Functions inherited from gtsam::Factor | |
| virtual | ~Factor ()=default |
| Default destructor. | |
| bool | empty () const |
| Whether the factor is empty (involves zero variables). | |
| Key | front () const |
| First key. | |
| Key | back () const |
| Last key. | |
| const_iterator | find (Key key) const |
| find | |
| const KeyVector & | keys () const |
| Access the factor's involved variable keys. | |
| const_iterator | begin () const |
| Iterator at beginning of involved variable keys. | |
| const_iterator | end () const |
| Iterator at end of involved variable keys. | |
| size_t | size () const |
| virtual void | printKeys (const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const |
| print only keys | |
| bool | equals (const This &other, double tol=1e-9) const |
| check equality | |
| KeyVector & | keys () |
| iterator | begin () |
| Iterator at beginning of involved variable keys. | |
| iterator | end () |
| Iterator at end of involved variable keys. | |
Static Public Member Functions | |
| static Matrix2N | BuildWnoaCovariance (double timestep, const VectorN &q_psd_diag) |
| Build the continuous-time WNOA discretized process covariance. | |
| static Matrix2N | BuildInverseWnoaCovariance (double dt, const VectorN &q_psd_diag) |
| Build the inverse of the WNOA discretized process covariance. | |
| static noiseModel::Gaussian::shared_ptr | BuildWnoaNoiseModel (double timestep, const VectorN &q_psd_diag) |
| Convenience helper to construct a Gaussian noise model from q_psd_diag. | |
| static Matrix2N | TransitionFunction (double deltaT) |
| Transition matrix for the WNOA prior. | |
| static Matrix2N | ComputeJacobianPrev (const std::pair< Pose, Velocity > &pv1, const std::pair< Pose, Velocity > &pv2, double deltaT) |
| Compute interpolation Jacobian with respect to the previous (left) state. | |
| static Matrix2N | ComputeJacobianNext (const std::pair< Pose, Velocity > &pv1, const std::pair< Pose, Velocity > &pv2, double deltaT) |
| Compute interpolation Jacobian with respect to the next (right) state. | |
Static Public Attributes | |
| static constexpr int | dim = traits<Pose>::dimension |
| Static Public Attributes inherited from gtsam::NoiseModelFactorT< Vector, ValueTypes... > | |
| static constexpr auto | N |
| N is the number of variables (N-way factor). | |
Public Types | |
| using | Velocity = typename gtsam::traits<Pose>::TangentVector |
| Public Types inherited from gtsam::NoiseModelFactorT< Vector, ValueTypes... > | |
| using | ValueType |
| The type of the I'th template param can be obtained as ValueType. | |
| Public Types inherited from gtsam::NoiseModelFactor | |
| typedef std::shared_ptr< This > | shared_ptr |
| Noise model. | |
| Public Types inherited from gtsam::NonlinearFactor | |
| typedef std::shared_ptr< This > | shared_ptr |
| Public Types inherited from gtsam::Factor | |
| typedef KeyVector::iterator | iterator |
| Iterator over keys. | |
| typedef KeyVector::const_iterator | const_iterator |
| Const iterator over keys. | |
Additional Inherited Members | |
| Protected Types inherited from gtsam::NoiseModelFactorT< Vector, ValueTypes... > | |
| using | Base |
| using | This |
| using | OptionalMatrixTypeT |
| using | KeyType |
| using | MatrixTypeT |
| using | IsConvertible |
| using | IndexIsValid |
| using | ContainerElementType |
| using | IsContainerOfKeys |
| using | AreAllMatrixRefs |
| A helper alias to check if a list of args are all references to a matrix or not. | |
| using | IsMatrixPointer |
| using | IsNullpointer |
| using | AreAllMatrixPtrs |
| A helper alias to check if a list of args are all pointers to a matrix or not. | |
| Protected Types inherited from gtsam::NoiseModelFactor | |
| typedef NonlinearFactor | Base |
| typedef NoiseModelFactor | This |
| Protected Types inherited from gtsam::NonlinearFactor | |
| typedef Factor | Base |
| typedef NonlinearFactor | This |
| Protected Member Functions inherited from gtsam::NoiseModelFactor | |
| NoiseModelFactor (const SharedNoiseModel &noiseModel) | |
| Constructor - only for subclasses, as this does not set keys. | |
| Factor () | |
| Default constructor for I/O. | |
| template<typename CONTAINER> | |
| Factor (const CONTAINER &keys) | |
| Construct factor from container of keys. | |
| template<typename ITERATOR> | |
| Factor (ITERATOR first, ITERATOR last) | |
| Construct factor from iterator keys. | |
| template<typename CONTAINER> | |
| static Factor | FromKeys (const CONTAINER &keys) |
| Construct factor from container of keys. | |
| template<typename ITERATOR> | |
| static Factor | FromIterators (ITERATOR first, ITERATOR last) |
| Construct factor from iterator keys. | |
| Protected Attributes inherited from gtsam::NoiseModelFactor | |
| SharedNoiseModel | noiseModel_ |
| Protected Attributes inherited from gtsam::Factor | |
| KeyVector | keys_ |
| The keys involved in this factor. | |
|
inline |
Construct a WNOA motion factor from two StateData entries.
This constructor builds a factor connecting the pose and velocity keys contained in state_k and state_kp1. The internal noise model is constructed from the provided diagonal PSD vector q_psd_diag and the timestep computed from the two state timestamps.
|
inline |
Construct a WNOA factor given explicit keys and timestep.
| poseKey0 | Pose key at t_k |
| velKey0 | Velocity key at t_k |
| poseKey1 | Pose key at t_{k+1} |
| velKey1 | Velocity key at t_{k+1} |
| deltaT | Time interval t_{k+1} - t_k (must be > 0) |
| q_psd_diag | Diagonal PSD vector used to form the process noise. |
|
inlinestatic |
Build the inverse of the WNOA discretized process covariance.
| timestep | Time interval |
| q_psd_diag | Diagonal PSD vector |
|
inlinestatic |
Build the continuous-time WNOA discretized process covariance.
Returns the 2N x 2N covariance matrix for a WNOA prior discretized over timestep using the diagonal PSD q_psd_diag. See (11.7) in (Barfoot, 2024) for the derivation of covariance for the WNOA prior
| timestep | Time interval over which to compute covariance |
| q_psd_diag | Diagonal PSD vector |
|
inlinestatic |
Convenience helper to construct a Gaussian noise model from q_psd_diag.
The noise model uses the covariance produced by BuildWnoaCovariance.
| timestep | Time interval |
| q_psd_diag | Diagonal PSD vector |
|
inlinestatic |
Compute interpolation Jacobian with respect to the next (right) state.
Computes the 2N x 2N Jacobian block that maps perturbations in the next bordering state (pose_kp1, vel_kp1) to perturbations in the interpolated discrete residual.
| pv1 | Pair (pose_k, vel_k) |
| pv2 | Pair (pose_kp1, vel_kp1) |
| deltaT | Time interval |
|
inlinestatic |
Compute interpolation Jacobian with respect to the previous (left) state.
Computes the 2N x 2N Jacobian block that maps perturbations in the previous bordering state (pose_k, vel_k) to perturbations in the interpolated discrete residual.
| pv1 | Pair (pose_k, vel_k) |
| pv2 | Pair (pose_kp1, vel_kp1) |
| deltaT | Time interval |
|
inlineoverridevirtual |
equals
Reimplemented from gtsam::NoiseModelFactor.
|
inlineoverride |
Evaluate the WNOA factor residual and optional Jacobians.
Residual is a 2N vector formed from the difference between the discrete relative pose/velocity and the predicted motion under the WNOA prior. When Jacobian pointers are provided, the function fills the corresponding derivative blocks with respect to the four inputs.
| p1 | Pose at time t_k |
| v1 | Velocity at time t_k |
| p2 | Pose at time t_{k+1} |
| v2 | Velocity at time t_{k+1} |
| Hp1 | Optional output Jacobian w.r.t. p1 |
| Hv1 | Optional output Jacobian w.r.t. v1 |
| Hp2 | Optional output Jacobian w.r.t. p2 |
| Hv2 | Optional output Jacobian w.r.t. v2 |
|
inline |
No-Jacobians requested function overload.
This specializes the version below to avoid recursive calls since this is commonly used.
e.g. const Vector error = factor.evaluateError(pose, point);
|
inline |
If all the optional arguments are matrices then redirect the call to the one which takes pointers.
To get access to this version of the function from derived classes one will need to use the "using" keyword and specify that like this: public: using NoiseModelFactorT<list the value types here>::evaluateError;
|
inline |
Some (but not all) optional Jacobians are omitted (function overload) and the jacobians are l-value references to matrices.
e.g. const Vector error = factor.evaluateError(pose, point, Hpose);
| virtual Vector gtsam::NoiseModelFactorT< Vector, ValueTypes >::evaluateError | ( | const ValueTypes &... | x, |
| OptionalMatrixTypeT< ValueTypes >... | H ) const |
Override evaluateError to finish implementing an n-way factor.
Both the x and H arguments are written here as parameter packs, but when overriding this method, you probably want to explicitly write them out. For example, for a 2-way factor with variable types Pose3 and Point3, you should implement:
If any of the optional Matrix reference arguments are specified, it should compute both the function evaluation and its derivative(s) in the requested variables.
| x | The values of the variables to evaluate the error for. Passed in as separate arguments. | |
| [out] | H | The Jacobian with respect to each variable (optional). |
|
inlineoverridevirtual |
Reimplemented from gtsam::NoiseModelFactor.
|
inlinestatic |
Transition matrix for the WNOA prior.
Returns the 2N x 2N transition matrix mapping the concatenated state [pose; vel] over interval deltaT using the standard WNOA linearization.
| deltaT | Time interval |