Clean up. (#266)
Move trajectory builder options. Remove the barely used Interval template. Inline the remaining CMakeLists.txt subdirectories.master
parent
522b37979a
commit
9194c8679b
|
@ -84,7 +84,15 @@ set_source_files_properties(${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS} PROPERTIES GENER
|
||||||
list(APPEND ALL_SRCS ${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS})
|
list(APPEND ALL_SRCS ${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS})
|
||||||
|
|
||||||
add_library(${PROJECT_NAME} ${ALL_SRCS})
|
add_library(${PROJECT_NAME} ${ALL_SRCS})
|
||||||
add_subdirectory("cartographer")
|
|
||||||
|
configure_file(
|
||||||
|
${PROJECT_SOURCE_DIR}/cartographer/common/config.h.cmake
|
||||||
|
${PROJECT_BINARY_DIR}/cartographer/common/config.h)
|
||||||
|
|
||||||
|
google_binary(cartographer_compute_relations_metrics
|
||||||
|
SRCS
|
||||||
|
cartographer/ground_truth/compute_relations_metrics_main.cc
|
||||||
|
)
|
||||||
|
|
||||||
foreach(ABS_FIL ${ALL_TESTS})
|
foreach(ABS_FIL ${ALL_TESTS})
|
||||||
file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${ABS_FIL})
|
file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${ABS_FIL})
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
# 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.
|
|
||||||
|
|
||||||
add_subdirectory("common")
|
|
||||||
add_subdirectory("ground_truth")
|
|
|
@ -1,17 +0,0 @@
|
||||||
# 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.
|
|
||||||
|
|
||||||
configure_file (
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
|
|
@ -58,5 +58,6 @@ TEST(ConfigurationFilesTest, ValidateTrajectoryBuilderOptions) {
|
||||||
&lua_parameter_dictionary);
|
&lua_parameter_dictionary);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace cartographer_ros
|
} // namespace cartographer_ros
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CARTOGRAPHER_COMMON_INTERVAL_H_
|
|
||||||
#define CARTOGRAPHER_COMMON_INTERVAL_H_
|
|
||||||
|
|
||||||
namespace cartographer {
|
|
||||||
namespace common {
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct Interval {
|
|
||||||
T start;
|
|
||||||
T end;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace common
|
|
||||||
} // namespace cartographer
|
|
||||||
|
|
||||||
#endif // CARTOGRAPHER_COMMON_INTERVAL_H_
|
|
|
@ -1,18 +0,0 @@
|
||||||
# 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.
|
|
||||||
|
|
||||||
google_binary(cartographer_compute_relations_metrics
|
|
||||||
SRCS
|
|
||||||
compute_relations_metrics_main.cc
|
|
||||||
)
|
|
|
@ -120,11 +120,10 @@ void WritePng(const PixelDataMatrix& mat, FileWriter* const file_writer) {
|
||||||
CHECK(file_writer->Close());
|
CHECK(file_writer->Close());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ContainedIn(
|
bool ContainedIn(const common::Time& time,
|
||||||
const common::Time& time,
|
const std::vector<mapping::Timespan>& timespans) {
|
||||||
const std::vector<common::Interval<common::Time>>& time_intervals) {
|
for (const mapping::Timespan& timespan : timespans) {
|
||||||
for (const auto& interval : time_intervals) {
|
if (timespan.start <= time && time <= timespan.end) {
|
||||||
if (interval.start <= time && time <= interval.end) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,14 +39,15 @@ constexpr double kMaxShortSpanLengthMeters = 25.;
|
||||||
constexpr double kLevelHeightMeters = 2.5;
|
constexpr double kLevelHeightMeters = 2.5;
|
||||||
constexpr double kMinLevelSeparationMeters = 1.0;
|
constexpr double kMinLevelSeparationMeters = 1.0;
|
||||||
|
|
||||||
// Indices into 'trajectory.node', so that index.start <= i < index.end.
|
// Indices into 'trajectory.node', so that 'start_index' <= i < 'end_index'.
|
||||||
struct Span {
|
struct Span {
|
||||||
common::Interval<int> index;
|
int start_index;
|
||||||
|
int end_index;
|
||||||
std::vector<double> z_values;
|
std::vector<double> z_values;
|
||||||
|
|
||||||
bool operator<(const Span& other) const {
|
bool operator<(const Span& other) const {
|
||||||
return std::forward_as_tuple(index.start, index.end) <
|
return std::forward_as_tuple(start_index, end_index) <
|
||||||
std::forward_as_tuple(other.index.start, other.index.end);
|
std::forward_as_tuple(other.start_index, other.end_index);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -81,15 +82,15 @@ std::vector<Span> SliceByAltitudeChange(const proto::Trajectory& trajectory) {
|
||||||
CHECK_GT(trajectory.node_size(), 0);
|
CHECK_GT(trajectory.node_size(), 0);
|
||||||
|
|
||||||
std::vector<Span> spans;
|
std::vector<Span> spans;
|
||||||
spans.push_back(Span{{0, 0}, {trajectory.node(0).pose().translation().z()}});
|
spans.push_back(Span{0, 0, {trajectory.node(0).pose().translation().z()}});
|
||||||
for (int i = 1; i < trajectory.node_size(); ++i) {
|
for (int i = 1; i < trajectory.node_size(); ++i) {
|
||||||
const auto& node = trajectory.node(i);
|
const auto& node = trajectory.node(i);
|
||||||
const double z = node.pose().translation().z();
|
const double z = node.pose().translation().z();
|
||||||
if (std::abs(Median(spans.back().z_values) - z) > kLevelHeightMeters) {
|
if (std::abs(Median(spans.back().z_values) - z) > kLevelHeightMeters) {
|
||||||
spans.push_back(Span{{i, i}, {}});
|
spans.push_back(Span{i, i, {}});
|
||||||
}
|
}
|
||||||
InsertSorted(z, &spans.back().z_values);
|
InsertSorted(z, &spans.back().z_values);
|
||||||
spans.back().index.end = i + 1;
|
spans.back().end_index = i + 1;
|
||||||
}
|
}
|
||||||
return spans;
|
return spans;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +98,7 @@ std::vector<Span> SliceByAltitudeChange(const proto::Trajectory& trajectory) {
|
||||||
// Returns the length of 'span' in meters.
|
// Returns the length of 'span' in meters.
|
||||||
double SpanLength(const proto::Trajectory& trajectory, const Span& span) {
|
double SpanLength(const proto::Trajectory& trajectory, const Span& span) {
|
||||||
double length = 0;
|
double length = 0;
|
||||||
for (int i = span.index.start + 1; i < span.index.end; ++i) {
|
for (int i = span.start_index + 1; i < span.end_index; ++i) {
|
||||||
const auto a =
|
const auto a =
|
||||||
transform::ToEigen(trajectory.node(i - 1).pose().translation());
|
transform::ToEigen(trajectory.node(i - 1).pose().translation());
|
||||||
const auto b = transform::ToEigen(trajectory.node(i).pose().translation());
|
const auto b = transform::ToEigen(trajectory.node(i).pose().translation());
|
||||||
|
@ -182,10 +183,10 @@ std::vector<Floor> FindFloors(const proto::Trajectory& trajectory,
|
||||||
z_values.insert(z_values.end(), span.z_values.begin(),
|
z_values.insert(z_values.end(), span.z_values.begin(),
|
||||||
span.z_values.end());
|
span.z_values.end());
|
||||||
}
|
}
|
||||||
floors.back().timespans.push_back(common::Interval<common::Time>{
|
floors.back().timespans.push_back(Timespan{
|
||||||
common::FromUniversal(trajectory.node(span.index.start).timestamp()),
|
common::FromUniversal(trajectory.node(span.start_index).timestamp()),
|
||||||
common::FromUniversal(
|
common::FromUniversal(
|
||||||
trajectory.node(span.index.end - 1).timestamp())});
|
trajectory.node(span.end_index - 1).timestamp())});
|
||||||
}
|
}
|
||||||
std::sort(z_values.begin(), z_values.end());
|
std::sort(z_values.begin(), z_values.end());
|
||||||
floors.back().z = Median(z_values);
|
floors.back().z = Median(z_values);
|
||||||
|
|
|
@ -19,17 +19,21 @@
|
||||||
|
|
||||||
#include "cartographer/mapping/proto/trajectory.pb.h"
|
#include "cartographer/mapping/proto/trajectory.pb.h"
|
||||||
|
|
||||||
#include "cartographer/common/interval.h"
|
|
||||||
#include "cartographer/common/time.h"
|
#include "cartographer/common/time.h"
|
||||||
|
|
||||||
namespace cartographer {
|
namespace cartographer {
|
||||||
namespace mapping {
|
namespace mapping {
|
||||||
|
|
||||||
|
struct Timespan {
|
||||||
|
common::Time start;
|
||||||
|
common::Time end;
|
||||||
|
};
|
||||||
|
|
||||||
struct Floor {
|
struct Floor {
|
||||||
// The spans of time we spent on this floor. Since we might have walked up and
|
// The spans of time we spent on this floor. Since we might have walked up and
|
||||||
// down many times in this place, there can be many spans of time we spent on
|
// down many times in this place, there can be many spans of time we spent on
|
||||||
// a particular floor.
|
// a particular floor.
|
||||||
std::vector<common::Interval<common::Time>> timespans;
|
std::vector<Timespan> timespans;
|
||||||
|
|
||||||
// The median z-value of this floor.
|
// The median z-value of this floor.
|
||||||
double z;
|
double z;
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include "cartographer/mapping/collated_trajectory_builder.h"
|
#include "cartographer/mapping/collated_trajectory_builder.h"
|
||||||
#include "cartographer/mapping_2d/global_trajectory_builder.h"
|
#include "cartographer/mapping_2d/global_trajectory_builder.h"
|
||||||
#include "cartographer/mapping_3d/global_trajectory_builder.h"
|
#include "cartographer/mapping_3d/global_trajectory_builder.h"
|
||||||
#include "cartographer/mapping_3d/local_trajectory_builder_options.h"
|
|
||||||
#include "cartographer/sensor/range_data.h"
|
#include "cartographer/sensor/range_data.h"
|
||||||
#include "cartographer/sensor/voxel_filter.h"
|
#include "cartographer/sensor/voxel_filter.h"
|
||||||
#include "cartographer/transform/rigid_transform.h"
|
#include "cartographer/transform/rigid_transform.h"
|
||||||
|
@ -52,18 +51,6 @@ proto::MapBuilderOptions CreateMapBuilderOptions(
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
proto::TrajectoryBuilderOptions CreateTrajectoryBuilderOptions(
|
|
||||||
common::LuaParameterDictionary* const parameter_dictionary) {
|
|
||||||
proto::TrajectoryBuilderOptions options;
|
|
||||||
*options.mutable_trajectory_builder_2d_options() =
|
|
||||||
mapping_2d::CreateLocalTrajectoryBuilderOptions(
|
|
||||||
parameter_dictionary->GetDictionary("trajectory_builder_2d").get());
|
|
||||||
*options.mutable_trajectory_builder_3d_options() =
|
|
||||||
mapping_3d::CreateLocalTrajectoryBuilderOptions(
|
|
||||||
parameter_dictionary->GetDictionary("trajectory_builder_3d").get());
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
|
|
||||||
MapBuilder::MapBuilder(
|
MapBuilder::MapBuilder(
|
||||||
const proto::MapBuilderOptions& options,
|
const proto::MapBuilderOptions& options,
|
||||||
std::deque<TrajectoryNode::ConstantData>* const constant_data)
|
std::deque<TrajectoryNode::ConstantData>* const constant_data)
|
||||||
|
|
|
@ -44,8 +44,6 @@ namespace mapping {
|
||||||
|
|
||||||
proto::MapBuilderOptions CreateMapBuilderOptions(
|
proto::MapBuilderOptions CreateMapBuilderOptions(
|
||||||
common::LuaParameterDictionary* const parameter_dictionary);
|
common::LuaParameterDictionary* const parameter_dictionary);
|
||||||
proto::TrajectoryBuilderOptions CreateTrajectoryBuilderOptions(
|
|
||||||
common::LuaParameterDictionary* const parameter_dictionary);
|
|
||||||
|
|
||||||
// Wires up the complete SLAM stack with TrajectoryBuilders (for local submaps)
|
// Wires up the complete SLAM stack with TrajectoryBuilders (for local submaps)
|
||||||
// and a SparsePoseGraph for loop closure.
|
// and a SparsePoseGraph for loop closure.
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* 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/mapping/trajectory_builder.h"
|
||||||
|
|
||||||
|
#include "cartographer/mapping_2d/local_trajectory_builder.h"
|
||||||
|
#include "cartographer/mapping_3d/local_trajectory_builder_options.h"
|
||||||
|
|
||||||
|
namespace cartographer {
|
||||||
|
namespace mapping {
|
||||||
|
|
||||||
|
proto::TrajectoryBuilderOptions CreateTrajectoryBuilderOptions(
|
||||||
|
common::LuaParameterDictionary* const parameter_dictionary) {
|
||||||
|
proto::TrajectoryBuilderOptions options;
|
||||||
|
*options.mutable_trajectory_builder_2d_options() =
|
||||||
|
mapping_2d::CreateLocalTrajectoryBuilderOptions(
|
||||||
|
parameter_dictionary->GetDictionary("trajectory_builder_2d").get());
|
||||||
|
*options.mutable_trajectory_builder_3d_options() =
|
||||||
|
mapping_3d::CreateLocalTrajectoryBuilderOptions(
|
||||||
|
parameter_dictionary->GetDictionary("trajectory_builder_3d").get());
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace mapping
|
||||||
|
} // namespace cartographer
|
|
@ -21,9 +21,11 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "cartographer/common/lua_parameter_dictionary.h"
|
||||||
#include "cartographer/common/make_unique.h"
|
#include "cartographer/common/make_unique.h"
|
||||||
#include "cartographer/common/port.h"
|
#include "cartographer/common/port.h"
|
||||||
#include "cartographer/common/time.h"
|
#include "cartographer/common/time.h"
|
||||||
|
#include "cartographer/mapping/proto/trajectory_builder_options.pb.h"
|
||||||
#include "cartographer/mapping/submaps.h"
|
#include "cartographer/mapping/submaps.h"
|
||||||
#include "cartographer/sensor/data.h"
|
#include "cartographer/sensor/data.h"
|
||||||
#include "cartographer/sensor/point_cloud.h"
|
#include "cartographer/sensor/point_cloud.h"
|
||||||
|
@ -32,6 +34,9 @@
|
||||||
namespace cartographer {
|
namespace cartographer {
|
||||||
namespace mapping {
|
namespace mapping {
|
||||||
|
|
||||||
|
proto::TrajectoryBuilderOptions CreateTrajectoryBuilderOptions(
|
||||||
|
common::LuaParameterDictionary* const parameter_dictionary);
|
||||||
|
|
||||||
// This interface is used for both 2D and 3D SLAM.
|
// This interface is used for both 2D and 3D SLAM.
|
||||||
class TrajectoryBuilder {
|
class TrajectoryBuilder {
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue