[GenericPoseGraph] Add a macro to find nodes. (#1382)
parent
3877f97b23
commit
b6b41e9b17
|
@ -36,29 +36,15 @@ AccelerationConstraint3D::AccelerationConstraint3D(
|
|||
|
||||
void AccelerationConstraint3D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
auto first_node = common::FindOrNull(nodes->pose_3d_nodes, first_);
|
||||
if (first_node == nullptr) {
|
||||
LOG(INFO) << "First node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto second_node = common::FindOrNull(nodes->pose_3d_nodes, second_);
|
||||
if (second_node == nullptr) {
|
||||
LOG(INFO) << "Second node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto third_node = common::FindOrNull(nodes->pose_3d_nodes, third_);
|
||||
if (third_node == nullptr) {
|
||||
LOG(INFO) << "Third node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto imu_node = common::FindOrNull(nodes->imu_calibration_nodes, imu_);
|
||||
if (imu_node == nullptr) {
|
||||
LOG(INFO) << "IMU calibration node was not found in imu_calibration_nodes.";
|
||||
return;
|
||||
}
|
||||
FIND_NODE_OR_RETURN(first_node, first_, nodes->pose_3d_nodes,
|
||||
"First node was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(second_node, second_, nodes->pose_3d_nodes,
|
||||
"Second node was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(third_node, third_, nodes->pose_3d_nodes,
|
||||
"Third node was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(
|
||||
imu_node, imu_, nodes->imu_calibration_nodes,
|
||||
"IMU calibration node was not found in imu_calibration_nodes.");
|
||||
|
||||
if (first_node->constant() && second_node->constant() &&
|
||||
third_node->constant() && imu_node->constant()) {
|
||||
|
|
|
@ -31,6 +31,13 @@ void AddPose3D(Pose3D* pose, ceres::Problem* problem);
|
|||
|
||||
void AddImuCalibration(ImuCalibration* pose, ceres::Problem* problem);
|
||||
|
||||
#define FIND_NODE_OR_RETURN(node_name, node_id, map, log_message) \
|
||||
auto node_name = common::FindOrNull(map, node_id); \
|
||||
if (node_name == nullptr) { \
|
||||
LOG(INFO) << log_message; \
|
||||
return; \
|
||||
}
|
||||
|
||||
} // namespace pose_graph
|
||||
} // namespace cartographer
|
||||
|
||||
|
|
|
@ -35,24 +35,12 @@ InterpolatedRelativePoseConstraint2D::InterpolatedRelativePoseConstraint2D(
|
|||
|
||||
void InterpolatedRelativePoseConstraint2D::AddToOptimizer(
|
||||
Nodes* nodes, ceres::Problem* problem) const {
|
||||
auto first_node_start =
|
||||
common::FindOrNull(nodes->pose_2d_nodes, first_start_);
|
||||
if (first_node_start == nullptr) {
|
||||
LOG(INFO) << "First node (start) was not found in pose_2d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto first_node_end = common::FindOrNull(nodes->pose_2d_nodes, first_end_);
|
||||
if (first_node_end == nullptr) {
|
||||
LOG(INFO) << "First node (end) was not found in pose_2d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto second_node = common::FindOrNull(nodes->pose_3d_nodes, second_);
|
||||
if (second_node == nullptr) {
|
||||
LOG(INFO) << "Second node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
FIND_NODE_OR_RETURN(first_node_start, first_start_, nodes->pose_2d_nodes,
|
||||
"First node (start) was not found in pose_2d_nodes.");
|
||||
FIND_NODE_OR_RETURN(first_node_end, first_end_, nodes->pose_2d_nodes,
|
||||
"First node (end) was not found in pose_2d_nodes.");
|
||||
FIND_NODE_OR_RETURN(second_node, second_, nodes->pose_3d_nodes,
|
||||
"Second node was not found in pose_3d_nodes.");
|
||||
|
||||
if (first_node_start->constant() && first_node_end->constant() &&
|
||||
second_node->constant()) {
|
||||
|
|
|
@ -35,24 +35,12 @@ InterpolatedRelativePoseConstraint3D::InterpolatedRelativePoseConstraint3D(
|
|||
|
||||
void InterpolatedRelativePoseConstraint3D::AddToOptimizer(
|
||||
Nodes* nodes, ceres::Problem* problem) const {
|
||||
auto first_node_start =
|
||||
common::FindOrNull(nodes->pose_3d_nodes, first_start_);
|
||||
if (first_node_start == nullptr) {
|
||||
LOG(INFO) << "First node (start) was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto first_node_end = common::FindOrNull(nodes->pose_3d_nodes, first_end_);
|
||||
if (first_node_end == nullptr) {
|
||||
LOG(INFO) << "First node (end) was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto second_node = common::FindOrNull(nodes->pose_3d_nodes, second_);
|
||||
if (second_node == nullptr) {
|
||||
LOG(INFO) << "Second node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
FIND_NODE_OR_RETURN(first_node_start, first_start_, nodes->pose_3d_nodes,
|
||||
"First node (start) was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(first_node_end, first_end_, nodes->pose_3d_nodes,
|
||||
"First node (end) was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(second_node, second_, nodes->pose_3d_nodes,
|
||||
"Second node was not found in pose_3d_nodes.");
|
||||
|
||||
if (first_node_start->constant() && first_node_end->constant() &&
|
||||
second_node->constant()) {
|
||||
|
|
|
@ -34,17 +34,10 @@ RelativePoseConstraint2D::RelativePoseConstraint2D(
|
|||
// TODO(pifon): Add a test.
|
||||
void RelativePoseConstraint2D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
auto first_node = common::FindOrNull(nodes->pose_2d_nodes, first_);
|
||||
if (first_node == nullptr) {
|
||||
LOG(INFO) << "First node was not found in pose_2d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto second_node = common::FindOrNull(nodes->pose_2d_nodes, second_);
|
||||
if (second_node == nullptr) {
|
||||
LOG(INFO) << "Second node was not found in pose_2d_nodes.";
|
||||
return;
|
||||
}
|
||||
FIND_NODE_OR_RETURN(first_node, first_, nodes->pose_2d_nodes,
|
||||
"First node was not found in pose_2d_nodes.");
|
||||
FIND_NODE_OR_RETURN(second_node, second_, nodes->pose_2d_nodes,
|
||||
"Second node was not found in pose_2d_nodes.");
|
||||
|
||||
if (first_node->constant() && second_node->constant()) {
|
||||
LOG(INFO) << "Both nodes are constant, skipping the constraint.";
|
||||
|
|
|
@ -34,17 +34,10 @@ RelativePoseConstraint3D::RelativePoseConstraint3D(
|
|||
|
||||
void RelativePoseConstraint3D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
auto first_node = common::FindOrNull(nodes->pose_3d_nodes, first_);
|
||||
if (first_node == nullptr) {
|
||||
LOG(INFO) << "First node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto second_node = common::FindOrNull(nodes->pose_3d_nodes, second_);
|
||||
if (second_node == nullptr) {
|
||||
LOG(INFO) << "Second node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
FIND_NODE_OR_RETURN(first_node, first_, nodes->pose_3d_nodes,
|
||||
"First node was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(second_node, second_, nodes->pose_3d_nodes,
|
||||
"Second node was not found in pose_3d_nodes.");
|
||||
|
||||
if (first_node->constant() && second_node->constant()) {
|
||||
LOG(INFO) << "Both nodes are constant, skipping the constraint.";
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#include "cartographer/pose_graph/constraint/rotation_constraint_3d.h"
|
||||
|
||||
#include "absl/memory/memory.h"
|
||||
#include "cartographer/pose_graph/constraint/constraint_utils.h"
|
||||
|
||||
#include "cartographer/common/utils.h"
|
||||
|
||||
namespace cartographer {
|
||||
|
@ -53,30 +55,19 @@ RotationContraint3D::RotationContraint3D(
|
|||
|
||||
void RotationContraint3D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
auto first_node = common::FindOrNull(nodes->pose_3d_nodes, first_);
|
||||
if (first_node == nullptr) {
|
||||
LOG(INFO) << "First node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
FIND_NODE_OR_RETURN(first_node, first_, nodes->pose_3d_nodes,
|
||||
"First node was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(second_node, second_, nodes->pose_3d_nodes,
|
||||
"Second node was not found in pose_3d_nodes.");
|
||||
FIND_NODE_OR_RETURN(imu_node, imu_calibration_, nodes->imu_calibration_nodes,
|
||||
"Imu calibration node was not found.");
|
||||
|
||||
auto second_node = common::FindOrNull(nodes->pose_3d_nodes, second_);
|
||||
if (second_node == nullptr) {
|
||||
LOG(INFO) << "Second node was not found in pose_3d_nodes.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (first_node->constant() && second_node->constant()) {
|
||||
if (first_node->constant() && second_node->constant() &&
|
||||
imu_node->constant()) {
|
||||
LOG(INFO) << "Both nodes are constant, skipping the constraint.";
|
||||
return;
|
||||
}
|
||||
|
||||
auto imu_node =
|
||||
common::FindOrNull(nodes->imu_calibration_nodes, imu_calibration_);
|
||||
if (imu_node == nullptr) {
|
||||
LOG(INFO) << "Imu calibration node was not found.";
|
||||
return;
|
||||
}
|
||||
|
||||
AddRotation3D(first_node, problem);
|
||||
AddRotation3D(second_node, problem);
|
||||
AddImuOrientation(imu_node, problem);
|
||||
|
|
Loading…
Reference in New Issue