Moves SensorCollator into sensor package. (#58)

master
Damon Kohler 2016-10-17 10:18:17 +02:00 committed by GitHub
parent c2aed53ce8
commit 2eca021003
4 changed files with 58 additions and 58 deletions

View File

@ -91,18 +91,6 @@ google_library(mapping_probability_values
common_port common_port
) )
google_library(mapping_sensor_collator
USES_EIGEN
USES_GLOG
HDRS
sensor_collator.h
DEPENDS
common_make_unique
common_ordered_multi_queue
common_time
sensor_sensor_packet_period_histogram_builder
)
google_library(mapping_sparse_pose_graph google_library(mapping_sparse_pose_graph
USES_GLOG USES_GLOG
SRCS SRCS
@ -166,17 +154,6 @@ google_test(mapping_probability_values_test
mapping_probability_values mapping_probability_values
) )
google_test(mapping_sensor_collator_test
SRCS
sensor_collator_test.cc
DEPENDS
common_lua_parameter_dictionary_test_helpers
common_make_unique
common_time
mapping_sensor_collator
sensor_proto_sensor
)
google_test(mapping_sparse_pose_graph_test google_test(mapping_sparse_pose_graph_test
USES_GLOG USES_GLOG
SRCS SRCS

View File

@ -14,6 +14,18 @@
add_subdirectory("proto") add_subdirectory("proto")
google_library(sensor_collator
USES_EIGEN
USES_GLOG
HDRS
collator.h
DEPENDS
common_make_unique
common_ordered_multi_queue
common_time
sensor_sensor_packet_period_histogram_builder
)
google_library(sensor_compressed_point_cloud google_library(sensor_compressed_point_cloud
USES_EIGEN USES_EIGEN
SRCS SRCS
@ -102,6 +114,17 @@ google_library(sensor_voxel_filter
sensor_proto_adaptive_voxel_filter_options sensor_proto_adaptive_voxel_filter_options
) )
google_test(sensor_collator_test
SRCS
collator_test.cc
DEPENDS
common_lua_parameter_dictionary_test_helpers
common_make_unique
common_time
sensor_collator
sensor_proto_sensor
)
google_test(sensor_compressed_point_cloud_test google_test(sensor_compressed_point_cloud_test
SRCS SRCS
compressed_point_cloud_test.cc compressed_point_cloud_test.cc

View File

@ -14,8 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef CARTOGRAPHER_MAPPING_SENSOR_COLLATOR_H_ #ifndef CARTOGRAPHER_SENSOR_COLLATOR_H_
#define CARTOGRAPHER_MAPPING_SENSOR_COLLATOR_H_ #define CARTOGRAPHER_SENSOR_COLLATOR_H_
#include <functional> #include <functional>
#include <memory> #include <memory>
@ -32,32 +32,32 @@
#include "glog/logging.h" #include "glog/logging.h"
namespace cartographer { namespace cartographer {
namespace mapping { namespace sensor {
struct SensorCollatorQueueKey { struct CollatorQueueKey {
int trajectory_id; int trajectory_id;
string sensor_id; string sensor_id;
bool operator<(const SensorCollatorQueueKey& other) const { bool operator<(const CollatorQueueKey& other) const {
return std::forward_as_tuple(trajectory_id, sensor_id) < return std::forward_as_tuple(trajectory_id, sensor_id) <
std::forward_as_tuple(other.trajectory_id, other.sensor_id); std::forward_as_tuple(other.trajectory_id, other.sensor_id);
} }
}; };
inline std::ostream& operator<<(std::ostream& out, inline std::ostream& operator<<(std::ostream& out,
const SensorCollatorQueueKey& key) { const CollatorQueueKey& key) {
return out << '(' << key.trajectory_id << ", " << key.sensor_id << ')'; return out << '(' << key.trajectory_id << ", " << key.sensor_id << ')';
} }
template <typename SensorDataType> template <typename SensorDataType>
class SensorCollator { class Collator {
public: public:
using Callback = std::function<void(int64, std::unique_ptr<SensorDataType>)>; using Callback = std::function<void(int64, std::unique_ptr<SensorDataType>)>;
SensorCollator() {} Collator() {}
SensorCollator(const SensorCollator&) = delete; Collator(const Collator&) = delete;
SensorCollator& operator=(const SensorCollator&) = delete; Collator& operator=(const Collator&) = delete;
// Adds a trajectory to produce sorted sensor output for. Calls 'callback' // Adds a trajectory to produce sorted sensor output for. Calls 'callback'
// for each collated sensor data. // for each collated sensor data.
@ -65,7 +65,7 @@ class SensorCollator {
const std::unordered_set<string>& expected_sensor_ids, const std::unordered_set<string>& expected_sensor_ids,
const Callback callback) { const Callback callback) {
for (const auto& sensor_id : expected_sensor_ids) { for (const auto& sensor_id : expected_sensor_ids) {
const auto queue_key = SensorCollatorQueueKey{trajectory_id, sensor_id}; const auto queue_key = CollatorQueueKey{trajectory_id, sensor_id};
queue_.AddQueue(queue_key, [callback](std::unique_ptr<Value> value) { queue_.AddQueue(queue_key, [callback](std::unique_ptr<Value> value) {
callback(value->timestamp, std::move(value->sensor_data)); callback(value->timestamp, std::move(value->sensor_data));
}); });
@ -89,7 +89,7 @@ class SensorCollator {
sensor_packet_period_histogram_builder_.Add(trajectory_id, timestamp, sensor_packet_period_histogram_builder_.Add(trajectory_id, timestamp,
sensor_id); sensor_id);
queue_.Add( queue_.Add(
SensorCollatorQueueKey{trajectory_id, sensor_id}, timestamp, CollatorQueueKey{trajectory_id, sensor_id}, timestamp,
common::make_unique<Value>(Value{timestamp, std::move(sensor_data)})); common::make_unique<Value>(Value{timestamp, std::move(sensor_data)}));
} }
@ -117,15 +117,15 @@ class SensorCollator {
}; };
// Queue keys are a pair of trajectory ID and sensor identifier. // Queue keys are a pair of trajectory ID and sensor identifier.
common::OrderedMultiQueue<SensorCollatorQueueKey, int64, Value> queue_; common::OrderedMultiQueue<CollatorQueueKey, int64, Value> queue_;
// Map of trajectory ID to all associated QueueKeys. // Map of trajectory ID to all associated QueueKeys.
std::unordered_map<int, std::vector<SensorCollatorQueueKey>> queue_keys_; std::unordered_map<int, std::vector<CollatorQueueKey>> queue_keys_;
sensor::SensorPacketPeriodHistogramBuilder sensor::SensorPacketPeriodHistogramBuilder
sensor_packet_period_histogram_builder_; sensor_packet_period_histogram_builder_;
}; };
} // namespace mapping } // namespace sensor
} // namespace cartographer } // namespace cartographer
#endif // CARTOGRAPHER_MAPPING_SENSOR_COLLATOR_H_ #endif // CARTOGRAPHER_SENSOR_COLLATOR_H_

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
#include "cartographer/mapping/sensor_collator.h" #include "cartographer/sensor/collator.h"
#include <memory> #include <memory>
@ -25,14 +25,14 @@
#include "gtest/gtest.h" #include "gtest/gtest.h"
namespace cartographer { namespace cartographer {
namespace mapping { namespace sensor {
namespace { namespace {
struct TestData { struct TestData {
string frame_id; string frame_id;
}; };
TEST(SensorCollator, Ordering) { TEST(Collator, Ordering) {
TestData first{"horizontal_laser"}; TestData first{"horizontal_laser"};
TestData second{"vertical_laser"}; TestData second{"vertical_laser"};
TestData third{"imu"}; TestData third{"imu"};
@ -43,25 +43,25 @@ TEST(SensorCollator, Ordering) {
const std::unordered_set<string> frame_ids = { const std::unordered_set<string> frame_ids = {
"horizontal_laser", "vertical_laser", "imu", "something"}; "horizontal_laser", "vertical_laser", "imu", "something"};
std::vector<std::pair<int64, TestData>> received; std::vector<std::pair<int64, TestData>> received;
SensorCollator<TestData> sensor_collator; Collator<TestData> collator;
sensor_collator.AddTrajectory( collator.AddTrajectory(
0, frame_ids, 0, frame_ids,
[&received](const int64 timestamp, std::unique_ptr<TestData> packet) { [&received](const int64 timestamp, std::unique_ptr<TestData> packet) {
received.push_back(std::make_pair(timestamp, *packet)); received.push_back(std::make_pair(timestamp, *packet));
}); });
sensor_collator.AddSensorData(0, 100, first.frame_id, collator.AddSensorData(0, 100, first.frame_id,
common::make_unique<TestData>(first)); common::make_unique<TestData>(first));
sensor_collator.AddSensorData(0, 600, sixth.frame_id, collator.AddSensorData(0, 600, sixth.frame_id,
common::make_unique<TestData>(sixth)); common::make_unique<TestData>(sixth));
sensor_collator.AddSensorData(0, 400, fourth.frame_id, collator.AddSensorData(0, 400, fourth.frame_id,
common::make_unique<TestData>(fourth)); common::make_unique<TestData>(fourth));
sensor_collator.AddSensorData(0, 200, second.frame_id, collator.AddSensorData(0, 200, second.frame_id,
common::make_unique<TestData>(second)); common::make_unique<TestData>(second));
sensor_collator.AddSensorData(0, 500, fifth.frame_id, collator.AddSensorData(0, 500, fifth.frame_id,
common::make_unique<TestData>(fifth)); common::make_unique<TestData>(fifth));
sensor_collator.AddSensorData(0, 300, third.frame_id, collator.AddSensorData(0, 300, third.frame_id,
common::make_unique<TestData>(third)); common::make_unique<TestData>(third));
EXPECT_EQ(3, received.size()); EXPECT_EQ(3, received.size());
EXPECT_EQ(100, received[0].first); EXPECT_EQ(100, received[0].first);
@ -71,7 +71,7 @@ TEST(SensorCollator, Ordering) {
EXPECT_EQ(300, received[2].first); EXPECT_EQ(300, received[2].first);
EXPECT_EQ("imu", received[2].second.frame_id); EXPECT_EQ("imu", received[2].second.frame_id);
sensor_collator.Flush(); collator.Flush();
ASSERT_EQ(6, received.size()); ASSERT_EQ(6, received.size());
EXPECT_EQ("horizontal_laser", received[3].second.frame_id); EXPECT_EQ("horizontal_laser", received[3].second.frame_id);
@ -82,5 +82,5 @@ TEST(SensorCollator, Ordering) {
} }
} // namespace } // namespace
} // namespace mapping } // namespace sensor
} // namespace cartographer } // namespace cartographer