Tango: fixed MaxOptimizeError value that now is a factor. Docker: updated tango download links

This commit is contained in:
matlabbe
2018-03-18 18:47:13 -04:00
parent 548f0b6130
commit dd59d3c713
5 changed files with 46 additions and 27 deletions

View File

@@ -950,8 +950,8 @@ void CameraTango::mainLoop()
info.interval = data.stamp()-previousStamp_; info.interval = data.stamp()-previousStamp_;
info.transform = previousPose_.inverse() * pose; info.transform = previousPose_.inverse() * pose;
} }
info.reg.covariance = cv::Mat::eye(6,6,CV_64FC1) * (firstFrame?9999.0:0.000001); info.reg.covariance = cv::Mat::eye(6,6,CV_64FC1) * (firstFrame?9999.0:0.0001);
LOGI("Publish odometry message (variance=%f)", firstFrame?9999:0.000001); LOGI("Publish odometry message (variance=%f)", firstFrame?9999:0.0001);
this->post(new OdometryEvent(data, pose, info)); this->post(new OdometryEvent(data, pose, info));
previousPose_ = pose; previousPose_ = pose;
previousStamp_ = data.stamp(); previousStamp_ = data.stamp();

View File

@@ -95,7 +95,7 @@ rtabmap::ParametersMap RTABMapApp::getRtabmapParameters()
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDOptimizeFromGraphEnd(), std::string("true"))); parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDOptimizeFromGraphEnd(), std::string("true")));
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kVisMinInliers(), std::string("25"))); parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kVisMinInliers(), std::string("25")));
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kVisEstimationType(), std::string("0"))); // 0=3D-3D 1=PnP parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kVisEstimationType(), std::string("0"))); // 0=3D-3D 1=PnP
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDOptimizeMaxError(), std::string("0.1"))); parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDOptimizeMaxError(), std::string("1")));
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDProximityPathMaxNeighbors(), std::string("0"))); // disable scan matching to merged nodes parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDProximityPathMaxNeighbors(), std::string("0"))); // disable scan matching to merged nodes
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDProximityBySpace(), std::string("false"))); // just keep loop closure detection parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDProximityBySpace(), std::string("false"))); // just keep loop closure detection
parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDLinearUpdate(), std::string("0.05"))); parameters.insert(rtabmap::ParametersPair(rtabmap::Parameters::kRGBDLinearUpdate(), std::string("0.05")));
@@ -3305,6 +3305,7 @@ bool RTABMapApp::handleEvent(UEvent * event)
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopVisual_matches(), uValue(stats.data(), rtabmap::Statistics::kLoopVisual_matches(), 0.0f))); uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopVisual_matches(), uValue(stats.data(), rtabmap::Statistics::kLoopVisual_matches(), 0.0f)));
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopRejectedHypothesis(), uValue(stats.data(), rtabmap::Statistics::kLoopRejectedHypothesis(), 0.0f))); uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopRejectedHypothesis(), uValue(stats.data(), rtabmap::Statistics::kLoopRejectedHypothesis(), 0.0f)));
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopOptimization_max_error(), uValue(stats.data(), rtabmap::Statistics::kLoopOptimization_max_error(), 0.0f))); uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopOptimization_max_error(), uValue(stats.data(), rtabmap::Statistics::kLoopOptimization_max_error(), 0.0f)));
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopOptimization_max_error_ratio(), uValue(stats.data(), rtabmap::Statistics::kLoopOptimization_max_error_ratio(), 0.0f)));
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kMemoryRehearsal_sim(), uValue(stats.data(), rtabmap::Statistics::kMemoryRehearsal_sim(), 0.0f))); uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kMemoryRehearsal_sim(), uValue(stats.data(), rtabmap::Statistics::kMemoryRehearsal_sim(), 0.0f)));
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopHighest_hypothesis_value(), uValue(stats.data(), rtabmap::Statistics::kLoopHighest_hypothesis_value(), 0.0f))); uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kLoopHighest_hypothesis_value(), uValue(stats.data(), rtabmap::Statistics::kLoopHighest_hypothesis_value(), 0.0f)));
uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kMemoryDistance_travelled(), uValue(stats.data(), rtabmap::Statistics::kMemoryDistance_travelled(), 0.0f))); uInsert(bufferedStatsData_, std::make_pair<std::string, float>(rtabmap::Statistics::kMemoryDistance_travelled(), uValue(stats.data(), rtabmap::Statistics::kMemoryDistance_travelled(), 0.0f)));
@@ -3322,6 +3323,7 @@ bool RTABMapApp::handleEvent(UEvent * event)
int matches = (int)uValue(bufferedStatsData_, rtabmap::Statistics::kLoopVisual_matches(), 0.0f); int matches = (int)uValue(bufferedStatsData_, rtabmap::Statistics::kLoopVisual_matches(), 0.0f);
int rejected = (int)uValue(bufferedStatsData_, rtabmap::Statistics::kLoopRejectedHypothesis(), 0.0f); int rejected = (int)uValue(bufferedStatsData_, rtabmap::Statistics::kLoopRejectedHypothesis(), 0.0f);
float optimizationMaxError = uValue(bufferedStatsData_, rtabmap::Statistics::kLoopOptimization_max_error(), 0.0f); float optimizationMaxError = uValue(bufferedStatsData_, rtabmap::Statistics::kLoopOptimization_max_error(), 0.0f);
float optimizationMaxErrorRatio = uValue(bufferedStatsData_, rtabmap::Statistics::kLoopOptimization_max_error_ratio(), 0.0f);
float rehearsalValue = uValue(bufferedStatsData_, rtabmap::Statistics::kMemoryRehearsal_sim(), 0.0f); float rehearsalValue = uValue(bufferedStatsData_, rtabmap::Statistics::kMemoryRehearsal_sim(), 0.0f);
float hypothesis = uValue(bufferedStatsData_, rtabmap::Statistics::kLoopHighest_hypothesis_value(), 0.0f); float hypothesis = uValue(bufferedStatsData_, rtabmap::Statistics::kLoopHighest_hypothesis_value(), 0.0f);
float distanceTravelled = uValue(bufferedStatsData_, rtabmap::Statistics::kMemoryDistance_travelled(), 0.0f); float distanceTravelled = uValue(bufferedStatsData_, rtabmap::Statistics::kMemoryDistance_travelled(), 0.0f);
@@ -3345,7 +3347,7 @@ bool RTABMapApp::handleEvent(UEvent * event)
jclass clazz = env->GetObjectClass(RTABMapActivity); jclass clazz = env->GetObjectClass(RTABMapActivity);
if(clazz) if(clazz)
{ {
jmethodID methodID = env->GetMethodID(clazz, "updateStatsCallback", "(IIIIFIIIIIIFIFIFFFIFFFFFF)V" ); jmethodID methodID = env->GetMethodID(clazz, "updateStatsCallback", "(IIIIFIIIIIIFIFIFFFFIFFFFFF)V" );
if(methodID) if(methodID)
{ {
env->CallVoidMethod(RTABMapActivity, methodID, env->CallVoidMethod(RTABMapActivity, methodID,
@@ -3366,6 +3368,7 @@ bool RTABMapApp::handleEvent(UEvent * event)
rejected, rejected,
rehearsalValue, rehearsalValue,
optimizationMaxError, optimizationMaxError,
optimizationMaxErrorRatio,
distanceTravelled, distanceTravelled,
fastMovement, fastMovement,
x, x,

View File

@@ -91,7 +91,7 @@
<string name="pref_key_min_inliers">pref_key_min_inliers</string> <string name="pref_key_min_inliers">pref_key_min_inliers</string>
<string name="pref_default_min_inliers">25</string> <string name="pref_default_min_inliers">25</string>
<string name="pref_key_opt_error">pref_key_opt_error</string> <string name="pref_key_opt_error">pref_key_opt_error</string>
<string name="pref_default_opt_error">0.1</string> <string name="pref_default_opt_error">2</string>
<string name="pref_key_features_voc">pref_key_features_voc</string> <string name="pref_key_features_voc">pref_key_features_voc</string>
<string name="pref_default_features_voc">200</string> <string name="pref_default_features_voc">200</string>
<string name="pref_key_features">pref_key_features</string> <string name="pref_key_features">pref_key_features</string>
@@ -333,7 +333,7 @@
<string name="pref_title_min_inliers">Min Inliers</string> <string name="pref_title_min_inliers">Min Inliers</string>
<string name="pref_summary_min_inliers">Minimum visual inliers to accept a loop closure.</string> <string name="pref_summary_min_inliers">Minimum visual inliers to accept a loop closure.</string>
<string name="pref_title_opt_error">Max Optimization Error</string> <string name="pref_title_opt_error">Max Optimization Error</string>
<string name="pref_summary_opt_error">Reject any loop closures causing error corrections in the map higher than this threshold.</string> <string name="pref_summary_opt_error">Reject any loop closures causing error corrections in the map higher than this factor of the link\'s variance.</string>
<string name="pref_title_features_voc">Max Features Extracted (Vocabulary)</string> <string name="pref_title_features_voc">Max Features Extracted (Vocabulary)</string>
<string name="pref_summary_features_voc">Extracting more features per image would result in better loop closure hypotheses but more processing time is required.</string> <string name="pref_summary_features_voc">Extracting more features per image would result in better loop closure hypotheses but more processing time is required.</string>
<string name="pref_title_features">Max Features Extracted (Loop Closure)</string> <string name="pref_title_features">Max Features Extracted (Loop Closure)</string>
@@ -494,25 +494,29 @@
<item>"10"</item> <item>"10"</item>
</string-array> </string-array>
<string-array name="pref_opt_error_keys"> <string-array name="pref_opt_error_keys">
<item>"1.0 m"</item> <item>"10x"</item>
<item>"0.5 m"</item> <item>"9x"</item>
<item>"0.35 m"</item> <item>"8x"</item>
<item>"0.2 m"</item> <item>"7x"</item>
<item>"0.1 m"</item> <item>"6x"</item>
<item>"0.05 m"</item> <item>"5x"</item>
<item>"0.025 m"</item> <item>"4x"</item>
<item>"0.01 m"</item> <item>"3x"</item>
<item>"2x"</item>
<item>"1x"</item>
<item>"Disabled"</item> <item>"Disabled"</item>
</string-array> </string-array>
<string-array name="pref_opt_error_values"> <string-array name="pref_opt_error_values">
<item>"1.0"</item> <item>"10"</item>
<item>"0.5"</item> <item>"9"</item>
<item>"0.35"</item> <item>"8"</item>
<item>"0.2"</item> <item>"7"</item>
<item>"0.1"</item> <item>"6"</item>
<item>"0.05"</item> <item>"5"</item>
<item>"0.025"</item> <item>"4"</item>
<item>"0.01"</item> <item>"3"</item>
<item>"2"</item>
<item>"1"</item>
<item>"0"</item> <item>"0"</item>
</string-array> </string-array>
<string-array name="pref_features_voc_keys"> <string-array name="pref_features_voc_keys">

View File

@@ -71,6 +71,7 @@ import android.os.Handler;
import android.os.Debug; import android.os.Debug;
import android.os.IBinder; import android.os.IBinder;
import android.os.Message; import android.os.Message;
import android.preference.ListPreference;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.text.Editable; import android.text.Editable;
import android.text.Html; import android.text.Html;
@@ -708,6 +709,15 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
String simThr = sharedPref.getString(getString(R.string.pref_key_sim_thr), getString(R.string.pref_default_sim_thr)); String simThr = sharedPref.getString(getString(R.string.pref_key_sim_thr), getString(R.string.pref_default_sim_thr));
mMinInliers = sharedPref.getString(getString(R.string.pref_key_min_inliers), getString(R.string.pref_default_min_inliers)); mMinInliers = sharedPref.getString(getString(R.string.pref_key_min_inliers), getString(R.string.pref_default_min_inliers));
mMaxOptimizationError = sharedPref.getString(getString(R.string.pref_key_opt_error), getString(R.string.pref_default_opt_error)); mMaxOptimizationError = sharedPref.getString(getString(R.string.pref_key_opt_error), getString(R.string.pref_default_opt_error));
float maxOptimizationError = Float.parseFloat(mMaxOptimizationError);
if(maxOptimizationError >0 && maxOptimizationError<1)
{
Log.w(TAG, "Migration of " + getString(R.string.pref_key_opt_error) + " from " + mMaxOptimizationError + " to " + getString(R.string.pref_default_opt_error)) ;
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(getString(R.string.pref_key_opt_error), getString(R.string.pref_default_opt_error));
editor.commit();
mMaxOptimizationError = getString(R.string.pref_default_opt_error);
}
mMaxFeatures = sharedPref.getString(getString(R.string.pref_key_features_voc), getString(R.string.pref_default_features_voc)); mMaxFeatures = sharedPref.getString(getString(R.string.pref_key_features_voc), getString(R.string.pref_default_features_voc));
String maxFeaturesLoop = sharedPref.getString(getString(R.string.pref_key_features), getString(R.string.pref_default_features)); String maxFeaturesLoop = sharedPref.getString(getString(R.string.pref_key_features), getString(R.string.pref_default_features));
String featureType = sharedPref.getString(getString(R.string.pref_key_features_type), getString(R.string.pref_default_features_type)); String featureType = sharedPref.getString(getString(R.string.pref_key_features_type), getString(R.string.pref_default_features_type));
@@ -1023,6 +1033,7 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
int matches, int matches,
int rejected, int rejected,
float optimizationMaxError, float optimizationMaxError,
float optimizationMaxErrorRatio,
boolean fastMovement, boolean fastMovement,
String[] statusTexts) String[] statusTexts)
{ {
@@ -1110,7 +1121,7 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
{ {
if(optimizationMaxError > 0.0f) if(optimizationMaxError > 0.0f)
{ {
mToast.setText(String.format("Loop closure rejected, too high graph optimization error (%.3fm > %sm).", optimizationMaxError, mMaxOptimizationError)); mToast.setText(String.format("Loop closure rejected, too high graph optimization error (%.3fm: ratio=%.3f < factor=%sx).", optimizationMaxError, optimizationMaxErrorRatio, mMaxOptimizationError));
} }
else else
{ {
@@ -1158,6 +1169,7 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
final int rejected, final int rejected,
final float rehearsalValue, final float rehearsalValue,
final float optimizationMaxError, final float optimizationMaxError,
final float optimizationMaxErrorRatio,
final float distanceTravelled, final float distanceTravelled,
final int fastMovement, final int fastMovement,
final float x, final float x,
@@ -1238,7 +1250,7 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
public void run() { public void run() {
updateStatsUI(loopClosureId, inliers, matches, rejected, optimizationMaxError, fastMovement!=0, statusTexts); updateStatsUI(loopClosureId, inliers, matches, rejected, optimizationMaxError, optimizationMaxErrorRatio, fastMovement!=0, statusTexts);
} }
}); });
} }

View File

@@ -11,7 +11,7 @@ prefix=$1
git clone https://github.com/introlab/rtabmap.git rtabmap-tango git clone https://github.com/introlab/rtabmap.git rtabmap-tango
# tango # tango
wget https://developers.google.com/tango/downloads/TangoSDK_Ikariotikos_C.zip wget 'https://docs.google.com/uc?authuser=0&id=12rHHkYM5k-UnQn-xGXs9JqYWhSXrgJr3&export=download' -O TangoSDK_Ikariotikos_C.zip
unzip -qq TangoSDK_Ikariotikos_C.zip unzip -qq TangoSDK_Ikariotikos_C.zip
rm TangoSDK_Ikariotikos_C.zip rm TangoSDK_Ikariotikos_C.zip
cp -r lib_tango_client_api/include/* $prefix/armeabi-v7a/include/. cp -r lib_tango_client_api/include/* $prefix/armeabi-v7a/include/.
@@ -19,7 +19,7 @@ cp -r lib_tango_client_api/include/* $prefix/arm64-v8a/include/.
cp -r lib_tango_client_api/lib/armeabi-v7a/* $prefix/armeabi-v7a/lib/. cp -r lib_tango_client_api/lib/armeabi-v7a/* $prefix/armeabi-v7a/lib/.
cp -r lib_tango_client_api/lib/arm64-v8a/* $prefix/arm64-v8a/lib/. cp -r lib_tango_client_api/lib/arm64-v8a/* $prefix/arm64-v8a/lib/.
rm -r lib_tango_client_api rm -r lib_tango_client_api
wget https://developers.google.com/tango/downloads/TangoSupport_Ikariotikos_C.zip wget 'https://docs.google.com/uc?authuser=0&id=1AqVuEVu5284X6OgrGWu12VTrx4pY99Jb&export=download' -O TangoSupport_Ikariotikos_C.zip
unzip -qq TangoSupport_Ikariotikos_C.zip unzip -qq TangoSupport_Ikariotikos_C.zip
rm TangoSupport_Ikariotikos_C.zip rm TangoSupport_Ikariotikos_C.zip
cp -r lib_tango_support_api/include/* $prefix/armeabi-v7a/include/. cp -r lib_tango_support_api/include/* $prefix/armeabi-v7a/include/.
@@ -28,7 +28,7 @@ cp -r lib_tango_support_api/lib/armeabi-v7a/* $prefix/armeabi-v7a/lib/.
cp -r lib_tango_support_api/lib/arm64-v8a/* $prefix/arm64-v8a/lib/. cp -r lib_tango_support_api/lib/arm64-v8a/* $prefix/arm64-v8a/lib/.
cp -r lib_tango_support_api/lib/* rtabmap-tango/app/android/jni/third-party/lib/. cp -r lib_tango_support_api/lib/* rtabmap-tango/app/android/jni/third-party/lib/.
rm -r lib_tango_support_api rm -r lib_tango_support_api
wget https://developers.google.com/tango/downloads/TangoSDK_Ikariotikos_Java.jar wget 'https://docs.google.com/uc?authuser=0&id=1s5iPJ7xiridj9Jj--gCy2XiQFniheVm6&export=download' -O TangoSDK_Ikariotikos_Java.jar
mv TangoSDK_Ikariotikos_Java.jar rtabmap-tango/app/android/libs/. mv TangoSDK_Ikariotikos_Java.jar rtabmap-tango/app/android/libs/.
# resource tool # resource tool