diff --git a/include/rtabmap_ros/CoreWrapper.h b/include/rtabmap_ros/CoreWrapper.h
index 6855aaf7..b1f0be5d 100644
--- a/include/rtabmap_ros/CoreWrapper.h
+++ b/include/rtabmap_ros/CoreWrapper.h
@@ -186,6 +186,8 @@ private:
std::string groundTruthBaseFrameId_;
std::string configPath_;
std::string databasePath_;
+ float odomDefaultAngVariance_;
+ float odomDefaultLinVariance_;
bool waitForTransform_;
double waitForTransformDuration_;
bool useActionForGoal_;
diff --git a/launch/rtabmap.launch b/launch/rtabmap.launch
index b421cd23..0e231dba 100644
--- a/launch/rtabmap.launch
+++ b/launch/rtabmap.launch
@@ -63,10 +63,13 @@
-
-
-
-
+
+
+
+
+
+
+
@@ -128,6 +131,8 @@
+
+
diff --git a/src/CoreWrapper.cpp b/src/CoreWrapper.cpp
index 98583494..4d614e66 100644
--- a/src/CoreWrapper.cpp
+++ b/src/CoreWrapper.cpp
@@ -93,6 +93,8 @@ CoreWrapper::CoreWrapper() :
groundTruthBaseFrameId_(""), // e.g., "base_link_gt"
configPath_(""),
databasePath_(UDirectory::homeDir()+"/.ros/"+rtabmap::Parameters::getDefaultDatabaseName()),
+ odomDefaultAngVariance_(1.0),
+ odomDefaultLinVariance_(1.0),
waitForTransform_(true),
waitForTransformDuration_(0.2), // 200 ms
useActionForGoal_(false),
@@ -145,6 +147,8 @@ void CoreWrapper::onInit()
pnh.param("tf_delay", tfDelay, tfDelay);
pnh.param("tf_prefix", tfPrefix, tfPrefix);
pnh.param("tf_tolerance", tfTolerance, tfTolerance);
+ pnh.param("odom_tf_angular_variance", odomDefaultAngVariance_, odomDefaultAngVariance_);
+ pnh.param("odom_tf_linear_variance", odomDefaultLinVariance_, odomDefaultLinVariance_);
pnh.param("wait_for_transform", waitForTransform_, waitForTransform_);
pnh.param("wait_for_transform_duration", waitForTransformDuration_, waitForTransformDuration_);
pnh.param("use_action_for_goal", useActionForGoal_, useActionForGoal_);
@@ -951,8 +955,8 @@ void CoreWrapper::commonDepthCallbackImpl(
data,
lastPose_,
odomFrameId,
- uIsFinite(rotVariance_) && rotVariance_>0?rotVariance_:1.0,
- uIsFinite(transVariance_) && transVariance_>0?transVariance_:1.0);
+ rotVariance_,
+ transVariance_);
rotVariance_ = 0;
transVariance_ = 0;
}
@@ -1137,8 +1141,8 @@ void CoreWrapper::commonStereoCallback(
data,
lastPose_,
odomFrameId,
- uIsFinite(rotVariance_) && rotVariance_>0?rotVariance_:1.0,
- uIsFinite(transVariance_) && transVariance_>0?transVariance_:1.0);
+ rotVariance_,
+ transVariance_);
rotVariance_ = 0;
transVariance_ = 0;
@@ -1158,6 +1162,16 @@ void CoreWrapper::process(
double timeRtabmap = 0.0;
double timeUpdateMaps = 0.0;
double timePublishMaps = 0.0;
+
+ if(!uIsFinite(odomRotationalVariance) || odomRotationalVariance<=0.0f)
+ {
+ odomRotationalVariance = odomDefaultAngVariance_;
+ }
+ if(!uIsFinite(odomTransitionalVariance) || odomTransitionalVariance<=0.0f)
+ {
+ odomTransitionalVariance = odomDefaultLinVariance_;
+ }
+
if(rtabmap_.process(data, odom, OdometryEvent::generateCovarianceMatrix(odomRotationalVariance, odomTransitionalVariance)))
{
timeRtabmap = timer.ticks();