cartographer地图自动定时更新,初版

Posted Hill_LAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cartographer地图自动定时更新,初版相关的知识,希望对你有一定的参考价值。

我是怀着激动的心情写这篇博客的,之前写了一个接口自动比较新老地图,然后在某个位置自动更新地图,测试结果还算满意。更新匹配的非常好,已经平稳运行3天,在更新的地方有些地图偏移,但偏移很小不影响运行。cartographer给你点个赞!
这篇博客的目的是,写一个定时器,让程序间隔一段时间自动更新(就不需要在某个地方停下来,单独更新地图),在程序里为了不影响主程序运行,这里需要拷贝一份地图数据用于更新线程,拷贝部分已经写完,测试成功,主要代码如下

void PoseGraph2D::TrimmingHandle::CopyPoseGraphDataForUpdate() {
  // copy submap_date

  parent_->data_update_.submap_data.Clear();

  for (auto item : parent_->data_.submap_data) {
    parent_->data_update_.submap_data.Insert(item.id, item.data);
  }

  // copy global_submap_poses_2d
  parent_->data_update_.global_submap_poses_2d.Clear();
  for (auto item : parent_->data_.global_submap_poses_2d) {
    parent_->data_update_.global_submap_poses_2d.Insert(item.id, item.data);
  }

  // copy trajectory_nodes
  parent_->data_update_.trajectory_nodes.Clear();
  for (auto item : parent_->data_.trajectory_nodes) {
    parent_->data_update_.trajectory_nodes.Insert(item.id, item.data);
  }

  // copy num_trajectory_nodes
  parent_->data_update_.num_trajectory_nodes = 0;
  parent_->data_update_.num_trajectory_nodes =
      parent_->data_.num_trajectory_nodes;

  //copy landmark_nodes
  parent_->data_update_.landmark_nodes.clear();
  parent_->data_update_.landmark_nodes = parent_->data_.landmark_nodes;

  // copy trajectories_state
  parent_->data_update_.trajectories_state.clear();
  parent_->data_update_.trajectories_state = parent_->data_.trajectories_state;

  // copy initial_trajectory_poses
  parent_->data_update_.initial_trajectory_poses.clear();
  parent_->data_update_.initial_trajectory_poses =
      parent_->data_.initial_trajectory_poses;

  // copy constraints;
  parent_->data_update_.constraints.clear();
  parent_->data_update_.constraints = parent_->data_.constraints;

  return;
}

这里 parent_->data_update_.submap_data.Clear();的Clear函数要手动实现

  void Clear(){

    for(auto item : trajectories_)
    {
      item.second.data_.clear();
    }

    trajectories_.clear();
  }

其他地方相应修改,还是有一些地方要改的,后续增加定时器版本再来更新!

以上是关于cartographer地图自动定时更新,初版的主要内容,如果未能解决你的问题,请参考以下文章

cartographer自动更新地图 初探

导航的时候自动更新地图的思路,附使用cartographer的解决方案

cartographer导航的时候更新地图

cartographer保存地图

Cartographer系列之四——地图文件导出

Rplidar学习—— rplidar使用cartographer_ros进行地图云生成