From 531c52178faa8843e9e2c89a084d98c8ce949cb8 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel <guilhem.saurel@laas.fr> Date: Tue, 16 Mar 2021 16:24:52 +0100 Subject: [PATCH] =?UTF-8?q?curves=20=E2=86=92=20ndcurves?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 4 +-- README.md | 4 +-- .../bezier-com-traj/common_solve_methods.hh | 2 +- include/hpp/bezier-com-traj/data.hh | 2 +- include/hpp/bezier-com-traj/definitions.hh | 8 +++--- include/hpp/bezier-com-traj/utils.hh | 15 +++++----- python/test/binding_tests.py | 2 +- src/CMakeLists.txt | 4 +-- src/common_solve_methods.cpp | 2 +- src/computeCOMTraj.cpp | 8 +++--- src/solve_0_step.cpp | 10 +++---- src/utils.cpp | 6 ++-- tests/test-bezier-symbolic.cpp | 28 +++++++++---------- 13 files changed, 48 insertions(+), 47 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4529abc..693d652 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ ENDIF(BUILD_PYTHON_INTERFACE) # Project dependencies ADD_PROJECT_DEPENDENCY(hpp-centroidal-dynamics REQUIRED) -ADD_PROJECT_DEPENDENCY(curves REQUIRED) +ADD_PROJECT_DEPENDENCY(ndcurves 1.0.0 REQUIRED) IF(USE_GLPK) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/find-external/glpk") @@ -85,7 +85,7 @@ endif(USE_GLPK) ADD_LIBRARY(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} curves::curves hpp-centroidal-dynamics::hpp-centroidal-dynamics) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ndcurves::ndcurves hpp-centroidal-dynamics::hpp-centroidal-dynamics) if(USE_GLPK) TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${glpk_INCLUDE_DIR}) diff --git a/README.md b/README.md index 92cb957..41bfa02 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ https://hal.archives-ouvertes.fr/hal-01726155v1 ## Dependencies * [centroidal-dynamics-lib](https://github.com/stonneau/centroidal-dynamics-lib) Centroidal dynamics computation library -* [curves](https://github.com/loco-3d/curves) Bezier curves library +* [ndcurves](https://github.com/loco-3d/ndcurves) Bezier curves library * [glpk](https://www.gnu.org/software/glpk/) GNU Linear Programming Kit ## Additional dependencies for python bindings @@ -77,7 +77,7 @@ to python. For the zero step capturability, we will first define a contact phase using the objects from centroidal_dynamics: ``` #importing the libraries of interest -import curves # noqa - necessary to register curves::bezier_curve +import ndcurves # noqa - necessary to register ndcurves::bezier_curve import numpy as np from numpy import array from hpp_centroidal_dynamics import Equilibrium, EquilibriumAlgorithm, SolverLP diff --git a/include/hpp/bezier-com-traj/common_solve_methods.hh b/include/hpp/bezier-com-traj/common_solve_methods.hh index 6f073e8..4719bae 100644 --- a/include/hpp/bezier-com-traj/common_solve_methods.hh +++ b/include/hpp/bezier-com-traj/common_solve_methods.hh @@ -24,7 +24,7 @@ namespace bezier_com_traj { * @return a vector of waypoint representing the discretization of the curve */ BEZIER_COM_TRAJ_DLLAPI std::vector<waypoint6_t> ComputeDiscretizedWaypoints( - const std::vector<waypoint6_t>& wps, const std::vector<curves::Bern<double> >& bernstein, int numSteps); + const std::vector<waypoint6_t>& wps, const std::vector<ndcurves::Bern<double> >& bernstein, int numSteps); /** * @brief compute6dControlPointInequalities Given linear and angular control waypoints, diff --git a/include/hpp/bezier-com-traj/data.hh b/include/hpp/bezier-com-traj/data.hh index 72f2caf..c32ccda 100644 --- a/include/hpp/bezier-com-traj/data.hh +++ b/include/hpp/bezier-com-traj/data.hh @@ -11,7 +11,7 @@ #include <hpp/bezier-com-traj/definitions.hh> #include <hpp/bezier-com-traj/utils.hh> #include <hpp/bezier-com-traj/solver/solver-abstract.hpp> -#include <curves/bezier_curve.h> +#include <ndcurves/bezier_curve.h> #include <hpp/centroidal-dynamics/centroidal_dynamics.hh> #include <Eigen/Dense> diff --git a/include/hpp/bezier-com-traj/definitions.hh b/include/hpp/bezier-com-traj/definitions.hh index 37a0bab..9f3c647 100644 --- a/include/hpp/bezier-com-traj/definitions.hh +++ b/include/hpp/bezier-com-traj/definitions.hh @@ -7,7 +7,7 @@ #define BEZIER_COM_TRAJ_DEFINITIONS_H #include <hpp/centroidal-dynamics/centroidal_dynamics.hh> -#include <curves/bezier_curve.h> +#include <ndcurves/bezier_curve.h> #include <Eigen/Dense> namespace bezier_com_traj { @@ -51,9 +51,9 @@ typedef std::pair<matrix3_t, point3_t> waypoint3_t; typedef std::pair<Matrix39, point3_t> waypoint9_t; struct waypoint_t; // forward declaration -typedef curves::bezier_curve<double, double, true, point_t> bezier_t; -typedef curves::bezier_curve<double, double, true, waypoint_t> bezier_wp_t; -typedef curves::bezier_curve<double, double, true, point6_t> bezier6_t; +typedef ndcurves::bezier_curve<double, double, true, point_t> bezier_t; +typedef ndcurves::bezier_curve<double, double, true, waypoint_t> bezier_wp_t; +typedef ndcurves::bezier_curve<double, double, true, point6_t> bezier6_t; typedef std::vector<std::pair<double, int> > T_time; typedef T_time::const_iterator CIT_time; diff --git a/include/hpp/bezier-com-traj/utils.hh b/include/hpp/bezier-com-traj/utils.hh index 94ec423..879322d 100644 --- a/include/hpp/bezier-com-traj/utils.hh +++ b/include/hpp/bezier-com-traj/utils.hh @@ -34,15 +34,16 @@ struct waypoint_t { static waypoint_t Zero(size_t dim) { return initwp(dim, dim); } - size_t size() const{return second.size();} + size_t size() const { return second.size(); } - bool isApprox(const waypoint_t& other, const value_type prec = Eigen::NumTraits<value_type>::dummy_precision()) const{ - return first.isApprox(other.first,prec) && second.isApprox(other.second,prec); + bool isApprox(const waypoint_t& other, + const value_type prec = Eigen::NumTraits<value_type>::dummy_precision()) const { + return first.isApprox(other.first, prec) && second.isApprox(other.second, prec); } - bool operator==(const waypoint_t& other) const{ return isApprox(other); } + bool operator==(const waypoint_t& other) const { return isApprox(other); } - bool operator!=(const waypoint_t& other) const{ return !(*this == other); } + bool operator!=(const waypoint_t& other) const { return !(*this == other); } }; /** @@ -50,7 +51,7 @@ struct waypoint_t { * @param degree required degree * @return the bernstein polynoms */ -BEZIER_COM_TRAJ_DLLAPI std::vector<curves::Bern<double> > ComputeBersteinPolynoms(const unsigned int degree); +BEZIER_COM_TRAJ_DLLAPI std::vector<ndcurves::Bern<double> > ComputeBersteinPolynoms(const unsigned int degree); /** * @brief given the constraints of the problem, and a set of waypoints, return @@ -141,7 +142,7 @@ Bezier bezier_com_traj::computeBezierCurve(const ConstraintFlag& flag, const dou i++; } } - return Bezier(wps.begin(), wps.end(), 0.,T); + return Bezier(wps.begin(), wps.end(), 0., T); } #endif diff --git a/python/test/binding_tests.py b/python/test/binding_tests.py index 44e29eb..f21667a 100644 --- a/python/test/binding_tests.py +++ b/python/test/binding_tests.py @@ -1,4 +1,4 @@ -import curves # noqa - necessary to register curves::bezier_curve +import ndcurves # noqa - necessary to register ndcurves::bezier_curve import numpy as np from numpy import array from hpp_centroidal_dynamics import Equilibrium, EquilibriumAlgorithm, SolverLP diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bfb7bf5..a4ffd0e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,11 +19,11 @@ if (USE_GLPK) endif(USE_GLPK) ADD_LIBRARY(${LIBRARY_NAME} SHARED ${${LIBRARY_NAME}_SOURCES}) +TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ndcurves::ndcurves + hpp-centroidal-dynamics::hpp-centroidal-dynamics) if (USE_GLPK) TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${glpk_LIBRARY}) endif(USE_GLPK) -PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} hpp-centroidal-dynamics) -PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} curves) INSTALL(TARGETS ${LIBRARY_NAME} DESTINATION lib) diff --git a/src/common_solve_methods.cpp b/src/common_solve_methods.cpp index 4ea7f7a..a74de59 100644 --- a/src/common_solve_methods.cpp +++ b/src/common_solve_methods.cpp @@ -6,7 +6,7 @@ namespace bezier_com_traj { std::vector<waypoint6_t> ComputeDiscretizedWaypoints(const std::vector<waypoint6_t>& wps, - const std::vector<curves::Bern<double> >& berns, int numSteps) { + const std::vector<ndcurves::Bern<double> >& berns, int numSteps) { double dt = 1. / double(numSteps); std::vector<waypoint6_t> res; for (int i = 0; i < numSteps + 1; ++i) { diff --git a/src/computeCOMTraj.cpp b/src/computeCOMTraj.cpp index 08fed94..f8619e4 100644 --- a/src/computeCOMTraj.cpp +++ b/src/computeCOMTraj.cpp @@ -25,7 +25,7 @@ bezier_wp_t::t_point_t computeDiscretizedWwaypoints(const ProblemData& pData, do bezier_wp_t::t_point_t wps = computeWwaypoints(pData, T); bezier_wp_t::t_point_t res; const int DIM_VAR = (int)dimVar(pData); - std::vector<curves::Bern<double> > berns = ComputeBersteinPolynoms((int)wps.size() - 1); + std::vector<ndcurves::Bern<double> > berns = ComputeBersteinPolynoms((int)wps.size() - 1); double t, b; for (CIT_time cit = timeArray.begin(); cit != timeArray.end(); ++cit) { waypoint_t w = initwp(6, DIM_VAR); @@ -277,7 +277,7 @@ ResultDataCOMTraj genTraj(ResultData resQp, const ProblemData& pData, const doub res.c_of_t_ = computeBezierCurve<bezier_t, point_t>(pData.constraints_.flag_, T, pis, res.x); computeFinalVelocity(res); computeFinalAcceleration(res); - res.dL_of_t_ = bezier_t::zero(3,T); + res.dL_of_t_ = bezier_t::zero(3, T); } return res; } @@ -354,9 +354,9 @@ std::pair<MatrixXX, VectorX> computeConstraintsContinuous(const ProblemData& pDa // create the curves for c and w with symbolic waypoints (ie. depend on y) bezier_wp_t::t_point_t wps_c = computeConstantWaypointsSymbolic(pData, T); bezier_wp_t::t_point_t wps_w = computeWwaypoints(pData, T); - bezier_wp_t c(wps_c.begin(), wps_c.end(),0., T); + bezier_wp_t c(wps_c.begin(), wps_c.end(), 0., T); bezier_wp_t ddc = c.compute_derivate(2); - bezier_wp_t w(wps_w.begin(), wps_w.end(),0., T); + bezier_wp_t w(wps_w.begin(), wps_w.end(), 0., T); // for each splitted curves : add the constraints for each waypoints const long int num_ineq = computeNumIneqContinuous(pData, Ts, (int)c.degree_, (int)w.degree_, useDD); diff --git a/src/solve_0_step.cpp b/src/solve_0_step.cpp index 77a4322..309477f 100644 --- a/src/solve_0_step.cpp +++ b/src/solve_0_step.cpp @@ -121,7 +121,7 @@ std::vector<waypoint6_t> ComputeAllWaypoints(point_t_tC p0, point_t_tC dc0, poin wps.push_back(w3(p0, p1, g, p0X, p1X, gX, alpha)); wps.push_back(w4(p0, p1, g, p0X, p1X, gX, alpha)); if (numSteps > 0) { - std::vector<curves::Bern<double> > berns = ComputeBersteinPolynoms(4); + std::vector<ndcurves::Bern<double> > berns = ComputeBersteinPolynoms(4); wps = ComputeDiscretizedWaypoints(wps, berns, numSteps); } return wps; @@ -137,7 +137,7 @@ std::vector<waypoint6_t> ComputeAllWaypointsAngularMomentum(point_t_tC l0, const wps.push_back(u3(l0, alpha)); wps.push_back(u4(l0, alpha)); if (numSteps > 0) { - std::vector<curves::Bern<double> > berns = ComputeBersteinPolynoms(4); + std::vector<ndcurves::Bern<double> > berns = ComputeBersteinPolynoms(4); wps = ComputeDiscretizedWaypoints(wps, berns, numSteps); } return wps; @@ -196,7 +196,7 @@ void computeC_of_T(const ProblemData& pData, const std::vector<double>& Ts, Resu wps.push_back(pData.dc0_ * Ts[0] / 3 + pData.c0_); wps.push_back(res.x.head(3)); wps.push_back(res.x.head(3)); - res.c_of_t_ = bezier_t(wps.begin(), wps.end(),0., Ts[0]); + res.c_of_t_ = bezier_t(wps.begin(), wps.end(), 0., Ts[0]); } void computedL_of_T(const ProblemData& pData, const std::vector<double>& Ts, ResultDataCOMTraj& res) { @@ -205,9 +205,9 @@ void computedL_of_T(const ProblemData& pData, const std::vector<double>& Ts, Res wps.push_back(3 * (res.x.tail(3) - pData.l0_)); wps.push_back(3 * (-res.x.tail(3))); wps.push_back(Vector3::Zero()); - res.dL_of_t_ = bezier_t(wps.begin(), wps.end(),0.,Ts[0], 1. / Ts[0]); + res.dL_of_t_ = bezier_t(wps.begin(), wps.end(), 0., Ts[0], 1. / Ts[0]); } else - res.dL_of_t_ = bezier_t::zero(3,Ts[0]); + res.dL_of_t_ = bezier_t::zero(3, Ts[0]); } // no angular momentum for now diff --git a/src/utils.cpp b/src/utils.cpp index 2034708..ea84d2a 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -64,9 +64,9 @@ Matrix3 skew(point_t_tC x) { return res; } -std::vector<curves::Bern<double> > ComputeBersteinPolynoms(const unsigned int degree) { - std::vector<curves::Bern<double> > res; - for (unsigned int i = 0; i <= (unsigned int)degree; ++i) res.push_back(curves::Bern<double>(degree, i)); +std::vector<ndcurves::Bern<double> > ComputeBersteinPolynoms(const unsigned int degree) { + std::vector<ndcurves::Bern<double> > res; + for (unsigned int i = 0; i <= (unsigned int)degree; ++i) res.push_back(ndcurves::Bern<double>(degree, i)); return res; } diff --git a/tests/test-bezier-symbolic.cpp b/tests/test-bezier-symbolic.cpp index fe1c487..3154d05 100644 --- a/tests/test-bezier-symbolic.cpp +++ b/tests/test-bezier-symbolic.cpp @@ -23,7 +23,7 @@ #include <hpp/bezier-com-traj/data.hh> #include <hpp/centroidal-dynamics/centroidal_dynamics.hh> #include "test_helper.hh" -#include <curves/bezier_curve.h> +#include <ndcurves/bezier_curve.h> using namespace bezier_com_traj; const double T = 1.5; @@ -70,8 +70,8 @@ BOOST_AUTO_TEST_CASE(symbolic_eval_c) { point_t y(1, 0.2, 4.5); pts[2] = y; - bezier_t c(pts.begin(), pts.end(),0., T); - bezier_wp_t c_sym(wps.begin(), wps.end(),0., T); + bezier_t c(pts.begin(), pts.end(), 0., T); + bezier_wp_t c_sym(wps.begin(), wps.end(), 0., T); double t = 0.; while (t < T) { @@ -86,9 +86,9 @@ BOOST_AUTO_TEST_CASE(symbolic_eval_dc) { point_t y(1, 0.2, 4.5); pts[2] = y; - bezier_t c(pts.begin(), pts.end(),0., T); + bezier_t c(pts.begin(), pts.end(), 0., T); bezier_t dc = c.compute_derivate(1); - bezier_wp_t c_sym(wps.begin(), wps.end(),0., T); + bezier_wp_t c_sym(wps.begin(), wps.end(), 0., T); bezier_wp_t dc_sym = c_sym.compute_derivate(1); double t = 0.; @@ -104,9 +104,9 @@ BOOST_AUTO_TEST_CASE(symbolic_eval_ddc) { point_t y(1, 0.2, 4.5); pts[2] = y; - bezier_t c(pts.begin(), pts.end(),0., T); + bezier_t c(pts.begin(), pts.end(), 0., T); bezier_t ddc = c.compute_derivate(2); - bezier_wp_t c_sym(wps.begin(), wps.end(),0., T); + bezier_wp_t c_sym(wps.begin(), wps.end(), 0., T); bezier_wp_t ddc_sym = c_sym.compute_derivate(2); double t = 0.; @@ -122,9 +122,9 @@ BOOST_AUTO_TEST_CASE(symbolic_eval_jc) { point_t y(1, 0.2, 4.5); pts[2] = y; - bezier_t c(pts.begin(), pts.end(),0., T); + bezier_t c(pts.begin(), pts.end(), 0., T); bezier_t jc = c.compute_derivate(3); - bezier_wp_t c_sym(wps.begin(), wps.end(),0., T); + bezier_wp_t c_sym(wps.begin(), wps.end(), 0., T); bezier_wp_t jc_sym = c_sym.compute_derivate(3); double t = 0.; @@ -140,8 +140,8 @@ BOOST_AUTO_TEST_CASE(symbolic_split_c) { point_t y(1, 0.2, 4.5); pts[2] = y; - bezier_t c(pts.begin(), pts.end(),0., T); - bezier_wp_t c_sym(wps.begin(), wps.end(),0., T); + bezier_t c(pts.begin(), pts.end(), 0., T); + bezier_wp_t c_sym(wps.begin(), wps.end(), 0., T); double a, b, t, t1, t2; for (size_t i = 0; i < 100; ++i) { @@ -169,7 +169,7 @@ BOOST_AUTO_TEST_CASE(symbolic_split_c_bench) { point_t y(1, 0.2, 4.5); pts[2] = y; - bezier_wp_t c_sym(wps.begin(), wps.end(),0., T); + bezier_wp_t c_sym(wps.begin(), wps.end(), 0., T); std::vector<double> values; for (int i = 0; i < 100000; ++i) values.push_back((double)rand() / RAND_MAX); @@ -190,7 +190,7 @@ BOOST_AUTO_TEST_CASE(symbolic_split_w) { bezier_wp_t::t_point_t wps = computeWwaypoints(buildPData(), T); point_t y(1, 0.2, 4.5); - bezier_wp_t w(wps.begin(), wps.end(),0., T); + bezier_wp_t w(wps.begin(), wps.end(), 0., T); double a, b, t, t1, t2; for (size_t i = 0; i < 100; ++i) { @@ -212,7 +212,7 @@ BOOST_AUTO_TEST_CASE(symbolic_split_w_bench) { bezier_wp_t::t_point_t wps = computeWwaypoints(buildPData(), T); point_t y(1, 0.2, 4.5); - bezier_wp_t w(wps.begin(), wps.end(),0., T); + bezier_wp_t w(wps.begin(), wps.end(), 0., T); std::vector<double> values; for (int i = 0; i < 100000; ++i) values.push_back((double)rand() / RAND_MAX); -- GitLab