Add PoseGraphInterface::GetTrajectoryNodePoses() (#795)
parent
1a837ef3ab
commit
196b4b891c
|
@ -82,6 +82,9 @@ class PoseGraphInterface {
|
||||||
// Returns the current optimized trajectories.
|
// Returns the current optimized trajectories.
|
||||||
virtual MapById<NodeId, TrajectoryNode> GetTrajectoryNodes() = 0;
|
virtual MapById<NodeId, TrajectoryNode> GetTrajectoryNodes() = 0;
|
||||||
|
|
||||||
|
// Returns the current optimized trajectory poses.
|
||||||
|
virtual MapById<NodeId, TrajectoryNodePose> GetTrajectoryNodePoses() = 0;
|
||||||
|
|
||||||
// Checks if the given trajectory is finished.
|
// Checks if the given trajectory is finished.
|
||||||
virtual bool IsTrajectoryFinished(int trajectory_id) = 0;
|
virtual bool IsTrajectoryFinished(int trajectory_id) = 0;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,14 @@
|
||||||
namespace cartographer {
|
namespace cartographer {
|
||||||
namespace mapping {
|
namespace mapping {
|
||||||
|
|
||||||
|
struct TrajectoryNodePose {
|
||||||
|
// Indicates whether the node has constant data set.
|
||||||
|
bool has_constant_data;
|
||||||
|
|
||||||
|
// The node pose in the global SLAM frame.
|
||||||
|
transform::Rigid3d global_pose;
|
||||||
|
};
|
||||||
|
|
||||||
struct TrajectoryNode {
|
struct TrajectoryNode {
|
||||||
struct Data {
|
struct Data {
|
||||||
common::Time time;
|
common::Time time;
|
||||||
|
|
|
@ -575,6 +575,19 @@ PoseGraph::GetTrajectoryNodes() {
|
||||||
return trajectory_nodes_;
|
return trajectory_nodes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNodePose>
|
||||||
|
PoseGraph::GetTrajectoryNodePoses() {
|
||||||
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNodePose> node_poses;
|
||||||
|
common::MutexLocker locker(&mutex_);
|
||||||
|
for (const auto& node_id_data : trajectory_nodes_) {
|
||||||
|
node_poses.Insert(
|
||||||
|
node_id_data.id,
|
||||||
|
mapping::TrajectoryNodePose{node_id_data.data.constant_data != nullptr,
|
||||||
|
node_id_data.data.global_pose});
|
||||||
|
}
|
||||||
|
return node_poses;
|
||||||
|
}
|
||||||
|
|
||||||
sensor::MapByTime<sensor::ImuData> PoseGraph::GetImuData() {
|
sensor::MapByTime<sensor::ImuData> PoseGraph::GetImuData() {
|
||||||
common::MutexLocker locker(&mutex_);
|
common::MutexLocker locker(&mutex_);
|
||||||
return optimization_problem_.imu_data();
|
return optimization_problem_.imu_data();
|
||||||
|
|
|
@ -110,6 +110,8 @@ class PoseGraph : public mapping::PoseGraph {
|
||||||
EXCLUDES(mutex_) override;
|
EXCLUDES(mutex_) override;
|
||||||
mapping::MapById<mapping::NodeId, mapping::TrajectoryNode>
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNode>
|
||||||
GetTrajectoryNodes() override EXCLUDES(mutex_);
|
GetTrajectoryNodes() override EXCLUDES(mutex_);
|
||||||
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNodePose>
|
||||||
|
GetTrajectoryNodePoses() override EXCLUDES(mutex_);
|
||||||
sensor::MapByTime<sensor::ImuData> GetImuData() override EXCLUDES(mutex_);
|
sensor::MapByTime<sensor::ImuData> GetImuData() override EXCLUDES(mutex_);
|
||||||
sensor::MapByTime<sensor::OdometryData> GetOdometryData() override
|
sensor::MapByTime<sensor::OdometryData> GetOdometryData() override
|
||||||
EXCLUDES(mutex_);
|
EXCLUDES(mutex_);
|
||||||
|
|
|
@ -605,6 +605,19 @@ PoseGraph::GetTrajectoryNodes() {
|
||||||
return trajectory_nodes_;
|
return trajectory_nodes_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNodePose>
|
||||||
|
PoseGraph::GetTrajectoryNodePoses() {
|
||||||
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNodePose> node_poses;
|
||||||
|
common::MutexLocker locker(&mutex_);
|
||||||
|
for (const auto& node_id_data : trajectory_nodes_) {
|
||||||
|
node_poses.Insert(
|
||||||
|
node_id_data.id,
|
||||||
|
mapping::TrajectoryNodePose{node_id_data.data.constant_data != nullptr,
|
||||||
|
node_id_data.data.global_pose});
|
||||||
|
}
|
||||||
|
return node_poses;
|
||||||
|
}
|
||||||
|
|
||||||
sensor::MapByTime<sensor::ImuData> PoseGraph::GetImuData() {
|
sensor::MapByTime<sensor::ImuData> PoseGraph::GetImuData() {
|
||||||
common::MutexLocker locker(&mutex_);
|
common::MutexLocker locker(&mutex_);
|
||||||
return optimization_problem_.imu_data();
|
return optimization_problem_.imu_data();
|
||||||
|
|
|
@ -110,6 +110,8 @@ class PoseGraph : public mapping::PoseGraph {
|
||||||
EXCLUDES(mutex_) override;
|
EXCLUDES(mutex_) override;
|
||||||
mapping::MapById<mapping::NodeId, mapping::TrajectoryNode>
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNode>
|
||||||
GetTrajectoryNodes() override EXCLUDES(mutex_);
|
GetTrajectoryNodes() override EXCLUDES(mutex_);
|
||||||
|
mapping::MapById<mapping::NodeId, mapping::TrajectoryNodePose>
|
||||||
|
GetTrajectoryNodePoses() override EXCLUDES(mutex_);
|
||||||
sensor::MapByTime<sensor::ImuData> GetImuData() override EXCLUDES(mutex_);
|
sensor::MapByTime<sensor::ImuData> GetImuData() override EXCLUDES(mutex_);
|
||||||
sensor::MapByTime<sensor::OdometryData> GetOdometryData() override
|
sensor::MapByTime<sensor::OdometryData> GetOdometryData() override
|
||||||
EXCLUDES(mutex_);
|
EXCLUDES(mutex_);
|
||||||
|
|
|
@ -52,6 +52,12 @@ PoseGraphStub::GetTrajectoryNodes() {
|
||||||
LOG(FATAL) << "Not implemented";
|
LOG(FATAL) << "Not implemented";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cartographer::mapping::MapById<cartographer::mapping::NodeId,
|
||||||
|
cartographer::mapping::TrajectoryNodePose>
|
||||||
|
PoseGraphStub::GetTrajectoryNodePoses() {
|
||||||
|
LOG(FATAL) << "Not implemented";
|
||||||
|
}
|
||||||
|
|
||||||
bool PoseGraphStub::IsTrajectoryFinished(int trajectory_id) {
|
bool PoseGraphStub::IsTrajectoryFinished(int trajectory_id) {
|
||||||
LOG(FATAL) << "Not implemented";
|
LOG(FATAL) << "Not implemented";
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,9 @@ class PoseGraphStub : public cartographer::mapping::PoseGraphInterface {
|
||||||
cartographer::mapping::MapById<cartographer::mapping::NodeId,
|
cartographer::mapping::MapById<cartographer::mapping::NodeId,
|
||||||
cartographer::mapping::TrajectoryNode>
|
cartographer::mapping::TrajectoryNode>
|
||||||
GetTrajectoryNodes() override;
|
GetTrajectoryNodes() override;
|
||||||
|
cartographer::mapping::MapById<cartographer::mapping::NodeId,
|
||||||
|
cartographer::mapping::TrajectoryNodePose>
|
||||||
|
GetTrajectoryNodePoses() override;
|
||||||
bool IsTrajectoryFinished(int trajectory_id) override;
|
bool IsTrajectoryFinished(int trajectory_id) override;
|
||||||
std::vector<Constraint> constraints() override;
|
std::vector<Constraint> constraints() override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue