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地图自动定时更新,初版的主要内容,如果未能解决你的问题,请参考以下文章