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