Fix a bug in ExpressionFactor::initialize that changes the key ordering of factors derived from ExpressionFactor2. This impacts serialization and user expectation.
Example code:
Key key1 = 1, key2 = 2;
RangeFactorWithTransform factor(key2, key1,...); // keys_ should be {key2, key1}
After intialization, the bug will rearrange keys_ to an increasing order: keys_={key1, key2}.
release/4.3a0
parent
83eeb58c7a
commit
8149bffcb7
|
|
@ -158,7 +158,13 @@ protected:
|
|||
|
||||
// Get keys and dimensions for Jacobian matrices
|
||||
// An Expression is assumed unmutable, so we do this now
|
||||
if (keys_.empty())
|
||||
boost::tie(keys_, dims_) = expression_.keysAndDims();
|
||||
else {
|
||||
std::map<Key, int> map;
|
||||
expression_.dims(map);
|
||||
for (Key key : keys_) dims_.push_back(map[key]);
|
||||
}
|
||||
}
|
||||
|
||||
/// Recreate expression from keys_ and measured_, used in load below.
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@ typedef RangeFactor<Pose3, Point3> RangeFactor3D;
|
|||
typedef RangeFactorWithTransform<Pose2, Point2> RangeFactorWithTransform2D;
|
||||
typedef RangeFactorWithTransform<Pose3, Point3> RangeFactorWithTransform3D;
|
||||
|
||||
Key poseKey(1);
|
||||
Key pointKey(2);
|
||||
Key poseKey(2);
|
||||
Key pointKey(1);
|
||||
double measurement(10.0);
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
|
|
|||
Loading…
Reference in New Issue