80 std::optional<libstp::map::WorldMap> tableMap = std::nullopt);
114 const Eigen::Vector3d& sigma);
116 void integrateObservationLocked(
const Observation& obs);
117 [[nodiscard]]
double computeParticleLogWeight(
const Particle& particle,
118 const Observation& obs)
const;
119 void normalizeWeightsLocked();
120 void resampleLocked();
121 void updateEstimateLocked();
124 std::shared_ptr<libstp::odometry::IOdometry> m_odometry;
125 LocalizationConfig m_config;
127 mutable std::mutex m_mutex;
129 libstp::foundation::Pose m_lastOdom{};
130 std::vector<Particle> m_particles;
131 bool m_initialized{
false};
133 std::optional<libstp::map::WorldMap> m_tableMap;
138 std::unique_ptr<LocalizationRecorder> m_recorder;
142 std::vector<Observation::SurfaceMeasurement> m_pendingObservations;
143 std::optional<libstp::foundation::Pose> m_pendingObservationPose;
144 std::optional<Eigen::Vector3d> m_pendingObservationSigma;
145 bool m_pendingObservationArrived{
false};
146 bool m_pendingResampled{
false};
147 std::optional<libstp::foundation::Pose> m_lastOdomDelta;