Skip to content

Commit 34a816a

Browse files
committed
return submap ids in InsertionResult instead of pointers
1 parent a351a8e commit 34a816a

File tree

8 files changed

+45
-26
lines changed

8 files changed

+45
-26
lines changed

cartographer/mapping/internal/2d/pose_graph_2d.cc

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ std::vector<SubmapId> PoseGraph2D::InitializeGlobalSubmapPoses(
117117
return {front_submap_id, last_submap_id};
118118
}
119119

120-
NodeId PoseGraph2D::AppendNode(
120+
std::pair<NodeId, std::vector<SubmapId>> PoseGraph2D::AppendNode(
121121
std::shared_ptr<const TrajectoryNode::Data> constant_data,
122122
const int trajectory_id,
123123
const std::vector<std::shared_ptr<const Submap2D>>& insertion_submaps,
@@ -141,18 +141,28 @@ NodeId PoseGraph2D::AppendNode(
141141
data_.submap_data.at(submap_id).submap = insertion_submaps.back();
142142
LOG(INFO) << "Inserted submap " << submap_id << ".";
143143
}
144-
return node_id;
144+
std::vector<SubmapId> submap_ids;
145+
auto submap_id_iter =
146+
std::prev(data_.submap_data.EndOfTrajectory(trajectory_id),
147+
insertion_submaps.size());
148+
for (int i = 0; i < static_cast<int>(insertion_submaps.size()); ++i) {
149+
submap_ids.push_back(submap_id_iter->id);
150+
++submap_id_iter;
151+
}
152+
return {node_id, submap_ids};
145153
}
146154

147-
NodeId PoseGraph2D::AddNode(
155+
std::pair<NodeId, std::vector<SubmapId>> PoseGraph2D::AddNode(
148156
std::shared_ptr<const TrajectoryNode::Data> constant_data,
149157
const int trajectory_id,
150158
const std::vector<std::shared_ptr<const Submap2D>>& insertion_submaps) {
151159
const transform::Rigid3d optimized_pose(
152160
GetLocalToGlobalTransform(trajectory_id) * constant_data->local_pose);
153161

154-
const NodeId node_id = AppendNode(constant_data, trajectory_id,
155-
insertion_submaps, optimized_pose);
162+
const auto node_submap_ids = AppendNode(constant_data, trajectory_id,
163+
insertion_submaps, optimized_pose);
164+
const NodeId& node_id = node_submap_ids.first;
165+
156166
// We have to check this here, because it might have changed by the time we
157167
// execute the lambda.
158168
const bool newly_finished_submap =
@@ -161,7 +171,7 @@ NodeId PoseGraph2D::AddNode(
161171
return ComputeConstraintsForNode(node_id, insertion_submaps,
162172
newly_finished_submap);
163173
});
164-
return node_id;
174+
return node_submap_ids;
165175
}
166176

167177
void PoseGraph2D::AddWorkItem(

cartographer/mapping/internal/2d/pose_graph_2d.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class PoseGraph2D : public PoseGraph {
7777
// node data was inserted into the 'insertion_submaps'. If
7878
// 'insertion_submaps.front().finished()' is 'true', data was inserted into
7979
// this submap for the last time.
80-
NodeId AddNode(
80+
std::pair<NodeId, std::vector<SubmapId>> AddNode(
8181
std::shared_ptr<const TrajectoryNode::Data> constant_data,
8282
int trajectory_id,
8383
const std::vector<std::shared_ptr<const Submap2D>>& insertion_submaps)
@@ -171,7 +171,7 @@ class PoseGraph2D : public PoseGraph {
171171

172172
// Appends the new node and submap (if needed) to the internal data
173173
// structures.
174-
NodeId AppendNode(
174+
std::pair<NodeId, std::vector<SubmapId>> AppendNode(
175175
std::shared_ptr<const TrajectoryNode::Data> constant_data,
176176
int trajectory_id,
177177
const std::vector<std::shared_ptr<const Submap2D>>& insertion_submaps,

cartographer/mapping/internal/3d/pose_graph_3d.cc

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ std::vector<SubmapId> PoseGraph3D::InitializeGlobalSubmapPoses(
105105
return {front_submap_id, last_submap_id};
106106
}
107107

108-
NodeId PoseGraph3D::AppendNode(
108+
std::pair<NodeId, std::vector<SubmapId>> PoseGraph3D::AppendNode(
109109
std::shared_ptr<const TrajectoryNode::Data> constant_data,
110110
const int trajectory_id,
111111
const std::vector<std::shared_ptr<const Submap3D>>& insertion_submaps,
@@ -129,18 +129,28 @@ NodeId PoseGraph3D::AppendNode(
129129
data_.submap_data.at(submap_id).submap = insertion_submaps.back();
130130
LOG(INFO) << "Inserted submap " << submap_id << ".";
131131
}
132-
return node_id;
132+
std::vector<SubmapId> submap_ids;
133+
auto submap_id_iter =
134+
std::prev(data_.submap_data.EndOfTrajectory(trajectory_id),
135+
insertion_submaps.size());
136+
for (int i = 0; i < static_cast<int>(insertion_submaps.size()); ++i) {
137+
submap_ids.push_back(submap_id_iter->id);
138+
++submap_id_iter;
139+
}
140+
return {node_id, submap_ids};
133141
}
134142

135-
NodeId PoseGraph3D::AddNode(
143+
std::pair<NodeId, std::vector<SubmapId>> PoseGraph3D::AddNode(
136144
std::shared_ptr<const TrajectoryNode::Data> constant_data,
137145
const int trajectory_id,
138146
const std::vector<std::shared_ptr<const Submap3D>>& insertion_submaps) {
139147
const transform::Rigid3d optimized_pose(
140148
GetLocalToGlobalTransform(trajectory_id) * constant_data->local_pose);
141149

142-
const NodeId node_id = AppendNode(constant_data, trajectory_id,
143-
insertion_submaps, optimized_pose);
150+
const auto node_submap_ids = AppendNode(constant_data, trajectory_id,
151+
insertion_submaps, optimized_pose);
152+
const NodeId& node_id = node_submap_ids.first;
153+
144154
// We have to check this here, because it might have changed by the time we
145155
// execute the lambda.
146156
const bool newly_finished_submap =
@@ -149,7 +159,7 @@ NodeId PoseGraph3D::AddNode(
149159
return ComputeConstraintsForNode(node_id, insertion_submaps,
150160
newly_finished_submap);
151161
});
152-
return node_id;
162+
return node_submap_ids;
153163
}
154164

155165
void PoseGraph3D::AddWorkItem(

cartographer/mapping/internal/3d/pose_graph_3d.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class PoseGraph3D : public PoseGraph {
7575
// node data was inserted into the 'insertion_submaps'. If
7676
// 'insertion_submaps.front().finished()' is 'true', data was inserted into
7777
// this submap for the last time.
78-
NodeId AddNode(
78+
std::pair<NodeId, std::vector<SubmapId>> AddNode(
7979
std::shared_ptr<const TrajectoryNode::Data> constant_data,
8080
int trajectory_id,
8181
const std::vector<std::shared_ptr<const Submap3D>>& insertion_submaps)
@@ -174,7 +174,7 @@ class PoseGraph3D : public PoseGraph {
174174
EXCLUSIVE_LOCKS_REQUIRED(mutex_);
175175

176176
// Appends the new node and submap (if needed) to the internal data stuctures.
177-
NodeId AppendNode(
177+
std::pair<NodeId, std::vector<SubmapId>> AppendNode(
178178
std::shared_ptr<const TrajectoryNode::Data> constant_data,
179179
int trajectory_id,
180180
const std::vector<std::shared_ptr<const Submap3D>>& insertion_submaps,

cartographer/mapping/internal/global_trajectory_builder.cc

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,14 @@ class GlobalTrajectoryBuilder : public mapping::TrajectoryBuilderInterface {
6565
std::unique_ptr<InsertionResult> insertion_result;
6666
if (matching_result->insertion_result != nullptr) {
6767
kLocalSlamInsertionResults->Increment();
68-
auto node_id = pose_graph_->AddNode(
68+
const auto node_submap_ids = pose_graph_->AddNode(
6969
matching_result->insertion_result->constant_data, trajectory_id_,
7070
matching_result->insertion_result->insertion_submaps);
71+
const auto& node_id = node_submap_ids.first;
7172
CHECK_EQ(node_id.trajectory_id, trajectory_id_);
7273
insertion_result = absl::make_unique<InsertionResult>(InsertionResult{
7374
node_id, matching_result->insertion_result->constant_data,
74-
std::vector<std::shared_ptr<const Submap>>(
75-
matching_result->insertion_result->insertion_submaps.begin(),
76-
matching_result->insertion_result->insertion_submaps.end())});
75+
node_submap_ids.second});
7776
}
7877
if (local_slam_result_callback_) {
7978
local_slam_result_callback_(

cartographer/mapping/pose_graph.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,6 @@ class PoseGraph : public PoseGraphInterface {
112112
// Gets the current trajectory clusters.
113113
virtual std::vector<std::vector<int>> GetConnectedTrajectories() const = 0;
114114

115-
// Returns the current optimized transform and submap itself for the given
116-
// 'submap_id'. Returns 'nullptr' for the 'submap' member if the submap does
117-
// not exist (anymore).
118-
virtual SubmapData GetSubmapData(const SubmapId& submap_id) const = 0;
119-
120115
proto::PoseGraph ToProto(bool include_unfinished_submaps) const override;
121116

122117
// Returns the IMU data.

cartographer/mapping/pose_graph_interface.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ class PoseGraphInterface {
9595
// Waits for all computations to finish and computes optimized poses.
9696
virtual void RunFinalOptimization() = 0;
9797

98+
// Returns the current optimized transform and submap itself for the given
99+
// 'submap_id'. Returns 'nullptr' for the 'submap' member if the submap does
100+
// not exist (anymore).
101+
virtual SubmapData GetSubmapData(const SubmapId& submap_id) const = 0;
102+
98103
// Returns data for all submaps.
99104
virtual MapById<SubmapId, SubmapData> GetAllSubmapData() const = 0;
100105

cartographer/mapping/trajectory_builder_interface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class TrajectoryBuilderInterface {
5050
struct InsertionResult {
5151
NodeId node_id;
5252
std::shared_ptr<const TrajectoryNode::Data> constant_data;
53-
std::vector<std::shared_ptr<const Submap>> insertion_submaps;
53+
std::vector<SubmapId> insertion_submap_ids;
5454
};
5555

5656
// A callback which is called after local SLAM processes an accumulated

0 commit comments

Comments
 (0)