cartographer 更彻底的删除路径数据

直接code,这只是一部分,主要举个例子,作者只是删除了优化中的数据,但是在pose_graph中的数据并未删除,所以作者自己也说了 // TODO(gaschler): Consider directly deleting from data_, which may be more complete. 这里我们替他补充上,当让要补充的不止这一处,但是我认为这里是报错最莫名奇妙的地方,其他地方跟着改就是了,另外作者的所有路径使用vector容器,因为他还是单纯的slam思路,我这里也改成了map容器,因为工程上操作起来容易理解。

void PoseGraph2D::DeleteTrajectoriesIfNeeded() {
    
    
  TrimmingHandle trimming_handle(this);
  for (auto& it : data_.trajectories_state) {
    
    
    if (it.second.deletion_state ==
        InternalTrajectoryState::DeletionState::WAIT_FOR_DELETION) {
    
    
      // TODO(gaschler): Consider directly deleting from data_, which may be
      // more complete.
      auto submap_ids = trimming_handle.GetSubmapIds(it.first);
      for (auto& submap_id : submap_ids) {
    
    
        trimming_handle.TrimSubmap(submap_id);
        //
        data_.global_submap_poses_2d.Trim(submap_id);
      }
      //
      data_.trajectories_state.erase(it.first);
      data_.initial_trajectory_poses.erase(it.first);

      //it.second.state = TrajectoryState::DELETED;
      //it.second.deletion_state = InternalTrajectoryState::DeletionState::NORMAL;
    }
  }
  
}

猜你喜欢

转载自blog.csdn.net/windxf/article/details/110696393