Skip to content

Commit 3c0f6c0

Browse files
committed
Option to add offset when retracting to 3D poses
1 parent a991ca0 commit 3c0f6c0

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

cpp/include/distributed_mapper/distributed_mapper.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,11 @@ class DistributedMapper{
311311
initial_ = evaluation_utils::retractPose3Global(initial_, linearized_poses_);
312312
}
313313

314+
/** @brief retractPose3Global performs global retraction using linearizedPoses and initial */
315+
void retractPose3GlobalWithOffset(const gtsam::Point3& offset){
316+
initial_ = evaluation_utils::retractPose3GlobalWithOffset(initial_, linearized_poses_, offset);
317+
}
318+
314319
/** @brief linearizedRotationAt returns the current rotation estimate at sym */
315320
gtsam::Vector linearizedRotationAt(const gtsam::Key& key){ return linearized_rotation_.at(key); }
316321

cpp/include/distributed_mapper/evaluation_utils.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ namespace distributed_mapper{
109109
*/
110110
gtsam::Values retractPose3Global(const gtsam::Values& initial, const gtsam::VectorValues& delta);
111111

112+
/**
113+
* @brief retractPose3Global adds delta to initial in global frame with offset
114+
*/
115+
gtsam::Values retractPose3GlobalWithOffset(const gtsam::Values& initial, const gtsam::VectorValues& delta, const gtsam::Point3& offset);
116+
112117
/**
113118
* @brief buildLinearOrientationGraph generates a linear orientation graph given the nonlinear factor graph and uses the between noise
114119
*/

cpp/src/distributed_mapper/evaluation_utils.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,20 @@ namespace evaluation_utils{
9898
return estimate;
9999
}
100100

101+
//*****************************************************************************
102+
Values retractPose3GlobalWithOffset(const Values& initial, const VectorValues& delta, const gtsam::Point3& offset) {
103+
Values estimate;
104+
for (const Values::ConstKeyValuePair &key_value: initial) {
105+
Key key = key_value.key;
106+
Vector6 delta_pose = delta.at(key);
107+
Rot3 R = initial.at<Pose3>(key).rotation().retract(delta_pose.head(3));
108+
Point3 t_initial = initial.at<Pose3>(key).translation();
109+
Point3 t = Point3(delta_pose.tail(3)) + offset;
110+
estimate.insert(key, Pose3(R, t));
111+
}
112+
return estimate;
113+
}
114+
101115
//*****************************************************************************
102116
pair<vector<NonlinearFactorGraph>, vector<Values> >
103117
loadSubgraphs(const size_t& num_subgraphs, const string& data_path) {

0 commit comments

Comments
 (0)