MCPcopy Create free account
hub / github.com/AutonomousFieldRoboticsLab/SVIn / updateGlobalMap

Method updateGlobalMap

pose_graph/src/pose_graph/LoopClosure.cpp:251–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

249}
250
251void LoopClosure::updateGlobalMap() {
252 for (auto point_landmark_map : global_map_->getMapPoints()) {
253 uint64_t landmark_id = point_landmark_map.first;
254 Landmark point_landmark = point_landmark_map.second;
255
256 Eigen::Vector3d point_3d = Eigen::Vector3d::Zero();
257 Eigen::Vector3d color = Eigen::Vector3d::Zero();
258 double quality = 0.0;
259 uint64_t total_observations = 0;
260 for (auto kf_observation : point_landmark.keyframe_observations_) {
261 uint64_t kf_id = kf_observation.first;
262 Observation obs = kf_observation.second;
263 Eigen::Vector3d local_pos = obs.local_pos_;
264 double kf_quality = obs.quality_;
265
266 // Converting to global coordinates
267 if (kfMapper_.find(kf_id) == kfMapper_.end()) {
268 LOG(WARNING) << "Keyframe not found";
269 continue;
270 }
271
272 Keyframe* kf = kfMapper_.find(kf_id)->second;
273 Eigen::Matrix3d R_kf_w;
274 Eigen::Vector3d T_kf_w;
275 kf->getPose(T_kf_w, R_kf_w);
276
277 Eigen::Vector3d global_pos = R_kf_w * local_pos + T_kf_w;
278 point_3d = point_3d + global_pos * kf_quality;
279 color = color + obs.color_ * kf_quality;
280 quality = quality + kf_quality;
281 total_observations += 1;
282 }
283
284 point_3d = point_3d / quality;
285 color = color / quality;
286 quality = quality / total_observations;
287
288 global_map_->updateLandmark(landmark_id, point_3d, quality, color);
289 }
290}
291
292// void LoopClosure::updatePrimiteEstimatorTrajectory(const nav_msgs::OdometryConstPtr& pose_msg) {
293// geometry_msgs::PoseStamped pose_stamped;

Callers

nothing calls this directly

Calls 3

getMapPointsMethod · 0.80
getPoseMethod · 0.80
updateLandmarkMethod · 0.80

Tested by

no test coverage detected