28#include <VirtualRobot/CollisionDetection/CollisionModel.h>
29#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
30#include <VirtualRobot/Visualization/TriMeshUtils.h>
31#include <VirtualRobot/Visualization/VisualizationFactory.h>
35#include <ArmarXCore/interface/core/BasicVectorTypes.h>
39VoxelGridCSpace::VoxelGridCSpace(visionx::VoxelGridProviderInterfacePrx voxelGridProvider,
40 memoryx::CommonStorageInterfacePrx cs,
42 float stationaryObjectMargin) :
45 this->voxelGridProvider = voxelGridProvider;
48VirtualRobot::SceneObjectPtr
53 +[](armarx::Vector3f
const&
data) {
return Eigen::Vector3f(
data.e0,
data.e1,
data.e2); });
56 auto gridMesh = VirtualRobot::TriMeshUtils::CreateSparseBoxGrid(
57 Eigen::Matrix4f::Identity(),
62 VirtualRobot::VisualizationFactory::Color::Blue());
63 gridMesh->mergeVertices(10);
64 gridMesh->fattenShrink(stationaryObjectMargin);
65 Eigen::Matrix4f
id = Eigen::Matrix4f::Identity();
67 VirtualRobot::CoinVisualizationFactory().createTriMeshModelVisualization(gridMesh,
id);
68 VirtualRobot::SceneObjectPtr obst(
new VirtualRobot::SceneObject(
71 VirtualRobot::CollisionModelPtr(
new VirtualRobot::CollisionModel(
72 visu,
"PointCloudMeshGridCollisionModel",
agentSceneObj->getCollisionChecker())),
73 VirtualRobot::SceneObject::Physics(),
74 const_cast<VirtualRobot::CDManager*
>(&
cd)->getCollisionChecker()));
81 return VoxelGridCSpaceBasePtr(
new VoxelGridCSpace(*
this));
88 if (gridPositions.empty())
90 gridPositions = voxelGridProvider->getFilledGridPositions();
91 ARMARX_INFO <<
"Got grid with size: " << gridPositions.size();
92 gridSize = voxelGridProvider->getGridSize();
95 ARMARX_INFO <<
"Adding scene object with grid element count: " << gridPositions.size();
102 +[](VirtualRobot::SceneObjectPtr
const& obj) { return obj->getName(); });
116 cloned->gridPositions = gridPositions;
117 cloned->gridSize = gridSize;
118 cloned->stationaryObjectMargin = stationaryObjectMargin;
119 for (
const auto& obj : stationaryObjects)
121 cloned->addStationaryObject(obj);
123 cloned->agentInfo = agentInfo;
VirtualRobot::CDManager cd
The collision checker.
VirtualRobot::RobotPtr agentSceneObj
bool loadVisualizationModel
Whether the visualization model of objects/agents sould be loaded.
VirtualRobot::SceneObjectSetPtr stationaryObjectSet
The scene objects for stationary objects.
void initCollisionTest(const Ice::Current &=Ice::emptyCurrent) override
Initializes the collision test.
SimoxCSpace(memoryx::CommonStorageInterfacePrx commonStoragePrx, bool loadVisualizationModel=false, float stationaryObjectMargin=0.0f)
ctor
void initCollisionTest(const Ice::Current &) override
VirtualRobot::SceneObjectPtr createGridObstacle() const
armarx::CSpaceBasePtr clone(const Ice::Current &) override
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
#define ARMARX_INFO
The normal logging level.
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceInternal::Handle< VoxelGridCSpace > VoxelGridCSpacePtr
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT > >
Convenience function (with less typing) to transform a container of type InputT into the same contain...