diff --git a/benchmark/timings-geometry.cpp b/benchmark/timings-geometry.cpp index 98dd427f4cb6f19c7b4c750b923250d811059282..db0584db5493b98f8871844de13d50bf65d45c1a 100644 --- a/benchmark/timings-geometry.cpp +++ b/benchmark/timings-geometry.cpp @@ -74,7 +74,7 @@ int main() se3::GeometryModel geom_model = se3::urdf::buildGeom(model, romeo_filename, package_dirs, COLLISION); Data data(model); - GeometryData geom_data(data, geom_model); + GeometryData geom_data(geom_model); geom_data.initializeListOfCollisionPairs(); diff --git a/src/multibody/geometry.hpp b/src/multibody/geometry.hpp index f3060806661eaf70f06fd757785283121961d3ce..f77a1e34188686c5d05b473db2d5f2dc8e9c9302 100644 --- a/src/multibody/geometry.hpp +++ b/src/multibody/geometry.hpp @@ -244,9 +244,7 @@ struct GeometryObject typedef std::vector<GeomIndex> GeomIndexList; - /// \brief A const reference to the reference model. - const se3::Model & model; - + /// \brief The number of GeometryObjects Index ngeoms; @@ -261,9 +259,8 @@ struct GeometryObject /// Outer objects can be seen as geometry objects that may often be obstacles to the Inner objects of given joint std::map < JointIndex, GeomIndexList > outerObjects; - GeometryModel(const se3::Model & model) - : model(model) - , ngeoms(0) + GeometryModel() + : ngeoms(0) , geometryObjects() , innerObjects() , outerObjects() @@ -344,11 +341,6 @@ struct GeometryObject typedef CollisionPair CollisionPair_t; typedef std::vector<CollisionPair_t> CollisionPairsVector_t; - /// - /// \brief A const reference to the data associated to the robot model. - /// See class Data. - /// - const Data & data_ref; /// /// \brief A const reference to the model storing all the geometries. @@ -388,9 +380,8 @@ struct GeometryObject /// std::vector <CollisionResult> collision_results; - GeometryData(const Data & data, const GeometryModel & model_geom) - : data_ref(data) - , model_geom(model_geom) + GeometryData(const GeometryModel & model_geom) + : model_geom(model_geom) , oMg(model_geom.ngeoms) , oMg_fcl(model_geom.ngeoms) , collision_pairs() diff --git a/src/multibody/geometry.hxx b/src/multibody/geometry.hxx index 6b714c52c750d840bd7e1d41defecd00f9347d5e..05b71ccdc99b7cf190838fa8370f6217d6dfa667 100644 --- a/src/multibody/geometry.hxx +++ b/src/multibody/geometry.hxx @@ -145,6 +145,9 @@ namespace se3 { collision_pairs.push_back(pair); nCollisionPairs++; + + distance_results.push_back(DistanceResult( fcl::DistanceResult(), 0, 0)); + collision_results.push_back(CollisionResult( fcl::CollisionResult(), 0, 0)); } } diff --git a/src/parsers/srdf.hpp b/src/parsers/srdf.hpp index 52736cd1c303e5683caca276418dd52ea750ae40..aa82fa354d0a2baf6aaa96b9d35a6bd051d40d35 100644 --- a/src/parsers/srdf.hpp +++ b/src/parsers/srdf.hpp @@ -41,7 +41,8 @@ namespace se3 /// \param[in] filename The complete path to the SRDF file. /// \param[in] verbose Verbosity mode. /// - inline void removeCollisionPairsFromSrdf(const GeometryModel & model_geom, + inline void removeCollisionPairsFromSrdf(const Model& model, + const GeometryModel & model_geom, GeometryData & data_geom, const std::string & filename, const bool verbose) throw (std::invalid_argument) @@ -68,7 +69,6 @@ namespace se3 read_xml(srdf_stream, pt); // Iterate over collision pairs - const se3::Model & model = model_geom.model; BOOST_FOREACH(const ptree::value_type & v, pt.get_child("robot")) { if (v.first == "disable_collisions") diff --git a/src/parsers/urdf/geometry.hxx b/src/parsers/urdf/geometry.hxx index 90130f92121704a8974db90e9d16da0fdc488796..006586aebc974dd00e666004aee9b3a74df908a1 100644 --- a/src/parsers/urdf/geometry.hxx +++ b/src/parsers/urdf/geometry.hxx @@ -217,7 +217,7 @@ namespace se3 throw std::invalid_argument(exception_message); } - GeometryModel model_geom(model); + GeometryModel model_geom; std::vector<std::string> hint_directories(package_dirs); diff --git a/src/python/geometry-data.hpp b/src/python/geometry-data.hpp index 7d68d343527a4df67e176f46e4a799ab73abed8d..35225c0c69b249a8b0798fee081c82dac5479634 100644 --- a/src/python/geometry-data.hpp +++ b/src/python/geometry-data.hpp @@ -89,8 +89,8 @@ namespace se3 .def("__init__", bp::make_constructor(&GeometryDataPythonVisitor::makeDefault, bp::default_call_policies(), - (bp::arg("data"),bp::arg("geometry_model"))), - "Initialize from data and the geometry model.") + (bp::arg("geometry_model"))), + "Initialize from the geometry model.") .add_property("nCollisionPairs", &GeometryDataPythonVisitor::nCollisionPairs) @@ -155,9 +155,9 @@ namespace se3 ; } - static GeometryDataHandler* makeDefault(const DataHandler & data, const GeometryModelHandler & geometry_model) + static GeometryDataHandler* makeDefault(const GeometryModelHandler & geometry_model) { - return new GeometryDataHandler(new GeometryData(*data, *geometry_model), true); + return new GeometryDataHandler(new GeometryData(*geometry_model), true); } static Index nCollisionPairs(const GeometryDataHandler & m ) { return m->nCollisionPairs; } diff --git a/src/python/geometry-model.hpp b/src/python/geometry-model.hpp index 3c5698bbcd0b211bb7aa7d0c304e6628ad96bb96..b9f1a67c4a72883d33ae4c07b780ce818753385c 100644 --- a/src/python/geometry-model.hpp +++ b/src/python/geometry-model.hpp @@ -91,9 +91,9 @@ namespace se3 - static GeometryModelHandler maker_default(const ModelHandler & model) + static GeometryModelHandler maker_default() { - return GeometryModelHandler(new GeometryModel(*model), true); + return GeometryModelHandler(new GeometryModel(), true); } diff --git a/src/python/parsers.hpp b/src/python/parsers.hpp index 485d438e7fd6e0d9e9ba53235a48391039311c20..7464a2dbf8483b230f4f966477736a8351c2eac9 100644 --- a/src/python/parsers.hpp +++ b/src/python/parsers.hpp @@ -111,13 +111,14 @@ namespace se3 return GeometryModelHandler(geometry_model, true); } - static void removeCollisionPairsFromSrdf(GeometryModelHandler & model, + static void removeCollisionPairsFromSrdf(ModelHandler & model, + GeometryModelHandler& geometry_model, GeometryDataHandler & geometry_data, const std::string & filename, bool verbose ) { - se3::srdf::removeCollisionPairsFromSrdf(*model, *geometry_data, filename, verbose); + se3::srdf::removeCollisionPairsFromSrdf(*model, *geometry_model ,*geometry_data, filename, verbose); } #endif // #ifdef WITH_HPP_FCL @@ -184,7 +185,7 @@ namespace se3 "(remember to create the corresponding data structures)."); bp::def("removeCollisionPairsFromSrdf",removeCollisionPairsFromSrdf, - bp::args("GeometryModel associated to a GeometryData", "GeometryData for which we want to remove pairs of collision", "srdf filename (string)", "verbosity" + bp::args("Model associated to GeometryData", "GeometryModel associated to a GeometryData", "GeometryData for which we want to remove pairs of collision", "srdf filename (string)", "verbosity" ), "Parse an srdf file in order to desactivate collision pairs for a specific GeometryData and GeometryModel "); diff --git a/src/python/robot_wrapper.py b/src/python/robot_wrapper.py index 1b5cf37429708d08e65b784501b3c8fa305d36e9..99d0706113247604709880c3d127f843d9b76e78 100644 --- a/src/python/robot_wrapper.py +++ b/src/python/robot_wrapper.py @@ -51,7 +51,7 @@ class RobotWrapper(object): utils.fromListToVectorOfString(package_dirs), se3.GeometryType.COLLISION) self.visual_model = se3.buildGeomFromUrdf(self.model, filename, utils.fromListToVectorOfString(package_dirs), se3.GeometryType.VISUAL) - self.collision_data = se3.GeometryData(self.data, self.collision_model) + self.collision_data = se3.GeometryData(self.collision_model) self.v0 = utils.zero(self.nv) self.q0 = utils.zero(self.nq) diff --git a/unittest/geom.cpp b/unittest/geom.cpp index 82cc738eb0923554830ea78a5981af07367f8f28..55cf86d7a855af3b599c45dd7aa01a7e04654177 100644 --- a/unittest/geom.cpp +++ b/unittest/geom.cpp @@ -144,7 +144,7 @@ BOOST_AUTO_TEST_SUITE ( GeomTest ) BOOST_AUTO_TEST_CASE ( simple_boxes ) { se3::Model model; - se3::GeometryModel model_geom(model); + se3::GeometryModel model_geom; using namespace se3; @@ -162,7 +162,7 @@ BOOST_AUTO_TEST_CASE ( simple_boxes ) model_geom.addGeometryObject(model.getJointId("planar2_joint"),box2, SE3::Identity(), "ff2_collision_object", ""); se3::Data data(model); - se3::GeometryData data_geom(data, model_geom); + se3::GeometryData data_geom(model_geom); std::cout << "------ Model ------ " << std::endl; std::cout << model; @@ -212,7 +212,7 @@ BOOST_AUTO_TEST_CASE ( loading_model ) GeometryModel geometry_model = se3::urdf::buildGeom(model, filename, package_dirs, se3::COLLISION); Data data(model); - GeometryData geometry_data(data, geometry_model); + GeometryData geometry_data(geometry_model); Eigen::VectorXd q(model.nq); q << 0, 0, 0.840252, 0, 0, 0, 1, 0, 0, -0.3490658, 0.6981317, -0.3490658, 0, 0, 0, -0.3490658, @@ -254,7 +254,7 @@ BOOST_AUTO_TEST_CASE ( romeo_joints_meshes_positions ) Data data(model); - GeometryData data_geom(data, geom); + GeometryData data_geom(geom); // Configuration to be tested @@ -362,7 +362,7 @@ BOOST_AUTO_TEST_CASE ( hrp2_mesh_distance) Data data(model); - GeometryData data_geom(data, geom); + GeometryData data_geom(geom); // Configuration to be tested