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);
150 const
SensorId sensorIdLaser{SensorId::SensorType::RANGE,
"laser"};
151 const SensorId sensorIdIMU{SensorId::SensorType::IMU,
"imu"};
152 const SensorId sensorIdOdom{SensorId::SensorType::ODOMETRY,
"odom"};
154 const LaserScannerSensor& lookupSensor(
const std::string& device)
const;
156 void getLocalSlamResultCallback(
158 const ::cartographer::common::Time ,
159 const ::cartographer::transform::Rigid3d localPose,
160 ::cartographer::sensor::RangeData rangeDataInLocal,
161 const std::unique_ptr<
162 const ::cartographer::mapping::TrajectoryBuilderInterface::InsertionResult>
165 std::unique_ptr<::cartographer::mapping::MapBuilderInterface> mapBuilder;
167 std::map<std::string, int64_t> lastSensorDataTimestamp;
168 std::optional<std::int64_t> lastOdomTimestamp;
170 std::optional<std::int64_t> lastLaserScannerInsertCartoTimestamp;
176 std::filesystem::path mapPath;
178 std::set<SensorId> sensorSet;
180 SlamDataCallable& slamDataCallable;
182 ::cartographer::mapping::proto::TrajectoryBuilderOptions trajectoryBuilderOptions;
184 mutable std::mutex cartoInsertMtx;
186 std::unique_ptr<ApproximateTimeQueue> approxTimeQueue;
188 std::unordered_map<std::string, LaserScannerSensor> laserSensorMap;
190 std::optional<FrequencyReporter> cartographerInputDataReporterLaserScanner;
191 std::optional<FrequencyReporter> cartographerInputDataReporterOdometry;
193 mutable std::optional<DebugObserverHelper> debugObserverHelper;
194 mutable std::mutex debugObserverHelperMtx;
196 struct DebugObserverScopedTimer
200 ~DebugObserverScopedTimer();
CartographerAdapter(const std::filesystem::path &mapPath, const std::filesystem::path &configPath, SlamDataCallable &slamDataCallable, const Config &config, const std::optional< std::filesystem::path > &mapToLoad=std::nullopt, const std::optional< Eigen::Isometry3f > &map_T_robot_prior=std::nullopt, const DebugObserverInterfacePrx &debugObserver=nullptr)