Refactoring: Split Odometry classes in multiple headers. Added Odometry::create(type) for convenience, working with "Odom/Strategy" parameter. Renamed OdometryBOW to OdometryLocalMap (more descriptive name).

This commit is contained in:
matlabbe
2016-01-05 16:37:14 -05:00
parent 1b2f1baf3d
commit 703b7181d9
21 changed files with 339 additions and 219 deletions

View File

@@ -55,7 +55,7 @@ SET(SRC_FILES
Odometry.cpp
OdometryThread.cpp
OdometryBOW.cpp
OdometryLocalMap.cpp
OdometryMono.cpp
OdometryICP.cpp
OdometryF2F.cpp

View File

@@ -26,6 +26,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "rtabmap/core/Odometry.h"
#include "rtabmap/core/OdometryF2F.h"
#include "rtabmap/core/OdometryLocalMap.h"
#include "rtabmap/core/OdometryInfo.h"
#include "rtabmap/utilite/ULogger.h"
#include "rtabmap/utilite/UTimer.h"
@@ -34,6 +36,31 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace rtabmap {
Odometry * Odometry::create(const ParametersMap & parameters)
{
int odomTypeInt = Parameters::defaultOdomStrategy();
Parameters::parse(parameters, Parameters::kOdomStrategy(), odomTypeInt);
Odometry::Type type = (Odometry::Type)odomTypeInt;
return create(type, parameters);
}
Odometry * Odometry::create(Odometry::Type & type, const ParametersMap & parameters)
{
UDEBUG("type=%d", (int)type);
Odometry * odometry = 0;
switch(type)
{
case Odometry::kTypeF2F:
odometry = new OdometryF2F(parameters);
break;
default:
odometry = new OdometryLocalMap(parameters);
type = Odometry::kTypeLocalMap;
break;
}
return odometry;
}
Odometry::Odometry(const rtabmap::ParametersMap & parameters) :
_roiRatios(Parameters::defaultVisRoiRatios()),
_minInliers(Parameters::defaultVisMinInliers()),

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "rtabmap/core/Odometry.h"
#include "rtabmap/core/OdometryF2F.h"
#include "rtabmap/core/OdometryInfo.h"
#include "rtabmap/core/EpipolarGeometry.h"
#include "rtabmap/utilite/ULogger.h"

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "rtabmap/core/Odometry.h"
#include "rtabmap/core/OdometryICP.h"
#include "rtabmap/core/util3d_registration.h"
#include "rtabmap/core/util3d_filtering.h"
#include "rtabmap/core/util3d_surface.h"

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "rtabmap/core/Odometry.h"
#include "rtabmap/core/OdometryLocalMap.h"
#include "rtabmap/core/OdometryInfo.h"
#include "rtabmap/core/Memory.h"
#include "rtabmap/core/Signature.h"
@@ -49,7 +49,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace rtabmap {
OdometryBOW::OdometryBOW(const ParametersMap & parameters) :
OdometryLocalMap::OdometryLocalMap(const ParametersMap & parameters) :
Odometry(parameters),
_localHistoryMaxSize(Parameters::defaultOdomBowLocalHistorySize()),
_fixedLocalMapPath(Parameters::defaultOdomBowFixedLocalMapPath()),
@@ -172,14 +172,14 @@ OdometryBOW::OdometryBOW(const ParametersMap & parameters) :
}
}
OdometryBOW::~OdometryBOW()
OdometryLocalMap::~OdometryLocalMap()
{
delete _memory;
UDEBUG("");
}
void OdometryBOW::reset(const Transform & initialPose)
void OdometryLocalMap::reset(const Transform & initialPose)
{
if(_fixedLocalMapPath.empty())
{
@@ -194,7 +194,7 @@ void OdometryBOW::reset(const Transform & initialPose)
}
// return not null transform if odometry is correctly computed
Transform OdometryBOW::computeTransform(
Transform OdometryLocalMap::computeTransform(
const SensorData & data,
OdometryInfo * info)
{

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "rtabmap/core/Odometry.h"
#include "rtabmap/core/OdometryMono.h"
#include "rtabmap/core/OdometryInfo.h"
#include "rtabmap/core/Memory.h"
#include "rtabmap/core/Signature.h"

View File

@@ -27,6 +27,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/core/OdometryThread.h"
#include "rtabmap/core/Odometry.h"
#include "rtabmap/core/OdometryMono.h"
#include "rtabmap/core/OdometryLocalMap.h"
#include "rtabmap/core/OdometryInfo.h"
#include "rtabmap/core/CameraEvent.h"
#include "rtabmap/core/OdometryEvent.h"
@@ -101,7 +103,7 @@ void OdometryThread::mainLoop()
void OdometryThread::addData(const SensorData & data)
{
if(dynamic_cast<OdometryMono*>(_odometry) == 0 && dynamic_cast<OdometryBOW*>(_odometry) == 0)
if(dynamic_cast<OdometryMono*>(_odometry) == 0 && dynamic_cast<OdometryLocalMap*>(_odometry) == 0)
{
if(data.imageRaw().empty() || data.depthOrRightRaw().empty() || (data.cameraModels().size()==0 && !data.stereoCameraModel().isValid()))
{

View File

@@ -67,7 +67,11 @@ Optimizer * Optimizer::create(const ParametersMap & parameters)
int optimizerTypeInt = Parameters::defaultOptimizerStrategy();
Parameters::parse(parameters, Parameters::kOptimizerStrategy(), optimizerTypeInt);
Optimizer::Type type = (Optimizer::Type)optimizerTypeInt;
return create(type, parameters);
}
Optimizer * Optimizer::create(Optimizer::Type & type, const ParametersMap & parameters)
{
if(!OptimizerG2O::available() && type == Optimizer::kTypeG2O)
{
UWARN("g2o optimizer not available. TORO will be used instead.");
@@ -104,37 +108,6 @@ Optimizer * Optimizer::create(const ParametersMap & parameters)
return optimizer;
}
Optimizer * Optimizer::create(Optimizer::Type & type, const ParametersMap & parameters)
{
if(!OptimizerG2O::available() && type == Optimizer::kTypeG2O)
{
UWARN("g2o optimizer not available. TORO will be used instead.");
type = Optimizer::kTypeTORO;
}
if(!OptimizerGTSAM::available() && type == Optimizer::kTypeGTSAM)
{
UWARN("GTSAM optimizer not available. TORO will be used instead.");
type = Optimizer::kTypeTORO;
}
Optimizer * optimizer = 0;
switch(type)
{
case Optimizer::kTypeGTSAM:
optimizer = new OptimizerGTSAM(parameters);
break;
case Optimizer::kTypeG2O:
optimizer = new OptimizerG2O(parameters);
break;
case Optimizer::kTypeTORO:
default:
optimizer = new OptimizerTORO(parameters);
type = Optimizer::kTypeTORO;
break;
}
return optimizer;
}
Optimizer::Optimizer(int iterations, bool slam2d, bool covarianceIgnored, double epsilon, bool robust) :
iterations_(iterations),
slam2d_(slam2d),