32 #include <Eigen/Geometry>
34 #include <opencv2/core/mat.hpp>
37 #include <ArmarXCore/interface/observers/ObserverInterface.h>
41 #include <RobotAPI/interface/units/LaserScannerUnit.h>
46 #include <cartographer/mapping/trajectory_builder_interface.h>
50 class MapBuilderInterface;
60 class ApproximateTimeQueue;
85 const std::filesystem::path& mapPath,
86 const std::filesystem::path& configPath,
89 const std::optional<std::filesystem::path>& mapToLoad = std::nullopt,
90 const std::optional<Eigen::Isometry3f>& map_T_robot_prior = std::nullopt,
101 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
111 using SensorId = ::cartographer::mapping::TrajectoryBuilderInterface::SensorId;
121 return pose.translation();
133 void setSensorPose(
const std::string& sensorId,
const Eigen::Isometry3f& pose);
149 void pushInLaserData(
const std::vector<LaserMessage>& laserMessages);
152 const SensorId sensorIdLaser{SensorId::SensorType::RANGE,
"laser"};
153 const SensorId sensorIdIMU{SensorId::SensorType::IMU,
"imu"};
154 const SensorId sensorIdOdom{SensorId::SensorType::ODOMETRY,
"odom"};
156 const LaserScannerSensor& lookupSensor(
const std::string& device)
const;
158 void getLocalSlamResultCallback(
161 const ::cartographer::transform::Rigid3d localPose,
162 ::cartographer::sensor::RangeData rangeDataInLocal,
163 const std::unique_ptr<
164 const ::cartographer::mapping::TrajectoryBuilderInterface::InsertionResult>
167 std::unique_ptr<::cartographer::mapping::MapBuilderInterface> mapBuilder;
169 std::map<std::string, int64_t> lastSensorDataTimestamp;
170 std::optional<std::int64_t> lastOdomTimestamp;
172 std::optional<std::int64_t> lastLaserScannerInsertCartoTimestamp;
178 std::filesystem::path mapPath;
180 std::set<SensorId> sensorSet;
182 SlamDataCallable& slamDataCallable;
184 ::cartographer::mapping::proto::TrajectoryBuilderOptions trajectoryBuilderOptions;
186 mutable std::mutex cartoInsertMtx;
188 std::unique_ptr<ApproximateTimeQueue> approxTimeQueue;
190 std::unordered_map<std::string, LaserScannerSensor> laserSensorMap;
192 std::optional<FrequencyReporter> cartographerInputDataReporterLaserScanner;
193 std::optional<FrequencyReporter> cartographerInputDataReporterOdometry;
195 mutable std::optional<DebugObserverHelper> debugObserverHelper;
196 mutable std::mutex debugObserverHelperMtx;
198 struct DebugObserverScopedTimer
202 ~DebugObserverScopedTimer();