mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 09:30:25 +08:00
Added suggestion from https://github.com/introlab/rtabmap/issues/614#issuecomment-731769818
This commit is contained in:
@@ -75,6 +75,7 @@ public:
|
|||||||
void setEmitterEnabled(bool enabled);
|
void setEmitterEnabled(bool enabled);
|
||||||
void setIRFormat(bool enabled, bool useDepthInsteadOfRightImage);
|
void setIRFormat(bool enabled, bool useDepthInsteadOfRightImage);
|
||||||
void setResolution(int width, int height, int fps = 30);
|
void setResolution(int width, int height, int fps = 30);
|
||||||
|
void setGlobalTimeSync(bool enabled);
|
||||||
void publishInterIMU(bool enabled);
|
void publishInterIMU(bool enabled);
|
||||||
void setDualMode(bool enabled, const Transform & extrinsics);
|
void setDualMode(bool enabled, const Transform & extrinsics);
|
||||||
void setJsonConfig(const std::string & json);
|
void setJsonConfig(const std::string & json);
|
||||||
@@ -93,7 +94,7 @@ private:
|
|||||||
Transform & pose,
|
Transform & pose,
|
||||||
unsigned int & poseConfidence,
|
unsigned int & poseConfidence,
|
||||||
IMU & imu,
|
IMU & imu,
|
||||||
int maxWaitTimeMs = 35) const;
|
int maxWaitTimeMs = 35);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -121,6 +122,7 @@ private:
|
|||||||
UMutex imuMutex_;
|
UMutex imuMutex_;
|
||||||
double lastImuStamp_;
|
double lastImuStamp_;
|
||||||
bool clockSyncWarningShown_;
|
bool clockSyncWarningShown_;
|
||||||
|
bool imuGlobalSyncWarningShown_;
|
||||||
|
|
||||||
bool emitterEnabled_;
|
bool emitterEnabled_;
|
||||||
bool ir_;
|
bool ir_;
|
||||||
@@ -130,6 +132,7 @@ private:
|
|||||||
int cameraWidth_;
|
int cameraWidth_;
|
||||||
int cameraHeight_;
|
int cameraHeight_;
|
||||||
int cameraFps_;
|
int cameraFps_;
|
||||||
|
bool globalTimeSync_;
|
||||||
bool publishInterIMU_;
|
bool publishInterIMU_;
|
||||||
bool dualMode_;
|
bool dualMode_;
|
||||||
Transform dualExtrinsics_;
|
Transform dualExtrinsics_;
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ CameraRealSense2::CameraRealSense2(
|
|||||||
depthToRGBExtrinsics_(new rs2_extrinsics),
|
depthToRGBExtrinsics_(new rs2_extrinsics),
|
||||||
lastImuStamp_(0.0),
|
lastImuStamp_(0.0),
|
||||||
clockSyncWarningShown_(false),
|
clockSyncWarningShown_(false),
|
||||||
|
imuGlobalSyncWarningShown_(false),
|
||||||
emitterEnabled_(true),
|
emitterEnabled_(true),
|
||||||
ir_(false),
|
ir_(false),
|
||||||
irDepth_(true),
|
irDepth_(true),
|
||||||
@@ -76,6 +77,7 @@ CameraRealSense2::CameraRealSense2(
|
|||||||
cameraWidth_(640),
|
cameraWidth_(640),
|
||||||
cameraHeight_(480),
|
cameraHeight_(480),
|
||||||
cameraFps_(30),
|
cameraFps_(30),
|
||||||
|
globalTimeSync_(true),
|
||||||
publishInterIMU_(false),
|
publishInterIMU_(false),
|
||||||
dualMode_(false),
|
dualMode_(false),
|
||||||
closing_(false),
|
closing_(false),
|
||||||
@@ -230,7 +232,7 @@ void CameraRealSense2::getPoseAndIMU(
|
|||||||
Transform & pose,
|
Transform & pose,
|
||||||
unsigned int & poseConfidence,
|
unsigned int & poseConfidence,
|
||||||
IMU & imu,
|
IMU & imu,
|
||||||
int maxWaitTimeMs) const
|
int maxWaitTimeMs)
|
||||||
{
|
{
|
||||||
pose.setNull();
|
pose.setNull();
|
||||||
imu = IMU();
|
imu = IMU();
|
||||||
@@ -341,16 +343,34 @@ void CameraRealSense2::getPoseAndIMU(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(stamp < iterA->first)
|
if(!imuGlobalSyncWarningShown_)
|
||||||
{
|
{
|
||||||
UWARN("Could not find acc data to interpolate at image time %f (earliest is %f). Are sensors synchronized?", stamp, iterA->first);
|
if(stamp < iterA->first)
|
||||||
|
{
|
||||||
|
UWARN("Could not find acc data to interpolate at image time %f (earliest is %f). Are sensors synchronized?", stamp, iterA->first);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UWARN("Could not find acc data to interpolate at image time %f (between %f and %f). Are sensors synchronized?", stamp, iterA->first, iterB->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!globalTimeSync_)
|
||||||
|
{
|
||||||
|
if(!imuGlobalSyncWarningShown_)
|
||||||
|
{
|
||||||
|
UWARN("As globalTimeSync option is off, the received gyro and accelerometer will be re-stamped with image time. This message is only shown once.");
|
||||||
|
imuGlobalSyncWarningShown_ = true;
|
||||||
|
}
|
||||||
|
std::map<double, cv::Vec3f>::const_reverse_iterator iterC = accBuffer_.rbegin();
|
||||||
|
acc[0] = iterC->second[0];
|
||||||
|
acc[1] = iterC->second[1];
|
||||||
|
acc[2] = iterC->second[2];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UWARN("Could not find acc data to interpolate at image time %f (between %f and %f). Are sensors synchronized?", stamp, iterA->first, iterB->first);
|
imuMutex_.unlock();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
imuMutex_.unlock();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
imuMutex_.unlock();
|
imuMutex_.unlock();
|
||||||
@@ -404,13 +424,28 @@ void CameraRealSense2::getPoseAndIMU(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(stamp < iterA->first)
|
if(!imuGlobalSyncWarningShown_)
|
||||||
{
|
{
|
||||||
UWARN("Could not find gyro data to interpolate at image time %f (earliest is %f). Are sensors synchronized?", stamp, iterA->first);
|
if(stamp < iterA->first)
|
||||||
|
{
|
||||||
|
UWARN("Could not find gyro data to interpolate at image time %f (earliest is %f). Are sensors synchronized?", stamp, iterA->first);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UWARN("Could not find gyro data to interpolate at image time %f (between %f and %f). Are sensors synchronized?", stamp, iterA->first, iterB->first);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
if(!globalTimeSync_)
|
||||||
{
|
{
|
||||||
UWARN("Could not find gyro data to interpolate at image time %f (between %f and %f). Are sensors synchronized?", stamp, iterA->first, iterB->first);
|
if(!imuGlobalSyncWarningShown_)
|
||||||
|
{
|
||||||
|
UWARN("As globalTimeSync option is off, the latest received gyro and accelerometer will be re-stamped with image time. This message is only shown once.");
|
||||||
|
imuGlobalSyncWarningShown_ = true;
|
||||||
|
}
|
||||||
|
std::map<double, cv::Vec3f>::const_reverse_iterator iterC = gyroBuffer_.rbegin();
|
||||||
|
gyro[0] = iterC->second[0];
|
||||||
|
gyro[1] = iterC->second[1];
|
||||||
|
gyro[2] = iterC->second[2];
|
||||||
}
|
}
|
||||||
imuMutex_.unlock();
|
imuMutex_.unlock();
|
||||||
return;
|
return;
|
||||||
@@ -436,6 +471,7 @@ bool CameraRealSense2::init(const std::string & calibrationFolder, const std::st
|
|||||||
dev_[i] = 0;
|
dev_[i] = 0;
|
||||||
}
|
}
|
||||||
clockSyncWarningShown_ = false;
|
clockSyncWarningShown_ = false;
|
||||||
|
imuGlobalSyncWarningShown_ = false;
|
||||||
|
|
||||||
auto list = ctx_->query_devices();
|
auto list = ctx_->query_devices();
|
||||||
if (0 == list.size())
|
if (0 == list.size())
|
||||||
@@ -657,39 +693,37 @@ bool CameraRealSense2::init(const std::string & calibrationFolder, const std::st
|
|||||||
if(!stereo)
|
if(!stereo)
|
||||||
{
|
{
|
||||||
if(isL500_ &&
|
if(isL500_ &&
|
||||||
!(video_profile.format() == RS2_FORMAT_MOTION_XYZ32F || video_profile.format() == RS2_FORMAT_6DOF))
|
(video_profile.width() == 640 &&
|
||||||
|
video_profile.height() == 480 &&
|
||||||
|
video_profile.fps() == 30))
|
||||||
{
|
{
|
||||||
if(video_profile.width() == 640 &&
|
if( i==0 // rgb
|
||||||
video_profile.height() == 480 &&
|
&& video_profile.format() == RS2_FORMAT_RGB8 && video_profile.stream_type() == RS2_STREAM_COLOR)
|
||||||
video_profile.fps() == 30)
|
|
||||||
{
|
{
|
||||||
if( i==0 // rgb
|
auto intrinsic = video_profile.get_intrinsics();
|
||||||
&& video_profile.format() == RS2_FORMAT_RGB8 && video_profile.stream_type() == RS2_STREAM_COLOR)
|
profilesPerSensor[i].push_back(profile);
|
||||||
{
|
rgbBuffer_ = cv::Mat(cv::Size(video_profile.width(), video_profile.height()), CV_8UC3, cv::Scalar(0, 0, 0));
|
||||||
auto intrinsic = video_profile.get_intrinsics();
|
model_ = CameraModel(camera_name, intrinsic.fx, intrinsic.fy, intrinsic.ppx, intrinsic.ppy, this->getLocalTransform(), 0, cv::Size(intrinsic.width, intrinsic.height));
|
||||||
profilesPerSensor[i].push_back(profile);
|
rgbStreamProfile = profile;
|
||||||
rgbBuffer_ = cv::Mat(cv::Size(video_profile.width(), video_profile.height()), CV_8UC3, cv::Scalar(0, 0, 0));
|
*rgbIntrinsics_ = intrinsic;
|
||||||
model_ = CameraModel(camera_name, intrinsic.fx, intrinsic.fy, intrinsic.ppx, intrinsic.ppy, this->getLocalTransform(), 0, cv::Size(intrinsic.width, intrinsic.height));
|
added = true;
|
||||||
rgbStreamProfile = profile;
|
}
|
||||||
*rgbIntrinsics_ = intrinsic;
|
else if( i==1 // depth
|
||||||
added = true;
|
&& video_profile.format() == RS2_FORMAT_Z16 && video_profile.stream_type() == RS2_STREAM_DEPTH)
|
||||||
}
|
{
|
||||||
else if( i==1 // depth
|
auto intrinsic = video_profile.get_intrinsics();
|
||||||
&& video_profile.format() == RS2_FORMAT_Z16 && video_profile.stream_type() == RS2_STREAM_DEPTH)
|
profilesPerSensor[i].push_back(profile);
|
||||||
{
|
depthBuffer_ = cv::Mat(cv::Size(video_profile.width(), video_profile.height()), CV_16UC1, cv::Scalar(0));
|
||||||
auto intrinsic = video_profile.get_intrinsics();
|
depthStreamProfile = profile;
|
||||||
profilesPerSensor[i].push_back(profile);
|
*depthIntrinsics_ = intrinsic;
|
||||||
depthBuffer_ = cv::Mat(cv::Size(video_profile.width(), video_profile.height()), CV_16UC1, cv::Scalar(0));
|
added = true;
|
||||||
depthStreamProfile = profile;
|
|
||||||
*depthIntrinsics_ = intrinsic;
|
|
||||||
added = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//D400 series:
|
//D400 series:
|
||||||
else if (video_profile.width() == cameraWidth_ &&
|
else if (!isL500_ &&
|
||||||
video_profile.height() == cameraHeight_ &&
|
(video_profile.width() == cameraWidth_ &&
|
||||||
video_profile.fps() == cameraFps_)
|
video_profile.height() == cameraHeight_ &&
|
||||||
|
video_profile.fps() == cameraFps_))
|
||||||
{
|
{
|
||||||
auto intrinsic = video_profile.get_intrinsics();
|
auto intrinsic = video_profile.get_intrinsics();
|
||||||
|
|
||||||
@@ -1013,7 +1047,7 @@ bool CameraRealSense2::init(const std::string & calibrationFolder, const std::st
|
|||||||
video_profile.stream_name().c_str(),
|
video_profile.stream_name().c_str(),
|
||||||
video_profile.stream_type());
|
video_profile.stream_type());
|
||||||
}
|
}
|
||||||
if(sensors[i].supports(rs2_option::RS2_OPTION_GLOBAL_TIME_ENABLED))
|
if(globalTimeSync_ && sensors[i].supports(rs2_option::RS2_OPTION_GLOBAL_TIME_ENABLED))
|
||||||
{
|
{
|
||||||
float value = sensors[i].get_option(rs2_option::RS2_OPTION_GLOBAL_TIME_ENABLED);
|
float value = sensors[i].get_option(rs2_option::RS2_OPTION_GLOBAL_TIME_ENABLED);
|
||||||
UINFO("Set RS2_OPTION_GLOBAL_TIME_ENABLED=1 (was %f) for sensor %d", value, (int)i);
|
UINFO("Set RS2_OPTION_GLOBAL_TIME_ENABLED=1 (was %f) for sensor %d", value, (int)i);
|
||||||
@@ -1094,6 +1128,13 @@ void CameraRealSense2::setResolution(int width, int height, int fps)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CameraRealSense2::setGlobalTimeSync(bool enabled)
|
||||||
|
{
|
||||||
|
#ifdef RTABMAP_REALSENSE2
|
||||||
|
globalTimeSync_ = enabled;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void CameraRealSense2::publishInterIMU(bool enabled)
|
void CameraRealSense2::publishInterIMU(bool enabled)
|
||||||
{
|
{
|
||||||
#ifdef RTABMAP_REALSENSE2
|
#ifdef RTABMAP_REALSENSE2
|
||||||
@@ -1149,7 +1190,7 @@ SensorData CameraRealSense2::captureImage(CameraInfo * info)
|
|||||||
auto frameset = syncer_->wait_for_frames(5000);
|
auto frameset = syncer_->wait_for_frames(5000);
|
||||||
UTimer timer;
|
UTimer timer;
|
||||||
int desiredFramesetSize = 2;
|
int desiredFramesetSize = 2;
|
||||||
if(isL500_)
|
if(isL500_ && globalTimeSync_)
|
||||||
desiredFramesetSize = 3;
|
desiredFramesetSize = 3;
|
||||||
while ((int)frameset.size() != desiredFramesetSize && timer.elapsed() < 2.0)
|
while ((int)frameset.size() != desiredFramesetSize && timer.elapsed() < 2.0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -682,6 +682,7 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
|
|||||||
connect(_ui->spinBox_rs2_width, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
connect(_ui->spinBox_rs2_width, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
connect(_ui->spinBox_rs2_height, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
connect(_ui->spinBox_rs2_height, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
connect(_ui->spinBox_rs2_rate, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
connect(_ui->spinBox_rs2_rate, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
|
connect(_ui->checkbox_rs2_globalTimeStync, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
connect(_ui->checkbox_rs2_dualMode, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
connect(_ui->checkbox_rs2_dualMode, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
connect(_ui->lineEdit_rs2_dualModeExtrinsics, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel()));
|
connect(_ui->lineEdit_rs2_dualModeExtrinsics, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
connect(_ui->lineEdit_rs2_jsonFile, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel()));
|
connect(_ui->lineEdit_rs2_jsonFile, SIGNAL(textChanged(const QString &)), this, SLOT(makeObsoleteSourcePanel()));
|
||||||
@@ -1902,6 +1903,7 @@ void PreferencesDialog::resetSettings(QGroupBox * groupBox)
|
|||||||
_ui->spinBox_rs2_width->setValue(848);
|
_ui->spinBox_rs2_width->setValue(848);
|
||||||
_ui->spinBox_rs2_height->setValue(480);
|
_ui->spinBox_rs2_height->setValue(480);
|
||||||
_ui->spinBox_rs2_rate->setValue(60);
|
_ui->spinBox_rs2_rate->setValue(60);
|
||||||
|
_ui->checkbox_rs2_globalTimeStync->setChecked(true);
|
||||||
_ui->checkbox_rs2_dualMode->setChecked(false);
|
_ui->checkbox_rs2_dualMode->setChecked(false);
|
||||||
_ui->lineEdit_rs2_dualModeExtrinsics->setText("0.009 0.021 0.027 0 -0.018 0.005");
|
_ui->lineEdit_rs2_dualModeExtrinsics->setText("0.009 0.021 0.027 0 -0.018 0.005");
|
||||||
_ui->lineEdit_rs2_jsonFile->clear();
|
_ui->lineEdit_rs2_jsonFile->clear();
|
||||||
@@ -2357,6 +2359,7 @@ void PreferencesDialog::readCameraSettings(const QString & filePath)
|
|||||||
_ui->spinBox_rs2_width->setValue(settings.value("width", _ui->spinBox_rs2_width->value()).toInt());
|
_ui->spinBox_rs2_width->setValue(settings.value("width", _ui->spinBox_rs2_width->value()).toInt());
|
||||||
_ui->spinBox_rs2_height->setValue(settings.value("height", _ui->spinBox_rs2_height->value()).toInt());
|
_ui->spinBox_rs2_height->setValue(settings.value("height", _ui->spinBox_rs2_height->value()).toInt());
|
||||||
_ui->spinBox_rs2_rate->setValue(settings.value("rate", _ui->spinBox_rs2_rate->value()).toInt());
|
_ui->spinBox_rs2_rate->setValue(settings.value("rate", _ui->spinBox_rs2_rate->value()).toInt());
|
||||||
|
_ui->checkbox_rs2_globalTimeStync->setChecked(settings.value("global_time_sync", _ui->checkbox_rs2_globalTimeStync->isChecked()).toBool());
|
||||||
_ui->checkbox_rs2_dualMode->setChecked(settings.value("dual_mode", _ui->checkbox_rs2_dualMode->isChecked()).toBool());
|
_ui->checkbox_rs2_dualMode->setChecked(settings.value("dual_mode", _ui->checkbox_rs2_dualMode->isChecked()).toBool());
|
||||||
_ui->lineEdit_rs2_dualModeExtrinsics->setText(settings.value("dual_mode_extrinsics", _ui->lineEdit_rs2_dualModeExtrinsics->text()).toString());
|
_ui->lineEdit_rs2_dualModeExtrinsics->setText(settings.value("dual_mode_extrinsics", _ui->lineEdit_rs2_dualModeExtrinsics->text()).toString());
|
||||||
_ui->lineEdit_rs2_jsonFile->setText(settings.value("json_preset", _ui->lineEdit_rs2_jsonFile->text()).toString());
|
_ui->lineEdit_rs2_jsonFile->setText(settings.value("json_preset", _ui->lineEdit_rs2_jsonFile->text()).toString());
|
||||||
@@ -2839,6 +2842,7 @@ void PreferencesDialog::writeCameraSettings(const QString & filePath) const
|
|||||||
settings.setValue("width", _ui->spinBox_rs2_width->value());
|
settings.setValue("width", _ui->spinBox_rs2_width->value());
|
||||||
settings.setValue("height", _ui->spinBox_rs2_height->value());
|
settings.setValue("height", _ui->spinBox_rs2_height->value());
|
||||||
settings.setValue("rate", _ui->spinBox_rs2_rate->value());
|
settings.setValue("rate", _ui->spinBox_rs2_rate->value());
|
||||||
|
settings.setValue("global_time_sync", _ui->checkbox_rs2_globalTimeStync->isChecked());
|
||||||
settings.setValue("dual_mode", _ui->checkbox_rs2_dualMode->isChecked());
|
settings.setValue("dual_mode", _ui->checkbox_rs2_dualMode->isChecked());
|
||||||
settings.setValue("dual_mode_extrinsics", _ui->lineEdit_rs2_dualModeExtrinsics->text());
|
settings.setValue("dual_mode_extrinsics", _ui->lineEdit_rs2_dualModeExtrinsics->text());
|
||||||
settings.setValue("json_preset", _ui->lineEdit_rs2_jsonFile->text());
|
settings.setValue("json_preset", _ui->lineEdit_rs2_jsonFile->text());
|
||||||
@@ -5729,6 +5733,7 @@ Camera * PreferencesDialog::createCamera(bool useRawImages, bool useColor)
|
|||||||
((CameraRealSense2*)camera)->setEmitterEnabled(_ui->checkbox_rs2_emitter->isChecked());
|
((CameraRealSense2*)camera)->setEmitterEnabled(_ui->checkbox_rs2_emitter->isChecked());
|
||||||
((CameraRealSense2*)camera)->setIRFormat(_ui->checkbox_rs2_irMode->isChecked(), _ui->checkbox_rs2_irDepth->isChecked());
|
((CameraRealSense2*)camera)->setIRFormat(_ui->checkbox_rs2_irMode->isChecked(), _ui->checkbox_rs2_irDepth->isChecked());
|
||||||
((CameraRealSense2*)camera)->setResolution(_ui->spinBox_rs2_width->value(), _ui->spinBox_rs2_height->value(), _ui->spinBox_rs2_rate->value());
|
((CameraRealSense2*)camera)->setResolution(_ui->spinBox_rs2_width->value(), _ui->spinBox_rs2_height->value(), _ui->spinBox_rs2_rate->value());
|
||||||
|
((CameraRealSense2*)camera)->setGlobalTimeSync(_ui->checkbox_rs2_globalTimeStync->isChecked());
|
||||||
((CameraRealSense2*)camera)->setDualMode(_ui->checkbox_rs2_dualMode->isChecked(), Transform::fromString(_ui->lineEdit_rs2_dualModeExtrinsics->text().toStdString()));
|
((CameraRealSense2*)camera)->setDualMode(_ui->checkbox_rs2_dualMode->isChecked(), Transform::fromString(_ui->lineEdit_rs2_dualModeExtrinsics->text().toStdString()));
|
||||||
((CameraRealSense2*)camera)->setJsonConfig(_ui->lineEdit_rs2_jsonFile->text().toStdString());
|
((CameraRealSense2*)camera)->setJsonConfig(_ui->lineEdit_rs2_jsonFile->text().toStdString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>-501</y>
|
||||||
<width>686</width>
|
<width>686</width>
|
||||||
<height>3286</height>
|
<height>3286</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
<enum>QFrame::Raised</enum>
|
<enum>QFrame::Raised</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>18</number>
|
<number>5</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page_22">
|
<widget class="QWidget" name="page_22">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
|
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
|
||||||
@@ -3109,7 +3109,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>3</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">
|
||||||
@@ -3220,7 +3220,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>10</number>
|
<number>9</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">
|
||||||
@@ -4173,10 +4173,10 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
<string>RealSense2</string>
|
<string>RealSense2</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_100" columnstretch="0,0,1">
|
<layout class="QGridLayout" name="gridLayout_100" columnstretch="0,0,1">
|
||||||
<item row="8" column="1">
|
<item row="9" column="1">
|
||||||
<widget class="QLineEdit" name="lineEdit_rs2_jsonFile"/>
|
<widget class="QLineEdit" name="lineEdit_rs2_jsonFile"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="2">
|
<item row="7" column="2">
|
||||||
<widget class="QLabel" name="label_565">
|
<widget class="QLabel" name="label_565">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Dual Mode (D400+T265): Odometry is computed by T265 and RGB-D frames are from D400.</string>
|
<string>Dual Mode (D400+T265): Odometry is computed by T265 and RGB-D frames are from D400.</string>
|
||||||
@@ -4276,7 +4276,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="1">
|
<item row="10" column="1">
|
||||||
<spacer name="verticalSpacer_71">
|
<spacer name="verticalSpacer_71">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
@@ -4319,7 +4319,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="1">
|
<item row="7" column="1">
|
||||||
<widget class="QCheckBox" name="checkbox_rs2_dualMode">
|
<widget class="QCheckBox" name="checkbox_rs2_dualMode">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
@@ -4329,7 +4329,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="1">
|
<item row="8" column="1">
|
||||||
<widget class="QLineEdit" name="lineEdit_rs2_dualModeExtrinsics">
|
<widget class="QLineEdit" name="lineEdit_rs2_dualModeExtrinsics">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Format (3 values): x y z<br/>Format (6 values): x y z roll pitch yaw<br/>Format (7 values): x y z qx qy qz qw<br/>Format (9 values, 3x3 rotation): r11 r12 r13 r21 r22 r23 r31 r32 r33<br/>Format (12 values, 3x4 transform): r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz</p><p>KITTI: /base_link to /gray_camera = 0 0 1 -1 0 0 0 -1 0<br/>KITTI: /base_link to /color_camera = 0 0 1 0 -1 0 0 -0.06 0 -1 0 0<br/>KITTI: /base_footprint to /gray_camera = 0 0 1 0 -1 0 0 0 0 -1 0 1.67<br/>KITTI: /base_footprint to /color_camera = 0 0 1 0 -1 0 0 -0.06 0 -1 0 1.67</p><p>EuRoC MAV: /base_link to /cam0 = T_BS*T_SC0 = -0.0257742 0.00375623 0.999661 0.00981073 -0.999557 -0.0149672 -0.0257155 0.064677 0.0148655 -0.999881 0.00414038 -0.0216401</p></body></html></string>
|
<string><html><head/><body><p>Format (3 values): x y z<br/>Format (6 values): x y z roll pitch yaw<br/>Format (7 values): x y z qx qy qz qw<br/>Format (9 values, 3x3 rotation): r11 r12 r13 r21 r22 r23 r31 r32 r33<br/>Format (12 values, 3x4 transform): r11 r12 r13 tx r21 r22 r23 ty r31 r32 r33 tz</p><p>KITTI: /base_link to /gray_camera = 0 0 1 -1 0 0 0 -1 0<br/>KITTI: /base_link to /color_camera = 0 0 1 0 -1 0 0 -0.06 0 -1 0 0<br/>KITTI: /base_footprint to /gray_camera = 0 0 1 0 -1 0 0 0 0 -1 0 1.67<br/>KITTI: /base_footprint to /color_camera = 0 0 1 0 -1 0 0 -0.06 0 -1 0 1.67</p><p>EuRoC MAV: /base_link to /cam0 = T_BS*T_SC0 = -0.0257742 0.00375623 0.999661 0.00981073 -0.999557 -0.0149672 -0.0257155 0.064677 0.0148655 -0.999881 0.00414038 -0.0216401</p></body></html></string>
|
||||||
@@ -4339,7 +4339,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="2">
|
<item row="8" column="2">
|
||||||
<widget class="QLabel" name="label_566">
|
<widget class="QLabel" name="label_566">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><html><head/><body><p>Dual Mode extrinsics (T265's pose frame to D400's left IR camera). Default extrinsics match the 3D printed bracket <a href=" https://www.intelrealsense.com/depth-and-tracking-combined-get-started/"><span style=" text-decoration: underline; color:#0000ff;">here</span></a> (<a href="https://github.com/IntelRealSense/realsense-ros/blob/occupancy-mapping/realsense2_camera/meshes/mount_t265_d435.stl"><span style=" text-decoration: underline; color:#0000ff;">stl</span></a>).</p></body></html></string>
|
<string><html><head/><body><p>Dual Mode extrinsics (T265's pose frame to D400's left IR camera). Default extrinsics match the 3D printed bracket <a href=" https://www.intelrealsense.com/depth-and-tracking-combined-get-started/"><span style=" text-decoration: underline; color:#0000ff;">here</span></a> (<a href="https://github.com/IntelRealSense/realsense-ros/blob/occupancy-mapping/realsense2_camera/meshes/mount_t265_d435.stl"><span style=" text-decoration: underline; color:#0000ff;">stl</span></a>).</p></body></html></string>
|
||||||
@@ -4352,7 +4352,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="2">
|
<item row="9" column="2">
|
||||||
<widget class="QLabel" name="label_571">
|
<widget class="QLabel" name="label_571">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><html><head/><body><p>D400 Series Visual Presets. See this <a href="https://github.com/IntelRealSense/librealsense/wiki/D400-Series-Visual-Presets"><span style=" text-decoration: underline; color:#0000ff;">page</span></a>.</p></body></html></string>
|
<string><html><head/><body><p>D400 Series Visual Presets. See this <a href="https://github.com/IntelRealSense/librealsense/wiki/D400-Series-Visual-Presets"><span style=" text-decoration: underline; color:#0000ff;">page</span></a>.</p></body></html></string>
|
||||||
@@ -4365,13 +4365,33 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="9" column="0">
|
||||||
<widget class="QToolButton" name="toolButton_rs2_jsonFile">
|
<widget class="QToolButton" name="toolButton_rs2_jsonFile">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="6" column="2">
|
||||||
|
<widget class="QLabel" name="label_606">
|
||||||
|
<property name="text">
|
||||||
|
<string>Global time sync. This will make sure IMU data is interpolated at image timestamp, otherwise latest received IMU is synchronized to current frame. Set to off if your firmware of your camera cannot synchronize timestamps.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkbox_rs2_globalTimeStync">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
Reference in New Issue
Block a user