在C++ Cartographer源码中,MapBuilder模块的声明与构造均源于同一文件map_builder.h。这个文件定义了MapBuilder类,是生成地图的核心类之一,因为它将传递的轨迹数据和传感器数据相融合,生成完整的地图。下面展示了MapBuilder类的声明:
class MapBuilder {
public:
...
void LoadMap(const std::string& map_filename);
void SerializeState(const std::string& filename);
std::unique_ptr<MapBuilderInterface> map_builder_;
...
};
MapBuilder类有许多成员函数,这里展示LoadMap()和SerializeState()方法的声明。LoadMap()可以从文件中加载地图。SerializeState()方法可以将所有地图的状态序列化并保存到文件中。
不过,这里的关键不在于MapBuilder类的成员函数,而是在于这个类的成员变量map_builder_。在代码中,MapBuilderInterface是一个抽象基类。MapBuilder需要一个实现了MapBuilderInterface的派生类,在它的构造函数中初始化map_builder_变量。
下面显示了MapBuilder的构造函数和以下示例:
MapBuilder::MapBuilder(const proto::MapBuilderOptions& options,
SparsePoseGraph* const sparse_pose_graph)
: options_(options), sparse_pose_graph_(sparse_pose_graph) {
map_builder_ = absl::make_unique<MapBuilderImpl>(options_, sparse_pose_graph_);
}
- 示例1: 初始化MapBuilder
proto::MapBuilderOptions map_builder_options;
...
MapBuilder map_builder(map_builder_options, &sparse_pose_graph);
在这个示例中,MapBuilder实例被初始化,并且将选项和稀疏位姿图传递给了MapBuilderImpl类的对象,MapBuilderInterface的实现类。
- 示例2: 调用MapBuilder的成员函数
std::string map_file;
...
map_builder.LoadMap(map_file);
map_builder.SerializeState("map_builder_state.pb");
在这个示例中,MapBuilder实例用LoadMap()方法加载地图,并使用SerializeState()方法将地图的状态序列化为一个文件。这些功能是通过map_builder_成员变量来实现的,它初始化为一个MapBuilderImpl对象。
总之,MapBuilder的构造和成员变量map_builder_的初始化是非常重要的,因为它需要一个MapBuilderInterface的实现类来实现地图生成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ Cartographer源码中关于MapBuilder的声明与构造 - Python技术站