7#include <VirtualRobot/SceneObjectSet.h>
8#include <VirtualRobot/XML/BaseIO.h>
9#include <VirtualRobot/XML/ObjectIO.h>
10#include <VirtualRobot/XML/RobotIO.h>
44 srv(srv), config(config)
60 scn.robot = srv.virtualRobotReader->getRobotWaiting(
61 config.robotName,
timestamp, VirtualRobot::RobotIO::RobotDescription::eStructure);
62 scn.robot->setPrimitiveApproximationModel(config.primitiveApproximationModels);
66 scn.staticScene.emplace(getStaticScene(
timestamp));
67 scn.dynamicScene.emplace(getDynamicScene(
timestamp));
83 scn.staticScene.emplace(getStaticScene(
timestamp));
87 scn.dynamicScene.emplace(getDynamicScene(
timestamp));
89 const auto updateAttachedObjects = [
this](
const std::vector<objpose::ObjectPose*>& objPoses)
91 for (
auto* objPose : objPoses)
93 objPose->updateAttached(scn.robot);
97 updateAttachedObjects(scn.dynamicScene->attachedObjects);
101 const auto platformState =
102 srv.virtualRobotReader->queryPlatformState(scn.robot->getName(),
timestamp);
106 scn.platformVelocity =
core::Twist{.linear = platformState->twist.linear,
107 .angular = platformState->twist.angular};
124 objectMap.emplace(
object.objectID,
object);
131 objectPoses, {
"KIT",
"HOPE",
"MDB",
"YCB",
"Kitchen",
"Maintenance"});
134 for (
const auto& objectPose : objectPosesStatic)
141 objects, objectPosesStatic, VirtualRobot::ObjectIO::eCollisionModel);
150 const algorithms::Costmap costmap = [&]()
156 const memory::client::costmap::Reader::Query query{
162 if (
const memory::client::costmap::Reader::Result costmap =
167 return costmap.costmap.value();
171 <<
"` from provider " << query.providerName <<
" not available yet.";
173 metronome.waitForNextTick();
177 const auto costmap3d = [&]() -> std::optional<algorithms::orientation_aware::Costmap3D>
179 const memory::client::costmap3d::Reader::Query query{.providerName =
180 config.costmap3dProviderName,
181 .name = config.costmap3dName,
185 if (
const memory::client::costmap3d::Reader::Result costmap =
186 srv.costmap3dReader->query(query))
190 return costmap.costmap;
194 <<
"` from provider " << query.providerName <<
" not available yet.";
198 const auto locations = srv.graphReader->locations();
202 return {.objects = objects,
203 .objectMap = std::move(objectMap),
204 .objectInfo = std::move(objectInfo),
205 .distanceToObstaclesCostmap = costmap,
206 .orientationAwareCostmap = costmap3d,
207 .locations = std::move(locations)};
211 SceneProvider::getDynamicScene(
const DateTime&
timestamp)
213 const memory::client::human::Reader::Query queryHumans{
214 .providerName = config.humanProviderName,
218 const memory::client::laser_scanner_features::Reader::Query queryFeatures{
219 .providerName = config.laserScannerFeaturesProviderName,
224 std::vector<objpose::ObjectPose*> attachedObjects;
225 const std::string& rootNode = scn.robot->getRootNode()->getName();
226 for (
auto& [_, obj] : scn.staticScene->objectMap)
228 if (obj.attachment.has_value())
230 if (obj.attachment->frameName == rootNode)
232 attachedObjects.emplace_back(&obj);
237 return {.humans = srv.humanReader->queryHumans(queryHumans).humans,
238 .laserScannerFeatures =
239 srv.laserScannerFeaturesReader->queryData(queryFeatures).features,
240 .attachedObjects = std::move(attachedObjects)};
244 SceneProvider::getSceneGraph(
const DateTime& )
const
247 return {.subgraphs = srv.graphReader->graphs()};
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
static DateTime Now()
Current time on the virtual clock.
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
static Frequency Hertz(std::int64_t hertz)
std::vector< ObjectInfo > findAllObjects(bool checkPaths=true) const
Represents a point in time.
Simple rate limiter for use in loops to maintain a certain frequency given a clock.
Result query(const Query &query) const
bool initialize(const DateTime ×tamp) override
const core::Scene & scene() const override
bool synchronize(const DateTime ×tamp, bool fullUpdate) override
SceneProvider(const InjectedServices &srv, const Config &config)
ObjectPoseSeq fetchObjectPoses() const
Fetch all known object poses.
ObjectFinder objectFinder
#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_INFO
The normal logging level.
#define ARMARX_VERBOSE
The logging level for verbose information.
VirtualRobot::SceneObjectSetPtr asSceneObjects(const objpose::ObjectPoseSeq &objectPoses, const VirtualRobot::ObjectIO::ObjectDescription loadMode)
objpose::ObjectPoseSeq filterObjects(objpose::ObjectPoseSeq objects, const std::vector< std::string > &datasetDisableList)
std::map< ObjectID, ObjectPose > ObjectPoseMap
std::vector< ObjectPose > ObjectPoseSeq
std::string staticCostmapName
std::string staticCostmapProviderName
memory::client::costmap::Reader * costmapReader
objpose::ObjectPoseClient objectPoseClient
An object pose as stored by the ObjectPoseStorage.