diff --git a/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.cpp b/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.cpp index 66f0da7fc5b668c322127ab8ef5eb1219f01d851..f52a657939b9ded2a6af72870f00a8bac18bec63 100644 --- a/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.cpp +++ b/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.cpp @@ -210,6 +210,8 @@ GraspEvaluationPoseUncertainty::PoseEvalResults GraspEvaluationPoseUncertainty:: PoseEvalResults res; res.avgQuality = 0.0f; res.forceClosureRate = 0.0f; + res.avgQualityCol = 0.0f; + res.forceClosureRateCol = 0.0f; res.numPosesTested = 0; res.numValidPoses = 0; res.numColPoses = 0; @@ -251,9 +253,11 @@ GraspEvaluationPoseUncertainty::PoseEvalResults GraspEvaluationPoseUncertainty:: { res.numValidPoses++; res.avgQuality += results.at(i).quality; + res.avgQualityCol += results.at(i).quality; if (results.at(i).forceClosure) { res.forceClosureRate += 1.0f; + res.forceClosureRateCol += 1.0f; res.numForceClosurePoses++; } } @@ -264,6 +268,11 @@ GraspEvaluationPoseUncertainty::PoseEvalResults GraspEvaluationPoseUncertainty:: res.forceClosureRate /= float(res.numValidPoses); res.avgQuality /= float(res.numValidPoses); } + if (res.numPosesTested>0) + { + res.forceClosureRateCol /= float(res.numPosesTested); + res.avgQualityCol /= float(res.numPosesTested); + } // restore setup eef->getRobot()->setGlobalPose(eefRobotPoseInit); diff --git a/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.h b/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.h index dad5a35483bc06b73c01ff565603783d18dac832..caf12839afd46921b216d2dabb6a18e589b24625 100644 --- a/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.h +++ b/GraspPlanning/GraspQuality/GraspEvaluationPoseUncertainty.h @@ -95,6 +95,8 @@ public: int numForceClosurePoses = 0.0; // poses that have force closure float forceClosureRate = 0.0; // without collision poses float avgQuality = 0.0; // without collision poses + float forceClosureRateCol = 0.0; // with collision poses + float avgQualityCol = 0.0; // with collision poses void print() { @@ -105,8 +107,10 @@ public: if (numPosesTested>0) colPercent = float(numColPoses) / float(numPosesTested) * 100.0f; VR_INFO << "Num Poses initially in collision:" << numColPoses << " == " << colPercent << "%" << endl; - VR_INFO << "Avg Quality (valid poses):" << avgQuality << endl; - VR_INFO << "FC rate (valid poses):" << forceClosureRate * 100.0f << "%" << endl; + VR_INFO << "Avg Quality (only col freeposes):" << avgQuality << endl; + VR_INFO << "FC rate (only col free poses):" << forceClosureRate * 100.0f << "%" << endl; + VR_INFO << "Avg Quality (all poses):" << avgQualityCol << endl; + VR_INFO << "FC rate (all poses):" << forceClosureRateCol * 100.0f << "%" << endl; } }; diff --git a/GraspPlanning/examples/GraspPlanner/GraspPlannerWindow.cpp b/GraspPlanning/examples/GraspPlanner/GraspPlannerWindow.cpp index 6aa37e225dc88e3728588ef1b2a9940f70793141..dc136a70dfc1ef38d0601a224521d31104679dcf 100644 --- a/GraspPlanning/examples/GraspPlanner/GraspPlannerWindow.cpp +++ b/GraspPlanning/examples/GraspPlanner/GraspPlannerWindow.cpp @@ -551,7 +551,7 @@ void GraspPlannerWindow::planObjectBatch() boost::filesystem::path resultsCSVPath("genericgraspplanningresults-" + robot->getName() + ".csv"); resultsCSVPath = boost::filesystem::absolute(resultsCSVPath); std::ofstream fs(resultsCSVPath.string().c_str(), std::ofstream::out); - fs << "object," << planner->getEvaluation().GetCSVHeader() << ",RobustnessAvgQuality,RobustnessAvgForceClosureRate"; + fs << "object," << planner->getEvaluation().GetCSVHeader() << ",RobustnessAvgQualityNoCol,RobustnessAvgForceClosureRateNoCol,RobustnessAvgQualityCol,RobustnessAvgForceClosureRateCol"; QProgressDialog progress("Calculating grasps...", "Abort", 0, paths.size(), this); progress.setWindowModality(Qt::WindowModal); progress.show(); @@ -577,11 +577,13 @@ void GraspPlannerWindow::planObjectBatch() objectFile = path.toStdString(); loadObject(); { - planner->setRetreatOnLowContacts(false); + //planner->setRetreatOnLowContacts(false); plan(); // save(boost::filesystem::path(path.toStdString()).replace_extension(".moxml").string()); float avgRate = 0; float avgForceClosureRate = 0; + float avgRateCol = 0; + float avgForceClosureRateCol = 0; size_t graspSum = 0; std::vector<double> histogramFC(bins,0.0); std::vector<double> histogramFCWithCollisions(bins,0.0); @@ -599,16 +601,20 @@ void GraspPlannerWindow::planObjectBatch() histogramFCWithCollisions.at(std::min<int>((int)((double)(result.numForceClosurePoses)/result.numPosesTested * bins), bins-1))++; avgRate += result.avgQuality; avgForceClosureRate += result.forceClosureRate; + avgRateCol += result.avgQualityCol; + avgForceClosureRateCol += result.forceClosureRateCol; graspSum++; // if(graspSum > 10) // break; } - if (planner->getPlannedGrasps().size()>0) + if (graspSum>0) { avgRate /= planner->getPlannedGrasps().size(); avgForceClosureRate /= planner->getPlannedGrasps().size(); + avgRateCol /= planner->getPlannedGrasps().size(); + avgForceClosureRateCol /= planner->getPlannedGrasps().size(); } - fs << object->getName() << "," << planner->getEvaluation().toCSVString() << "," << avgRate << "," << avgForceClosureRate; + fs << object->getName() << "," << planner->getEvaluation().toCSVString() << "," << avgRate << "," << avgForceClosureRate << "," << avgRateCol << "," << avgForceClosureRateCol; int i = 0; for(auto bin : histogramFC) { diff --git a/VirtualRobot/Robot.cpp b/VirtualRobot/Robot.cpp index b7a8367317b9b4f79de0910964a71ad6f86febdf..c06e31d97acbbd280d2cf5e8e1954a842a27d5eb 100644 --- a/VirtualRobot/Robot.cpp +++ b/VirtualRobot/Robot.cpp @@ -535,7 +535,7 @@ namespace VirtualRobot return res; } - std::vector<std::string> VirtualRobot::Robot::Robot::getRobotNodeSetNames() const + std::vector<std::string> Robot::getRobotNodeSetNames() const { std::vector<std::string> res; const auto sets = getRobotNodeSets();