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 — AddLandmarkData accepts landmark observations.

  • Optimization — The pose graph accumulates LandmarkNodes (a landmark’s global pose estimate and per-trajectory observations). During OptimizationProblemInterface::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::LandmarkData in serialization.proto; optimized landmark poses are stored in the pose graph (proto::PoseGraph::LandmarkPose).

See Also