exportGraph: added RGBD-SLAM format (10) without motion capture coordinate transformation (#332)

This commit is contained in:
matlabbe
2018-11-08 12:26:37 -05:00
parent 433e20869c
commit c5057eb6b3
10 changed files with 120 additions and 55 deletions

View File

@@ -47,7 +47,7 @@ namespace graph {
bool RTABMAP_EXP exportPoses( bool RTABMAP_EXP exportPoses(
const std::string & filePath, const std::string & filePath,
int format, // 0=Raw (*.txt), 1=RGBD-SLAM (*.txt), 2=KITTI (*.txt), 3=TORO (*.graph), 4=g2o (*.g2o) int format, // 0=Raw (*.txt), 1=RGBD-SLAM motion capture (*.txt) (10=without change of coordinate frame), 2=KITTI (*.txt), 3=TORO (*.graph), 4=g2o (*.g2o)
const std::map<int, Transform> & poses, const std::map<int, Transform> & poses,
const std::multimap<int, Link> & constraints = std::multimap<int, Link>(), // required for formats 3 and 4 const std::multimap<int, Link> & constraints = std::multimap<int, Link>(), // required for formats 3 and 4
const std::map<int, double> & stamps = std::map<int, double>(), // required for format 1 const std::map<int, double> & stamps = std::map<int, double>(), // required for format 1
@@ -55,7 +55,7 @@ namespace graph {
bool RTABMAP_EXP importPoses( bool RTABMAP_EXP importPoses(
const std::string & filePath, const std::string & filePath,
int format, // 0=Raw, 1=RGBD-SLAM, 2=KITTI, 3=TORO, 4=g2o, 5=NewCollege(t,x,y), 6=Malaga Urban GPS, 7=St Lucia INS, 8=Karlsruhe int format, // 0=Raw, 1=RGBD-SLAM motion capture (10=without change of coordinate frame), 2=KITTI, 3=TORO, 4=g2o, 5=NewCollege(t,x,y), 6=Malaga Urban GPS, 7=St Lucia INS, 8=Karlsruhe
std::map<int, Transform> & poses, std::map<int, Transform> & poses,
std::multimap<int, Link> * constraints = 0, // optional for formats 3 and 4 std::multimap<int, Link> * constraints = 0, // optional for formats 3 and 4
std::map<int, double> * stamps = 0); // optional for format 1 std::map<int, double> * stamps = 0); // optional for format 1

View File

@@ -52,7 +52,7 @@ namespace graph {
bool exportPoses( bool exportPoses(
const std::string & filePath, const std::string & filePath,
int format, // 0=Raw, 1=RGBD-SLAM, 2=KITTI, 3=TORO, 4=g2o int format, // 0=Raw, 1=RGBD-SLAM motion capture (10=without change of coordinate frame), 2=KITTI, 3=TORO, 4=g2o
const std::map<int, Transform> & poses, const std::map<int, Transform> & poses,
const std::multimap<int, Link> & constraints, // required for formats 3 and 4 const std::multimap<int, Link> & constraints, // required for formats 3 and 4
const std::map<int, double> & stamps, // required for format 1 const std::map<int, double> & stamps, // required for format 1
@@ -104,17 +104,21 @@ bool exportPoses(
{ {
for(std::map<int, Transform>::const_iterator iter=poses.begin(); iter!=poses.end(); ++iter) for(std::map<int, Transform>::const_iterator iter=poses.begin(); iter!=poses.end(); ++iter)
{ {
if(format == 1) // rgbd-slam format if(format == 1 || format == 10) // rgbd-slam format
{ {
// put the pose in rgbd-slam world reference Transform pose = iter->second;
Transform t( 0, 0, 1, 0, if(format == 1)
0, -1, 0, 0, {
1, 0, 0, 0); // put the pose in rgbd-slam world reference
Transform pose = t.inverse() * iter->second; Transform t( 0, 0, 1, 0,
t = Transform( 0, 0, 1, 0, 0, -1, 0, 0,
-1, 0, 0, 0, 1, 0, 0, 0);
0,-1, 0, 0); pose = t.inverse() * pose;
pose = t.inverse() * pose * t; t = Transform( 0, 0, 1, 0,
-1, 0, 0, 0,
0,-1, 0, 0);
pose = t.inverse() * pose * t;
}
// Format: stamp x y z qx qy qz qw // Format: stamp x y z qx qy qz qw
Eigen::Quaternionf q = pose.getQuaternionf(); Eigen::Quaternionf q = pose.getQuaternionf();
@@ -163,7 +167,7 @@ bool exportPoses(
bool importPoses( bool importPoses(
const std::string & filePath, const std::string & filePath,
int format, // 0=Raw, 1=RGBD-SLAM, 2=KITTI, 3=TORO, 4=g2o, 5=NewCollege(t,x,y), 6=Malaga Urban GPS, 7=St Lucia INS, 8=Karlsruhe, 9=EuRoC MAC int format, // 0=Raw, 1=RGBD-SLAM motion capture (10=without change of coordinate frame), 2=KITTI, 3=TORO, 4=g2o, 5=NewCollege(t,x,y), 6=Malaga Urban GPS, 7=St Lucia INS, 8=Karlsruhe, 9=EuRoC MAC
std::map<int, Transform> & poses, std::map<int, Transform> & poses,
std::multimap<int, Link> * constraints, // optional for formats 3 and 4 std::multimap<int, Link> * constraints, // optional for formats 3 and 4
std::map<int, double> * stamps) // optional for format 1 and 9 std::map<int, double> * stamps) // optional for format 1 and 9
@@ -407,7 +411,7 @@ bool importPoses(
UERROR("Error parsing \"%s\" with NewCollege format (should have 3 values: stamp x y, found %d)", str.c_str(), (int)strList.size()); UERROR("Error parsing \"%s\" with NewCollege format (should have 3 values: stamp x y, found %d)", str.c_str(), (int)strList.size());
} }
} }
else if(format == 1) // rgbd-slam format else if(format == 1 || format==10) // rgbd-slam format
{ {
std::list<std::string> strList = uSplit(str); std::list<std::string> strList = uSplit(str);
if(strList.size() == 8) if(strList.size() == 8)
@@ -426,16 +430,19 @@ bool importPoses(
{ {
stamps->insert(std::make_pair(id, stamp)); stamps->insert(std::make_pair(id, stamp));
} }
// we need to remove optical rotation if(format == 1)
// z pointing front, x left, y down {
Transform t( 0, 0, 1, 0, // we need to remove optical rotation
-1, 0, 0, 0, // z pointing front, x left, y down
0,-1, 0, 0); Transform t( 0, 0, 1, 0,
pose = t * pose * t.inverse(); -1, 0, 0, 0,
t = Transform( 0, 0, 1, 0, 0,-1, 0, 0);
0, -1, 0, 0, pose = t * pose * t.inverse();
1, 0, 0, 0); t = Transform( 0, 0, 1, 0,
pose = t*pose; 0, -1, 0, 0,
1, 0, 0, 0);
pose = t*pose;
}
poses.insert(std::make_pair(id, pose)); poses.insert(std::make_pair(id, pose));
} }
} }

View File

@@ -347,19 +347,19 @@ bool CameraImages::readPoses(std::list<Transform> & outputPoses, std::list<doubl
UERROR("Cannot read pose file \"%s\".", filePath.c_str()); UERROR("Cannot read pose file \"%s\".", filePath.c_str());
return false; return false;
} }
else if((format != 1 && format != 5 && format != 6 && format != 7 && format != 9) && poses.size() != this->imagesCount()) else if((format != 1 && format != 10 && format != 5 && format != 6 && format != 7 && format != 9) && poses.size() != this->imagesCount())
{ {
UERROR("The pose count is not the same as the images (%d vs %d)! Please remove " UERROR("The pose count is not the same as the images (%d vs %d)! Please remove "
"the pose file path if you don't want to use it (current file path=%s).", "the pose file path if you don't want to use it (current file path=%s).",
(int)poses.size(), this->imagesCount(), filePath.c_str()); (int)poses.size(), this->imagesCount(), filePath.c_str());
return false; return false;
} }
else if((format == 1 || format == 5 || format == 6 || format == 7 || format == 9) && inOutStamps.size() == 0) else if((format == 1 || format == 10 || format == 5 || format == 6 || format == 7 || format == 9) && inOutStamps.size() == 0)
{ {
UERROR("When using RGBD-SLAM, GPS, MALAGA, ST LUCIA and EuRoC MAV formats, images must have timestamps!"); UERROR("When using RGBD-SLAM, GPS, MALAGA, ST LUCIA and EuRoC MAV formats, images must have timestamps!");
return false; return false;
} }
else if(format == 1 || format == 5 || format == 6 || format == 7 || format == 9) else if(format == 1 || format == 10 || format == 5 || format == 6 || format == 7 || format == 9)
{ {
UDEBUG(""); UDEBUG("");
//Match ground truth values with images //Match ground truth values with images

View File

@@ -101,6 +101,7 @@ private Q_SLOTS:
void exportDatabase(); void exportDatabase();
void extractImages(); void extractImages();
void exportPosesRaw(); void exportPosesRaw();
void exportPosesRGBDSLAMMotionCapture();
void exportPosesRGBDSLAM(); void exportPosesRGBDSLAM();
void exportPosesKITTI(); void exportPosesKITTI();
void exportPosesTORO(); void exportPosesTORO();

View File

@@ -154,6 +154,7 @@ protected Q_SLOTS:
void generateGraphDOT(); void generateGraphDOT();
void exportPosesRaw(); void exportPosesRaw();
void exportPosesRGBDSLAM(); void exportPosesRGBDSLAM();
void exportPosesRGBDSLAMMotionCapture();
void exportPosesKITTI(); void exportPosesKITTI();
void exportPosesTORO(); void exportPosesTORO();
void exportPosesG2O(); void exportPosesG2O();

View File

@@ -242,6 +242,7 @@ DatabaseViewer::DatabaseViewer(const QString & ini, QWidget * parent) :
connect(ui_->actionGenerate_local_graph_dot, SIGNAL(triggered()), this, SLOT(generateLocalGraph())); connect(ui_->actionGenerate_local_graph_dot, SIGNAL(triggered()), this, SLOT(generateLocalGraph()));
connect(ui_->actionRaw_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRaw())); connect(ui_->actionRaw_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRaw()));
connect(ui_->actionRGBD_SLAM_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRGBDSLAM())); connect(ui_->actionRGBD_SLAM_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRGBDSLAM()));
connect(ui_->actionRGBD_SLAM_motion_capture_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRGBDSLAMMotionCapture()));
connect(ui_->actionKITTI_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesKITTI())); connect(ui_->actionKITTI_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesKITTI()));
connect(ui_->actionTORO_graph, SIGNAL(triggered()), this , SLOT(exportPosesTORO())); connect(ui_->actionTORO_graph, SIGNAL(triggered()), this , SLOT(exportPosesTORO()));
connect(ui_->actionG2o_g2o, SIGNAL(triggered()), this , SLOT(exportPosesG2O())); connect(ui_->actionG2o_g2o, SIGNAL(triggered()), this , SLOT(exportPosesG2O()));
@@ -1981,10 +1982,14 @@ void DatabaseViewer::exportPosesRaw()
{ {
exportPoses(0); exportPoses(0);
} }
void DatabaseViewer::exportPosesRGBDSLAM() void DatabaseViewer::exportPosesRGBDSLAMMotionCapture()
{ {
exportPoses(1); exportPoses(1);
} }
void DatabaseViewer::exportPosesRGBDSLAM()
{
exportPoses(10);
}
void DatabaseViewer::exportPosesKITTI() void DatabaseViewer::exportPosesKITTI()
{ {
exportPoses(2); exportPoses(2);
@@ -2177,7 +2182,7 @@ void DatabaseViewer::exportPoses(int format)
{ {
std::map<int, Transform> localTransforms; std::map<int, Transform> localTransforms;
QStringList items; QStringList items;
items.push_back("Robot"); items.push_back("Robot (base frame)");
items.push_back("Camera"); items.push_back("Camera");
items.push_back("Scan"); items.push_back("Scan");
bool ok; bool ok;
@@ -2186,7 +2191,7 @@ void DatabaseViewer::exportPoses(int format)
{ {
return; return;
} }
if(item.compare("Robot") != 0) if(item.compare("Robot (base frame)") != 0)
{ {
bool cameraFrame = item.compare("Camera") == 0; bool cameraFrame = item.compare("Camera") == 0;
for(std::map<int, Transform>::iterator iter=optimizedPoses.begin(); iter!=optimizedPoses.end(); ++iter) for(std::map<int, Transform>::iterator iter=optimizedPoses.begin(); iter!=optimizedPoses.end(); ++iter)
@@ -2274,7 +2279,7 @@ void DatabaseViewer::exportPoses(int format)
} }
std::map<int, double> stamps; std::map<int, double> stamps;
if(format == 1) if(format == 1 || format == 10)
{ {
for(std::map<int, Transform>::iterator iter=poses.begin(); iter!=poses.end(); ++iter) for(std::map<int, Transform>::iterator iter=poses.begin(); iter!=poses.end(); ++iter)
{ {

View File

@@ -359,6 +359,7 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent, bool sh
connect(_ui->actionGenerate_map, SIGNAL(triggered()), this , SLOT(generateGraphDOT())); connect(_ui->actionGenerate_map, SIGNAL(triggered()), this , SLOT(generateGraphDOT()));
connect(_ui->actionRaw_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRaw())); connect(_ui->actionRaw_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRaw()));
connect(_ui->actionRGBD_SLAM_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRGBDSLAM())); connect(_ui->actionRGBD_SLAM_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRGBDSLAM()));
connect(_ui->actionRGBD_SLAM_motion_capture_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesRGBDSLAMMotionCapture()));
connect(_ui->actionKITTI_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesKITTI())); connect(_ui->actionKITTI_format_txt, SIGNAL(triggered()), this , SLOT(exportPosesKITTI()));
connect(_ui->actionTORO_graph, SIGNAL(triggered()), this , SLOT(exportPosesTORO())); connect(_ui->actionTORO_graph, SIGNAL(triggered()), this , SLOT(exportPosesTORO()));
connect(_ui->actionG2o_g2o, SIGNAL(triggered()), this , SLOT(exportPosesG2O())); connect(_ui->actionG2o_g2o, SIGNAL(triggered()), this , SLOT(exportPosesG2O()));
@@ -5177,10 +5178,14 @@ void MainWindow::exportPosesRaw()
{ {
exportPoses(0); exportPoses(0);
} }
void MainWindow::exportPosesRGBDSLAM() void MainWindow::exportPosesRGBDSLAMMotionCapture()
{ {
exportPoses(1); exportPoses(1);
} }
void MainWindow::exportPosesRGBDSLAM()
{
exportPoses(10);
}
void MainWindow::exportPosesKITTI() void MainWindow::exportPosesKITTI()
{ {
exportPoses(2); exportPoses(2);
@@ -5200,7 +5205,7 @@ void MainWindow::exportPoses(int format)
{ {
std::map<int, Transform> localTransforms; std::map<int, Transform> localTransforms;
QStringList items; QStringList items;
items.push_back("Robot"); items.push_back("Robot (base frame)");
items.push_back("Camera"); items.push_back("Camera");
items.push_back("Scan"); items.push_back("Scan");
bool ok; bool ok;
@@ -5209,7 +5214,7 @@ void MainWindow::exportPoses(int format)
{ {
return; return;
} }
if(item.compare("Robot") != 0) if(item.compare("Robot (base frame)") != 0)
{ {
bool cameraFrame = item.compare("Camera") == 0; bool cameraFrame = item.compare("Camera") == 0;
_exportPosesFrame = cameraFrame?1:2; _exportPosesFrame = cameraFrame?1:2;
@@ -5302,7 +5307,7 @@ void MainWindow::exportPoses(int format)
} }
std::map<int, double> stamps; std::map<int, double> stamps;
if(format == 1) if(format == 1 || format == 10)
{ {
for(std::map<int, Transform>::iterator iter=poses.begin(); iter!=poses.end(); ++iter) for(std::map<int, Transform>::iterator iter=poses.begin(); iter!=poses.end(); ++iter)
{ {

View File

@@ -61,7 +61,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>413</width> <width>398</width>
<height>288</height> <height>288</height>
</rect> </rect>
</property> </property>
@@ -287,7 +287,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>412</width> <width>397</width>
<height>288</height> <height>288</height>
</rect> </rect>
</property> </property>
@@ -647,7 +647,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1547</width> <width>1547</width>
<height>22</height> <height>25</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@@ -660,6 +660,7 @@
</property> </property>
<addaction name="actionRaw_format_txt"/> <addaction name="actionRaw_format_txt"/>
<addaction name="actionRGBD_SLAM_format_txt"/> <addaction name="actionRGBD_SLAM_format_txt"/>
<addaction name="actionRGBD_SLAM_motion_capture_format_txt"/>
<addaction name="actionKITTI_format_txt"/> <addaction name="actionKITTI_format_txt"/>
<addaction name="actionTORO_graph"/> <addaction name="actionTORO_graph"/>
<addaction name="actionG2o_g2o"/> <addaction name="actionG2o_g2o"/>
@@ -1299,7 +1300,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>318</width> <width>318</width>
<height>197</height> <height>219</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@@ -1459,9 +1460,9 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>-151</y> <y>0</y>
<width>519</width> <width>282</width>
<height>791</height> <height>885</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@@ -1994,8 +1995,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>310</width> <width>307</width>
<height>243</height> <height>171</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@@ -2123,7 +2124,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>185</width> <width>185</width>
<height>485</height> <height>487</height>
</rect> </rect>
</property> </property>
<attribute name="label"> <attribute name="label">
@@ -2723,16 +2724,25 @@
<property name="text"> <property name="text">
<string>Raw format (*.txt)</string> <string>Raw format (*.txt)</string>
</property> </property>
<property name="toolTip">
<string>Raw format (12 values transform)</string>
</property>
</action> </action>
<action name="actionRGBD_SLAM_format_txt"> <action name="actionRGBD_SLAM_format_txt">
<property name="text"> <property name="text">
<string>RGBD-SLAM format (*.txt)</string> <string>RGBD-SLAM format (*.txt)</string>
</property> </property>
<property name="toolTip">
<string>RGBD-SLAM (stamp tx ty tz qx qy qz qw)</string>
</property>
</action> </action>
<action name="actionKITTI_format_txt"> <action name="actionKITTI_format_txt">
<property name="text"> <property name="text">
<string>KITTI format (*.txt)</string> <string>KITTI format (*.txt)</string>
</property> </property>
<property name="toolTip">
<string>KITTI (stamp + 12 values transform)</string>
</property>
</action> </action>
<action name="actionTORO_graph"> <action name="actionTORO_graph">
<property name="text"> <property name="text">
@@ -2804,6 +2814,14 @@
<string>Update all loop closure covariances...</string> <string>Update all loop closure covariances...</string>
</property> </property>
</action> </action>
<action name="actionRGBD_SLAM_motion_capture_format_txt">
<property name="text">
<string>RGBD-SLAM motion capture format (*.txt)</string>
</property>
<property name="toolTip">
<string>RGBD-SLAM (stamp tx ty tz qx qy qz qw)</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>

View File

@@ -27,7 +27,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1012</width> <width>1012</width>
<height>22</height> <height>25</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@@ -40,6 +40,7 @@
</property> </property>
<addaction name="actionRaw_format_txt"/> <addaction name="actionRaw_format_txt"/>
<addaction name="actionRGBD_SLAM_format_txt"/> <addaction name="actionRGBD_SLAM_format_txt"/>
<addaction name="actionRGBD_SLAM_motion_capture_format_txt"/>
<addaction name="actionKITTI_format_txt"/> <addaction name="actionKITTI_format_txt"/>
<addaction name="actionTORO_graph"/> <addaction name="actionTORO_graph"/>
<addaction name="actionG2o_g2o"/> <addaction name="actionG2o_g2o"/>
@@ -1395,11 +1396,17 @@
<property name="text"> <property name="text">
<string>KITTI format (*.txt)</string> <string>KITTI format (*.txt)</string>
</property> </property>
<property name="toolTip">
<string>KITTI (stamp + 12 values transform)</string>
</property>
</action> </action>
<action name="actionRGBD_SLAM_format_txt"> <action name="actionRGBD_SLAM_format_txt">
<property name="text"> <property name="text">
<string>RGBD-SLAM format (*.txt)</string> <string>RGBD-SLAM format (*.txt)</string>
</property> </property>
<property name="toolTip">
<string>RGBD-SLAM (stamp tx ty tz qx qy qz qw)</string>
</property>
</action> </action>
<action name="actionTORO_graph"> <action name="actionTORO_graph">
<property name="text"> <property name="text">
@@ -1415,6 +1422,9 @@
<property name="text"> <property name="text">
<string>Raw format (*.txt)</string> <string>Raw format (*.txt)</string>
</property> </property>
<property name="toolTip">
<string>Raw format (12 values transform)</string>
</property>
</action> </action>
<action name="actionG2o_g2o"> <action name="actionG2o_g2o">
<property name="text"> <property name="text">
@@ -1523,6 +1533,14 @@
<string>Tara Stereo USB Camera</string> <string>Tara Stereo USB Camera</string>
</property> </property>
</action> </action>
<action name="actionRGBD_SLAM_motion_capture_format_txt">
<property name="text">
<string>RGBD-SLAM motion capture format (*.txt)</string>
</property>
<property name="toolTip">
<string>RGBD-SLAM (stamp tx ty tz qx qy qz qw)</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>

View File

@@ -94,9 +94,9 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>-436</y> <y>-812</y>
<width>680</width> <width>681</width>
<height>2986</height> <height>2983</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_16"> <layout class="QVBoxLayout" name="verticalLayout_16">
@@ -2941,7 +2941,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<item> <item>
<widget class="QStackedWidget" name="stackedWidget_src"> <widget class="QStackedWidget" name="stackedWidget_src">
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="page_41"> <widget class="QWidget" name="page_41">
<layout class="QVBoxLayout" name="verticalLayout_64"> <layout class="QVBoxLayout" name="verticalLayout_64">
@@ -3061,7 +3061,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<item> <item>
<widget class="QStackedWidget" name="stackedWidget_rgbd"> <widget class="QStackedWidget" name="stackedWidget_rgbd">
<property name="currentIndex"> <property name="currentIndex">
<number>6</number> <number>7</number>
</property> </property>
<widget class="QWidget" name="page_32"> <widget class="QWidget" name="page_32">
<layout class="QVBoxLayout" name="verticalLayout_63"> <layout class="QVBoxLayout" name="verticalLayout_63">
@@ -4834,7 +4834,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<item> <item>
<widget class="QStackedWidget" name="stackedWidget_image"> <widget class="QStackedWidget" name="stackedWidget_image">
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>2</number>
</property> </property>
<widget class="QWidget" name="page_7"> <widget class="QWidget" name="page_7">
<layout class="QVBoxLayout" name="verticalLayout_30"> <layout class="QVBoxLayout" name="verticalLayout_30">
@@ -5349,7 +5349,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>RGBD-SLAM</string> <string>RGBD-SLAM (motion capture)</string>
</property> </property>
</item> </item>
<item> <item>
@@ -5392,6 +5392,11 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<string>EuRoC MAV</string> <string>EuRoC MAV</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>RGBD-SLAM</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="9" column="0"> <item row="9" column="0">
@@ -5497,7 +5502,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>RGBD-SLAM</string> <string>RGBD-SLAM (motion capture)</string>
</property> </property>
</item> </item>
<item> <item>
@@ -5540,6 +5545,11 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<string>EuRoC MAV</string> <string>EuRoC MAV</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>RGBD-SLAM</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="4" column="0">