map_builder_server.cc

map_builder_server.cc中注册了一大堆回调函数,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server_builder.RegisterHandler<handlers::GetLocalToGlobalTransformHandler>();

// get_local_to_global_transform_handler.cc 文件
void GetLocalToGlobalTransformHandler::OnRequest(
const proto::GetLocalToGlobalTransformRequest& request)
{
auto response = absl::make_unique<proto::GetLocalToGlobalTransformResponse>();
auto local_to_global =
GetContext<MapBuilderContextInterface>()
->map_builder()
.pose_graph()
->GetLocalToGlobalTransform(request.trajectory_id());
*response->mutable_local_to_global() = transform::ToProto(local_to_global);
Send(std::move(response));
}

GetLocalToGlobalTransform可用于获取local坐标系的原点

1
2
3
4
5
6
7
transform::Rigid3d PoseGraph2D::GetLocalToGlobalTransform(
const int trajectory_id) const
{
absl::MutexLock locker(&mutex_);
return ComputeLocalToGlobalTransform(data_.global_submap_poses_2d,
trajectory_id);
}

同样的还有 PoseGraph2D::GetAllSubmapPoses, PoseGraph2D::GetTrajectoryStates, PoseGraph2D::GetTrajectoryNodePoses, PoseGraph2D::GetLandmarkPoses(), PoseGraph2D::constraints()等等

cartographer\cartographer\cloud\internal\handlers目录有一堆文件,每个文件只定义了一个对应的回调函数,这个回调函数只在map_builder_server.cc中调用,最终是运行cartographer_grpc_server