mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-12 21:09:50 +08:00
Fixed FLOAM not working when local transform is not Identity. DBViewer: warn user when scan from dpeth is checked and there are no depth images in db.
This commit is contained in:
@@ -130,7 +130,7 @@ Transform OdometryFLOAM::computeTransform(
|
|||||||
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1)*9999;
|
cv::Mat covariance = cv::Mat::eye(6,6,CV_64FC1)*9999;
|
||||||
if(!lost_)
|
if(!lost_)
|
||||||
{
|
{
|
||||||
pcl::PointCloud<pcl::PointXYZI>::Ptr laserCloudInPtr = util3d::laserScanToPointCloudI(data.laserScanRaw(), data.laserScanRaw().localTransform());
|
pcl::PointCloud<pcl::PointXYZI>::Ptr laserCloudInPtr = util3d::laserScanToPointCloudI(data.laserScanRaw());
|
||||||
|
|
||||||
UDEBUG("Scan conversion: %fs", timer.ticks());
|
UDEBUG("Scan conversion: %fs", timer.ticks());
|
||||||
|
|
||||||
@@ -152,8 +152,8 @@ Transform OdometryFLOAM::computeTransform(
|
|||||||
if(!pose.isNull())
|
if(!pose.isNull())
|
||||||
{
|
{
|
||||||
covariance = cv::Mat::eye(6,6,CV_64FC1);
|
covariance = cv::Mat::eye(6,6,CV_64FC1);
|
||||||
covariance(cv::Range(0,3), cv::Range(0,3)) *= 0.01;
|
covariance(cv::Range(0,3), cv::Range(0,3)) *= linVar_;
|
||||||
covariance(cv::Range(3,6), cv::Range(3,6)) *= 0.01;
|
covariance(cv::Range(3,6), cv::Range(3,6)) *= angVar_;
|
||||||
|
|
||||||
t = lastPose_.inverse() * pose; // incremental
|
t = lastPose_.inverse() * pose; // incremental
|
||||||
lastPose_ = pose;
|
lastPose_ = pose;
|
||||||
|
|||||||
@@ -7599,10 +7599,27 @@ void DatabaseViewer::refineConstraint(int from, int to, bool silent)
|
|||||||
fromS->sensorData().setLaserScan(LaserScan(util3d::laserScanFromPointCloud(*util3d::removeNaNFromPointCloud(cloudFrom), Transform()), maxLaserScans, 0));
|
fromS->sensorData().setLaserScan(LaserScan(util3d::laserScanFromPointCloud(*util3d::removeNaNFromPointCloud(cloudFrom), Transform()), maxLaserScans, 0));
|
||||||
toS->sensorData().setLaserScan(LaserScan(util3d::laserScanFromPointCloud(*util3d::removeNaNFromPointCloud(cloudTo), Transform()), maxLaserScans, 0));
|
toS->sensorData().setLaserScan(LaserScan(util3d::laserScanFromPointCloud(*util3d::removeNaNFromPointCloud(cloudTo), Transform()), maxLaserScans, 0));
|
||||||
|
|
||||||
if(!fromS->sensorData().laserScanCompressed().isEmpty() || !toS->sensorData().laserScanCompressed().isEmpty())
|
if(!fromS->sensorData().laserScanCompressed().isEmpty() && !toS->sensorData().laserScanCompressed().isEmpty())
|
||||||
{
|
{
|
||||||
UWARN("There are laser scans in data, but generate laser scan from "
|
UWARN("There are laser scans in data, but generate laser scan from "
|
||||||
"depth image option is activated. Ignoring saved laser scans...");
|
"depth image option is activated (GUI Parameters->Refine). "
|
||||||
|
"Ignoring saved laser scans...");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString msg = tr("Generating laser scan from depth image is checked "
|
||||||
|
"(GUI Parameters->Refine), but selected nodes don't contain "
|
||||||
|
"depth data. Empty laser scans are generated, so transform "
|
||||||
|
"estimation will likely fail. Uncheck to use laser scans instead "
|
||||||
|
"(if there are some).");
|
||||||
|
if(!silent)
|
||||||
|
{
|
||||||
|
|
||||||
|
QMessageBox::warning(this,
|
||||||
|
tr("Refine a link"),
|
||||||
|
msg);
|
||||||
|
}
|
||||||
|
UWARN(msg.toStdString().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user