Moves SensorCollator into sensor package. (#58)
							parent
							
								
									c2aed53ce8
								
							
						
					
					
						commit
						2eca021003
					
				|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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_
 | ||||||
|  | @ -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
 | ||||||
		Loading…
	
		Reference in New Issue