diff --git a/cartographer/sensor/CMakeLists.txt b/cartographer/sensor/CMakeLists.txt index 9320efa..cc380ed 100644 --- a/cartographer/sensor/CMakeLists.txt +++ b/cartographer/sensor/CMakeLists.txt @@ -15,13 +15,11 @@ add_subdirectory("proto") google_library(sensor_collator - USES_EIGEN - USES_GLOG + SRCS + collator.cc HDRS collator.h DEPENDS - common_make_unique - common_time sensor_data sensor_ordered_multi_queue ) diff --git a/cartographer/sensor/collator.cc b/cartographer/sensor/collator.cc new file mode 100644 index 0000000..d8b9e3c --- /dev/null +++ b/cartographer/sensor/collator.cc @@ -0,0 +1,50 @@ +/* + * Copyright 2016 The Cartographer Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cartographer/sensor/collator.h" + +namespace cartographer { +namespace sensor { + +void Collator::AddTrajectory( + const int trajectory_id, + const std::unordered_set& expected_sensor_ids, + const Callback callback) { + for (const auto& sensor_id : expected_sensor_ids) { + const auto queue_key = QueueKey{trajectory_id, sensor_id}; + queue_.AddQueue(queue_key, + [callback, sensor_id](std::unique_ptr data) { + callback(sensor_id, std::move(data)); + }); + queue_keys_[trajectory_id].push_back(queue_key); + } +} + +void Collator::FinishTrajectory(const int trajectory_id) { + for (const auto& queue_key : queue_keys_[trajectory_id]) { + queue_.MarkQueueAsFinished(queue_key); + } +} + +void Collator::AddSensorData(const int trajectory_id, const string& sensor_id, + std::unique_ptr data) { + queue_.Add(QueueKey{trajectory_id, sensor_id}, std::move(data)); +} + +void Collator::Flush() { queue_.Flush(); } + +} // namespace sensor +} // namespace cartographer diff --git a/cartographer/sensor/collator.h b/cartographer/sensor/collator.h index d28e898..627aaef 100644 --- a/cartographer/sensor/collator.h +++ b/cartographer/sensor/collator.h @@ -21,15 +21,10 @@ #include #include #include -#include +#include -#include "Eigen/Core" -#include "Eigen/Geometry" -#include "cartographer/common/make_unique.h" -#include "cartographer/common/time.h" #include "cartographer/sensor/data.h" #include "cartographer/sensor/ordered_multi_queue.h" -#include "glog/logging.h" namespace cartographer { namespace sensor { @@ -45,37 +40,22 @@ class Collator { // Adds a trajectory to produce sorted sensor output for. Calls 'callback' // for each collated sensor data. - void AddTrajectory(const int trajectory_id, + void AddTrajectory(int trajectory_id, const std::unordered_set& expected_sensor_ids, - const Callback callback) { - for (const auto& sensor_id : expected_sensor_ids) { - const auto queue_key = QueueKey{trajectory_id, sensor_id}; - queue_.AddQueue(queue_key, - [callback, sensor_id](std::unique_ptr data) { - callback(sensor_id, std::move(data)); - }); - queue_keys_[trajectory_id].push_back(queue_key); - } - } + Callback callback); // Marks 'trajectory_id' as finished. - void FinishTrajectory(const int trajectory_id) { - for (const auto& queue_key : queue_keys_[trajectory_id]) { - queue_.MarkQueueAsFinished(queue_key); - } - } + void FinishTrajectory(int trajectory_id); // Adds 'data' for 'trajectory_id' to be collated. 'data' must contain valid // sensor data. Sensor packets with matching 'sensor_id' must be added in time // order. - void AddSensorData(const int trajectory_id, const string& sensor_id, - std::unique_ptr data) { - queue_.Add(QueueKey{trajectory_id, sensor_id}, std::move(data)); - } + void AddSensorData(int trajectory_id, const string& sensor_id, + std::unique_ptr data); // Dispatches all queued sensor packets. May only be called once. // AddSensorData may not be called after Flush. - void Flush() { queue_.Flush(); } + void Flush(); private: // Queue keys are a pair of trajectory ID and sensor identifier.