From 1210ef602e369b65337ad51608960ef8b3742bee Mon Sep 17 00:00:00 2001 From: Valenza Florian <fvalenza@laas.fr> Date: Fri, 29 Jul 2016 19:15:05 +0200 Subject: [PATCH] [C++][Python] One can contruct a GeometryModel and Data even if hpp-fcl is not found. All stuff related to collisions is not available but geometryPlacements are ( for visualisation in the viewer especially). --- CMakeLists.txt | 39 +++++++++++++++--------------- benchmark/CMakeLists.txt | 22 +++++++++-------- benchmark/timings-geometry.cpp | 7 ++++-- src/algorithm/geometry.hpp | 4 ++-- src/algorithm/geometry.hxx | 6 +++-- src/multibody/fake-fcl.hpp | 43 ++++++++++++++++++++++++++++++++++ src/multibody/fcl.hpp | 8 ++++++- src/multibody/geometry.hpp | 18 +++++++++----- src/multibody/geometry.hxx | 9 ++++++- src/parsers/urdf.hpp | 9 ++++--- src/parsers/urdf/geometry.cpp | 7 ++++++ src/python/algorithms.hpp | 23 +++++++++--------- src/python/geometry-data.hpp | 10 ++++---- src/python/geometry-model.hpp | 8 +++---- src/python/parsers.hpp | 6 ++--- unittest/geom.cpp | 5 ++++ 16 files changed, 151 insertions(+), 73 deletions(-) create mode 100644 src/multibody/fake-fcl.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b3a2d855..f71a7a523 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,13 +213,13 @@ IF(BUILD_PYTHON_INTERFACE) python/explog.hpp ) - IF(HPP_FCL_FOUND) - LIST(APPEND ${PROJECT_NAME}_PYTHON_HEADERS - python/geometry-object.hpp - python/geometry-model.hpp - python/geometry-data.hpp - ) - ENDIF(HPP_FCL_FOUND) + +LIST(APPEND ${PROJECT_NAME}_PYTHON_HEADERS + python/geometry-object.hpp + python/geometry-model.hpp + python/geometry-data.hpp + ) + ELSE(BUILD_PYTHON_INTERFACE) SET(${PROJECT_NAME}_PYTHON_HEADERS "") @@ -242,28 +242,27 @@ IF(URDFDOM_FOUND) parsers/urdf.hpp parsers/urdf/utils.hpp ) - - IF(HPP_FCL_FOUND) - LIST(APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ) - ENDIF(HPP_FCL_FOUND) + ADD_DEFINITIONS(-DWITH_URDFDOM) ENDIF(URDFDOM_FOUND) +LIST(APPEND ${PROJECT_NAME}_MULTIBODY_HEADERS + multibody/fcl.hpp + multibody/geometry.hpp + multibody/geometry.hxx + ) +LIST(APPEND ${PROJECT_NAME}_ALGORITHM_HEADERS + algorithm/geometry.hpp + algorithm/geometry.hxx + ) IF(HPP_FCL_FOUND) LIST(APPEND ${PROJECT_NAME}_SPATIAL_HEADERS spatial/fcl-pinocchio-conversions.hpp ) +ELSE(HPP_FCL_FOUND) LIST(APPEND ${PROJECT_NAME}_MULTIBODY_HEADERS - multibody/fcl.hpp - multibody/geometry.hpp - multibody/geometry.hxx - ) - LIST(APPEND ${PROJECT_NAME}_ALGORITHM_HEADERS - algorithm/geometry.hpp - algorithm/geometry.hxx - ) + multibody/fake-fcl.hpp) ENDIF(HPP_FCL_FOUND) IF(LUA5_1_FOUND) diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index f11f2a0cd..bf1b0d56b 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -39,7 +39,7 @@ IF(${URDFDOM_FOUND}) ENDIF(${URDFDOM_FOUND}) SET_TARGET_PROPERTIES (timings PROPERTIES COMPILE_DEFINITIONS PINOCCHIO_SOURCE_DIR="${${PROJECT_NAME}_SOURCE_DIR}") -# timings +# timings-eigen # IF(BUILD_BENCHMARK) ADD_EXECUTABLE(timings-eigen timings-eigen.cpp) @@ -56,16 +56,18 @@ IF(URDFDOM_FOUND AND HPP_FCL_FOUND) ELSE(BUILD_BENCHMARK) ADD_EXECUTABLE(geomTimings EXCLUDE_FROM_ALL timings-geometry.cpp) ENDIF(BUILD_BENCHMARK) - ADD_TEST_CFLAGS(geomTimings "-DWITH_HPP_FCL") - IF(BUILD_TESTS_WITH_HPP) - ADD_OPTIONAL_DEPENDENCY("hpp-model-urdf") - IF(HPP_MODEL_URDF_FOUND) - PKG_CONFIG_USE_DEPENDENCY(geomTimings hpp-model-urdf) - ADD_TEST_CFLAGS(geomTimings "-DWITH_HPP_MODEL_URDF") - ENDIF(HPP_MODEL_URDF_FOUND) - ENDIF(BUILD_TESTS_WITH_HPP) - TARGET_LINK_LIBRARIES (geomTimings ${PROJECT_NAME}) + + ADD_TEST_CFLAGS(geomTimings "-DWITH_HPP_FCL") + IF(BUILD_TESTS_WITH_HPP) + ADD_OPTIONAL_DEPENDENCY("hpp-model-urdf") + IF(HPP_MODEL_URDF_FOUND) + PKG_CONFIG_USE_DEPENDENCY(geomTimings hpp-model-urdf) + ADD_TEST_CFLAGS(geomTimings "-DWITH_HPP_MODEL_URDF") + ENDIF(HPP_MODEL_URDF_FOUND) + ENDIF(BUILD_TESTS_WITH_HPP) PKG_CONFIG_USE_DEPENDENCY(geomTimings hpp-fcl) + + TARGET_LINK_LIBRARIES (geomTimings ${PROJECT_NAME}) IF(BUILD_PYTHON_INTERFACE) TARGET_LINK_LIBRARIES(geomTimings ${PYTHON_LIBRARIES}) ENDIF(BUILD_PYTHON_INTERFACE) diff --git a/benchmark/timings-geometry.cpp b/benchmark/timings-geometry.cpp index fd79b8672..c34ccea67 100644 --- a/benchmark/timings-geometry.cpp +++ b/benchmark/timings-geometry.cpp @@ -72,7 +72,9 @@ int main() se3::Model model = se3::urdf::buildModel(romeo_filename, se3::JointModelFreeFlyer()); se3::GeometryModel geom_model = se3::urdf::buildGeom(model, romeo_filename, package_dirs, COLLISION); +#ifdef WITH_HPP_FCL geom_model.addAllCollisionPairs(); +#endif // WITH_HPP_FCL Data data(model); GeometryData geom_data(geom_model); @@ -104,6 +106,7 @@ int main() double update_col_time = timer.toc(StackTicToc::US)/NBT - geom_time; std::cout << "Update Collision Geometry < false > = \t" << update_col_time << " " << StackTicToc::unitName(StackTicToc::US) << std::endl; +#ifdef WITH_HPP_FCL timer.tic(); SMOOTH(NBT) { @@ -277,7 +280,7 @@ hpp::model::HumanoidRobotPtr_t humanoidRobot = std::cout << "HPP - Update + Compute distances (K+D) " << humanoidRobot->distanceResults().size() << " col pairs\t" << hpp_compute_distances << " " << StackTicToc::unitName(StackTicToc::US) << std::endl; -#endif - +#endif // WITH_HPP_MODEL_URDF +#endif // WITH_HPP_FCL return 0; } diff --git a/src/algorithm/geometry.hpp b/src/algorithm/geometry.hpp index f7303a145..b99352e61 100644 --- a/src/algorithm/geometry.hpp +++ b/src/algorithm/geometry.hpp @@ -57,7 +57,7 @@ namespace se3 const GeometryModel & geom, GeometryData & geom_data ); - +#ifdef WITH_HPP_FCL inline bool computeCollisions(const Model & model, Data & data, const GeometryModel & model_geom, @@ -92,7 +92,7 @@ namespace se3 inline void computeBodyRadius(const Model & model, const GeometryModel & geomModel, GeometryData & geomData); - +#endif // WITH_HPP_FCL } // namespace se3 /* --- Details -------------------------------------------------------------------- */ diff --git a/src/algorithm/geometry.hxx b/src/algorithm/geometry.hxx index 75f85cc0b..3865d4e61 100644 --- a/src/algorithm/geometry.hxx +++ b/src/algorithm/geometry.hxx @@ -45,10 +45,12 @@ namespace se3 const Model::JointIndex & parent = model_geom.geometryObjects[i].parent; if (parent>0) data_geom.oMg[i] = (data.oMi[parent] * model_geom.geometryObjects[i].placement); else data_geom.oMg[i] = model_geom.geometryObjects[i].placement; +#ifdef WITH_HPP_FCL data_geom.collisionObjects[i].setTransform( toFclTransform3f(data_geom.oMg[i]) ); +#endif // WITH_HPP_FCL } } - +#ifdef WITH_HPP_FCL inline bool computeCollisions(GeometryData & data_geom, const bool stopAtFirstCollision ) @@ -177,7 +179,7 @@ namespace se3 } #undef SE3_GEOM_AABB - +#endif // WITH_HPP_FCL } // namespace se3 diff --git a/src/multibody/fake-fcl.hpp b/src/multibody/fake-fcl.hpp new file mode 100644 index 000000000..6290c77ca --- /dev/null +++ b/src/multibody/fake-fcl.hpp @@ -0,0 +1,43 @@ +// +// Copyright (c) 2016 CNRS +// +// This file is part of Pinocchio +// Pinocchio is free software: you can redistribute it +// and/or modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation, either version +// 3 of the License, or (at your option) any later version. +// +// Pinocchio is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Lesser Public License for more details. You should have +// received a copy of the GNU Lesser General Public License along with +// Pinocchio If not, see +// <http://www.gnu.org/licenses/>. + +#ifndef __se3_fake_fcl_hpp__ +#define __se3_fake_fcl_hpp__ + + +namespace se3 +{ + namespace fcl + { + + struct FakeCollisionGeometry + { + FakeCollisionGeometry(){}; + }; + + struct AABB + { + AABB(): min_(0), max_(1){}; + + int min_; + int max_; + }; + typedef FakeCollisionGeometry CollisionGeometry; + + } +} +#endif // __se3_fake_fcl_hpp__ diff --git a/src/multibody/fcl.hpp b/src/multibody/fcl.hpp index 5bfdef125..9730358ca 100644 --- a/src/multibody/fcl.hpp +++ b/src/multibody/fcl.hpp @@ -21,10 +21,14 @@ #include "pinocchio/multibody/fwd.hpp" #include "pinocchio/spatial/fcl-pinocchio-conversions.hpp" +#ifdef WITH_HPP_FCL #include <hpp/fcl/collision_object.h> #include <hpp/fcl/collision.h> #include <hpp/fcl/distance.h> #include <hpp/fcl/shape/geometric_shapes.h> +#else +#include "pinocchio/multibody/fake-fcl.hpp" +#endif #include <iostream> #include <map> @@ -66,7 +70,8 @@ namespace se3 } }; // struct CollisionPair typedef std::vector<CollisionPair> CollisionPairsVector_t; - + +#ifdef WITH_HPP_FCL /** * @brief Result of distance computation between two CollisionObjects */ @@ -158,6 +163,7 @@ inline bool operator == (const fcl::CollisionObject & lhs, const fcl::CollisionO && lhs.getAABB().min_ == rhs.getAABB().min_ && lhs.getAABB().max_ == rhs.getAABB().max_; } +#endif // WITH_HPP_FCL enum GeometryType { VISUAL, diff --git a/src/multibody/geometry.hpp b/src/multibody/geometry.hpp index a5b4c1e93..b4047e8f8 100644 --- a/src/multibody/geometry.hpp +++ b/src/multibody/geometry.hpp @@ -117,7 +117,7 @@ namespace se3 */ const std::string & getGeometryName(const GeomIndex index) const; - +#ifdef WITH_HPP_FCL /// /// \brief Add a collision pair into the vector of collision_pairs. /// The method check before if the given CollisionPair is already included. @@ -163,6 +163,7 @@ namespace se3 /// \brief Display on std::cout the list of pairs (is it really useful?). void displayCollisionPairs() const; +#endif // WITH_HPP_FCL /** * @brief Associate a GeometryObject of type COLLISION to a joint's inner objects list @@ -179,7 +180,6 @@ namespace se3 * @param[in] inner_object Index of the GeometryObject that will be an outer object */ void addOutterObject(const JointIndex joint, const GeomIndex outer_object); - friend std::ostream& operator<<(std::ostream & os, const GeometryModel & model_geom); }; // struct GeometryModel @@ -200,7 +200,7 @@ namespace se3 /// for fcl (collision) computation. The copy is done in collisionObjects[i]->setTransform(.) /// std::vector<se3::SE3> oMg; - +#ifdef WITH_HPP_FCL /// /// \brief Collision objects (ie a fcl placed geometry). /// @@ -229,7 +229,6 @@ namespace se3 /// attached to the body from the joint center. /// std::vector<double> radius; - GeometryData(const GeometryModel & modelGeom) : model_geom(modelGeom) , oMg(model_geom.ngeoms) @@ -246,9 +245,16 @@ namespace se3 { collisionObjects.push_back (fcl::CollisionObject(geom.collision_geometry)); } } +#else + GeometryData(const GeometryModel & modelGeom) + : model_geom(modelGeom) + , oMg(model_geom.ngeoms) + {} +#endif // WITH_HPP_FCL - ~GeometryData() {}; + ~GeometryData() {}; +#ifdef WITH_HPP_FCL void activateCollisionPair(const Index pairId,const bool flag=true); void deactivateCollisionPair(const Index pairId); @@ -290,7 +296,7 @@ namespace se3 void computeAllDistances(); void resetDistances(); - +#endif //WITH_HPP_FCL friend std::ostream & operator<<(std::ostream & os, const GeometryData & data_geom); }; // struct GeometryData diff --git a/src/multibody/geometry.hxx b/src/multibody/geometry.hxx index 5398b297e..759575dcd 100644 --- a/src/multibody/geometry.hxx +++ b/src/multibody/geometry.hxx @@ -109,16 +109,23 @@ namespace se3 inline std::ostream & operator<< (std::ostream & os, const GeometryData & data_geom) { +#ifdef WITH_HPP_FCL os << "Nb collision pairs = " << data_geom.activeCollisionPairs.size() << std::endl; for(Index i=0;i<(Index)(data_geom.activeCollisionPairs.size());++i) { os << "collision object in position " << data_geom.model_geom.collisionPairs[i] << std::endl; } +#else + os << "WARNING** Without fcl, no collision computations are possible. Only Positions can be computed" << std::endl; + os << "Nb of geometry objects = " << data_geom.oMg.size() << std::endl; +#endif return os; } +#ifdef WITH_HPP_FCL + inline void GeometryModel::addCollisionPair (const CollisionPair & pair) { assert( (pair.first < ngeoms) && (pair.second < ngeoms) ); @@ -246,7 +253,7 @@ namespace se3 { std::fill(distance_results.begin(), distance_results.end(), DistanceResult( fcl::DistanceResult(), 0, 0) ); } - +#endif //WITH_HPP_FCL } // namespace se3 /// @endcond diff --git a/src/parsers/urdf.hpp b/src/parsers/urdf.hpp index 9df51afcd..4eb54c72f 100644 --- a/src/parsers/urdf.hpp +++ b/src/parsers/urdf.hpp @@ -21,9 +21,7 @@ #include "pinocchio/multibody/model.hpp" #include "pinocchio/deprecated.hh" -#ifdef WITH_HPP_FCL - #include "pinocchio/multibody/geometry.hpp" -#endif +#include "pinocchio/multibody/geometry.hpp" #include <urdf_model/model.h> @@ -102,7 +100,6 @@ namespace se3 throw (std::invalid_argument) { Model m; return buildModel(filename,m,verbose); } -#ifdef WITH_HPP_FCL /** * @brief Build The GeometryModel from a URDF file. Search for meshes @@ -121,6 +118,8 @@ namespace se3 * * @return Returns the reference on geom model for convenience. * + * \warning If hpp-fcl has not been found during compilation, COLLISION types can not be loaded + * */ GeometryModel& buildGeom(const Model & model, const std::string & filename, @@ -143,6 +142,7 @@ namespace se3 * * @return The GeometryModel associated to the urdf file and the given Model. * + * \warning If hpp-fcl has not been found during compilation, COLLISION types can not be loaded */ PINOCCHIO_DEPRECATED inline GeometryModel buildGeom(const Model & model, @@ -152,7 +152,6 @@ namespace se3 throw (std::invalid_argument) { GeometryModel g; return buildGeom (model,filename,type,g,package_dirs); } -#endif } // namespace urdf } // namespace se3 diff --git a/src/parsers/urdf/geometry.cpp b/src/parsers/urdf/geometry.cpp index aaf0c5249..e5e2c15d7 100644 --- a/src/parsers/urdf/geometry.cpp +++ b/src/parsers/urdf/geometry.cpp @@ -36,6 +36,7 @@ namespace se3 { namespace details { +#ifdef WITH_HPP_FCL typedef fcl::BVHModel< fcl::OBBRSS > PolyhedronType; typedef boost::shared_ptr <PolyhedronType> PolyhedronPtrType; @@ -119,6 +120,7 @@ namespace se3 return geometry; } +#endif // WITH_HPP_FCL /** * @brief Get the first geometry attached to a link @@ -197,7 +199,12 @@ namespace se3 std::size_t objectId = 0; for (typename std::vector< boost::shared_ptr< T > >::const_iterator i = geometries_array.begin();i != geometries_array.end(); ++i) { +#ifdef WITH_HPP_FCL const boost::shared_ptr<fcl::CollisionGeometry> geometry = retrieveCollisionGeometry((*i)->geometry, package_dirs, mesh_path); +#else + const boost::shared_ptr<fcl::CollisionGeometry> geometry(new fcl::CollisionGeometry()); +#endif // WITH_HPP_FCL + SE3 geomPlacement = convertFromUrdf((*i)->origin); std::ostringstream geometry_object_suffix; geometry_object_suffix << "_" << objectId; diff --git a/src/python/algorithms.hpp b/src/python/algorithms.hpp index f4a3be720..847c2fe51 100644 --- a/src/python/algorithms.hpp +++ b/src/python/algorithms.hpp @@ -36,12 +36,11 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/compute-all-terms.hpp" -#ifdef WITH_HPP_FCL - #include "pinocchio/multibody/geometry.hpp" - #include "pinocchio/python/geometry-model.hpp" - #include "pinocchio/python/geometry-data.hpp" - #include "pinocchio/algorithm/geometry.hpp" -#endif +#include "pinocchio/multibody/geometry.hpp" +#include "pinocchio/python/geometry-model.hpp" +#include "pinocchio/python/geometry-data.hpp" +#include "pinocchio/algorithm/geometry.hpp" + namespace se3 { @@ -302,7 +301,7 @@ namespace se3 return randomConfiguration(*model, lowerPosLimit, upperPosLimit); } -#ifdef WITH_HPP_FCL + static void updateGeometryPlacements_proxy(const ModelHandler & model, DataHandler & data, @@ -313,7 +312,7 @@ namespace se3 { return updateGeometryPlacements(*model, *data, *geom_model, *geom_data, q); } - +#ifdef WITH_HPP_FCL static bool computeCollisions_proxy(GeometryDataHandler & data_geom, const bool stopAtFirstCollision) { @@ -345,7 +344,7 @@ namespace se3 computeDistances(*model, *data, *model_geom, *data_geom, q); } -#endif +#endif // WITH_HPP_FCL /* --- Expose --------------------------------------------------------- */ @@ -540,14 +539,14 @@ namespace se3 // bp::def("randomConfiguration",randomConfiguration_proxy, // bp::args("Model"), // "Generate a random configuration ensuring Model's joint limits are respected "); -#ifdef WITH_HPP_FCL bp::def("updateGeometryPlacements",updateGeometryPlacements_proxy, bp::args("Model", "Data", "GeometryModel", "GeometryData", "Configuration q (size Model::nq)"), "Update the placement of the collision objects according to the current configuration." "The algorithm also updates the current placement of the joint in Data." ); - + +#ifdef WITH_HPP_FCL bp::def("computeCollisions",computeCollisions_proxy, bp::args("GeometryData","bool"), "Determine if collision pairs are effectively in collision." @@ -570,7 +569,7 @@ namespace se3 "compute the distance between each collision pair" ); -#endif +#endif // WITH_HPP_FCL } }; diff --git a/src/python/geometry-data.hpp b/src/python/geometry-data.hpp index d3f433ea0..5d4a67bfb 100644 --- a/src/python/geometry-data.hpp +++ b/src/python/geometry-data.hpp @@ -96,6 +96,7 @@ namespace se3 bp::make_function(&GeometryDataPythonVisitor::oMg, bp::return_internal_reference<>()), "Vector of collision objects placement relative to the world.") +#ifdef WITH_HPP_FCL .add_property("distance_results", bp::make_function(&GeometryDataPythonVisitor::distance_results, bp::return_internal_reference<>()), @@ -132,7 +133,7 @@ namespace se3 .def("computeAllDistances",&GeometryDataPythonVisitor::computeAllDistances, "Same as computeDistance. It applies computeDistance to all collision pairs contained collision_pairs." "The results are stored in collision_distances.") - +#endif // WITH_HPP_FCL .def("__str__",&GeometryDataPythonVisitor::toString) ; } @@ -143,6 +144,7 @@ namespace se3 } static std::vector<SE3> & oMg(GeometryDataHandler & m) { return m->oMg; } +#ifdef WITH_HPP_FCL static std::vector<DistanceResult> & distance_results( GeometryDataHandler & m ) { return m->distance_results; } static std::vector<CollisionResult> & collision_results( GeometryDataHandler & m ) { return m->collision_results; } static std::vector<bool> & activeCollisionPairs(GeometryDataHandler & m) { return m->activeCollisionPairs; } @@ -162,7 +164,7 @@ namespace se3 return m->computeDistance(CollisionPair(co1, co2)); } static void computeAllDistances(GeometryDataHandler & m) { m->computeAllDistances(); } - +#endif // WITH_HPP_FCL static std::string toString(const GeometryDataHandler& m) { std::ostringstream s; s << *m; return s.str(); } @@ -170,13 +172,13 @@ namespace se3 /* --- Expose --------------------------------------------------------- */ static void expose() { - +#ifdef WITH_HPP_FCL bp::class_< std::vector<DistanceResult> >("StdVec_DistanceResult") .def(bp::vector_indexing_suite< std::vector<DistanceResult> >()); bp::class_< std::vector<CollisionResult> >("StdVec_CollisionResult") .def(bp::vector_indexing_suite< std::vector<CollisionResult> >()); - +#endif // WITH_HPP_FCL bp::class_<GeometryDataHandler>("GeometryData", "Geometry data linked to a geometry model and data struct.", bp::no_init) diff --git a/src/python/geometry-model.hpp b/src/python/geometry-model.hpp index 3ba6a860e..13c6c9bca 100644 --- a/src/python/geometry-model.hpp +++ b/src/python/geometry-model.hpp @@ -70,7 +70,7 @@ namespace se3 bp::make_function(&GeometryModelPythonVisitor::geometryObjects, bp::return_internal_reference<>()) ) .def("__str__",&GeometryModelPythonVisitor::toString) - +#ifdef WITH_HPP_FCL .add_property("collision_pairs", bp::make_function(&GeometryModelPythonVisitor::collision_pairs, bp::return_internal_reference<>()), @@ -95,7 +95,7 @@ namespace se3 bp::args("co1 (index)","co2 (index)"), "Return the index of a collision pair given by the index of the two collision objects exists or not." " Remark: co1 < co2") - +#endif // WITH_HPP_FCL .def("BuildGeometryModel",&GeometryModelPythonVisitor::maker_default) .staticmethod("BuildGeometryModel") ; @@ -111,7 +111,7 @@ namespace se3 { return gmodelPtr->getGeometryName(index);} static std::vector<GeometryObject> & geometryObjects( GeometryModelHandler & m ) { return m->geometryObjects; } - +#ifdef WITH_HPP_FCL static std::vector<CollisionPair> & collision_pairs( GeometryModelHandler & m ) { return m->collisionPairs; } @@ -133,7 +133,7 @@ namespace se3 static Index findCollisionPair (const GeometryModelHandler & m, const GeomIndex co1, const GeomIndex co2) { return m->findCollisionPair( CollisionPair(co1,co2) ); } - +#endif // WITH_HPP_FCL static GeometryModelHandler maker_default() { return GeometryModelHandler(new GeometryModel(), true); } diff --git a/src/python/parsers.hpp b/src/python/parsers.hpp index b54508dde..b29c5064e 100644 --- a/src/python/parsers.hpp +++ b/src/python/parsers.hpp @@ -26,11 +26,9 @@ #ifdef WITH_URDFDOM #include "pinocchio/parsers/urdf.hpp" -#ifdef WITH_HPP_FCL #include "pinocchio/python/geometry-model.hpp" #include "pinocchio/python/geometry-data.hpp" #endif -#endif #ifdef WITH_LUA #include "pinocchio/parsers/lua.hpp" @@ -73,7 +71,6 @@ namespace se3 } -#ifdef WITH_HPP_FCL typedef std::pair<ModelHandler, GeometryModelHandler> ModelGeometryHandlerPair_t; static GeometryModelHandler @@ -102,6 +99,7 @@ namespace se3 return GeometryModelHandler(geometry_model, true); } +#ifdef WITH_HPP_FCL static void removeCollisionPairsFromSrdf(ModelHandler & model, GeometryModelHandler& geometry_model, const std::string & filename, @@ -157,7 +155,6 @@ namespace se3 "(remember to create the corresponding data structure)." ); -#ifdef WITH_HPP_FCL bp::to_python_converter<std::pair<ModelHandler, GeometryModelHandler>, PairToTupleConverter<ModelHandler, GeometryModelHandler> >(); @@ -174,6 +171,7 @@ namespace se3 "Parse the urdf file given in input looking for the geometry of the given Model and return a proper pinocchio geometry model " "(remember to create the corresponding data structures)."); +#ifdef WITH_HPP_FCL bp::def("removeCollisionPairsFromSrdf",removeCollisionPairsFromSrdf, bp::args("Model", "GeometryModel (where pairs are removed)","srdf filename (string)", "verbosity" ), diff --git a/unittest/geom.cpp b/unittest/geom.cpp index 059432e40..d42efa613 100644 --- a/unittest/geom.cpp +++ b/unittest/geom.cpp @@ -136,6 +136,11 @@ void loadHumanoidPathPlanerModel (const hpp::model::HumanoidRobotPtr_t& robot, BOOST_AUTO_TEST_SUITE ( GeomTest ) +BOOST_AUTO_TEST_CASE ( GeomNoFcl ) +{ + +} + BOOST_AUTO_TEST_CASE ( simple_boxes ) { using namespace se3; -- GitLab