# cartographer/mapping/map_builder_interface.h ## Overview `MapBuilderInterface` defines the abstract interface for the top-level SLAM system. Both the library implementation (`MapBuilder`) and RPC implementations (e.g., for distributed SLAM) implement this interface. ## Class: `cartographer::mapping::MapBuilderInterface` ### Types #### `LocalSlamResultCallback` ```cpp using LocalSlamResultCallback = TrajectoryBuilderInterface::LocalSlamResultCallback; ``` Callback invoked when local SLAM produces a result. Signature: ```cpp void(const TrajectoryBuilderInterface::LocalSlamResultData& data); ``` #### `SensorId` ```cpp using SensorId = TrajectoryBuilderInterface::SensorId; ``` Sensor identifier: `std::pair`. Types include `"rangefinder"`, `"imu"`, `"odometer"`, `"fixed_frame_pose"`, `"landmark"`. ### Pure Virtual Methods #### `AddTrajectoryBuilder` ```cpp virtual int AddTrajectoryBuilder( const std::set& expected_sensor_ids, const proto::TrajectoryBuilderOptions& trajectory_options, LocalSlamResultCallback local_slam_result_callback) = 0; ``` Creates a new trajectory for live SLAM. Returns trajectory ID. #### `AddTrajectoryForDeserialization` ```cpp virtual int AddTrajectoryForDeserialization( const proto::TrajectoryBuilderOptionsWithSensorIds& options_with_sensor_ids_proto) = 0; ``` Creates a trajectory placeholder for loading serialized state. #### `GetTrajectoryBuilder` ```cpp virtual mapping::TrajectoryBuilderInterface* GetTrajectoryBuilder( int trajectory_id) const = 0; ``` Returns trajectory builder or `nullptr` if none exists for this ID. #### `FinishTrajectory` ```cpp virtual void FinishTrajectory(int trajectory_id) = 0; ``` Marks trajectory as finished. No more sensor data accepted. #### `SubmapToProto` ```cpp virtual std::string SubmapToProto(const SubmapId& submap_id, proto::SubmapQuery::Response* response) = 0; ``` Fills submap data for visualization. #### `SerializeState` ```cpp virtual void SerializeState(bool include_unfinished_submaps, io::ProtoStreamWriterInterface* writer) = 0; ``` Serializes complete SLAM state to a proto stream. #### `SerializeStateToFile` ```cpp virtual bool SerializeStateToFile(bool include_unfinished_submaps, const std::string& filename) = 0; ``` Serializes to a file. Returns `true` on success. #### `LoadState` ```cpp virtual std::map LoadState( io::ProtoStreamReaderInterface* reader, bool load_frozen_state) = 0; ``` Loads state from a proto stream. Returns trajectory ID remapping. #### `LoadStateFromFile` ```cpp virtual std::map LoadStateFromFile( const std::string& filename, bool load_frozen_state) = 0; ``` Loads state from a file. Returns trajectory ID remapping. #### `num_trajectory_builders` ```cpp virtual int num_trajectory_builders() const = 0; ``` Returns the number of active trajectory builders. #### `pose_graph` ```cpp virtual mapping::PoseGraphInterface* pose_graph() = 0; ``` Returns the pose graph for global optimization access. #### `GetAllTrajectoryBuilderOptions` ```cpp virtual const std::vector& GetAllTrajectoryBuilderOptions() const = 0; ``` Returns options for all trajectories (used for serialization). ### Helper Function #### `CreateMapBuilderOptions` ```cpp proto::MapBuilderOptions CreateMapBuilderOptions( common::LuaParameterDictionary* const parameter_dictionary); ``` Creates `MapBuilderOptions` proto from a Lua parameter dictionary. Used to parse Lua configuration files into the protobuf format expected by `MapBuilder`. ## Implementation Notes - The interface is designed to support both in-process and RPC-based implementations. - All methods are pure virtual; derived classes must implement the full SLAM stack wiring. - The `SensorId` and `LocalSlamResultCallback` types are shared with `TrajectoryBuilderInterface` for consistency. ## See Also - [MapBuilder](map_builder.md) — Library implementation - [TrajectoryBuilderInterface](trajectory_builder_interface.md) — Local SLAM interface - [PoseGraphInterface](pose_graph_interface.md) — Global optimization interface - [MapBuilderBridge (cartographer_ros)](../../cartographer_ros/cartographer_ros/src/map_builder_bridge.cpp.md) — ROS wrapper around this interface