Removing enum ConstraintType
It's time to think about removing the enums in wolf.h. This issue concerns the ConstraintType enum
.
The idea is to be able to completely avoid these global enums. This first post just exposes the current situation.
This enum is used in switch / case statements in three places:
- In SolverManager:
ceres::CostFunction* SolverManager::createCostFunction(ConstraintBasePtr _corrPtr)
{
switch (_corrPtr->getConstraintType())
{
case CTR_GPS_FIX_2D:
{
ConstraintGPS2D* specific_ptr = (ConstraintGPS2D*)(_corrPtr);
return new ceres::AutoDiffCostFunction<ConstraintGPS2D,
specific_ptr->measurementSize,
specific_ptr->block0Size,
specific_ptr->block1Size,
specific_ptr->block2Size,
specific_ptr->block3Size,
specific_ptr->block4Size,
specific_ptr->block5Size,
specific_ptr->block6Size,
specific_ptr->block7Size,
specific_ptr->block8Size,
specific_ptr->block9Size>(specific_ptr);
break;
}
case CTR_ODOM_2D_COMPLEX_ANGLE:
{
[...]
}
}
- In qr_solver.h :
CostFunctionBasePtr createCostFunction(ConstraintBasePtr _corrPtr)
{
//std::cout << "adding ctr " << _corrPtr->nodeId() << std::endl;
//_corrPtr->print();
switch (_corrPtr->getTypeId())
{
case CTR_GPS_FIX_2D:
{
ConstraintGPS2D* specific_ptr = (ConstraintGPS2D*)(_corrPtr);
return (CostFunctionBasePtr)(new CostFunctionSparse<ConstraintGPS2D, specific_ptr->measurementSize,
specific_ptr->block0Size, specific_ptr->block1Size, specific_ptr->block2Size,
specific_ptr->block3Size, specific_ptr->block4Size, specific_ptr->block5Size,
specific_ptr->block6Size, specific_ptr->block7Size, specific_ptr->block8Size,
specific_ptr->block9Size>(specific_ptr));
break;
}
case CTR_ODOM_2D:
{
[...]
}
}
}
- In create_autodiff_cost_function.cpp
ceres::CostFunction* createAutoDiffCostFunction(ConstraintBasePtr _ctr_ptr, bool _use_wolf_autodiff)
{
switch (_ctr_ptr->getTypeId())
{
case CTR_GPS_FIX_2D:
if (_use_wolf_autodiff)
return createAutoDiffCostFunctionWrapper<ConstraintGPS2D>(_ctr_ptr);
else
return createAutoDiffCostFunctionCeres<ConstraintGPS2D>(_ctr_ptr);
case CTR_FIX:
[...]
}
}