ArticulatedObjectReader.cpp
Go to the documentation of this file.
2
3#include <mutex>
4#include <optional>
5
6#include <VirtualRobot/XML/BaseIO.h>
7#include <VirtualRobot/XML/RobotIO.h>
8
13
16#include <RobotAPI/libraries/ArmarXObjects/aron/ObjectPose.aron.generated.h>
22#include <RobotAPI/libraries/armem_robot_state/aron/Robot.aron.generated.h>
25
27{
28
32 const std::optional<std::string>& providerName,
33 const std::string& instanceName,
34 VirtualRobot::RobotIO::RobotDescription loadMode)
35 {
36 ARMARX_VERBOSE << "Getting `" << typeName + "/" + instanceName << "`";
37
38 const std::optional<ArticulatedObject> articulatedObjectDescription =
39 get(typeName + "/" + instanceName, timestamp, providerName);
40 ARMARX_CHECK_NOT_NULL(articulatedObjectDescription)
41 << "Failed to get articulated object `" << typeName << "/" << instanceName << "`";
42
43 auto obj = VirtualRobot::RobotIO::loadRobot(
44 articulatedObjectDescription->description.xml.toSystemPath(), loadMode);
45
46 if (not obj)
47 {
48 ARMARX_WARNING << "Failed to load articulated object `" << typeName << "/"
49 << instanceName << "` from file `"
50 << articulatedObjectDescription->description.xml.toSystemPath() << "`.";
51
52 return nullptr;
53 }
54
55 obj->setName(instanceName);
56 obj->setType(typeName);
57
58 return obj;
59 }
60
61 bool
63 VirtualRobot::Robot& object,
65 const std::optional<std::string>& providerName)
66 {
67 const auto objectState =
68 queryState(object.getType() + "/" + object.getName(), timestamp, providerName);
69 if (not objectState)
70 {
71 ARMARX_VERBOSE << deactivateSpam(5) << "Querying object state failed for object `"
72 << object.getName() << "` "
73 << "(type `" << object.getType() << "`)!";
74 return false;
75 }
76
77 object.setJointValues(objectState->jointMap);
78 object.setGlobalPose(objectState->globalPose.matrix());
79
80 return true;
81 }
82
83} // namespace armarx::armem::articulated_object
std::string timestamp()
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
Definition Logging.cpp:75
VirtualRobot::RobotPtr getArticulatedObject(const std::string &typeName, const armem::Time &timestamp, const std::optional< std::string > &providerName, const std::string &instanceName="", VirtualRobot::RobotIO::RobotDescription loadMode=VirtualRobot::RobotIO::eStructure)
bool synchronizeArticulatedObject(VirtualRobot::Robot &object, const armem::Time &timestamp, const std::optional< std::string > &providerName)
std::optional< robot_state::RobotState > queryState(const std::string &instanceName, const armem::Time &timestamp, const std::optional< std::string > &providerName) const
Definition Reader.cpp:262
std::optional< ArticulatedObject > get(const std::string &name, const armem::Time &timestamp, const std::optional< std::string > &providerName) const override
Definition Reader.cpp:99
#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.
Definition Logging.h:193
#define ARMARX_VERBOSE
The logging level for verbose information.
Definition Logging.h:187
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
armarx::core::time::DateTime Time