29#include <SimoxUtility/algorithm/get_map_keys_values.h>
30#include <VirtualRobot/Robot.h>
49#include <RobotAPI/libraries/armem_objects/aron/FamiliarObjectInstance.aron.generated.h>
50#include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h>
71 segment.defineProperties(defs, prefix);
72 visu.defineProperties(defs, prefix +
"visu.");
79 segment.decay.setTag(
getName());
92 this->debugObserver = debugObserver;
96 segment.robots.reader = virtualRobotReader;
100 if (!visu.updateTask)
104 visu.updateTask->start();
107 segment.connect(arviz);
112 const std::string& providerName,
113 const ::armarx::objpose::ProvidedFamiliarObjectPoseSeq&
data,
124 std::optional<armarx::DateTime> syncTimestamp;
127 const auto convertAndFillFamiliarObjectInstances =
128 [
this, providerName, &syncTimestamp](const ::armarx::aron::data::dto::DictPtr&
data)
129 -> armarx::armem::arondto::FamiliarObjectInstance
131 auto famObjInstance = armarx::armem::arondto::FamiliarObjectInstance::FromAron(
data);
134 if (not famObjInstance.poseGlobal.has_value())
137 famObjInstance.poseSensFrame.header.frame,
138 famObjInstance.poseSensFrame.header.agent);
144 segment.robots.get(famObjInstance.poseSensFrame.header.agent, providerName);
148 if (not syncTimestamp.has_value()
149 or syncTimestamp.value() != famObjInstance.timestamp)
152 segment.robots.reader->synchronizeRobot(*robot, famObjInstance.timestamp));
153 syncTimestamp = famObjInstance.timestamp;
157 famObjInstance.poseGlobal.emplace();
158 famObjInstance.poseGlobal->pose = framedPose.
toGlobalEigen(robot);
159 famObjInstance.poseGlobal->header.agent = famObjInstance.poseSensFrame.header.agent;
168 return famObjInstance;
171 std::vector<armarx::armem::arondto::FamiliarObjectInstance> familiarObjectInstances;
172 familiarObjectInstances.reserve(
data.size());
174 std::transform(std::begin(
data),
176 std::back_inserter(familiarObjectInstances),
177 convertAndFillFamiliarObjectInstances);
179 segment.commit(familiarObjectInstances, providerName);
183 SegmentAdapter::handleProviderUpdate(
const std::string& providerName)
186 if (
segment.providers.count(providerName) == 0)
188 segment.providers[providerName] = objpose::ProviderInfo();
193 SegmentAdapter::visualizeRun()
206 std::scoped_lock lock(visuMutex);
208 const std::map<std::string,
209 std::vector<armarx::armem::arondto::FamiliarObjectInstance>>
210 familiarObjectsByProvider = segment.
doLocked(
214 ARMARX_VERBOSE <<
"Visualizing " << familiarObjectsByProvider.size()
219 metronome.waitForNextTick();
#define ARMARX_CHECK_NOT_EMPTY(c)
static DateTime Now()
Current time on the virtual clock.
Eigen::Matrix4f toGlobalEigen(const SharedRobotInterfacePrx &referenceRobot) const
static Frequency HertzDouble(double hertz)
bool isStopped()
Retrieve whether stop() has been called.
Helps connecting a Memory server to the Ice interface.
void reportFamiliarObjectPoses(const std::string &providerName, const ::armarx::objpose::ProvidedFamiliarObjectPoseSeq &data, ICE_CURRENT_ARG) override
void connect(std::experimental::observer_ptr< robot_state::VirtualRobotReader > virtualRobotReader, viz::Client arviz, DebugObserverInterfacePrx debugObserver)
std::string getName() const
SegmentAdapter(MemoryToIceAdapter &iceMemory)
void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="")
std::map< std::string, std::vector< armarx::armem::arondto::FamiliarObjectInstance > > getFamiliarObjectsByProvider(const DateTime &now)
void visualizeFamiliarObjectsByProvider(const std::map< std::string, std::vector< armarx::armem::arondto::FamiliarObjectInstance > > &familiarObjectsByProvider)
SimpleRunningTask ::pointer_type updateTask
auto doLocked(FunctionT &&function) const
Execute function under shared (read) lock.
Simple rate limiter for use in loops to maintain a certain frequency given a clock.
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#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_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
#define ARMARX_INFO
The normal logging level.
#define ARMARX_IMPORTANT
The logging level for always important information, but expected behaviour (in contrast to ARMARX_WAR...
#define ARMARX_VERBOSE
The logging level for verbose information.
std::string const GlobalFrame
Variable of the global coordinate system.
std::shared_ptr< class Robot > RobotPtr
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
SimpleRunningTask(Ts...) -> SimpleRunningTask< std::function< void(void)> >