28 #include <Eigen/src/Core/Matrix.h>
29 #include <Eigen/src/Geometry/Quaternion.h>
31 #include <SimoxUtility/json/io.h>
32 #include <SimoxUtility/math/pose/pose.h>
45 #include <ArmarXSimulation/interface/simulator/SimulatorInterface.h>
51 const std::string Component::defaultName =
"ClutteredSceneGenerator";
60 def->component(simulator_);
61 def->component(objectMemoryToSimulation_);
66 def->optional(properties_.out.packageName,
"p.out.packageName");
67 def->optional(properties_.out.packagePath,
"p.out.packagePath");
69 def->optional(properties_.gen.initialSeed,
71 "Initial random seed for scene generation");
73 def->optional(properties_.gen.nScenes,
"p.gen.nScenes",
"Number of scenes to generate");
74 def->optional(properties_.gen.nObjects,
"p.gen.nObjects",
"Number of objects to generate");
75 def->optional(properties_.gen.verticalSpacing,
76 "p.gen.verticalSpacing",
77 "Vertical spacing between objects as they are generated");
113 .amountObjects = properties_.gen.nObjects,
114 .objectSpacingZ = properties_.gen.verticalSpacing,
122 for (uint i = 0; i < properties_.gen.nScenes; ++i)
124 simulator_->reInitialize();
125 objectMemoryToSimulation_->synchronizeSimulator();
127 int seed = properties_.gen.initialSeed +
static_cast<int>(i);
128 generateScene(config, seed);
132 if (!properties_.out.packageName.empty() && !properties_.out.packagePath.empty())
135 std::filesystem::path sceneFileName =
137 storeScene(scene, sceneFileName);
155 return Component::defaultName;
161 return Component::defaultName;
171 Component::getObjectClasses()
179 auto makeObjectSource = [&](
const ObjectInfo& info)
184 .objectID = info.id()};
189 std::back_inserter(objectSet.
objects),
196 Component::generateScene(
const scene_generation::ClutteredSceneGenerator::Config& config,
200 scene_generation::ClutteredSceneGenerator gen(simulator_, config);
201 gen.generateScene(seed);
205 Component::getScene()
209 objects::Scene scene;
210 armarx::SceneVisuData sceneData = simulator_->getScene();
212 auto makeSceneObject = [](
const armarx::ObjectVisuData& simObject)
218 return objects::SceneObject{
219 .className = objectID.getClassID().str(),
220 .instanceName = objectID.instanceName(),
221 .collection = objectID.dataset(),
222 .position = simox::math::position(objectPose),
229 sceneData.objects.end(),
230 std::back_inserter(scene.objects),
237 Component::storeScene(
const objects::Scene& scene,
const std::filesystem::path& path)
241 ARMARX_INFO <<
"Storing scene snapshot at: \n\t" << path;
246 catch (
const simox::json::error::JsonError& e)
248 ARMARX_WARNING <<
"Storing scene snapshot failed: \n" << e.what();