mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-08 11:07:46 +08:00
DBViewer: added camera projection on scan option (GUI params). Fixed some deprecated warnings.
This commit is contained in:
@@ -3294,10 +3294,9 @@ std::vector<std::pair< std::pair<int, int>, pcl::PointXY> > projectCloudToCamera
|
|||||||
const Transform & cam = cameraPoses.at(invertedIndex[i][j].nodeID);
|
const Transform & cam = cameraPoses.at(invertedIndex[i][j].nodeID);
|
||||||
Eigen::Vector4f camDir(cam.x()-pt.x, cam.y()-pt.y, cam.z()-pt.z, 0);
|
Eigen::Vector4f camDir(cam.x()-pt.x, cam.y()-pt.y, cam.z()-pt.z, 0);
|
||||||
Eigen::Vector4f normal(pt.normal_x, pt.normal_y, pt.normal_z, 0);
|
Eigen::Vector4f normal(pt.normal_x, pt.normal_y, pt.normal_z, 0);
|
||||||
float angleToCam = pcl::getAngle3D(normal, camDir);
|
float angleToCam = maxAngle<=0?0:pcl::getAngle3D(normal, camDir);
|
||||||
float distanceToCam = invertedIndex[i][j].distance;
|
float distanceToCam = invertedIndex[i][j].distance;
|
||||||
if(camDir.dot(normal) > 0 && // is facing camera?
|
if( (maxAngle<=0 || (camDir.dot(normal) > 0 && angleToCam < maxAngle)) && // is facing camera? is point normal perpendicular to camera?
|
||||||
(maxAngle<=0 || angleToCam < maxAngle) && // is point normal perpendicular to camera?
|
|
||||||
(maxDistance<=0 || distanceToCam<maxDistance)) // is point not too far from camera?
|
(maxDistance<=0 || distanceToCam<maxDistance)) // is point not too far from camera?
|
||||||
{
|
{
|
||||||
float vx = invertedIndex[i][j].uv.x-0.5f;
|
float vx = invertedIndex[i][j].uv.x-0.5f;
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ LaserScan commonFiltering(
|
|||||||
if(cloud->size() && (normalK > 0 || normalRadius>0.0f))
|
if(cloud->size() && (normalK > 0 || normalRadius>0.0f))
|
||||||
{
|
{
|
||||||
pcl::PointCloud<pcl::Normal>::Ptr normals = util3d::computeNormals(cloud, normalK, normalRadius);
|
pcl::PointCloud<pcl::Normal>::Ptr normals = util3d::computeNormals(cloud, normalK, normalRadius);
|
||||||
scan = LaserScan(laserScanFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), LaserScan::kXYZRGBNormal, scan.localTransform());
|
scan = LaserScan(laserScanFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
UDEBUG("Normals computed (k=%d radius=%f)", normalK, normalRadius);
|
UDEBUG("Normals computed (k=%d radius=%f)", normalK, normalRadius);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -183,7 +183,7 @@ LaserScan commonFiltering(
|
|||||||
{
|
{
|
||||||
UWARN("Voxel filter is applied, but normal parameters are not set and input scan has normals. The returned scan has no normals.");
|
UWARN("Voxel filter is applied, but normal parameters are not set and input scan has normals. The returned scan has no normals.");
|
||||||
}
|
}
|
||||||
scan = LaserScan(laserScanFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), LaserScan::kXYZRGB, scan.localTransform());
|
scan = LaserScan(laserScanFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,17 +208,17 @@ LaserScan commonFiltering(
|
|||||||
normals = util3d::computeNormals2D(cloud, normalK, normalRadius);
|
normals = util3d::computeNormals2D(cloud, normalK, normalRadius);
|
||||||
if(voxelSize == 0.0f && scan.angleIncrement() > 0.0f)
|
if(voxelSize == 0.0f && scan.angleIncrement() > 0.0f)
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), LaserScan::kXYINormal, scan.rangeMin(), scan.rangeMax(), scan.angleMin(), scan.angleMax(), scan.angleIncrement(), scan.localTransform());
|
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), scan.rangeMin(), scan.rangeMax(), scan.angleMin(), scan.angleMax(), scan.angleIncrement(), scan.localTransform());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), LaserScan::kXYINormal, scan.localTransform());
|
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
normals = util3d::computeNormals(cloud, normalK, normalRadius);
|
normals = util3d::computeNormals(cloud, normalK, normalRadius);
|
||||||
scan = LaserScan(laserScanFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), LaserScan::kXYZINormal, scan.localTransform());
|
scan = LaserScan(laserScanFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
UDEBUG("Normals computed (k=%d radius=%f)", normalK, normalRadius);
|
UDEBUG("Normals computed (k=%d radius=%f)", normalK, normalRadius);
|
||||||
}
|
}
|
||||||
@@ -230,11 +230,11 @@ LaserScan commonFiltering(
|
|||||||
}
|
}
|
||||||
if(scan.is2d())
|
if(scan.is2d())
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScan2dFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), LaserScan::kXYI, scan.localTransform());
|
scan = LaserScan(laserScan2dFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScanFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), LaserScan::kXYZI, scan.localTransform());
|
scan = LaserScan(laserScanFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -260,17 +260,17 @@ LaserScan commonFiltering(
|
|||||||
normals = util3d::computeNormals2D(cloud, normalK, normalRadius);
|
normals = util3d::computeNormals2D(cloud, normalK, normalRadius);
|
||||||
if(voxelSize == 0.0f && scan.angleIncrement() > 0.0f)
|
if(voxelSize == 0.0f && scan.angleIncrement() > 0.0f)
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), LaserScan::kXYNormal, scan.rangeMin(), scan.rangeMax(), scan.angleMin(), scan.angleMax(), scan.angleIncrement(), scan.localTransform());
|
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), scan.rangeMin(), scan.rangeMax(), scan.angleMin(), scan.angleMax(), scan.angleIncrement(), scan.localTransform());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), LaserScan::kXYNormal, scan.localTransform());
|
scan = LaserScan(laserScan2dFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
normals = util3d::computeNormals(cloud, normalK, normalRadius);
|
normals = util3d::computeNormals(cloud, normalK, normalRadius);
|
||||||
scan = LaserScan(laserScanFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), LaserScan::kXYZNormal, scan.localTransform());
|
scan = LaserScan(laserScanFromPointCloud(*cloud, *normals), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
UDEBUG("Normals computed (k=%d radius=%f)", normalK, normalRadius);
|
UDEBUG("Normals computed (k=%d radius=%f)", normalK, normalRadius);
|
||||||
}
|
}
|
||||||
@@ -282,11 +282,11 @@ LaserScan commonFiltering(
|
|||||||
}
|
}
|
||||||
if(scan.is2d())
|
if(scan.is2d())
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScan2dFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), LaserScan::kXY, scan.localTransform());
|
scan = LaserScan(laserScan2dFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scan = LaserScan(laserScanFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), LaserScan::kXYZ, scan.localTransform());
|
scan = LaserScan(laserScanFromPointCloud(*cloud), scanMaxPts, scan.rangeMax(), scan.localTransform());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+138
-41
@@ -391,6 +391,7 @@ DatabaseViewer::DatabaseViewer(const QString & ini, QWidget * parent) :
|
|||||||
connect(ui_->doubleSpinBox_gainCompensationRadius, SIGNAL(valueChanged(double)), this, SLOT(updateConstraintView()));
|
connect(ui_->doubleSpinBox_gainCompensationRadius, SIGNAL(valueChanged(double)), this, SLOT(updateConstraintView()));
|
||||||
connect(ui_->doubleSpinBox_voxelSize, SIGNAL(valueChanged(double)), this, SLOT(updateConstraintView()));
|
connect(ui_->doubleSpinBox_voxelSize, SIGNAL(valueChanged(double)), this, SLOT(updateConstraintView()));
|
||||||
connect(ui_->doubleSpinBox_voxelSize, SIGNAL(valueChanged(double)), this, SLOT(update3dView()));
|
connect(ui_->doubleSpinBox_voxelSize, SIGNAL(valueChanged(double)), this, SLOT(update3dView()));
|
||||||
|
connect(ui_->checkBox_cameraProjection, SIGNAL(stateChanged(int)), this, SLOT(update3dView()));
|
||||||
connect(ui_->spinBox_decimation, SIGNAL(valueChanged(int)), this, SLOT(updateConstraintView()));
|
connect(ui_->spinBox_decimation, SIGNAL(valueChanged(int)), this, SLOT(updateConstraintView()));
|
||||||
connect(ui_->spinBox_decimation, SIGNAL(valueChanged(int)), this, SLOT(update3dView()));
|
connect(ui_->spinBox_decimation, SIGNAL(valueChanged(int)), this, SLOT(update3dView()));
|
||||||
connect(ui_->groupBox_posefiltering, SIGNAL(clicked(bool)), this, SLOT(updateGraphView()));
|
connect(ui_->groupBox_posefiltering, SIGNAL(clicked(bool)), this, SLOT(updateGraphView()));
|
||||||
@@ -418,6 +419,7 @@ DatabaseViewer::DatabaseViewer(const QString & ini, QWidget * parent) :
|
|||||||
// Graph view
|
// Graph view
|
||||||
connect(ui_->doubleSpinBox_gainCompensationRadius, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
|
connect(ui_->doubleSpinBox_gainCompensationRadius, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
|
||||||
connect(ui_->doubleSpinBox_voxelSize, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
|
connect(ui_->doubleSpinBox_voxelSize, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
|
||||||
|
connect(ui_->checkBox_cameraProjection, SIGNAL(stateChanged(int)), this, SLOT(configModified()));
|
||||||
connect(ui_->spinBox_decimation, SIGNAL(valueChanged(int)), this, SLOT(configModified()));
|
connect(ui_->spinBox_decimation, SIGNAL(valueChanged(int)), this, SLOT(configModified()));
|
||||||
connect(ui_->groupBox_posefiltering, SIGNAL(clicked(bool)), this, SLOT(configModified()));
|
connect(ui_->groupBox_posefiltering, SIGNAL(clicked(bool)), this, SLOT(configModified()));
|
||||||
connect(ui_->doubleSpinBox_posefilteringRadius, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
|
connect(ui_->doubleSpinBox_posefilteringRadius, SIGNAL(valueChanged(double)), this, SLOT(configModified()));
|
||||||
@@ -549,6 +551,8 @@ void DatabaseViewer::readSettings()
|
|||||||
ui_->doubleSpinBox_gainCompensationRadius->setValue(settings.value("gainCompensationRadius", ui_->doubleSpinBox_gainCompensationRadius->value()).toDouble());
|
ui_->doubleSpinBox_gainCompensationRadius->setValue(settings.value("gainCompensationRadius", ui_->doubleSpinBox_gainCompensationRadius->value()).toDouble());
|
||||||
ui_->doubleSpinBox_voxelSize->setValue(settings.value("voxelSize", ui_->doubleSpinBox_voxelSize->value()).toDouble());
|
ui_->doubleSpinBox_voxelSize->setValue(settings.value("voxelSize", ui_->doubleSpinBox_voxelSize->value()).toDouble());
|
||||||
ui_->spinBox_decimation->setValue(settings.value("decimation", ui_->spinBox_decimation->value()).toInt());
|
ui_->spinBox_decimation->setValue(settings.value("decimation", ui_->spinBox_decimation->value()).toInt());
|
||||||
|
ui_->checkBox_cameraProjection->setChecked(settings.value("camProj", ui_->checkBox_cameraProjection->isChecked()).toBool());
|
||||||
|
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
settings.beginGroup("grid");
|
settings.beginGroup("grid");
|
||||||
@@ -635,6 +639,7 @@ void DatabaseViewer::writeSettings()
|
|||||||
settings.setValue("gainCompensationRadius", ui_->doubleSpinBox_gainCompensationRadius->value());
|
settings.setValue("gainCompensationRadius", ui_->doubleSpinBox_gainCompensationRadius->value());
|
||||||
settings.setValue("voxelSize", ui_->doubleSpinBox_voxelSize->value());
|
settings.setValue("voxelSize", ui_->doubleSpinBox_voxelSize->value());
|
||||||
settings.setValue("decimation", ui_->spinBox_decimation->value());
|
settings.setValue("decimation", ui_->spinBox_decimation->value());
|
||||||
|
settings.setValue("camProj", ui_->checkBox_cameraProjection->isChecked());
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
// save Grid settings
|
// save Grid settings
|
||||||
@@ -724,6 +729,7 @@ void DatabaseViewer::restoreDefaultSettings()
|
|||||||
ui_->doubleSpinBox_gainCompensationRadius->setValue(0.0);
|
ui_->doubleSpinBox_gainCompensationRadius->setValue(0.0);
|
||||||
ui_->doubleSpinBox_voxelSize->setValue(0.0);
|
ui_->doubleSpinBox_voxelSize->setValue(0.0);
|
||||||
ui_->spinBox_decimation->setValue(1);
|
ui_->spinBox_decimation->setValue(1);
|
||||||
|
ui_->checkBox_cameraProjection->setChecked(false);
|
||||||
|
|
||||||
ui_->groupBox_posefiltering->setChecked(false);
|
ui_->groupBox_posefiltering->setChecked(false);
|
||||||
ui_->doubleSpinBox_posefilteringRadius->setValue(0.1);
|
ui_->doubleSpinBox_posefilteringRadius->setValue(0.1);
|
||||||
@@ -4590,7 +4596,138 @@ void DatabaseViewer::update(int value,
|
|||||||
cloudViewer_->addOrUpdateLine("gravity", pose, (pose).translation()*Transform(gravity[0], gravity[1], gravity[2], 0, 0, 0)*pose.rotation().inverse(), Qt::yellow, true, false);
|
cloudViewer_->addOrUpdateLine("gravity", pose, (pose).translation()*Transform(gravity[0], gravity[1], gravity[2], 0, 0, 0)*pose.rotation().inverse(), Qt::yellow, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ui_->checkBox_showCloud->isChecked() || ui_->checkBox_showMesh->isChecked())
|
//add scan
|
||||||
|
LaserScan laserScanRaw = data.laserScanRaw();
|
||||||
|
if(modifiedLaserScans_.find(id)!=modifiedLaserScans_.end())
|
||||||
|
{
|
||||||
|
laserScanRaw = modifiedLaserScans_.at(id);
|
||||||
|
}
|
||||||
|
if(ui_->checkBox_showScan->isChecked() && laserScanRaw.size())
|
||||||
|
{
|
||||||
|
if(laserScanRaw.hasRGB() && laserScanRaw.hasNormals())
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr scan = util3d::laserScanToPointCloudRGBNormal(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
||||||
|
}
|
||||||
|
else if(laserScanRaw.hasIntensity() && laserScanRaw.hasNormals())
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointXYZINormal>::Ptr scan = util3d::laserScanToPointCloudINormal(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
||||||
|
}
|
||||||
|
else if(laserScanRaw.hasNormals())
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointNormal>::Ptr scan = util3d::laserScanToPointCloudNormal(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
||||||
|
}
|
||||||
|
else if(laserScanRaw.hasRGB())
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointXYZRGB>::Ptr scan = util3d::laserScanToPointCloudRGB(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
||||||
|
}
|
||||||
|
else if(laserScanRaw.hasIntensity())
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointXYZI>::Ptr scan = util3d::laserScanToPointCloudI(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointXYZ>::Ptr scan = util3d::laserScanToPointCloud(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add RGB-D cloud
|
||||||
|
if(ui_->checkBox_showCloud->isChecked() && ui_->checkBox_cameraProjection->isChecked() &&
|
||||||
|
!data.imageRaw().empty() && !laserScanRaw.empty() && !laserScanRaw.is2d())
|
||||||
|
{
|
||||||
|
pcl::PointCloud<pcl::PointXYZINormal>::Ptr cloud = util3d::laserScanToPointCloudINormal(laserScanRaw, laserScanRaw.localTransform());
|
||||||
|
std::vector<CameraModel> models = data.cameraModels();
|
||||||
|
if(data.stereoCameraModel().isValidForProjection())
|
||||||
|
{
|
||||||
|
models.clear();
|
||||||
|
models.push_back(data.stereoCameraModel().left());
|
||||||
|
}
|
||||||
|
else if(!models.empty() && !models[0].isValidForProjection())
|
||||||
|
{
|
||||||
|
models.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!models.empty() && models[0].imageWidth() != 0 && models[0].imageHeight() != 0)
|
||||||
|
{
|
||||||
|
std::map<int, Transform> cameraPoses;
|
||||||
|
std::map<int, std::vector<CameraModel> > cameraModels;
|
||||||
|
cameraPoses.insert(std::make_pair(data.id(), Transform::getIdentity()));
|
||||||
|
cameraModels.insert(std::make_pair(data.id(), models));
|
||||||
|
|
||||||
|
std::vector<std::pair< std::pair<int, int>, pcl::PointXY> > pointToPixel;
|
||||||
|
pointToPixel = util3d::projectCloudToCameras(
|
||||||
|
*cloud,
|
||||||
|
cameraPoses,
|
||||||
|
cameraModels);
|
||||||
|
// color the cloud
|
||||||
|
UASSERT(pointToPixel.empty() || pointToPixel.size() == cloud->size());
|
||||||
|
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudValidPoints(new pcl::PointCloud<pcl::PointXYZRGB>);
|
||||||
|
cloudValidPoints->resize(cloud->size());
|
||||||
|
int oi=0;
|
||||||
|
for(size_t i=0; i<pointToPixel.size(); ++i)
|
||||||
|
{
|
||||||
|
pcl::PointXYZINormal & pt = cloud->at(i);
|
||||||
|
pcl::PointXYZRGB ptColor;
|
||||||
|
int nodeID = pointToPixel[i].first.first;
|
||||||
|
int cameraIndex = pointToPixel[i].first.second;
|
||||||
|
if(nodeID>0 && cameraIndex>=0)
|
||||||
|
{
|
||||||
|
cv::Mat image = data.imageRaw();
|
||||||
|
|
||||||
|
int subImageWidth = image.cols / cameraModels.at(nodeID).size();
|
||||||
|
image = image(cv::Range::all(), cv::Range(cameraIndex*subImageWidth, (cameraIndex+1)*subImageWidth));
|
||||||
|
|
||||||
|
|
||||||
|
int x = pointToPixel[i].second.x * (float)image.cols;
|
||||||
|
int y = pointToPixel[i].second.y * (float)image.rows;
|
||||||
|
UASSERT(x>=0 && x<image.cols);
|
||||||
|
UASSERT(y>=0 && y<image.rows);
|
||||||
|
|
||||||
|
if(image.type()==CV_8UC3)
|
||||||
|
{
|
||||||
|
cv::Vec3b bgr = image.at<cv::Vec3b>(y, x);
|
||||||
|
ptColor.b = bgr[0];
|
||||||
|
ptColor.g = bgr[1];
|
||||||
|
ptColor.r = bgr[2];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UASSERT(image.type()==CV_8UC1);
|
||||||
|
ptColor.r = ptColor.g = ptColor.b = image.at<unsigned char>(pointToPixel[i].second.y * image.rows, pointToPixel[i].second.x * image.cols);
|
||||||
|
}
|
||||||
|
|
||||||
|
ptColor.x = pt.x;
|
||||||
|
ptColor.y = pt.y;
|
||||||
|
ptColor.z = pt.z;
|
||||||
|
cloudValidPoints->at(oi++) = ptColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cloudValidPoints->resize(oi);
|
||||||
|
if(!cloudValidPoints->empty())
|
||||||
|
{
|
||||||
|
if(ui_->doubleSpinBox_voxelSize->value() > 0.0)
|
||||||
|
{
|
||||||
|
cloudValidPoints = util3d::voxelize(cloudValidPoints, ui_->doubleSpinBox_voxelSize->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
cloudViewer_->addCloud("cloud", cloudValidPoints, pose);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UWARN("Camera projection to scan returned an empty cloud, no visible points from cameras...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UERROR("Node has invalid camera models, camera projection on scan cannot be done!.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(ui_->checkBox_showCloud->isChecked() || ui_->checkBox_showMesh->isChecked())
|
||||||
{
|
{
|
||||||
if(!data.depthOrRightRaw().empty())
|
if(!data.depthOrRightRaw().empty())
|
||||||
{
|
{
|
||||||
@@ -4740,46 +4877,6 @@ void DatabaseViewer::update(int value,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//add scan
|
|
||||||
LaserScan laserScanRaw = data.laserScanRaw();
|
|
||||||
if(modifiedLaserScans_.find(id)!=modifiedLaserScans_.end())
|
|
||||||
{
|
|
||||||
laserScanRaw = modifiedLaserScans_.at(id);
|
|
||||||
}
|
|
||||||
if(ui_->checkBox_showScan->isChecked() && laserScanRaw.size())
|
|
||||||
{
|
|
||||||
if(laserScanRaw.hasRGB() && laserScanRaw.hasNormals())
|
|
||||||
{
|
|
||||||
pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr scan = util3d::laserScanToPointCloudRGBNormal(laserScanRaw, laserScanRaw.localTransform());
|
|
||||||
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
|
||||||
}
|
|
||||||
else if(laserScanRaw.hasIntensity() && laserScanRaw.hasNormals())
|
|
||||||
{
|
|
||||||
pcl::PointCloud<pcl::PointXYZINormal>::Ptr scan = util3d::laserScanToPointCloudINormal(laserScanRaw, laserScanRaw.localTransform());
|
|
||||||
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
|
||||||
}
|
|
||||||
else if(laserScanRaw.hasNormals())
|
|
||||||
{
|
|
||||||
pcl::PointCloud<pcl::PointNormal>::Ptr scan = util3d::laserScanToPointCloudNormal(laserScanRaw, laserScanRaw.localTransform());
|
|
||||||
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
|
||||||
}
|
|
||||||
else if(laserScanRaw.hasRGB())
|
|
||||||
{
|
|
||||||
pcl::PointCloud<pcl::PointXYZRGB>::Ptr scan = util3d::laserScanToPointCloudRGB(laserScanRaw, laserScanRaw.localTransform());
|
|
||||||
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
|
||||||
}
|
|
||||||
else if(laserScanRaw.hasIntensity())
|
|
||||||
{
|
|
||||||
pcl::PointCloud<pcl::PointXYZI>::Ptr scan = util3d::laserScanToPointCloudI(laserScanRaw, laserScanRaw.localTransform());
|
|
||||||
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pcl::PointCloud<pcl::PointXYZ>::Ptr scan = util3d::laserScanToPointCloud(laserScanRaw, laserScanRaw.localTransform());
|
|
||||||
cloudViewer_->addCloud("scan", scan, pose, Qt::yellow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//add occupancy grid
|
//add occupancy grid
|
||||||
if(ui_->checkBox_showMap->isChecked() || ui_->checkBox_showGrid->isChecked())
|
if(ui_->checkBox_showMap->isChecked() || ui_->checkBox_showGrid->isChecked())
|
||||||
{
|
{
|
||||||
|
|||||||
+257
-237
@@ -61,7 +61,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>417</width>
|
<width>307</width>
|
||||||
<height>311</height>
|
<height>311</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -304,7 +304,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>416</width>
|
<width>306</width>
|
||||||
<height>311</height>
|
<height>311</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -1380,7 +1380,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QToolBox" name="toolBox">
|
<widget class="QToolBox" name="toolBox">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>2</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page_3">
|
<widget class="QWidget" name="page_3">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
@@ -1542,9 +1542,9 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>-322</y>
|
||||||
<width>280</width>
|
<width>518</width>
|
||||||
<height>1006</height>
|
<height>911</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<attribute name="label">
|
<attribute name="label">
|
||||||
@@ -1553,20 +1553,244 @@
|
|||||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout_9" columnstretch="0,0">
|
<layout class="QGridLayout" name="gridLayout_9" columnstretch="0,0">
|
||||||
<item row="7" column="1">
|
<item row="7" column="0">
|
||||||
<widget class="QLabel" name="label_octomap_cubes">
|
<widget class="QComboBox" name="comboBox_octomap_rendering_type">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Point Cloud</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Cube</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Volume</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox_grid_empty">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>OctoMap: Rendering type</string>
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="12" column="0">
|
||||||
|
<widget class="QDoubleSpinBox" name="doubleSpinBox_voxelSize">
|
||||||
|
<property name="suffix">
|
||||||
|
<string> m</string>
|
||||||
|
</property>
|
||||||
|
<property name="decimals">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<double>0.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>99.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.010000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>0.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="label_octomap_empty_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ground cell color</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="1">
|
<item row="11" column="0">
|
||||||
<widget class="QLabel" name="label_51">
|
<widget class="QSpinBox" name="spinBox_decimation">
|
||||||
|
<property name="prefix">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>16</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>16</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="14" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox_grid_showProbMap">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Gain compensation radius (Constraints view)</string>
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0">
|
||||||
|
<widget class="QSpinBox" name="spinBox_grid_depth">
|
||||||
|
<property name="prefix">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>16</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>16</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="1">
|
||||||
|
<widget class="QLabel" name="label_56">
|
||||||
|
<property name="text">
|
||||||
|
<string>Decimation (for images)</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox_grid_regenerateFromSavedGrid">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="label_octomap_empty_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Obstacle cell color</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="14" column="1">
|
||||||
|
<widget class="QLabel" name="label_59">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show probabilistic occupancy grid in Graph View.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButton_groundColor">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_groundColor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="label_53">
|
||||||
|
<property name="text">
|
||||||
|
<string>OctoMap</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="13" column="1">
|
||||||
|
<widget class="QLabel" name="label_57">
|
||||||
|
<property name="text">
|
||||||
|
<string>Crop radius when filtering empty space from 2d occupancy grid.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButton_obstacleColor">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_obstacleColor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="13" column="0">
|
||||||
|
<widget class="QSpinBox" name="spinBox_cropRadius">
|
||||||
|
<property name="suffix">
|
||||||
|
<string> pixels</string>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="12" column="1">
|
||||||
|
<widget class="QLabel" name="label_54">
|
||||||
|
<property name="text">
|
||||||
|
<string>Voxel size (for clouds and scans)</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButton_emptyColor">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_emptyColor">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="label_octomap_empty">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show empty space</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@@ -1595,23 +1819,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QLabel" name="label_53">
|
|
||||||
<property name="text">
|
|
||||||
<string>OctoMap</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="12" column="1">
|
|
||||||
<widget class="QLabel" name="label_54">
|
|
||||||
<property name="text">
|
|
||||||
<string>Voxel size (for clouds and scans)</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QCheckBox" name="checkBox_octomap">
|
<widget class="QCheckBox" name="checkBox_octomap">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -1619,93 +1826,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0">
|
|
||||||
<widget class="QCheckBox" name="checkBox_grid_regenerateFromSavedGrid">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="12" column="0">
|
|
||||||
<widget class="QDoubleSpinBox" name="doubleSpinBox_voxelSize">
|
|
||||||
<property name="suffix">
|
|
||||||
<string> m</string>
|
|
||||||
</property>
|
|
||||||
<property name="decimals">
|
|
||||||
<number>3</number>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>99.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<double>0.010000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="8" column="0">
|
|
||||||
<widget class="QSpinBox" name="spinBox_grid_depth">
|
|
||||||
<property name="prefix">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>16</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>16</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QCheckBox" name="checkBox_grid_empty">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="0">
|
|
||||||
<widget class="QComboBox" name="comboBox_octomap_rendering_type">
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Point Cloud</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Cube</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Volume</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="8" column="1">
|
|
||||||
<widget class="QLabel" name="label_octomap_depth">
|
|
||||||
<property name="text">
|
|
||||||
<string>OctoMap: Tree depth</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="9" column="1">
|
<item row="9" column="1">
|
||||||
<widget class="QLabel" name="label_55">
|
<widget class="QLabel" name="label_55">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -1716,36 +1836,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="label_octomap_empty">
|
|
||||||
<property name="text">
|
|
||||||
<string>Show empty space</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QLabel" name="label_octomap_empty_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Ground cell color</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLabel" name="label_octomap_empty_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Obstacle cell color</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QLabel" name="label_octomap_empty_4">
|
<widget class="QLabel" name="label_octomap_empty_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -1756,118 +1846,48 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="10" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
<widget class="QLabel" name="label_51">
|
||||||
<item>
|
|
||||||
<widget class="QToolButton" name="toolButton_groundColor">
|
|
||||||
<property name="text">
|
|
||||||
<string>...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="lineEdit_groundColor">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
|
||||||
<item>
|
|
||||||
<widget class="QToolButton" name="toolButton_obstacleColor">
|
|
||||||
<property name="text">
|
|
||||||
<string>...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="lineEdit_obstacleColor">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
|
||||||
<item>
|
|
||||||
<widget class="QToolButton" name="toolButton_emptyColor">
|
|
||||||
<property name="text">
|
|
||||||
<string>...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="lineEdit_emptyColor">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="11" column="1">
|
|
||||||
<widget class="QLabel" name="label_56">
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Decimation (for images)</string>
|
<string>Gain compensation radius (Constraints view)</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="0">
|
<item row="8" column="1">
|
||||||
<widget class="QSpinBox" name="spinBox_decimation">
|
<widget class="QLabel" name="label_octomap_depth">
|
||||||
<property name="prefix">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>16</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>16</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="13" column="1">
|
|
||||||
<widget class="QLabel" name="label_57">
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Crop radius when filtering empty space from 2d occupancy grid.</string>
|
<string>OctoMap: Tree depth</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="13" column="0">
|
<item row="7" column="1">
|
||||||
<widget class="QSpinBox" name="spinBox_cropRadius">
|
<widget class="QLabel" name="label_octomap_cubes">
|
||||||
<property name="suffix">
|
|
||||||
<string> pixels</string>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="14" column="1">
|
|
||||||
<widget class="QLabel" name="label_59">
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Show probabilistic occupancy grid in Graph View.</string>
|
<string>OctoMap: Rendering type</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="14" column="0">
|
<item row="15" column="1">
|
||||||
<widget class="QCheckBox" name="checkBox_grid_showProbMap">
|
<widget class="QLabel" name="label_60">
|
||||||
|
<property name="text">
|
||||||
|
<string>Create RGB-D cloud from RGB projection on scan.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="15" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox_cameraProjection">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
Reference in New Issue
Block a user