cartographer/sensor/landmark_data.h¶
Overview¶
LandmarkData carries observations of fixed landmarks (visual fiducials, AprilTags, or similar) observed in the tracking frame. Each observation relates a named landmark to the robot pose with confidence weights, enabling the global optimization to anchor the map to real-world landmarks.
Structs¶
LandmarkObservation¶
struct LandmarkObservation {
std::string id;
transform::Rigid3d landmark_to_tracking_transform;
double translation_weight;
double rotation_weight;
};
id— Name of the observed landmark.landmark_to_tracking_transform— Estimated pose of the landmark in the tracking frame at observation time.translation_weight— Confidence of the translational part of the observation.rotation_weight— Confidence of the rotational part of the observation.
LandmarkData¶
struct LandmarkData {
common::Time time;
std::vector<LandmarkObservation> landmark_observations;
};
Serialization¶
proto::LandmarkData ToProto(const LandmarkData& landmark_data);
LandmarkData FromProto(const proto::LandmarkData& proto);
proto::LandmarkData (defined in sensor/proto/sensor.proto) stores the timestamp and repeated observations:
message LandmarkData {
int64 timestamp = 1;
repeated LandmarkObservation landmark_observations = 2;
}
Usage¶
sensor::LandmarkObservation observation{
"landmark_1", landmark_to_tracking, translation_weight, rotation_weight};
sensor::LandmarkData landmark_data{time, {observation}};
trajectory_builder->AddLandmarkData(sensor_id, landmark_data);
Role in the SLAM Pipeline¶
Trajectory builder interface —
AddLandmarkDataaccepts landmark observations.Optimization — The pose graph accumulates
LandmarkNodes (a landmark’s global pose estimate and per-trajectory observations). DuringOptimizationProblemInterface::Solve, landmark data is used to jointly optimize the global poses of landmarks and nodes, with the weights controlling how strongly each observation pulls the solution.Serialization — landmark data is stored per-trajectory in the serialization format via
proto::LandmarkDatainserialization.proto; optimized landmark poses are stored in the pose graph (proto::PoseGraph::LandmarkPose).
See Also¶
Data — Base class and
DispatchablewrappingFixedFramePoseData — Alternative absolute reference (GPS-style)
OptimizationProblemInterface — Consumes landmark observations
PoseGraphInterface — Defines
LandmarkNode