# cartographer/sensor/internal/collator.h ## Overview `Collator` synchronizes sensor data from multiple sensors using an `OrderedMultiQueue`, then dispatches to a `TrajectoryBuilderInterface`. Provides higher-level interface than `OrderedMultiQueue`. ## Class: `cartographer::sensor::Collator` ### Construction ```cpp Collator( const std::set& expected_sensor_ids, const std::function)>& callback); ``` ### Methods ```cpp // Add sensor data for a trajectory void AddSensorData(int trajectory_id, const std::string& sensor_id, std::unique_ptr data); // Mark trajectory as finished void FinishTrajectory(int trajectory_id); // Flush all pending data void Flush(); ``` ### Sensor IDs `expected_sensor_ids` defines valid sensor IDs for this collator: ```cpp std::set sensors = { {"rangefinder", "laser"}, {"imu", "imu"}, {"odometer", "odom"} }; ``` ## TrajectoryCollator Manages multiple `Collator` instances (one per trajectory): ```cpp class TrajectoryCollator { public: TrajectoryCollator( const std::function)>& callback); void AddTrajectory(int trajectory_id, const std::set& expected_sensor_ids); void AddSensorData(int trajectory_id, const std::string& sensor_id, std::unique_ptr data); void FinishTrajectory(int trajectory_id); void Flush(); }; ``` ## Usage ```cpp // In MapBuilder auto collator = std::make_unique(expected_sensors, [this](int traj_id, std::unique_ptr data) { trajectory_builders_[traj_id]->AddSensorData(data->GetSensorId(), std::move(data)); }); // From sensor driver collator->AddSensorData(traj_id, "laser", MakeDispatchable("laser", time, range_data)); collator->AddSensorData(traj_id, "imu", MakeDispatchable("imu", time, imu_data)); ``` ## Configuration Controlled by `MapBuilder` option: ```lua MAP_BUILDER = { collate_by_trajectory = false, -- Single collator for all trajectories } ``` - `false` — Single `Collator` for all trajectories - `true` — `TrajectoryCollator` with per-trajectory `Collator` ## See Also - [OrderedMultiQueue](ordered_multi_queue.md) — Underlying queue - [TrajectoryBuilderInterface](../../mapping/trajectory_builder_interface.md) — Receives collated data - [MapBuilder](../../mapping/map_builder.md) — Creates collator