mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 09:30:25 +08:00
Tango: fixed MaxOptimizeError value that now is a factor. Docker: updated tango download links
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user