ArticulatedObjectReader.cpp
Go to the documentation of this file.
2 
3 #include <mutex>
4 #include <optional>
5 
6 #include <VirtualRobot/XML/RobotIO.h>
7 
11 
14 #include <RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.aron.generated.h>
20 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
23 
25 {
26 
28  ArticulatedObjectReader::getArticulatedObject(const std::string& typeName,
29  const armem::Time& timestamp,
30  const std::optional<std::string>& providerName,
31  const std::string& instanceName)
32  {
33  const auto descriptions = queryDescriptions(timestamp, providerName);
34 
35  ARMARX_INFO << "Found " << descriptions.size() << " articulated object descriptions";
36 
37  const auto it = std::find_if(
38  descriptions.begin(),
39  descriptions.end(),
41  { return desc.name == typeName; });
42 
43  if (it == descriptions.end())
44  {
45  ARMARX_WARNING << "Description for articulate object with type <" << typeName
46  << "> not (yet) available!";
47  return nullptr;
48  }
49 
50  ARMARX_DEBUG << "Description for articulate object with type <" << typeName
51  << "> available!";
52 
53  auto obj = VirtualRobot::RobotIO::loadRobot(it->xml.toSystemPath(),
54  VirtualRobot::RobotIO::eStructure);
55 
56  if (not obj)
57  {
58  ARMARX_WARNING << "Failed to load description for articulated object <" << typeName
59  << ">!";
60  return nullptr;
61  }
62 
63  obj->setName(instanceName);
64  obj->setType(it->name);
65 
66  return obj;
67  }
68 
69  bool
71  VirtualRobot::Robot& object,
72  const armem::Time& timestamp,
73  const std::optional<std::string>& providerName)
74  {
75  const auto objectState =
76  queryState(object.getType() + "/" + object.getName(), timestamp, providerName);
77  if (not objectState)
78  {
79  ARMARX_VERBOSE << deactivateSpam(5) << "Querying object state failed for object `"
80  << object.getName() << "` "
81  << "(type `" << object.getType() << "`)!";
82  return false;
83  }
84 
85  object.setJointValues(objectState->jointMap);
86  object.setGlobalPose(objectState->globalPose.matrix());
87 
88  return true;
89  }
90 
91 } // namespace armarx::armem::articulated_object
ARMARX_VERBOSE
#define ARMARX_VERBOSE
Definition: Logging.h:180
armarx::armem::articulated_object::ArticulatedObjectReader::getArticulatedObject
VirtualRobot::RobotPtr getArticulatedObject(const std::string &typeName, const armem::Time &timestamp, const std::optional< std::string > &providerName, const std::string &instanceName="")
Definition: ArticulatedObjectReader.cpp:28
armarx::armem::articulated_object::Reader::queryDescriptions
std::vector< robot::RobotDescription > queryDescriptions(const armem::Time &timestamp, const std::optional< std::string > &providerName)
Definition: Reader.cpp:166
armarx::armem::articulated_object::Reader::queryState
std::optional< robot::RobotState > queryState(const std::string &instanceName, const armem::Time &timestamp, const std::optional< std::string > &providerName)
Definition: Reader.cpp:257
ArticulatedObjectReader.h
armarx::armem::robot::RobotDescription
Definition: types.h:17
deactivateSpam
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
Definition: Logging.cpp:72
armarx::armem::human::Robot
@ Robot
Definition: util.h:14
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:177
error.h
ObjectPose.h
ObjectInfo.h
aron_conversions.h
memory_definitions.h
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
armarx::armem::articulated_object::ArticulatedObjectReader::synchronizeArticulatedObject
bool synchronizeArticulatedObject(VirtualRobot::Robot &object, const armem::Time &timestamp, const std::optional< std::string > &providerName)
Definition: ArticulatedObjectReader.cpp:70
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
armarx::armem::articulated_object
Definition: ArticulatedObjectReader.cpp:24
Time.h
Builder.h
Logging.h
robot_conversions.h
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:186
aron_conversions.h
ArmarXDataPath.h
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:18
PackagePath.h