Fixed bug with linear factor not getting cloned on linearization, updated comments to reflect lack of ordering
parent
bbb6ff90fd
commit
6d6ee8debc
|
|
@ -104,8 +104,10 @@ size_t LinearContainerFactor::dim() const {
|
|||
|
||||
/* ************************************************************************* */
|
||||
GaussianFactor::shared_ptr LinearContainerFactor::linearize(const Values& c) const {
|
||||
// Clone factor and update as necessary
|
||||
GaussianFactor::shared_ptr linFactor = factor_->clone();
|
||||
if (!hasLinearizationPoint())
|
||||
return factor_;
|
||||
return linFactor;
|
||||
|
||||
// Extract subset of values
|
||||
Values subsetC;
|
||||
|
|
@ -115,8 +117,7 @@ GaussianFactor::shared_ptr LinearContainerFactor::linearize(const Values& c) con
|
|||
// Determine delta between linearization points using new ordering
|
||||
VectorValues delta = linearizationPoint_->localCoordinates(subsetC);
|
||||
|
||||
// clone and reorder linear factor to final ordering
|
||||
GaussianFactor::shared_ptr linFactor = factor_->clone();
|
||||
// Apply changes due to relinearization
|
||||
if (isJacobian()) {
|
||||
JacobianFactor::shared_ptr jacFactor = boost::dynamic_pointer_cast<JacobianFactor>(linFactor);
|
||||
jacFactor->getb() = -jacFactor->unweighted_error(delta);
|
||||
|
|
|
|||
|
|
@ -79,9 +79,8 @@ public:
|
|||
|
||||
/**
|
||||
* Linearize to a GaussianFactor, with method depending on the presence of a linearizationPoint
|
||||
* - With no linearization point, returns a reordered, but numerically identical,
|
||||
* version of the existing stored linear factor
|
||||
* - With a linearization point provided, returns a reordered and relinearized version of
|
||||
* - With no linearization point, returns a cloned version of the stored linear factor.
|
||||
* - With a linearization point provided, returns a relinearized version of
|
||||
* the linearized factor.
|
||||
*
|
||||
* The relinearization approach used computes a linear delta between the original linearization
|
||||
|
|
@ -97,13 +96,12 @@ public:
|
|||
GaussianFactor::shared_ptr linearize(const Values& c) const;
|
||||
|
||||
/**
|
||||
* Creates an anti-factor directly and performs rekeying due to ordering
|
||||
* Creates an anti-factor directly
|
||||
*/
|
||||
GaussianFactor::shared_ptr negateToGaussian() const;
|
||||
|
||||
/**
|
||||
* Creates the equivalent anti-factor as another LinearContainerFactor,
|
||||
* so it remains independent of ordering.
|
||||
* Creates the equivalent anti-factor as another LinearContainerFactor.
|
||||
*/
|
||||
NonlinearFactor::shared_ptr negateToNonlinear() const;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue