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¶
Collator(
const std::set<TrajectoryBuilderInterface::SensorId>& expected_sensor_ids,
const std::function<void(int trajectory_id,
std::unique_ptr<Data>)>& callback);
Methods¶
// Add sensor data for a trajectory
void AddSensorData(int trajectory_id,
const std::string& sensor_id,
std::unique_ptr<Data> 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:
std::set<SensorId> sensors = {
{"rangefinder", "laser"},
{"imu", "imu"},
{"odometer", "odom"}
};
TrajectoryCollator¶
Manages multiple Collator instances (one per trajectory):
class TrajectoryCollator {
public:
TrajectoryCollator(
const std::function<void(int trajectory_id,
std::unique_ptr<Data>)>& callback);
void AddTrajectory(int trajectory_id,
const std::set<SensorId>& expected_sensor_ids);
void AddSensorData(int trajectory_id,
const std::string& sensor_id,
std::unique_ptr<Data> data);
void FinishTrajectory(int trajectory_id);
void Flush();
};
Usage¶
// In MapBuilder
auto collator = std::make_unique<Collator>(expected_sensors,
[this](int traj_id, std::unique_ptr<Data> 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:
MAP_BUILDER = {
collate_by_trajectory = false, -- Single collator for all trajectories
}
false— SingleCollatorfor all trajectoriestrue—TrajectoryCollatorwith per-trajectoryCollator
See Also¶
OrderedMultiQueue — Underlying queue
TrajectoryBuilderInterface — Receives collated data
MapBuilder — Creates collator