[GenericPoseGraph] Rename class Optimizer -> Solver. (#1435)
parent
ba859a6ed5
commit
64062ee720
|
@ -34,8 +34,8 @@ AccelerationConstraint3D::AccelerationConstraint3D(
|
|||
cost_(new AccelerationCost3D(proto.parameters())),
|
||||
ceres_cost_(absl::make_unique<AutoDiffFunction>(cost_)) {}
|
||||
|
||||
void AccelerationConstraint3D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
void AccelerationConstraint3D::AddToSolver(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
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,
|
||||
|
|
|
@ -29,7 +29,7 @@ class AccelerationConstraint3D : public Constraint {
|
|||
const proto::LossFunction& loss_function_proto,
|
||||
const proto::Acceleration3D& proto);
|
||||
|
||||
void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
void AddToSolver(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
|
||||
protected:
|
||||
proto::CostFunction ToCostFunctionProto() const final;
|
||||
|
|
|
@ -43,7 +43,7 @@ class Constraint {
|
|||
|
||||
const ConstraintId& constraint_id() const { return constraint_id_; }
|
||||
|
||||
virtual void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const = 0;
|
||||
virtual void AddToSolver(Nodes* nodes, ceres::Problem* problem) const = 0;
|
||||
|
||||
protected:
|
||||
virtual proto::CostFunction ToCostFunctionProto() const = 0;
|
||||
|
|
|
@ -33,7 +33,7 @@ InterpolatedRelativePoseConstraint2D::InterpolatedRelativePoseConstraint2D(
|
|||
cost_(new InterpolatedRelativePoseCost2D(proto.parameters())),
|
||||
ceres_cost_(absl::make_unique<AutoDiffFunction>(cost_)) {}
|
||||
|
||||
void InterpolatedRelativePoseConstraint2D::AddToOptimizer(
|
||||
void InterpolatedRelativePoseConstraint2D::AddToSolver(
|
||||
Nodes* nodes, ceres::Problem* problem) const {
|
||||
FIND_NODE_OR_RETURN(first_node_start, first_start_, nodes->pose_2d_nodes,
|
||||
"First node (start) was not found in pose_2d_nodes.");
|
||||
|
|
|
@ -29,7 +29,7 @@ class InterpolatedRelativePoseConstraint2D : public Constraint {
|
|||
const ConstraintId& id, const proto::LossFunction& loss_function_proto,
|
||||
const proto::InterpolatedRelativePose2D& proto);
|
||||
|
||||
void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
void AddToSolver(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
|
||||
protected:
|
||||
proto::CostFunction ToCostFunctionProto() const final;
|
||||
|
|
|
@ -33,7 +33,7 @@ InterpolatedRelativePoseConstraint3D::InterpolatedRelativePoseConstraint3D(
|
|||
cost_(new InterpolatedRelativePoseCost3D(proto.parameters())),
|
||||
ceres_cost_(absl::make_unique<AutoDiffFunction>(cost_)) {}
|
||||
|
||||
void InterpolatedRelativePoseConstraint3D::AddToOptimizer(
|
||||
void InterpolatedRelativePoseConstraint3D::AddToSolver(
|
||||
Nodes* nodes, ceres::Problem* problem) const {
|
||||
FIND_NODE_OR_RETURN(first_node_start, first_start_, nodes->pose_3d_nodes,
|
||||
"First node (start) was not found in pose_3d_nodes.");
|
||||
|
|
|
@ -29,7 +29,7 @@ class InterpolatedRelativePoseConstraint3D : public Constraint {
|
|||
const ConstraintId& id, const proto::LossFunction& loss_function_proto,
|
||||
const proto::InterpolatedRelativePose3D& proto);
|
||||
|
||||
void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
void AddToSolver(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
|
||||
protected:
|
||||
proto::CostFunction ToCostFunctionProto() const final;
|
||||
|
|
|
@ -32,8 +32,8 @@ RelativePoseConstraint2D::RelativePoseConstraint2D(
|
|||
ceres_cost_(absl::make_unique<RelativePoseCost2D>(proto.parameters())) {}
|
||||
|
||||
// TODO(pifon): Add a test.
|
||||
void RelativePoseConstraint2D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
void RelativePoseConstraint2D::AddToSolver(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
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,
|
||||
|
|
|
@ -29,7 +29,7 @@ class RelativePoseConstraint2D : public Constraint {
|
|||
const proto::LossFunction& loss_function_proto,
|
||||
const proto::RelativePose2D& proto);
|
||||
|
||||
void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
void AddToSolver(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
|
||||
protected:
|
||||
proto::CostFunction ToCostFunctionProto() const final;
|
||||
|
|
|
@ -32,8 +32,8 @@ RelativePoseConstraint3D::RelativePoseConstraint3D(
|
|||
cost_(new RelativePoseCost3D(proto.parameters())),
|
||||
ceres_cost_(absl::make_unique<AutoDiffFunction>(cost_)) {}
|
||||
|
||||
void RelativePoseConstraint3D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
void RelativePoseConstraint3D::AddToSolver(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
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,
|
||||
|
|
|
@ -29,7 +29,7 @@ class RelativePoseConstraint3D : public Constraint {
|
|||
const proto::LossFunction& loss_function_proto,
|
||||
const proto::RelativePose3D& proto);
|
||||
|
||||
void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
void AddToSolver(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
|
||||
protected:
|
||||
proto::CostFunction ToCostFunctionProto() const final;
|
||||
|
|
|
@ -53,8 +53,8 @@ RotationContraint3D::RotationContraint3D(
|
|||
cost_(new RotationCost3D(proto.parameters())),
|
||||
ceres_cost_(absl::make_unique<AutoDiffFunction>(cost_)) {}
|
||||
|
||||
void RotationContraint3D::AddToOptimizer(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
void RotationContraint3D::AddToSolver(Nodes* nodes,
|
||||
ceres::Problem* problem) const {
|
||||
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,
|
||||
|
|
|
@ -29,7 +29,7 @@ class RotationContraint3D : public Constraint {
|
|||
const proto::LossFunction& loss_function_proto,
|
||||
const proto::Rotation3D& proto);
|
||||
|
||||
void AddToOptimizer(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
void AddToSolver(Nodes* nodes, ceres::Problem* problem) const final;
|
||||
|
||||
protected:
|
||||
proto::CostFunction ToCostFunctionProto() const final;
|
||||
|
|
|
@ -29,9 +29,9 @@ void PoseGraphController::AddConstraint(const proto::Constraint& constraint) {
|
|||
AddConstraintToPoseGraphData(constraint, &data_);
|
||||
}
|
||||
|
||||
Optimizer::SolverStatus PoseGraphController::Optimize() {
|
||||
Solver::SolverStatus PoseGraphController::Optimize() {
|
||||
absl::MutexLock locker(&mutex_);
|
||||
return optimizer_->Solve(&data_);
|
||||
return solver_->Solve(&data_);
|
||||
}
|
||||
|
||||
} // namespace pose_graph
|
||||
|
|
|
@ -18,15 +18,15 @@
|
|||
#define CARTOGRAPHER_POSE_GRAPH_POSE_GRAPH_CONTROLLER_H_
|
||||
|
||||
#include "absl/synchronization/mutex.h"
|
||||
#include "cartographer/pose_graph/optimizer/optimizer.h"
|
||||
#include "cartographer/pose_graph/pose_graph_data.h"
|
||||
#include "cartographer/pose_graph/solver/solver.h"
|
||||
|
||||
namespace cartographer {
|
||||
namespace pose_graph {
|
||||
|
||||
class PoseGraphController {
|
||||
PoseGraphController(std::unique_ptr<Optimizer> optimizer)
|
||||
: optimizer_(std::move(optimizer)) {}
|
||||
PoseGraphController(std::unique_ptr<Solver> optimizer)
|
||||
: solver_(std::move(optimizer)) {}
|
||||
|
||||
PoseGraphController(const PoseGraphController&) = delete;
|
||||
PoseGraphController& operator=(const PoseGraphController&) = delete;
|
||||
|
@ -35,10 +35,10 @@ class PoseGraphController {
|
|||
void AddConstraint(const proto::Constraint& constraint)
|
||||
LOCKS_EXCLUDED(mutex_);
|
||||
|
||||
Optimizer::SolverStatus Optimize() LOCKS_EXCLUDED(mutex_);
|
||||
Solver::SolverStatus Optimize() LOCKS_EXCLUDED(mutex_);
|
||||
|
||||
private:
|
||||
std::unique_ptr<Optimizer> optimizer_;
|
||||
std::unique_ptr<Solver> solver_;
|
||||
|
||||
mutable absl::Mutex mutex_;
|
||||
PoseGraphData data_ GUARDED_BY(mutex_);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "cartographer/pose_graph/optimizer/ceres_optimizer.h"
|
||||
#include "cartographer/pose_graph/solver/ceres_solver.h"
|
||||
|
||||
namespace cartographer {
|
||||
namespace pose_graph {
|
||||
|
@ -31,28 +31,28 @@ ceres::Problem::Options CreateCeresProblemOptions() {
|
|||
return problem_options;
|
||||
}
|
||||
|
||||
Optimizer::SolverStatus ToSolverStatus(
|
||||
Solver::SolverStatus ToSolverStatus(
|
||||
const ceres::TerminationType& termination_type) {
|
||||
switch (termination_type) {
|
||||
case (ceres::TerminationType::CONVERGENCE):
|
||||
return Optimizer::SolverStatus::CONVERGENCE;
|
||||
return Solver::SolverStatus::CONVERGENCE;
|
||||
case (ceres::TerminationType::NO_CONVERGENCE):
|
||||
return Optimizer::SolverStatus::NO_CONVERGENCE;
|
||||
return Solver::SolverStatus::NO_CONVERGENCE;
|
||||
default:
|
||||
return Optimizer::SolverStatus::FAILURE;
|
||||
return Solver::SolverStatus::FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
CeresOptimizer::CeresOptimizer(const ceres::Solver::Options& options)
|
||||
CeresSolver::CeresSolver(const ceres::Solver::Options& options)
|
||||
: problem_options_(CreateCeresProblemOptions()), solver_options_(options) {}
|
||||
|
||||
Optimizer::SolverStatus CeresOptimizer::Solve(PoseGraphData* data) const {
|
||||
Solver::SolverStatus CeresSolver::Solve(PoseGraphData* data) const {
|
||||
ceres::Problem problem(problem_options_);
|
||||
|
||||
for (const auto& constraint : data->constraints) {
|
||||
constraint->AddToOptimizer(&data->nodes, &problem);
|
||||
constraint->AddToSolver(&data->nodes, &problem);
|
||||
}
|
||||
|
||||
ceres::Solver::Summary summary;
|
|
@ -14,19 +14,19 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_CERES_OPTIMIZER_H_
|
||||
#define CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_CERES_OPTIMIZER_H_
|
||||
#ifndef CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_CERES_SOLVER_H_
|
||||
#define CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_CERES_SOLVER_H_
|
||||
|
||||
#include "cartographer/pose_graph/optimizer/optimizer.h"
|
||||
#include "cartographer/pose_graph/solver/solver.h"
|
||||
#include "ceres/problem.h"
|
||||
#include "ceres/solver.h"
|
||||
|
||||
namespace cartographer {
|
||||
namespace pose_graph {
|
||||
|
||||
class CeresOptimizer : public Optimizer {
|
||||
class CeresSolver : public Solver {
|
||||
public:
|
||||
explicit CeresOptimizer(const ceres::Solver::Options& options);
|
||||
explicit CeresSolver(const ceres::Solver::Options& options);
|
||||
|
||||
SolverStatus Solve(PoseGraphData* data) const final;
|
||||
|
||||
|
@ -38,4 +38,4 @@ class CeresOptimizer : public Optimizer {
|
|||
} // namespace pose_graph
|
||||
} // namespace cartographer
|
||||
|
||||
#endif // CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_CERES_OPTIMIZER_H_
|
||||
#endif // CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_CERES_SOLVER_H_
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "cartographer/pose_graph/optimizer/ceres_optimizer.h"
|
||||
#include "cartographer/pose_graph/solver/ceres_solver.h"
|
||||
|
||||
#include "absl/memory/memory.h"
|
||||
#include "cartographer/pose_graph/constraint/relative_pose_constraint_2d.h"
|
||||
|
@ -67,14 +67,14 @@ constexpr char kRelativePose2D[] = R"PROTO(
|
|||
}
|
||||
)PROTO";
|
||||
|
||||
TEST(CeresOptimizerTest, SmokeTest) {
|
||||
TEST(CeresSolverTest, SmokeTest) {
|
||||
PoseGraphData data;
|
||||
AddNodeToPoseGraphData(ParseProto<proto::Node>(kStartNode), &data);
|
||||
AddNodeToPoseGraphData(ParseProto<proto::Node>(kEndNode), &data);
|
||||
AddConstraintToPoseGraphData(ParseProto<proto::Constraint>(kRelativePose2D),
|
||||
&data);
|
||||
CeresOptimizer optimizer(ceres::Solver::Options{});
|
||||
EXPECT_EQ(optimizer.Solve(&data), Optimizer::SolverStatus::CONVERGENCE);
|
||||
CeresSolver optimizer(ceres::Solver::Options{});
|
||||
EXPECT_EQ(optimizer.Solve(&data), Solver::SolverStatus::CONVERGENCE);
|
||||
}
|
||||
|
||||
} // namespace
|
|
@ -14,15 +14,15 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_OPTIMIZER_H_
|
||||
#define CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_OPTIMIZER_H_
|
||||
#ifndef CARTOGRAPHER_POSE_GRAPH_SOLVER_SOLVER_H_
|
||||
#define CARTOGRAPHER_POSE_GRAPH_SOLVER_SOLVER_H_
|
||||
|
||||
#include "cartographer/pose_graph/pose_graph_data.h"
|
||||
|
||||
namespace cartographer {
|
||||
namespace pose_graph {
|
||||
|
||||
class Optimizer {
|
||||
class Solver {
|
||||
public:
|
||||
enum class SolverStatus {
|
||||
CONVERGENCE,
|
||||
|
@ -30,11 +30,11 @@ class Optimizer {
|
|||
FAILURE,
|
||||
};
|
||||
|
||||
Optimizer() = default;
|
||||
virtual ~Optimizer() = default;
|
||||
Solver() = default;
|
||||
virtual ~Solver() = default;
|
||||
|
||||
Optimizer(const Optimizer&) = delete;
|
||||
Optimizer& operator=(const Optimizer&) = delete;
|
||||
Solver(const Solver&) = delete;
|
||||
Solver& operator=(const Solver&) = delete;
|
||||
|
||||
virtual SolverStatus Solve(PoseGraphData* data) const = 0;
|
||||
};
|
||||
|
@ -42,4 +42,4 @@ class Optimizer {
|
|||
} // namespace pose_graph
|
||||
} // namespace cartographer
|
||||
|
||||
#endif // CARTOGRAPHER_POSE_GRAPH_OPTIMIZER_OPTIMIZER_H_
|
||||
#endif // CARTOGRAPHER_POSE_GRAPH_SOLVER_SOLVER_H_
|
Loading…
Reference in New Issue