diff --git a/app/android/jni/RTABMapApp.cpp b/app/android/jni/RTABMapApp.cpp
index b652a83c..980e5e9b 100644
--- a/app/android/jni/RTABMapApp.cpp
+++ b/app/android/jni/RTABMapApp.cpp
@@ -1139,10 +1139,15 @@ int RTABMapApp::Render()
int fastMovement = (int)uValue(stats.data(), rtabmap::Statistics::kMemoryFast_movement(), 0.0f);
int loopClosure = (int)uValue(stats.data(), rtabmap::Statistics::kLoopAccepted_hypothesis_id(), 0.0f);
int rejected = (int)uValue(stats.data(), rtabmap::Statistics::kLoopRejectedHypothesis(), 0.0f);
+ int landmark = (int)uValue(stats.data(), rtabmap::Statistics::kLoopLandmark_detected(), 0.0f);
if(!paused_ && loopClosure>0)
{
main_scene_.setBackgroundColor(0, 0.5f, 0); // green
}
+ else if(!paused_ && landmark!=0)
+ {
+ main_scene_.setBackgroundColor(1, 0.65f, 0); // orange
+ }
else if(!paused_ && rejected>0)
{
main_scene_.setBackgroundColor(0, 0.2f, 0); // dark green
@@ -1353,10 +1358,15 @@ int RTABMapApp::Render()
int loopClosure = (int)uValue(stats.data(), rtabmap::Statistics::kLoopAccepted_hypothesis_id(), 0.0f);
int rejected = (int)uValue(stats.data(), rtabmap::Statistics::kLoopRejectedHypothesis(), 0.0f);
+ int landmark = (int)uValue(stats.data(), rtabmap::Statistics::kLoopLandmark_detected(), 0.0f);
if(!paused_ && loopClosure>0)
{
main_scene_.setBackgroundColor(0, 0.5f, 0); // green
}
+ else if(!paused_ && landmark!=0)
+ {
+ main_scene_.setBackgroundColor(1, 0.65f, 0); // orange
+ }
else if(!paused_ && rejected>0)
{
main_scene_.setBackgroundColor(0, 0.2f, 0); // dark green
diff --git a/app/android/res/layout/activity_settings.xml b/app/android/res/layout/activity_settings.xml
index c1d9cd4a..13991657 100644
--- a/app/android/res/layout/activity_settings.xml
+++ b/app/android/res/layout/activity_settings.xml
@@ -198,6 +198,13 @@
android:entries="@array/pref_marker_detection_keys"
android:entryValues="@array/pref_marker_detection_values"
android:defaultValue="@string/pref_default_marker_detection"/>
+
diff --git a/app/android/res/values/strings.xml b/app/android/res/values/strings.xml
index 4ec33a9d..ded157fd 100644
--- a/app/android/res/values/strings.xml
+++ b/app/android/res/values/strings.xml
@@ -105,6 +105,8 @@
true
pref_key_marker_detection
-1
+ pref_key_marker_detection_depth_error
+ 0.1
pref_key_keep_all_db
true
pref_key_raw_scan_saved
@@ -351,6 +353,8 @@
The map\'s graph is optimized from the last node. The map is moved when a loop closure happens instead of jumping the current pose back to localized area.
ArUco Marker Detection
ArUco markers can be detected for localization and graph optimization.
+ Marker Depth Error Estimation
+ Size of markers are automatically initialized on the first marker seen. All markers should have the same size. This value is the maximum depth error to do the initialization to get accurate size of the tag. The lower it is, the more perpendicular the camera should be from the marker to do initialization, but size estimated would be more accurate.
Save All Frames in Database
Discarded frames while not moving are still saved in database. Useful to replay exactly the scanning on RTAB-Map Desktop.
Save Raw Scan
@@ -648,6 +652,43 @@
- "19"
- "20"
+
+
+ - "1 cm"
+ - "2 cm"
+ - "3 cm"
+ - "4 cm"
+ - "5 cm"
+ - "6 cm"
+ - "7 cm"
+ - "8 cm"
+ - "9 cm"
+ - "10 cm"
+ - "15 cm"
+ - "20 cm"
+ - "30 cm"
+ - "40 cm"
+ - "50 cm"
+ - "100 cm"
+
+
+ - "0.01"
+ - "0.02"
+ - "0.03"
+ - "0.04"
+ - "0.05"
+ - "0.06"
+ - "0.07"
+ - "0.08"
+ - "0.09"
+ - "0.1"
+ - "0.15"
+ - "0.20"
+ - "0.30"
+ - "0.40"
+ - "0.50"
+ - "1"
+
Exporting…
Exporting
diff --git a/app/android/src/com/introlab/rtabmap/RTABMapActivity.java b/app/android/src/com/introlab/rtabmap/RTABMapActivity.java
index 386d6668..cdf2adce 100644
--- a/app/android/src/com/introlab/rtabmap/RTABMapActivity.java
+++ b/app/android/src/com/introlab/rtabmap/RTABMapActivity.java
@@ -777,6 +777,7 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
boolean optimizeFromGraphEnd = sharedPref.getBoolean(getString(R.string.pref_key_optimize_end), Boolean.parseBoolean(getString(R.string.pref_default_optimize_end)));
String optimizer = sharedPref.getString(getString(R.string.pref_key_optimizer), getString(R.string.pref_default_optimizer));
String markerDetection = sharedPref.getString(getString(R.string.pref_key_marker_detection), getString(R.string.pref_default_marker_detection));
+ String markerDetectionDepthError = sharedPref.getString(getString(R.string.pref_key_marker_detection_depth_error), getString(R.string.pref_default_marker_detection_depth_error));
mGPSSaved = sharedPref.getBoolean(getString(R.string.pref_key_gps_saved), Boolean.parseBoolean(getString(R.string.pref_default_gps_saved)));
if(mGPSSaved)
{
@@ -842,6 +843,7 @@ public class RTABMapActivity extends Activity implements OnClickListener, OnItem
RTABMapLib.setMappingParameter("Aruco/Dictionary", markerDetection);
RTABMapLib.setMappingParameter("Aruco/CornerRefinementMethod", Integer.parseInt(markerDetection) > 16?"3":"0");
}
+ RTABMapLib.setMappingParameter("Aruco/MaxDepthError", markerDetectionDepthError);
if(!DISABLE_LOG) Log.d(TAG, "set exporting parameters...");
RTABMapLib.setCloudDensityLevel(Integer.parseInt(sharedPref.getString(getString(R.string.pref_key_density), getString(R.string.pref_default_density))));
diff --git a/app/android/src/com/introlab/rtabmap/SettingsActivity.java b/app/android/src/com/introlab/rtabmap/SettingsActivity.java
index af8287dd..0eab5636 100644
--- a/app/android/src/com/introlab/rtabmap/SettingsActivity.java
+++ b/app/android/src/com/introlab/rtabmap/SettingsActivity.java
@@ -207,6 +207,7 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
((Preference)findPreference(getString(R.string.pref_key_features_type))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_features_type))).getEntry() + ") "+getString(R.string.pref_summary_features_type));
((Preference)findPreference(getString(R.string.pref_key_optimizer))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_optimizer))).getEntry() + ") "+getString(R.string.pref_summary_optimizer));
((Preference)findPreference(getString(R.string.pref_key_marker_detection))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_marker_detection))).getEntry() + ") "+getString(R.string.pref_summary_marker_detection));
+ ((Preference)findPreference(getString(R.string.pref_key_marker_detection_depth_error))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_marker_detection_depth_error))).getEntry() + ") "+getString(R.string.pref_summary_marker_detection_depth_error));
((Preference)findPreference(getString(R.string.pref_key_cloud_voxel))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_cloud_voxel))).getEntry() + ") "+getString(R.string.pref_summary_cloud_voxel));
((Preference)findPreference(getString(R.string.pref_key_texture_size))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_texture_size))).getEntry() + ") "+getString(R.string.pref_summary_texture_size));
@@ -267,6 +268,7 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
if(key.compareTo(getString(R.string.pref_key_features_type))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_features_type));
if(key.compareTo(getString(R.string.pref_key_optimizer))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_optimizer));
if(key.compareTo(getString(R.string.pref_key_marker_detection))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_marker_detection));
+ if(key.compareTo(getString(R.string.pref_key_marker_detection_depth_error))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_marker_detection_depth_error));
if(key.compareTo(getString(R.string.pref_key_cloud_voxel))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_cloud_voxel));
if(key.compareTo(getString(R.string.pref_key_texture_size))==0) pref.setSummary("("+((ListPreference)pref).getEntry() + ") "+getString(R.string.pref_summary_texture_size));