Skip to content
Snippets Groups Projects
Commit 7b9ca76e authored by Fabian Reister's avatar Fabian Reister
Browse files

adding utility code from armarx::navigation

parent 4be72e84
No related branches found
No related tags found
No related merge requests found
Pipeline #22106 failed
...@@ -30,28 +30,93 @@ ...@@ -30,28 +30,93 @@
#include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h> #include <RobotAPI/libraries/ArmarXObjects/ObjectFinder.h>
namespace armarx::objpose namespace armarx::objpose::util
{ {
objpose::ObjectPoseSeq objpose::ObjectPoseSeq
filterObjects(objpose::ObjectPoseSeq objects, const std::vector<std::string>& datasetBlocklist) filterObjects(objpose::ObjectPoseSeq objects,
const std::vector<std::string>& datasetDisableList)
{ {
const auto isBlacklisted = [&datasetBlocklist](const objpose::ObjectPose& objectPose) const auto isInDisableList = [&datasetDisableList](const objpose::ObjectPose& objectPose)
{ {
const auto dataset = objectPose.objectID.dataset(); const auto dataset = objectPose.objectID.dataset();
return std::find(datasetBlocklist.begin(), datasetBlocklist.end(), dataset) != return std::find(datasetDisableList.begin(), datasetDisableList.end(), dataset) !=
datasetBlocklist.end(); datasetDisableList.end();
}; };
objects.erase(std::remove_if(objects.begin(), objects.end(), isBlacklisted), objects.end()); objects.erase(std::remove_if(objects.begin(), objects.end(), isInDisableList),
objects.end());
return objects; return objects;
} }
objpose::ObjectPoseSeq
staticObjects(objpose::ObjectPoseSeq objects)
{
const auto isDynamic = [](const objpose::ObjectPose& objectPose)
{ return not objectPose.isStatic; };
objects.erase(std::remove_if(objects.begin(), objects.end(), isDynamic), objects.end());
return objects;
}
objpose::ObjectPoseSeq
nonArticulatedObjects(objpose::ObjectPoseSeq objects)
{
ObjectFinder finder;
finder.setLogObjectDiscoveryError(false);
const auto isArticulated = [&finder](const objpose::ObjectPose& objectPose)
{
const auto objInfo = finder.findObject(objectPose.objectID);
ARMARX_CHECK_NOT_NULL(objInfo) << objectPose.objectID;
const bool hasArticulatedModel = objInfo->getArticulatedModel().has_value();
return hasArticulatedModel;
};
objects.erase(std::remove_if(objects.begin(), objects.end(), isArticulated), objects.end());
return objects;
}
objpose::ObjectPoseSeq
articulatedObjects(objpose::ObjectPoseSeq objects)
{
ObjectFinder finder;
finder.setLogObjectDiscoveryError(false);
const auto isNonArticulated = [&finder](const objpose::ObjectPose& objectPose)
{
const auto objInfo = finder.findObject(objectPose.objectID);
ARMARX_CHECK_NOT_NULL(objInfo) << objectPose.objectID;
const bool hasArticulatedModel = objInfo->getArticulatedModel().has_value();
return not hasArticulatedModel;
};
objects.erase(std::remove_if(objects.begin(), objects.end(), isNonArticulated),
objects.end());
return objects;
}
std::optional<objpose::ObjectPose>
findObject(const objpose::ObjectPoseSeq& objectPoses, const armarx::ObjectID& objectID)
{
const auto matchesId = [&objectID](const objpose::ObjectPose& objectPose) -> bool
{ return objectPose.objectID == objectID; };
const auto it = std::find_if(objectPoses.begin(), objectPoses.end(), matchesId);
if (it != objectPoses.end())
{
return *it;
}
return std::nullopt;
}
VirtualRobot::ManipulationObjectPtr VirtualRobot::ManipulationObjectPtr
asManipulationObject(const objpose::ObjectPose& objectPose) asManipulationObject(const objpose::ObjectPose& objectPose)
{ {
ObjectFinder finder; ObjectFinder finder;
finder.setLogObjectDiscoveryError(false);
VirtualRobot::SceneObjectSetPtr sceneObjects(new VirtualRobot::SceneObjectSet); VirtualRobot::SceneObjectSetPtr sceneObjects(new VirtualRobot::SceneObjectSet);
if (auto obstacle = finder.loadManipulationObject(objectPose)) if (auto obstacle = finder.loadManipulationObject(objectPose))
...@@ -68,10 +133,12 @@ namespace armarx::objpose ...@@ -68,10 +133,12 @@ namespace armarx::objpose
asSceneObjects(const objpose::ObjectPoseSeq& objectPoses) asSceneObjects(const objpose::ObjectPoseSeq& objectPoses)
{ {
ObjectFinder finder; ObjectFinder finder;
finder.setLogObjectDiscoveryError(false);
VirtualRobot::SceneObjectSetPtr sceneObjects(new VirtualRobot::SceneObjectSet); VirtualRobot::SceneObjectSetPtr sceneObjects(new VirtualRobot::SceneObjectSet);
for (const auto& objectPose : objectPoses) for (const auto& objectPose : objectPoses)
{ {
ARMARX_VERBOSE << "Loading object `" << objectPose.objectID << "`";
if (auto obstacle = finder.loadManipulationObject(objectPose)) if (auto obstacle = finder.loadManipulationObject(objectPose))
{ {
obstacle->setGlobalPose(objectPose.objectPoseGlobal); obstacle->setGlobalPose(objectPose.objectPoseGlobal);
...@@ -82,5 +149,20 @@ namespace armarx::objpose ...@@ -82,5 +149,20 @@ namespace armarx::objpose
return sceneObjects; return sceneObjects;
} }
VirtualRobot::SceneObjectPtr
asSceneObject(const objpose::ObjectPose& objectPose)
{
ObjectFinder finder;
finder.setLogObjectDiscoveryError(false);
VirtualRobot::SceneObjectSetPtr sceneObjects(new VirtualRobot::SceneObjectSet);
if (auto obstacle = finder.loadManipulationObject(objectPose))
{
obstacle->setGlobalPose(objectPose.objectPoseGlobal);
return obstacle;
}
return nullptr;
}
} // namespace armarx::objpose } // namespace armarx::objpose
...@@ -25,12 +25,22 @@ ...@@ -25,12 +25,22 @@
#include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h> #include <RobotAPI/libraries/ArmarXObjects/ObjectPose.h>
namespace armarx::objpose namespace armarx::objpose::util
{ {
objpose::ObjectPoseSeq filterObjects(objpose::ObjectPoseSeq objects, objpose::ObjectPoseSeq filterObjects(objpose::ObjectPoseSeq objects,
const std::vector<std::string>& datasetBlocklist); const std::vector<std::string>& datasetDisableList);
std::optional<objpose::ObjectPose> findObject(const objpose::ObjectPoseSeq& objectPoses,
const armarx::ObjectID& objectID);
VirtualRobot::ManipulationObjectPtr asManipulationObject(const objpose::ObjectPose& objectPose); VirtualRobot::ManipulationObjectPtr asManipulationObject(const objpose::ObjectPose& objectPose);
VirtualRobot::SceneObjectSetPtr asSceneObjects(const objpose::ObjectPoseSeq& objectPoses); VirtualRobot::SceneObjectSetPtr asSceneObjects(const objpose::ObjectPoseSeq& objectPoses);
objpose::ObjectPoseSeq staticObjects(objpose::ObjectPoseSeq objects);
objpose::ObjectPoseSeq nonArticulatedObjects(objpose::ObjectPoseSeq objects);
objpose::ObjectPoseSeq articulatedObjects(objpose::ObjectPoseSeq objects);
VirtualRobot::SceneObjectPtr asSceneObject(const objpose::ObjectPose& objectPose);
} // namespace armarx::objpose } // namespace armarx::objpose
...@@ -38,7 +38,7 @@ namespace armarx::armem::vision ...@@ -38,7 +38,7 @@ namespace armarx::armem::vision
float resolution; // [mm] float resolution; // [mm]
std::string frame; std::string frame;
Eigen::Affine3f pose; Eigen::Isometry3f pose;
// using ValueType = _ValueT; // using ValueType = _ValueT;
using CellType = float; using CellType = float;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment