在编译isc_loam时遇到一下问题,后来经网上查找原来是最新版本的 Ceres Solver (v 2.1.0) 弃用了 ceres::LocalParameterization API。今后这将被删除。libmv 使用 Ceres Solver 进行捆绑调整。libmv 应更新为使用 ceres::Manifold (由 ceres 版本号保护)而不是 ceres::LocalParameterization。
error: expected class-name before ‘{’ token
40 | class PoseSE3Parameterization : public ceres::LocalParameterization {
problem.AddParameterBlock(parameters, 7, new ceres::LocalParameterization);
替换
problem.AddParameterBlock(parameters, 7, new ceres::EigenQuaternionManifold());
官方文档显示
EigenQuaternionParameterization is deprecated. It will be
removed in version 2.2.0 of Ceres Solver. Please use EigenQuaternionManifold instead.
证明EigenQuaternionParameterization已经过时,需要使用EigenQuaternionManifold替换,即:
error: invalid new-expression of abstract class type ‘PoseSE3Parameterization’
251 | problem.AddParameterBlock(parameters, 7, new PoseSE3Parameterization());
class PoseSE3Parameterization : public ceres::LocalParameterization {
public:
PoseSE3Parameterization() {}
virtual ~PoseSE3Parameterization() {}
virtual bool Plus(const double* x, const double* delta, double* x_plus_delta) const;
virtual bool ComputeJacobian(const double* x, double* jacobian) const;
virtual int GlobalSize() const { return 7; }
virtual int LocalSize() const { return 6; }
};
//替换//
class PoseSE3Parameterization : public ceres::Manifold {
public:
PoseSE3Parameterization() {}
virtual ~PoseSE3Parameterization() {}
virtual bool Plus(const double* x, const double* delta, double* x_plus_delta) const;
virtual bool ComputeJacobian(const double* x, double* jacobian) const;
virtual int GlobalSize() const { return 7; }
virtual int LocalSize() const { return 6; }
};