29#include <Eigen/Geometry>
31#include <VirtualRobot/ManipulationObject.h>
32#include <VirtualRobot/SceneObjectSet.h>
33#include <VirtualRobot/VirtualRobot.h>
34#include <VirtualRobot/XML/BaseIO.h>
35#include <VirtualRobot/XML/ObjectIO.h>
50 const std::vector<std::string>& datasetDisableList)
54 const auto dataset = objectPose.objectID.dataset();
56 return std::find(datasetDisableList.begin(), datasetDisableList.end(), dataset) !=
57 datasetDisableList.end();
69 {
return not objectPose.isStatic; };
83 const auto objInfo = finder.
findObject(objectPose.objectID);
85 const bool hasArticulatedModel = objInfo->getArticulatedModel().has_value();
86 return hasArticulatedModel;
101 const auto objInfo = finder.
findObject(objectPose.objectID);
103 const bool hasArticulatedModel = objInfo->getArticulatedModel().has_value();
104 return not hasArticulatedModel;
112 std::optional<objpose::ObjectPose>
116 {
return objectPose.objectID == objectID; };
118 const auto it = std::find_if(objectPoses.begin(), objectPoses.end(), matchesId);
119 if (it != objectPoses.end())
127 VirtualRobot::ManipulationObjectPtr
129 const VirtualRobot::ObjectIO::ObjectDescription loadMode)
134 VirtualRobot::SceneObjectSetPtr sceneObjects(
new VirtualRobot::SceneObjectSet);
146 VirtualRobot::SceneObjectSetPtr
148 const VirtualRobot::ObjectIO::ObjectDescription loadMode)
153 VirtualRobot::SceneObjectSetPtr sceneObjects(
new VirtualRobot::SceneObjectSet);
154 for (
const auto& objectPose : objectPoses)
156 ARMARX_VERBOSE <<
"Loading object `" << objectPose.objectID <<
"`";
159 obstacle->setName(objectPose.objectID.str());
160 obstacle->setGlobalPose(objectPose.objectPoseGlobal);
161 sceneObjects->addSceneObject(obstacle);
168 VirtualRobot::SceneObjectSetPtr
171 const VirtualRobot::ObjectIO::ObjectDescription loadMode)
175 std::map<armarx::ObjectID, VirtualRobot::SceneObjectPtr> existingSceneObjectSetMap;
177 if (existingSceneObjectSet)
179 for (
const auto& sceneObject : existingSceneObjectSet->getSceneObjects())
186 VirtualRobot::SceneObjectSetPtr sceneObjects(
new VirtualRobot::SceneObjectSet);
192 for (
const auto& objectPose : objectPoses)
194 if (existingSceneObjectSetMap.count(objectPose.objectID) > 0)
196 existingObjectPoses.push_back(objectPose);
200 objectPosesToLoad.push_back(objectPose);
205 for (
const auto& objectPose : existingObjectPoses)
207 const VirtualRobot::SceneObjectPtr& sceneObject =
208 existingSceneObjectSetMap.at(objectPose.objectID);
209 sceneObject->setGlobalPose(objectPose.objectPoseGlobal);
210 sceneObjects->addSceneObject(sceneObject);
213 if (not objectPosesToLoad.empty())
218 for (
const auto& objectPose : objectPosesToLoad)
220 ARMARX_VERBOSE <<
"Loading object `" << objectPose.objectID <<
"`";
223 obstacle->setName(objectPose.objectID.str());
224 obstacle->setGlobalPose(objectPose.objectPoseGlobal);
225 sceneObjects->addSceneObject(obstacle);
233 VirtualRobot::SceneObjectPtr
235 const VirtualRobot::ObjectIO::ObjectDescription loadMode)
240 VirtualRobot::SceneObjectSetPtr sceneObjects(
new VirtualRobot::SceneObjectSet);
Used to find objects in the ArmarX objects repository [1] (formerly [2]).
static VirtualRobot::ManipulationObjectPtr loadManipulationObject(const std::optional< ObjectInfo > &ts, VirtualRobot::ObjectIO::ObjectDescription loadMode=VirtualRobot::ObjectIO::ObjectDescription::eFull)
void setLogObjectDiscoveryError(bool logEnabled)
std::optional< ObjectInfo > findObject(const std::string &dataset, const std::string &name) const
A known object ID of the form "Dataset/ClassName" or "Dataset/ClassName/InstanceName".
std::string str() const
Return "dataset/className" or "dataset/className/instanceName".
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
#define ARMARX_VERBOSE
The logging level for verbose information.
This file is part of ArmarX.
objpose::ObjectPoseSeq nonArticulatedObjects(objpose::ObjectPoseSeq objects)
VirtualRobot::SceneObjectSetPtr asSceneObjects(const objpose::ObjectPoseSeq &objectPoses, const VirtualRobot::ObjectIO::ObjectDescription loadMode)
objpose::ObjectPoseSeq articulatedObjects(objpose::ObjectPoseSeq objects)
objpose::ObjectPoseSeq staticObjects(objpose::ObjectPoseSeq objects)
VirtualRobot::ManipulationObjectPtr asManipulationObject(const objpose::ObjectPose &objectPose, const VirtualRobot::ObjectIO::ObjectDescription loadMode)
objpose::ObjectPoseSeq filterObjects(objpose::ObjectPoseSeq objects, const std::vector< std::string > &datasetDisableList)
std::optional< objpose::ObjectPose > findObject(const objpose::ObjectPoseSeq &objectPoses, const armarx::ObjectID &objectID)
VirtualRobot::SceneObjectPtr asSceneObject(const objpose::ObjectPose &objectPose, const VirtualRobot::ObjectIO::ObjectDescription loadMode)
std::vector< ObjectPose > ObjectPoseSeq
An object pose as stored by the ObjectPoseStorage.
armarx::ObjectID objectID
The object ID, i.e. dataset, class name and instance name.
Eigen::Matrix4f objectPoseGlobal
The object pose in the global frame.